mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-12-04 15:39:34 +01:00
Compare commits
104 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8857ac2ba | ||
|
|
367fbbba39 | ||
|
|
abf469f743 | ||
|
|
878995366a | ||
|
|
1635a5211f | ||
|
|
595b1011dd | ||
|
|
9bb291235d | ||
|
|
7d4ef0b8d0 | ||
|
|
8d16522d39 | ||
|
|
cd1192b409 | ||
|
|
bf2fd63131 | ||
|
|
9532bedd7d | ||
|
|
e9c8363b70 | ||
|
|
fb57ed2bcd | ||
|
|
57ec558396 | ||
|
|
6e2de1cd79 | ||
|
|
8ace3ab7f2 | ||
|
|
18e4dca6c9 | ||
|
|
48eca3e11f | ||
|
|
57c1a0f4b6 | ||
|
|
bde4d63fdb | ||
|
|
4867d26f7d | ||
|
|
9bd3ab717e | ||
|
|
3679b21701 | ||
|
|
49f58b4ed8 | ||
|
|
235361faf4 | ||
|
|
208b803fbe | ||
|
|
8a92cec03f | ||
|
|
00f068b93e | ||
|
|
654353e26b | ||
|
|
d670ef2638 | ||
|
|
aff935b3c7 | ||
|
|
107c0673c7 | ||
|
|
c14d04b3e8 | ||
|
|
7a017041bf | ||
|
|
eb56bd8973 | ||
|
|
93585aded7 | ||
|
|
38245aa2a9 | ||
|
|
1f33e6f044 | ||
|
|
4752adf9d3 | ||
|
|
2d741afe3e | ||
|
|
5e6b17aba4 | ||
|
|
c51098e2cf | ||
|
|
24275d8dc4 | ||
|
|
94d82948f6 | ||
|
|
54fb1abb96 | ||
|
|
a3b936fcd0 | ||
|
|
efc4cd5969 | ||
|
|
17ab438c5a | ||
|
|
77b4bfb14e | ||
|
|
7839280cb3 | ||
|
|
9e1ea264e2 | ||
|
|
b02ec98ec6 | ||
|
|
2fa531745f | ||
|
|
820941fd40 | ||
|
|
862941abf6 | ||
|
|
e98c30f633 | ||
|
|
316a7e6fb7 | ||
|
|
58ed99d562 | ||
|
|
840642394f | ||
|
|
ebeedba072 | ||
|
|
568dfde074 | ||
|
|
b8c1829857 | ||
|
|
4f2d56a55f | ||
|
|
6b49f8f26b | ||
|
|
fc8cb7cd14 | ||
|
|
727094abc6 | ||
|
|
bcb54bc38a | ||
|
|
14aac09318 | ||
|
|
9d42db9849 | ||
|
|
ee81c7c00e | ||
|
|
2edf414aa4 | ||
|
|
54f44f5267 | ||
|
|
6ab54bc95a | ||
|
|
673dff2268 | ||
|
|
bb38be40f6 | ||
|
|
f236c32063 | ||
|
|
236edae60b | ||
|
|
a954e9a4d8 | ||
|
|
95c449481e | ||
|
|
0b43607aa1 | ||
|
|
e75efb8bfb | ||
|
|
d83fee89bd | ||
|
|
b773dbe645 | ||
|
|
5c7c7f54fa | ||
|
|
98417d6465 | ||
|
|
0ea64afe92 | ||
|
|
a862f62fe8 | ||
|
|
5bd525a6dd | ||
|
|
af3d896bdf | ||
|
|
ceeb72a277 | ||
|
|
2c17fdcff0 | ||
|
|
41a7c96968 | ||
|
|
98d9dae087 | ||
|
|
2033174d95 | ||
|
|
606e36acf3 | ||
|
|
0422943d52 | ||
|
|
0024f2e30f | ||
|
|
abe5e8ecea | ||
|
|
61503a8047 | ||
|
|
fcb5deff0a | ||
|
|
fdec16c3a0 | ||
|
|
84ee8b993f | ||
|
|
3d1c27ceb7 |
@@ -9,11 +9,13 @@ install:
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxtst-dev; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install cmake qt libgcrypt; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq cmake || brew install cmake; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt || brew install qt; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq libgcrypt || brew install libgcrypt; fi
|
||||
before_script: mkdir build && pushd build
|
||||
script:
|
||||
- cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_GUI_TESTS=ON ..
|
||||
- make
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then make test ARGS+="-E testgui --output-on-failure"; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then xvfb-run -a --server-args="-screen 0 800x600x24" make test ARGS+="-R testgui --output-on-failure"; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then make test; fi
|
||||
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then make test ARGS+="--output-on-failure"; fi
|
||||
|
||||
51
CHANGELOG
51
CHANGELOG
@@ -1,3 +1,54 @@
|
||||
2.0.3 (2016-09-04)
|
||||
=========================
|
||||
|
||||
- Improved error reporting when reading / writing databases fails. [#450, #462]
|
||||
- Display an error message when opening a custom icon fails.
|
||||
- Detect custom icon format based on contents instead of the filename. [#512]
|
||||
- Keep symlink intact when saving databases. [#442].
|
||||
- Fix a crash when deleting parent group of recycle bin. [#520]
|
||||
- Display a confirm dialog before moving an entry to the recycle bin. [#447]
|
||||
- Repair UUIDs of inconsistent history items. [#130]
|
||||
- Only include top-level windows in auto-type window list when using gnome-shell.
|
||||
- Update translations.
|
||||
|
||||
2.0.2 (2016-02-02)
|
||||
=========================
|
||||
|
||||
- Fix regression in database writer that caused it to strip certain special
|
||||
characters (characters from Unicode plane > 0).
|
||||
- Fix bug in repair function that caused it to strip non-ASCII characters.
|
||||
|
||||
2.0.1 (2016-01-31)
|
||||
=========================
|
||||
|
||||
- Flush temporary file before opening attachment. [#390]
|
||||
- Disable password generator when showing entry in history mode. [#422]
|
||||
- Strip invalid XML chars when writing databases. [#392]
|
||||
- Add repair function to fix databases with invalid XML chars. [#392]
|
||||
- Display custom icons scaled. [#322]
|
||||
- Allow opening databases that have no password and keyfile. [#391]
|
||||
- Fix crash when importing .kdb files with invalid icon ids. [#425]
|
||||
- Update translations.
|
||||
|
||||
2.0 (2015-12-06)
|
||||
=========================
|
||||
|
||||
- Improve UI of the search edit.
|
||||
- Clear clipboard when locking databases. [#342]
|
||||
- Enable Ctrl+M shortcut to minimize the window on all platforms. [#329]
|
||||
- Show a better message when trying to open an old database format. [#338]
|
||||
- Fix global auto-type behavior with some window managers.
|
||||
- Show global auto-type window on the active desktop. [#359]
|
||||
- Disable systray on OS X. [#326]
|
||||
- Restore main window when clicking on the OS X docker icon. [#326]
|
||||
|
||||
2.0 Beta 2 (2015-09-06)
|
||||
=========================
|
||||
|
||||
- Fix crash when locking with search UI open [#309]
|
||||
- Fix file locking on Mac OS X [#327]
|
||||
- Set default extension when saving a database [#79, #308]
|
||||
|
||||
2.0 Beta 1 (2015-07-18)
|
||||
=========================
|
||||
|
||||
|
||||
@@ -31,11 +31,10 @@ include(CheckCXXSourceCompiles)
|
||||
|
||||
option(WITH_TESTS "Enable building of unit tests" ON)
|
||||
option(WITH_GUI_TESTS "Enable building of GUI tests" OFF)
|
||||
option(WITH_LTO "Enable Link Time Optimization (LTO)" OFF)
|
||||
option(WITH_CXX11 "Build with the C++ 11 standard" ON)
|
||||
|
||||
set(KEEPASSX_VERSION "2.0 beta 1")
|
||||
set(KEEPASSX_VERSION_NUM "1.9.91")
|
||||
set(KEEPASSX_VERSION "2.0.3")
|
||||
set(KEEPASSX_VERSION_NUM "2.0.3")
|
||||
|
||||
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
||||
set(CMAKE_COMPILER_IS_CLANG 1)
|
||||
@@ -101,23 +100,12 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro")
|
||||
endif()
|
||||
|
||||
if(WITH_LTO)
|
||||
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_COMPILER_IS_GNUCXX)
|
||||
check_cxx_compiler_flag("-flto -fuse-linker-plugin" LTO_AVAILABLE)
|
||||
|
||||
if(LTO_AVAILABLE)
|
||||
add_gcc_compiler_flags("-flto -fuse-linker-plugin")
|
||||
else()
|
||||
message(FATAL_ERROR "This version of gcc doesn't support LTO")
|
||||
endif(LTO_AVAILABLE)
|
||||
else()
|
||||
message(FATAL_ERROR "LTO is only supported with gcc")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (WITH_CXX11)
|
||||
add_gcc_compiler_cxxflags("-std=c++0x")
|
||||
add_gcc_compiler_cflags("-ansi")
|
||||
if(APPLE)
|
||||
add_gcc_compiler_cxxflags("-stdlib=libc++")
|
||||
endif()
|
||||
else()
|
||||
add_gcc_compiler_flags("-ansi")
|
||||
endif()
|
||||
|
||||
2
COPYING
2
COPYING
@@ -139,10 +139,10 @@ Files: share/icons/application/*/actions/application-exit.png
|
||||
share/icons/application/*/actions/password-copy.png
|
||||
share/icons/application/*/actions/password-show-*.png
|
||||
share/icons/application/*/actions/system-search.png
|
||||
share/icons/application/*/actions/username-copy.png
|
||||
share/icons/application/*/status/dialog-error.png
|
||||
share/icons/application/*/status/dialog-information.png
|
||||
share/icons/application/*/status/dialog-warning.png
|
||||
share/icons/application/*/status/username-copy.png
|
||||
share/icons/svg/*.svgz
|
||||
Copyright: 2007, Nuno Pinheiro <nuno@oxygen-icons.org>
|
||||
2007, David Vignoni <david@icon-king.com>
|
||||
|
||||
@@ -57,12 +57,12 @@ The following libraries are required:
|
||||
* Qt 4 (>= 4.6)
|
||||
* libgcrypt
|
||||
* zlib
|
||||
* libxtst (optional for auto-type on X11)
|
||||
* libxi, libxtst (optional for auto-type on X11)
|
||||
|
||||
On Debian you can install them with:
|
||||
|
||||
```bash
|
||||
sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev
|
||||
sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxi-dev libxtst-dev
|
||||
```
|
||||
|
||||
#### Build Steps
|
||||
|
||||
@@ -3,22 +3,30 @@
|
||||
<name>AboutDialog</name>
|
||||
<message>
|
||||
<source>About KeePassX</source>
|
||||
<translation>O aplikaci KeePassX</translation>
|
||||
<translation>O KeePassX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX je šířeno za podmínek licence GNU General Public License (GPL) verze 2 a (případně) 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revize</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>S použitím:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
<message>
|
||||
<source>Auto-Type - KeePassX</source>
|
||||
<translation>Samočinné vyplňování – KeePassX</translation>
|
||||
<translation>Automatické vyplňování – KeePassX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Couldn't find an entry that matches the window title:</source>
|
||||
<translation>Nelze nalézt položku, která by se shodovala s titulkem okna:</translation>
|
||||
<translation>Nedaří se nalézt položku, která by se shodovala s titulkem okna:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -40,11 +48,11 @@
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
<source>Auto-Type - KeePassX</source>
|
||||
<translation>Samočinné vyplňování – KeePassX</translation>
|
||||
<translation>Automatické vyplňování – KeePassX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select entry to Auto-Type:</source>
|
||||
<translation>Vyberte položku pro samočinné vyplňování:</translation>
|
||||
<translation>Vyberte položku, kterou se bude automaticky vyplňovat:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -91,7 +99,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to create Key File : </source>
|
||||
<translation>Nelze vytvořit soubor s klíčem :</translation>
|
||||
<translation>Nedaří se vytvořit soubor s klíčem:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select a key file</source>
|
||||
@@ -99,15 +107,25 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Question</source>
|
||||
<translation>Otázka</translation>
|
||||
<translation>Dotaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to use an empty string as password?</source>
|
||||
<translation>Opravdu chcete heslo ponechat nevyplněné?</translation>
|
||||
<translation>Opravdu chcete ponechat bez hesla, tedy nechráněné?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Zadání hesla nejsou shodná.</translation>
|
||||
<translation>Nepodařilo se vám zadat heslo do obou kolonek stejně.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Nezdařilo se nastavit soubor s klíčem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Nezdařilo se nastavit %1 jako soubor s klíčem:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -134,11 +152,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Databázi nebylo možné otevřít.</translation>
|
||||
<translation>Databázi se nedaří otevřít.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Soubor s klíčem nelze otevřít.</translation>
|
||||
<translation>Soubor s klíčem se nedaří otevřít</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>Vyberte soubor s klíčem</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Opravit databázi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Nedaří se otevřít soubor s klíčem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Databáze je v pořádku otevřená. Není třeba žádného zásahu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Nedaří se otevřít databázi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Úspěch</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>Databáze je úspěšně opravená
|
||||
Nyní jí můžete uložit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Databázi se nedaří opravit.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -165,7 +220,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Transform rounds:</source>
|
||||
<translation>Počet průchodů:</translation>
|
||||
<translation>Počet průchodů šifrovacího algoritmu:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
@@ -173,11 +228,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use recycle bin:</source>
|
||||
<translation>Použít Koš:</translation>
|
||||
<translation>Namísto mazání přesouvat do Koše:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> MiB</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation> MiB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Benchmark</source>
|
||||
@@ -185,11 +240,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history items:</source>
|
||||
<translation>Nejvyšší umožněný položek historie:</translation>
|
||||
<translation>Omezit počet uchovávaných předchozích verzí položky na:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history size:</source>
|
||||
<translation>Nejvyšší umožněná velikost historie:</translation>
|
||||
<translation>Omezit datový objem předchozích verzí položek na:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -200,7 +255,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>Databáze aplikace KeePass 2</translation>
|
||||
<translation>Databáze ve formátu KeePass verze 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -220,11 +275,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Open KeePass 1 database</source>
|
||||
<translation>Otevřít databázi aplikace KeePass 1</translation>
|
||||
<translation>Otevřít databázi ve formátu KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 1 database</source>
|
||||
<translation>Databáze aplikace KeePass 1</translation>
|
||||
<translation>Databáze ve formátu KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files (*)</source>
|
||||
@@ -234,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Zavřít?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>%1 je upravováno.
|
||||
Přesto zavřít?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Uložit změny?</translation>
|
||||
@@ -247,7 +296,7 @@ Přesto zavřít?</translation>
|
||||
<message>
|
||||
<source>"%1" was modified.
|
||||
Save changes?</source>
|
||||
<translation>%1 bylo změněno.
|
||||
<translation>„%1“ bylo změněno.
|
||||
Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -270,6 +319,64 @@ Uložit změny?</translation>
|
||||
<source>locked</source>
|
||||
<translation>zamčeno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>Pro databázi, kterou se pokoušíte otevřít, existuje zámek úprav (stejnojmenný
|
||||
.lock soubor). To znamená, že je nejspíš už otevřená v jiném okně KeePassX
|
||||
(v případě sdíleného úložiště, třeba i na jiném počítači). Pokud tomu tak není,
|
||||
je zámek nejspíš pozůstatkem předchozího neočekávaného ukončení aplikace
|
||||
a je možné ho smazat. V každém případě, dotčenou databázi je možné otevřít
|
||||
i tak, ale pouze pro čtení. Chcete?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Uzamknout databázi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Nelze uzamknout databázi, protože ji v tuto chvíli upravujete.
|
||||
Pokud chcete změny dokončit, klikněte na Zrušit. V opačném případě změny zahodíte.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Tato databáze doposud ještě nebyla uložena.
|
||||
Buď ji můžete uložit, nebo neuzamknout.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Tato databáze byla upravena.
|
||||
Chcete ji před uzamčením uložit?
|
||||
Pokud ne, provedené změny budou ztraceny.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>„%1“ je právě upravováno.
|
||||
Přesto zavřít a zahodit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Exportovat databázi do CSV souboru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV soubor</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Zápis do CSV souboru se nezdařil.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>Databáze, kterou se pokoušíte uložit, je uzamčena jinou instancí KeePassX.
|
||||
Přesto uložit?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -283,7 +390,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the entry "%1" for good?</source>
|
||||
<translation>Opravdu chcete smazat položku %1?</translation>
|
||||
<translation>Opravdu chcete nenávratně smazat položku „%1“?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entries?</source>
|
||||
@@ -291,7 +398,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete %1 entries for good?</source>
|
||||
<translation>Opravdu chcete smazat %1 položek?</translation>
|
||||
<translation>Opravdu chcete nenávratně smazat %1 položek?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move entries to recycle bin?</source>
|
||||
@@ -299,7 +406,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Opravdu chcete přesunout %n položku do Koše?</numerusform><numerusform>Opravdu chcete přesunout %n položky do Koše?</numerusform><numerusform>Opravdu chcete přesunout %n položek do Koše?</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group?</source>
|
||||
@@ -307,12 +414,20 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the group "%1" for good?</source>
|
||||
<translation>Opravdu chcete smazat skupinu %1?</translation>
|
||||
<translation>Opravdu chcete nenávratně smazat skupinu „%1“?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
<translation>Stávající skupina</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Nedaří se spočítat hlavní klíč</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -330,7 +445,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
<translation>Samočinné vyplňování</translation>
|
||||
<translation>Automatické vyplňování</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Properties</source>
|
||||
@@ -370,7 +485,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open file</source>
|
||||
<translation>Soubor nelze otevřít</translation>
|
||||
<translation>Soubor se nedaří otevřít</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save attachment</source>
|
||||
@@ -379,7 +494,7 @@ Uložit změny?</translation>
|
||||
<message>
|
||||
<source>Unable to save the attachment:
|
||||
</source>
|
||||
<translation>Přílohu nelze uložit:
|
||||
<translation>Přílohu se nedaří uložit:
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -388,11 +503,11 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n week(s)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>%n týden</numerusform><numerusform>%n týdny</numerusform><numerusform>%n týdnů</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n month(s)</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>%n měsíc</numerusform><numerusform>%n měsíce</numerusform><numerusform>%n měsíců</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>1 year</source>
|
||||
@@ -425,28 +540,32 @@ Uložit změny?</translation>
|
||||
<source>Save</source>
|
||||
<translation>Uložit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Otevřít</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
<message>
|
||||
<source>Enable Auto-Type for this entry</source>
|
||||
<translation>Zapnout samočinné vyplňování u této položky</translation>
|
||||
<translation>Zapnout automatické vyplňování této položky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit default Auto-Type sequence from the group</source>
|
||||
<translation>Převzít výchozí posloupnost samočinného vyplňování ze skupiny</translation>
|
||||
<translation>Převzít výchozí posloupnost automatického vyplňování od skupiny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom Auto-Type sequence:</source>
|
||||
<translation>Použít vlastní posloupnost samočinného vyplňování:</translation>
|
||||
<translation>Použít vlastní posloupnost automatického vyplňování:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>+</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>+</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>-</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>-</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Window title:</source>
|
||||
@@ -496,11 +615,11 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat:</source>
|
||||
<translation>Zopakovat:</translation>
|
||||
<translation>Zopakování hesla:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gen.</source>
|
||||
<translation>Obec.</translation>
|
||||
<translation>Tvoř</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
@@ -512,7 +631,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Presets</source>
|
||||
<translation>Přednastavené</translation>
|
||||
<translation>Předpřipravené</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
@@ -551,7 +670,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit from parent group (%1)</source>
|
||||
<translation>Převzít z nadřazené skupiny (%1)</translation>
|
||||
<translation>Převzít od nadřazené skupiny (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -574,7 +693,15 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type</source>
|
||||
<translation>Samočinné vyplňování</translation>
|
||||
<translation>Automatické vyplňování</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Použít výchozí posloupnost automatického vyplňování z nadřazené skupiny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Nastavit výchozí posloupnost automatického vyplňování</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -585,15 +712,15 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom icon</source>
|
||||
<translation>Použít vlastní ikonu</translation>
|
||||
<translation>Použít svou vlastní ikonu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add custom icon</source>
|
||||
<translation>Přidat vlastní ikonu</translation>
|
||||
<translation>Přidat svou vlastní ikonu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete custom icon</source>
|
||||
<translation>Smazat vlastní ikonu</translation>
|
||||
<translation>Smazat svou vlastní ikonu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Images</source>
|
||||
@@ -613,26 +740,26 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Can't delete icon. Still used by %n item(s).</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Ikonu není možné smazat. Je používána %n položkou.</numerusform><numerusform>Ikonu není možné smazat. Je používána %n položkami.</numerusform><numerusform>Ikonu není možné smazat. Ještě jí používá %n položek.</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetProperties</name>
|
||||
<message>
|
||||
<source>Created:</source>
|
||||
<translation>Vytvořeno:</translation>
|
||||
<translation>Okamžik vytvoření:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Modified:</source>
|
||||
<translation>Čas poslední změny:</translation>
|
||||
<translation>Okamžik minulé úpravy:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accessed:</source>
|
||||
<translation>Čas posledního přístupu:</translation>
|
||||
<translation>Okamžik minulého přístupu:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Uuid:</source>
|
||||
<translation>Uuid identifikátor:</translation>
|
||||
<translation>Univerzálně jedinečný identifikátor:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -646,7 +773,7 @@ Uložit změny?</translation>
|
||||
<name>EntryHistoryModel</name>
|
||||
<message>
|
||||
<source>Last modified</source>
|
||||
<translation>Čas poslední změny</translation>
|
||||
<translation>Okamžik minulé změny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Title</source>
|
||||
@@ -691,7 +818,7 @@ Uložit změny?</translation>
|
||||
<name>KeePass1OpenWidget</name>
|
||||
<message>
|
||||
<source>Import KeePass1 database</source>
|
||||
<translation>Importovat databázi aplikace KeePass 1</translation>
|
||||
<translation>Importovat databázi ve formátu KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
@@ -699,14 +826,14 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Databázi nelze otevřít.</translation>
|
||||
<translation>Databázi se nedaří otevřít.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass1Reader</name>
|
||||
<message>
|
||||
<source>Unable to read keyfile.</source>
|
||||
<translation>Soubor s klíčem nebylo možné načíst.</translation>
|
||||
<translation>Nedaří se načíst soubor s klíčem.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
@@ -724,6 +851,10 @@ Uložit změny?</translation>
|
||||
<source>Root</source>
|
||||
<translation>Kořen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Nedaří se spočítat hlavní klíč</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -739,12 +870,26 @@ Uložit změny?</translation>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Chybný klíč nebo je databáze poškozená.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Nedaří se spočítat hlavní klíč</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Zvolený soubor je databáze ve starém formátu KeePass 1 (.kdb).
|
||||
|
||||
Můžete ho importovat pomocí Databáze → Importovat databázi KeePass 1.
|
||||
Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otevřít ve staré verzi KeePassX 0.4.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
<message>
|
||||
<source>Fatal error while testing the cryptographic functions.</source>
|
||||
<translation>Při testování šifrovacích funkcí došlo k fatální chybě.</translation>
|
||||
<translation>Při ověřování šifrovacích funkcí byl zjištěn fatální nedostatek.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX - Error</source>
|
||||
@@ -777,17 +922,13 @@ Uložit změny?</translation>
|
||||
<source>Groups</source>
|
||||
<translation>Skupiny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Doplňující</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Zobrazit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Quit</source>
|
||||
<translation>Ukončit</translation>
|
||||
<translation>Ukončit aplikaci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>About</source>
|
||||
@@ -847,7 +988,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import KeePass 1 database</source>
|
||||
<translation>Importovat databázi aplikace KeePass 1</translation>
|
||||
<translation>Importovat databázi aplikace KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clone entry</source>
|
||||
@@ -857,18 +998,10 @@ Uložit změny?</translation>
|
||||
<source>Find</source>
|
||||
<translation>Najít</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Uživatelské jméno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Zkopírovat uživatelské jméno do schránky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Heslo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Zkopírovat heslo do schránky</translation>
|
||||
@@ -879,7 +1012,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Perform Auto-Type</source>
|
||||
<translation>Provést samočinné vyplnění</translation>
|
||||
<translation>Provést automatické vyplnění</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open URL</source>
|
||||
@@ -911,7 +1044,47 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle window</source>
|
||||
<translation>Přepnout okno</translation>
|
||||
<translation>Zobrazit/skrýt okno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Nástroje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Zkopírovat uživatelské jméno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Zkopírovat heslo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Exportovat do CSV souboru</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Opravit databázi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>Databáze ve formátu KeePass 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Všechny soubory</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Uložit opravenou databázi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Zápis do databáze se nezdařil.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -938,19 +1111,19 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Numbers</source>
|
||||
<translation>Čísla</translation>
|
||||
<translation>Číslice</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Special Characters</source>
|
||||
<translation>Speciální znaky</translation>
|
||||
<translation>Zvláštní znaky</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exclude look-alike characters</source>
|
||||
<translation>Vynechat podobně vypadající znaky</translation>
|
||||
<translation>Vynechat podobně vypadající znaky (předejití záměně)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ensure that the password contains characters from every group</source>
|
||||
<translation>Zajistit, aby heslo obsahovalo znaky ze všech zvolených skupin</translation>
|
||||
<translation>Zajistit, aby heslo obsahovalo znaky ze všech zvolených skupin znaků</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept</source>
|
||||
@@ -969,11 +1142,11 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown option '%1'.</source>
|
||||
<translation>Neznámá volba %1.</translation>
|
||||
<translation>Neznámá předvolba %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown options: %1.</source>
|
||||
<translation>Neznámé volby: %1.</translation>
|
||||
<translation>Neznámé předvolby: %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Missing value after '%1'.</source>
|
||||
@@ -985,7 +1158,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>[options]</source>
|
||||
<translation>[volby]</translation>
|
||||
<translation>[předvolby]</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Usage: %1</source>
|
||||
@@ -993,7 +1166,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Options:</source>
|
||||
<translation>Volby:</translation>
|
||||
<translation>Předvolby:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Arguments:</source>
|
||||
@@ -1004,7 +1177,7 @@ Uložit změny?</translation>
|
||||
<name>QSaveFile</name>
|
||||
<message>
|
||||
<source>Existing file %1 is not writable</source>
|
||||
<translation>Existující soubor %1 není zapisovatelný</translation>
|
||||
<translation>Do stávajícího souboru %1 nelze zapisovat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing canceled by application</source>
|
||||
@@ -1012,7 +1185,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Partial write. Partition full?</source>
|
||||
<translation>Zápis nebylo možné dokončit zcela. Nedostatek volného místa?</translation>
|
||||
<translation>Zápis nebylo možné zcela dokončit. Nedostatek volného místa?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1023,15 +1196,15 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error writing to underlying device: </source>
|
||||
<translation>Chyba při zápisu na zařízení:</translation>
|
||||
<translation>Došlo k chybě při zápisu na zařízení, na kterém se nachází:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error opening underlying device: </source>
|
||||
<translation>Chyba při otevírání zařízení:</translation>
|
||||
<translation>Došlo k chybě při otevírání zařízení, na kterém se nachází:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading data from underlying device: </source>
|
||||
<translation>Chyba při čtení dat ze zařízení:</translation>
|
||||
<translation>Došlo k chybě při čtení dat ze zařízení, na kterém se nachází:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error when decompressing: </source>
|
||||
@@ -1042,7 +1215,7 @@ Uložit změny?</translation>
|
||||
<name>QtIOCompressor::open</name>
|
||||
<message>
|
||||
<source>The gzip format not supported in this version of zlib.</source>
|
||||
<translation>Formát tohoto gzip archivu není podporován touto verzí knihovny zlib.</translation>
|
||||
<translation>Použitý formát gzip komprese není podporován verzí knihovny zlib, která je právě používána na tomto systému.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error: </source>
|
||||
@@ -1057,7 +1230,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Case sensitive</source>
|
||||
<translation>Rozlišovat velikost písmen</translation>
|
||||
<translation>Rozlišovat malá/velká písmena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
@@ -1087,39 +1260,35 @@ Uložit změny?</translation>
|
||||
<name>SettingsWidgetGeneral</name>
|
||||
<message>
|
||||
<source>Remember last databases</source>
|
||||
<translation>Pamatovat si nedávno otevírané databáze</translation>
|
||||
<translation>Pamatovat si nedávno otevřené databáze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Při startu otevřít minule otevřenou databázi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation>Při změnách rozšířeného stavu označit jako změněné</translation>
|
||||
<translation>Při spuštění aplikace otevřít minule otevřené databáze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Při ukončování samočinně uložit</translation>
|
||||
<translation>Před ukončením aplikace automaticky uložit případné změny</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save after every change</source>
|
||||
<translation>Po každé změně okamžitě samočinně uložit</translation>
|
||||
<translation>Po každé změně hned automaticky uložit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize when copying to clipboard</source>
|
||||
<translation>Po zkopírování do schránky samočinně zminimalizovat aplikaci</translation>
|
||||
<translation>Po zkopírování údaje do schránky automaticky minimalizovat okno KeePassX (do popředí se tak dostane okno, do kterého se zkopírovaný údaj bude vkládat)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
<translation>Při vytváření položky použít ikonu skupiny</translation>
|
||||
<translation>Pro vytvářenou položku použít ikonu skupiny, do které spadá</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Global Auto-Type shortcut</source>
|
||||
<translation>Všeobecná klávesová zkratka pro samočinné vyplňování</translation>
|
||||
<translation>Klávesová zkratka pro všeobecné automatické vyplňování</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global auto-type</source>
|
||||
<translation>Použít titulek položky pro porovnání s okny pro všeobecné samočinné vyplňování</translation>
|
||||
<translation>Všeobecné automatické vyplňování provádět na základě shody titulku položky s titulkem okna.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
@@ -1127,22 +1296,26 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
<translation>Zobrazit ikonu v oznamovací oblasti</translation>
|
||||
<translation>Zobrazovat ikonu v oznamovací oblasti systémového panelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Minimalizovat do oznamovací oblasti</translation>
|
||||
<translation>Minimalizovat okno aplikace do oznamovací oblasti systémového panelu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Pamatovat si nedávno otevřené soubory s klíči</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
<message>
|
||||
<source>Clear clipboard after</source>
|
||||
<translation>Vyčistit schránku po uplynutí</translation>
|
||||
<translation>Vymazat obsah schránky po uplynutí</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
<translation>sek</translation>
|
||||
<translation>sek.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after inactivity of</source>
|
||||
@@ -1150,11 +1323,11 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
<translation>Vždy zobrazovat hesla</translation>
|
||||
<translation>Hesla vždy viditelná (nezakrývat hvězdičkami)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing auto-type</source>
|
||||
<translation>Před provedením samočinného vyplnění se vždy dotázat</translation>
|
||||
<translation>Před provedením automatického vyplnění se vždy dotázat</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1163,14 +1336,6 @@ Uložit změny?</translation>
|
||||
<source>Unlock database</source>
|
||||
<translation>Odemknout databázi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Chyba</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Chybný klíč.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1183,20 +1348,16 @@ Uložit změny?</translation>
|
||||
<name>main</name>
|
||||
<message>
|
||||
<source>KeePassX - cross-platform password manager</source>
|
||||
<translation>KeePassX – multiplatformní správce hesel</translation>
|
||||
<translation>KeePassX – správce hesel, fungující napříč rozličnými operačními systémy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filename of the password database to open (*.kdbx)</source>
|
||||
<translation>Soubor s databází hesel (*.kdbx), který otevřít</translation>
|
||||
<translation>který soubor s databází hesel (*.kdbx) otevřít</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>umístění souboru s vlastními nastaveními</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>heslo databáze (NEBEZPEČNÉ!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>soubor s klíčem k databázi</translation>
|
||||
|
||||
@@ -9,12 +9,20 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX distribueres under betingelserne i GNU General Public License (GPL) version 2 eller (efter eget valg) version 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revision</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>Bruger:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
<message>
|
||||
<source>Auto-Type - KeePassX</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auto-indsæt - KeePassX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Couldn't find an entry that matches the window title:</source>
|
||||
@@ -40,26 +48,26 @@
|
||||
<name>AutoTypeSelectDialog</name>
|
||||
<message>
|
||||
<source>Auto-Type - KeePassX</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auto-indsæt - KeePassX</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select entry to Auto-Type:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vælg post til Auto-Indsæt:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ChangeMasterKeyWidget</name>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Adgangskode</translation>
|
||||
<translation>Kodeord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password:</source>
|
||||
<translation>Indtast adgangskode</translation>
|
||||
<translation>Indtast kodeord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat password:</source>
|
||||
<translation>Gentag adgangskode</translation>
|
||||
<translation>Gentag kodeord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file</source>
|
||||
@@ -103,18 +111,28 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to use an empty string as password?</source>
|
||||
<translation>Vil du virkelig bruge en tom streng som adgangskode?</translation>
|
||||
<translation>Vil du virkelig bruge en tom streng som kodeord?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Andre adgangskoder leveret.</translation>
|
||||
<translation>Andre kodeord leveret.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Kan ikke sætte nøglefil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Kunne ikke sætte %1 som Nøglefil:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
<message>
|
||||
<source>Enter master key</source>
|
||||
<translation>Indtast primærnøgle</translation>
|
||||
<translation>Indtast hovednøgle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File:</source>
|
||||
@@ -122,7 +140,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Adgangskode:</translation>
|
||||
<translation>Kodeord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>Vælg nøglefil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Reparer database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fejl</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Kan ikke åbne nøglefil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Databasen åbnede fint. Intet at gøre.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Kan ikke åbne databasen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Succes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>Databasen er blevet succesfuldt repareret
|
||||
Du kan gemme den nu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Kan ikke reparere databasen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -165,7 +220,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Transform rounds:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Transformationsrunder:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
@@ -185,18 +240,18 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history items:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Maks. posthistorik:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history size:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Maks. historikstørrelse:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Rod</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
@@ -234,11 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Luk?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Gem ændringer?</translation>
|
||||
@@ -246,7 +296,8 @@ Close anyway?</source>
|
||||
<message>
|
||||
<source>"%1" was modified.
|
||||
Save changes?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>"%1" blev ændret.
|
||||
Gem disse ændringer?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
@@ -268,12 +319,66 @@ Save changes?</source>
|
||||
<source>locked</source>
|
||||
<translation>låst</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>Den database, du prøver at åbne er låst af en anden forekomst af KeePassX.
|
||||
Vil du åbne den alligevel? Alternativt åbnes databasen skrivebeskyttet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Lås database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Kan ikke låse databasen, mens du redigerer i den.
|
||||
Tryk på Afbryd for at afslutte dine ændringer eller kassere dem.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Denne database er aldrig blevet gemt.
|
||||
Du kan gemme databasen eller stop låsning.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Denne database er blevet ændret.
|
||||
Vil du gemme databasen før låsning?
|
||||
Ellers mister du dine ændringer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" er i redigeringstilstand.
|
||||
Kassér ændringer og luk alligevel?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Eksportér databasen til CSV-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Kan ikke skrive til CSV-fil.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>Databasen som du prøver at gemme er låst af en anden instans af KeePassX.
|
||||
Vil du alligevel gemme?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Skift primærnøgle</translation>
|
||||
<translation>Skift hovednøgle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entry?</source>
|
||||
@@ -281,7 +386,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the entry "%1" for good?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vil du virkelig slette posten "%1" permanent?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entries?</source>
|
||||
@@ -289,7 +394,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete %1 entries for good?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vil du virkelig slette %1 poster permanent?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move entries to recycle bin?</source>
|
||||
@@ -297,7 +402,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Ønsker du virkelig at flytte %n post over i papirkurven?</numerusform><numerusform>Ønsker du virkelig at flytte %n poster over i papirkurven?</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group?</source>
|
||||
@@ -305,12 +410,20 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the group "%1" for good?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ønsker du at slette gruppen "%1" permanent?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
<translation>Nuværende gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fejl</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Kan ikke beregne hovednøgle</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -328,7 +441,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auto-Indsæt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Properties</source>
|
||||
@@ -340,7 +453,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry history</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Indtastningshistorik</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add entry</source>
|
||||
@@ -356,7 +469,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Andre adgangskoder leveret.</translation>
|
||||
<translation>Andre kodeord leveret.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New attribute</source>
|
||||
@@ -377,7 +490,7 @@ Save changes?</source>
|
||||
<message>
|
||||
<source>Unable to save the attachment:
|
||||
</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kan ikke gemme vedhæftningen:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tomorrow</source>
|
||||
@@ -422,20 +535,24 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>Gem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Åben</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
<message>
|
||||
<source>Enable Auto-Type for this entry</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Aktivér Auto-Indsæt for denne post</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit default Auto-Type sequence from the group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nedarv standard Auto-Indsæt sekvens fra gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom Auto-Type sequence:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Brug brugerdefineret Auto-indsæt sekvens:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>+</source>
|
||||
@@ -451,11 +568,11 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default sequence</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Brug standardsekvens</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set custom sequence:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Definér brugervalgt sekvens:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -489,7 +606,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Adgangskode:</translation>
|
||||
<translation>Kodeord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat:</source>
|
||||
@@ -497,7 +614,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gen.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Generer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
@@ -509,7 +626,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Presets</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Predefinerede</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
@@ -571,7 +688,15 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Auto-indsæt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Brug standard Auto-Indsæt sekvens fra forældregruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Definér standard auto-indsæt sekvens</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -610,7 +735,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Can't delete icon. Still used by %n item(s).</source>
|
||||
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Kan ikke slette ikonet. Det anvendes stadig af %n element.</numerusform><numerusform>Kan ikke slette ikonet. Det anvendes stadig af %n elementer.</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -719,14 +844,18 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Rod</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Kan ikke beregne hovednøgle</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>Det er ikke en KeePass database.</translation>
|
||||
<translation>Dette er ikke en KeePass database.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
@@ -736,6 +865,20 @@ Save changes?</source>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Forkert nøgle eller databasefil er korrupt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</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 > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Den valgte fil er en gammel KeePass 1 databasefil (.kdb).
|
||||
|
||||
Du kan importere den ved at klikke på Database > 'Importér KeePass 1 database'.
|
||||
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>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -774,10 +917,6 @@ Save changes?</source>
|
||||
<source>Groups</source>
|
||||
<translation>Grupper</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Vis</translation>
|
||||
@@ -836,7 +975,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Skift primærnøgle</translation>
|
||||
<translation>Skift hovednøgle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database settings</source>
|
||||
@@ -854,21 +993,13 @@ Save changes?</source>
|
||||
<source>Find</source>
|
||||
<translation>Find</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Brugernavn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Kopiér brugernavn til udklipsholder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Adgangskode</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Kopiér adgangskode til udklipsholder</translation>
|
||||
<translation>Kopiér kodeord til udklipsholder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
@@ -876,7 +1007,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Perform Auto-Type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Udfør Auto-indsæt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open URL</source>
|
||||
@@ -910,12 +1041,52 @@ Save changes?</source>
|
||||
<source>Toggle window</source>
|
||||
<translation>Skift vindue</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Værktøj</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Kopiér brugernavn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Kopiér kodeord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Eksportér til CSV-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Reparer database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 Database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Alle filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Gem repareret database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fejl</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Skrivning til database fejler.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Adgangskode:</translation>
|
||||
<translation>Kodeord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Length:</source>
|
||||
@@ -923,7 +1094,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Character Types</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tegntyper</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Upper Case Letters</source>
|
||||
@@ -931,7 +1102,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lower Case Letters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Små Bogstaver</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Numbers</source>
|
||||
@@ -939,15 +1110,15 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Special Characters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Specialtegn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exclude look-alike characters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Udeluk lool-alike tegn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ensure that the password contains characters from every group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vær sikker på at dit kodeord indeholder tegn fra alle grupper</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept</source>
|
||||
@@ -1020,11 +1191,11 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error writing to underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Fejl ved skrivning til enhed:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error opening underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Fejl ved åbning fra enhed:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading data from underlying device: </source>
|
||||
@@ -1032,7 +1203,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error when decompressing: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Intern zlib-fejl ved dekomprimering:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1054,7 +1225,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Case sensitive</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Versalfølsom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
@@ -1062,7 +1233,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Rodgruppe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1073,7 +1244,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Generelt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Security</source>
|
||||
@@ -1084,15 +1255,11 @@ Save changes?</source>
|
||||
<name>SettingsWidgetGeneral</name>
|
||||
<message>
|
||||
<source>Remember last databases</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Husk seneste databaser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Åben foregående databaser ved opstart</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
@@ -1108,15 +1275,15 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Brug gruppeikon ved oprettelse af post</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Global Auto-Type shortcut</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Global Auto-Indsæt genvej</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global auto-type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Brug titel på post til at matche global aito-indsæt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
@@ -1130,6 +1297,10 @@ Save changes?</source>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Skjul vindue i systembakken når det er minimeret</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Husk de sidste nøglefiler</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
@@ -1143,15 +1314,15 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after inactivity of</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lås databaserne efter inaktivitet i</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Vis kodeord i klartekst som standard</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing auto-type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Spørg altid før auto-indsæt</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1160,14 +1331,6 @@ Save changes?</source>
|
||||
<source>Unlock database</source>
|
||||
<translation>Lås database op</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fejl</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Forkert nøgle.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1180,7 +1343,7 @@ Save changes?</source>
|
||||
<name>main</name>
|
||||
<message>
|
||||
<source>KeePassX - cross-platform password manager</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassX - cross-platform password manager</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filename of the password database to open (*.kdbx)</source>
|
||||
@@ -1188,11 +1351,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>path to a custom config file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>adgangskode til databasen (FAARLIGT!)</translation>
|
||||
<translation>sti til brugerdefineret indstillingsfil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
|
||||
@@ -7,7 +7,15 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX ist unter der GNU General Public License (GPL) version 2 (version 3) veröffentlicht.</translation>
|
||||
<translation>KeePassX steht unter der GNU General Public License (GPL) version 2 (version 3).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Überarbeitung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>In Benutzung:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -109,6 +117,15 @@
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Unterschiedliche Passwörter eingegeben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Festlegen der Schlüsseldatei nicht möglich.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Festlegen von %1 als Schlüsseldatei nicht möglich: %2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
@@ -153,6 +170,43 @@
|
||||
<translation>Schlüsseldatei auswählen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Datenbank reparieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Schlüsseldatei kann nicht geöffnet werden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Datenbank wurde ordnungsgemäß geöffnet. Es gibt nichts zu tun.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Öffnen der Datenbank nicht möglich.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Erfolg</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>Datenbank erfolgreich repariert
|
||||
sie kann nun gespeichert werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Reparieren der Datenbank nicht möglich.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -234,12 +288,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Schließen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" wird bearbeitet.
|
||||
Trotzdem schließen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Änderungen speichern?</translation>
|
||||
@@ -270,6 +318,59 @@ Save changes?</source>
|
||||
<source>locked</source>
|
||||
<translation>gesperrt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>Die Datenbank, die geöffnet werden soll, ist aktuell von einer anderen Instanz von KeePassX blockiert. Soll sie dennoch geöffnet werden? Andererseits wird die Datenbank schreibgeschützt geöffnet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Datenbank sperren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Datenbank kann nicht gesperrt werden, da sie gerade bearbeitet wird.
|
||||
Wählen sie "cancel", um die Änderungen zu speichern oder sie zurückzunehmen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Diese Datenbank wurde noch nicht gespeichert.
|
||||
Sie können sie speichern oder Sperre freigeben.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Dieses Datenbank wurde geändert.
|
||||
Soll sie gespeichert werden bevor sie gesperrt wirt?
|
||||
Anderenfalls gehen Ihre Änderungen verloren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" wird bearbeitet.
|
||||
Änderungen verwerfen und trotzdem schließen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Datenbank als CSV Datei exportieren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV Datei</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Die CSV Datei konnte nicht gespeichert werden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>Die Datenbank, die gespeichert werden soll, ist von einer anderen Instanz von KeePassX blockiert.
|
||||
Soll sie dennoch gespeichert werden? </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -313,6 +414,14 @@ Save changes?</source>
|
||||
<source>Current group</source>
|
||||
<translation>Aktuelle Gruppe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Berechnung des "master keys" gescheitert</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -424,6 +533,10 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>Speichern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Offen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -575,6 +688,14 @@ Save changes?</source>
|
||||
<source>Auto-type</source>
|
||||
<translation>Auto-type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Auto-Type-Sequenz der übergeordneten Gruppe anwenden.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Standard Auto-Type-Sequenz setzen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
@@ -723,6 +844,10 @@ Save changes?</source>
|
||||
<source>Root</source>
|
||||
<translation>Root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Berechnung des "master keys" gescheitert</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -738,6 +863,20 @@ Save changes?</source>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Falscher Schlüssel oder die Datei ist beschädigt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Berechnung des "master keys" gescheitert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Die ausgewählte Datei ist eine alte KeePass 1 Datenbank (.kdb).
|
||||
|
||||
Zum Importieren gehen Sie auf Datenbank > 'KeePass 1 Datenbank importieren'.
|
||||
Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann später nicht mehr mit der alten KeePassX Version 0.4 geöffnet werden.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -776,10 +915,6 @@ Save changes?</source>
|
||||
<source>Groups</source>
|
||||
<translation>Gruppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Extras</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Ansicht</translation>
|
||||
@@ -856,18 +991,10 @@ Save changes?</source>
|
||||
<source>Find</source>
|
||||
<translation>Suchen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Benutzername</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Benutzername in die Zwischenablage kopieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Passwort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Passwort in die Zwischenablage kopieren</translation>
|
||||
@@ -912,6 +1039,46 @@ Save changes?</source>
|
||||
<source>Toggle window</source>
|
||||
<translation>Fenster zeigen/verstecken</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Tools</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Benutzername kopieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Passwort kopieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Als CSV Datei exportieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Datenbank reparieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 Datenbank</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Alle Dateien</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Reparierte Datenbank speichern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Schreiben der Datenbank fehlgeschlagen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1092,10 +1259,6 @@ Save changes?</source>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Letzte Datenbank beim Starten öffnen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation>Als erweiterte Zustandsänderungen makieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Automatisch speichern beim Schließen</translation>
|
||||
@@ -1132,6 +1295,10 @@ Save changes?</source>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Fenster verstecken wenn minimiert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Letzte Schlüsseldateien merken</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
@@ -1149,7 +1316,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
<translation>Passwort standartmäßig in Klartext anzeigen</translation>
|
||||
<translation>Passwörter standardmäßig in Klartext anzeigen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing auto-type</source>
|
||||
@@ -1162,14 +1329,6 @@ Save changes?</source>
|
||||
<source>Unlock database</source>
|
||||
<translation>Datenbank entsperren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fehler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Falscher Schlüssel.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1192,10 +1351,6 @@ Save changes?</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>Pfad zu einer benutzerdefinierten Konfigurationsdatei</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>Passwort der Datenbank (GEFÄHRLICH!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>Schlüsseldatei der Datenbank</translation>
|
||||
|
||||
1286
share/translations/keepassx_el.ts
Normal file
1286
share/translations/keepassx_el.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -164,6 +172,42 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -316,6 +360,15 @@ Discard changes and close anyway?</source>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -370,6 +423,14 @@ Discard changes and close anyway?</source>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move entry to recycle bin?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to move entry "%1" to the recycle bin?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -692,6 +753,14 @@ Discard changes and close anyway?</source>
|
||||
<numerusform></numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't read icon:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetProperties</name>
|
||||
@@ -805,6 +874,10 @@ Discard changes and close anyway?</source>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -824,6 +897,13 @@ Discard changes and close anyway?</source>
|
||||
<source>Unable to calculate master key</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 > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -1002,6 +1082,30 @@ Discard changes and close anyway?</source>
|
||||
<source>Export to CSV file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1274,10 +1378,6 @@ Discard changes and close anyway?</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX es distribuido bajo los términos de la versión 2 de la Licencia Pública GNU (GPL) o por la versión 3 (si así lo prefiere).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revisión</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>Usando:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -75,7 +83,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key files</source>
|
||||
<translation>Archivos de llaves</translation>
|
||||
<translation>Archivos llave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -109,6 +117,16 @@
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Las contraseñas ingresadas son distintas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>No se pudo establecer el archivo llave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>No se pudo establecer %1 como el Archivo llave:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
@@ -118,7 +136,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File:</source>
|
||||
<translation>Archivo clave:</translation>
|
||||
<translation>Archivo llave:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>Seleccionar archivo llave</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Reparar base de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>No se puede abrir el archivo llave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Base de datos abierta correctamente. Nada que hacer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>No se pudo abrir la base de datos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Éxito</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>La base de datos ha sido reparada correctamente
|
||||
Ahora puede guardarla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>No se pudo reparar la base de datos.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -196,7 +251,7 @@
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Raíz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
@@ -234,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>¿Cerrar?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" está en modo de edición.
|
||||
¿Cerrar de todas formas?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>¿Guardar cambios?</translation>
|
||||
@@ -270,12 +319,66 @@ Save changes?</source>
|
||||
<source>locked</source>
|
||||
<translation>bloqueado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>La base de datos que está intentando abrir está bloqueada por otra instancia de KeePassX.
|
||||
¿Quiere abrirla de todos modos? Alternativamente, la base de datos se abre como sólo lectura.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Bloquear base de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>No se puede bloquear la base de datos porque actualmente está editándola.
|
||||
Por favor, pulse cancelar para terminar sus cambios o descartarlos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Esta base de datos nunca ha sido guardada.
|
||||
Puede guardar la base de datos o dejar de bloquearla.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Esta base de datos ha sido modificada.
|
||||
¿Desea guardar la base de datos antes de bloquearla?
|
||||
De lo contrario se perderán los cambios.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"% 1" está en el modo de edición.
|
||||
¿Descartar cambios y cerrar de todos modos?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Exportar base de datos a un archivo CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>Archivo CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>La escritura del archivo CSV falló.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>La base de datos que está tratando de guardar está bloqueda por otra instancia de KeePassX.
|
||||
̉¿Desea guardarla de cualquier manera?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Cambiar la llave maestra</translation>
|
||||
<translation>Cambiar la clave maestra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entry?</source>
|
||||
@@ -313,6 +416,14 @@ Save changes?</source>
|
||||
<source>Current group</source>
|
||||
<translation>Grupo actual</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>No se puede calcular la llave maestra</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -425,6 +536,10 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>Guardar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Abrir</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -576,6 +691,14 @@ Save changes?</source>
|
||||
<source>Auto-type</source>
|
||||
<translation>Auto-escritura</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Usar escritura automática por defecto del grupo padre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Establecer escritura automática por defecto</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
@@ -722,7 +845,11 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Raíz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>No se puede calcular la clave maestra</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -739,6 +866,20 @@ Save changes?</source>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>La contraseña es incorrecta o el archivo está dañado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>No se puede calcular la clave maestra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>El archivo seleccionado es una vieja base de datos de KeePass 1 (.kdb).
|
||||
|
||||
Puede importarla haciendo click en 'Base de datos' > 'Importar base de datos de Keepass 1'.
|
||||
Esta migración es en un único sentido. No podrá abrir la base importada con la vieja versión 0.4 de KeePassX. </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +918,6 @@ Save changes?</source>
|
||||
<source>Groups</source>
|
||||
<translation>Grupos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Extras</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Ver</translation>
|
||||
@@ -839,7 +976,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Cambiar la llave maestra</translation>
|
||||
<translation>Cambiar la clave maestra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database settings</source>
|
||||
@@ -857,18 +994,10 @@ Save changes?</source>
|
||||
<source>Find</source>
|
||||
<translation>Buscar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Copiar nombre de usuario al portapapeles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Contraseña</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Copiar contraseña al portapapeles</translation>
|
||||
@@ -913,6 +1042,46 @@ Save changes?</source>
|
||||
<source>Toggle window</source>
|
||||
<translation>Cambiar a ventana</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Herramientas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Copiar nombre de usuario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Copiar contraseña</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Exportar a un archivo CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Reparar la base de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>Base de datos de KeePass 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Todos los archivos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Guardar base de datos reparada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Fallo al escribir la base de datos.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1065,7 +1234,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupo raíz</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1093,10 +1262,6 @@ Save changes?</source>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Abrir base de datos anterior al inicio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation>Marcar como modificado en los cambios de estado ampliados</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Guardar automáticamente al salir</translation>
|
||||
@@ -1133,6 +1298,10 @@ Save changes?</source>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Ocultar la ventana a la bandeja del sistema cuando se minimiza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Recordar últimos archivos clave</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
@@ -1163,14 +1332,6 @@ Save changes?</source>
|
||||
<source>Unlock database</source>
|
||||
<translation>Desbloquear base de datos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Error</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Clave incorrecta.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1193,10 +1354,6 @@ Save changes?</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>ruta a un archivo de configuración personalizado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>contraseña de la base de datos (¡PELIGROSO!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>archivo llave de la base de datos</translation>
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX est distribué selon les conditions de la GNU General Public License (GPL) version 2 ou (à votre choix) version 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Version</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>Utilise :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -25,7 +33,7 @@
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
<message>
|
||||
<source>Window</source>
|
||||
<translation>Fenêtre </translation>
|
||||
<translation>Fenêtre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sequence</source>
|
||||
@@ -63,7 +71,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file</source>
|
||||
<translation>Fichier de clé</translation>
|
||||
<translation>Fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
@@ -75,7 +83,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key files</source>
|
||||
<translation>Fichiers de clé</translation>
|
||||
<translation>Fichiers-clés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -83,7 +91,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Create Key File...</source>
|
||||
<translation>Créer un fichier de clé...</translation>
|
||||
<translation>Créer un fichier-clé...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
@@ -91,11 +99,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to create Key File : </source>
|
||||
<translation>Incapable de créer un fichier de clé :</translation>
|
||||
<translation>Impossible de créer un fichier-clé :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select a key file</source>
|
||||
<translation>Choisir un fichier de clé</translation>
|
||||
<translation>Choisir un fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Question</source>
|
||||
@@ -109,16 +117,26 @@
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Les mots de passe ne sont pas identiques.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Échec de définition du fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Impossible de définir %1 comme fichier-clé :
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
<message>
|
||||
<source>Enter master key</source>
|
||||
<translation>Entrez la clé maîtresse</translation>
|
||||
<translation>Entrez la clé maître</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File:</source>
|
||||
<translation>Fichier de clé :</translation>
|
||||
<translation>Fichier-clé :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
@@ -138,7 +156,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Impossible d'ouvrir le fichier de clé</translation>
|
||||
<translation>Impossible d'ouvrir le fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -146,11 +164,48 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key files</source>
|
||||
<translation>Fichiers de clé</translation>
|
||||
<translation>Fichiers-clés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file</source>
|
||||
<translation>Choisissez un fichier de clé</translation>
|
||||
<translation>Choisissez un fichier-clé</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Réparer la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Erreur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Impossible d'ouvrir le fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>La base de données s'est bien ouverte. Aucune action à effectuer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Impossible d'ouvrir la base de données.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Succès</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>La base de données a correctement été réparée.
|
||||
Vous pouvez maintenant la sauvegarder.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Impossible de réparer la base de données.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -177,7 +232,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source> MiB</source>
|
||||
<translation>MiB</translation>
|
||||
<translation> MiB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Benchmark</source>
|
||||
@@ -208,7 +263,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Open database</source>
|
||||
<translation>Ovrire la base de données</translation>
|
||||
<translation>Ouvrir la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning</source>
|
||||
@@ -216,7 +271,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>File not found!</source>
|
||||
<translation>Fichier introuvable!</translation>
|
||||
<translation>Fichier introuvable !</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open KeePass 1 database</source>
|
||||
@@ -232,13 +287,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Close?</source>
|
||||
<translation>Fermer?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" est en cours de modification.
|
||||
Fermer quand même ?</translation>
|
||||
<translation>Fermer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
@@ -256,7 +305,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Une erreur s'est produite lors de l'écriture de la base de données. </translation>
|
||||
<translation>Une erreur s'est produite lors de l'écriture de la base de données.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save database as</source>
|
||||
@@ -270,12 +319,66 @@ Enregistrer les modifications ?</translation>
|
||||
<source>locked</source>
|
||||
<translation>verrouillée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>La base de données que vous essayez d'ouvrir est verrouillée par une autre instance de KeePassX.
|
||||
Voulez-vous quand même l'ouvrir ? Dans ce cas, elle sera ouverte en lecture seule.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Verrouiller la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Impossible de verrouiller la base de données lors de modifications.
|
||||
Cliquez sur Annuler pour finir vos modifications ou abandonnez-les.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Cette base de données n'a pas encore été sauvegardée.
|
||||
Vous devez la sauvegarder ou annuler son verrouillage.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>La base de données a été modifiée.
|
||||
Voulez-vous l'enregistrer avant de la verrouiller ?
|
||||
Autrement, vos modifications seront perdues.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" est en mode édition.
|
||||
Ignorer les changements et fermer ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Exporter la base de données au format CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>Fichier CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Échec de l'écriture du fichier CSV.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>La base de données que vous essayez de sauvegarder a été verrouillée par une autre instance de KeePassX.
|
||||
Voulez-vous quand même la sauvegarder ?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Changer la clé maîtresse</translation>
|
||||
<translation>Changer la clé maître</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entry?</source>
|
||||
@@ -311,7 +414,15 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
<translation>Group actif</translation>
|
||||
<translation>Groupe actif</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Erreur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Impossible de calculer la clé maître</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -322,7 +433,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Advanced</source>
|
||||
<translation>Avancées</translation>
|
||||
<translation>Avancé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Icon</source>
|
||||
@@ -330,11 +441,11 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
<translation>Auto-Type</translation>
|
||||
<translation>Remplissage automatique</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Properties</source>
|
||||
<translation>Propriétés </translation>
|
||||
<translation>Propriétés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>History</source>
|
||||
@@ -379,7 +490,7 @@ Enregistrer les modifications ?</translation>
|
||||
<message>
|
||||
<source>Unable to save the attachment:
|
||||
</source>
|
||||
<translation>Impossible de enregistrer le fichier attaché:
|
||||
<translation>Impossible d'enregistrer le fichier attaché :
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -396,14 +507,14 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>1 year</source>
|
||||
<translation>Une année</translation>
|
||||
<translation>1 an</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAdvanced</name>
|
||||
<message>
|
||||
<source>Additional attributes</source>
|
||||
<translation>Attributs additionnel </translation>
|
||||
<translation>Attributs supplémentaires</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add</source>
|
||||
@@ -423,22 +534,26 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation>Enregistrer le fichier </translation>
|
||||
<translation>Enregistrer le fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Ouvrir</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
<message>
|
||||
<source>Enable Auto-Type for this entry</source>
|
||||
<translation>Activer l'Auto-Type pour cette entrée</translation>
|
||||
<translation>Activer le remplissage automatique pour cette entrée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit default Auto-Type sequence from the group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Utiliser la séquence de remplissage automatique par défaut du groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom Auto-Type sequence:</source>
|
||||
<translation>Utiliser une séquence d'Auto-Type personnalisée :</translation>
|
||||
<translation>Utiliser une séquence de remplissage automatique personnalisée :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>+</source>
|
||||
@@ -450,7 +565,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Window title:</source>
|
||||
<translation>Titre de la fenêtre:</translation>
|
||||
<translation>Titre de la fenêtre :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default sequence</source>
|
||||
@@ -458,14 +573,14 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set custom sequence:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Définir une séquence personnalisée :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetHistory</name>
|
||||
<message>
|
||||
<source>Show</source>
|
||||
<translation>Exposer</translation>
|
||||
<translation>Afficher</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restore</source>
|
||||
@@ -484,19 +599,19 @@ Enregistrer les modifications ?</translation>
|
||||
<name>EditEntryWidgetMain</name>
|
||||
<message>
|
||||
<source>Title:</source>
|
||||
<translation>Titre:</translation>
|
||||
<translation>Titre :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username:</source>
|
||||
<translation>Non d'utilisateur:</translation>
|
||||
<translation>Nom d'utilisateur :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Mot de passe:</translation>
|
||||
<translation>Mot de passe :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat:</source>
|
||||
<translation>Confirme: </translation>
|
||||
<translation>Confirmation :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gen.</source>
|
||||
@@ -504,7 +619,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
<translation>URL:</translation>
|
||||
<translation>URL :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
@@ -516,7 +631,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
<translation>Notes:</translation>
|
||||
<translation>Notes :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -531,15 +646,15 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Properties</source>
|
||||
<translation>Propriétés </translation>
|
||||
<translation>Propriétés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add group</source>
|
||||
<translation>Ajouter un groupe. </translation>
|
||||
<translation>Ajouter un groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Edit group</source>
|
||||
<translation>Modifie le groupe</translation>
|
||||
<translation>Modifier le groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable</source>
|
||||
@@ -566,7 +681,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
<translation>Expires</translation>
|
||||
<translation>Expiration</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Search</source>
|
||||
@@ -574,7 +689,15 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type</source>
|
||||
<translation>Auto-type</translation>
|
||||
<translation>Remplissage automatique</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Utiliser la séquence de remplissage automatique par défaut du groupe parent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Définir une séquence de remplissage automatique par défaut</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -605,7 +728,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Image</source>
|
||||
<translation>Choisis un image. </translation>
|
||||
<translation>Choisir une image</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't delete icon!</source>
|
||||
@@ -632,7 +755,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Uuid:</source>
|
||||
<translation>Uuid:</translation>
|
||||
<translation>Uuid :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -673,7 +796,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Non d'utilisateur</translation>
|
||||
<translation>Nom d'utilisateur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL</source>
|
||||
@@ -684,14 +807,14 @@ Enregistrer les modifications ?</translation>
|
||||
<name>Group</name>
|
||||
<message>
|
||||
<source>Recycle Bin</source>
|
||||
<translation>Bac de Recyclage</translation>
|
||||
<translation>Corbeille</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass1OpenWidget</name>
|
||||
<message>
|
||||
<source>Import KeePass1 database</source>
|
||||
<translation>Importe un KeePass1 bas de données</translation>
|
||||
<translation>Importer une base de données au format KeePass1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
@@ -699,18 +822,18 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Impossible d'ouvrir la bas de données.</translation>
|
||||
<translation>Impossible d'ouvrir la base de données.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass1Reader</name>
|
||||
<message>
|
||||
<source>Unable to read keyfile.</source>
|
||||
<translation>Impossible de lire le fichier de clé.</translation>
|
||||
<translation>Impossible de lire le fichier-clé.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>Ce n'est pas une base de donnée KeePass.</translation>
|
||||
<translation>Ce n'est pas une base de données KeePass.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported encryption algorithm.</source>
|
||||
@@ -718,26 +841,44 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Version de base de donnée KeePass non supportée.</translation>
|
||||
<translation>Version de base de données KeePass non supportée.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation>Racine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Impossible de calculer la clé maître</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>Ce n'est pas une base de donnée KeePass.</translation>
|
||||
<translation>Ce n'est pas une base de données KeePass.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Version de base de donnée KeePass non supportée.</translation>
|
||||
<translation>Version de base de données KeePass non supportée.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Mauvaise clé ou fichier de base de donnée corrompu.</translation>
|
||||
<translation>Mauvaise clé ou fichier de base de données corrompu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Impossible de calculer la clé maître</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Le fichier sélectionné est une ancienne base de données pour KeePass 1 (.kdb).
|
||||
|
||||
Vous pouvez l'importer en cliquant sur "Base de données" > "Importer une base de données KeePass 1".
|
||||
Ceci est une migration à sens unique. Vous ne serez plus en mesure d'ouvrir la base de données importée avec l'ancienne version KeePassX version 0.4.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -771,16 +912,12 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy attribute to clipboard</source>
|
||||
<translation>Copier l'attribut dans le presse-papiers</translation>
|
||||
<translation>Copier l'attribut dans le presse-papier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
<translation>Groupes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Extras</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Vue</translation>
|
||||
@@ -795,19 +932,19 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open database</source>
|
||||
<translation>Ouvrir une base de donnée</translation>
|
||||
<translation>Ouvrir une base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save database</source>
|
||||
<translation>Enregistrer la base de donnée</translation>
|
||||
<translation>Enregistrer la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Close database</source>
|
||||
<translation>Fermer la base de donnée</translation>
|
||||
<translation>Fermer la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New database</source>
|
||||
<translation>Nouvelle base de donnée</translation>
|
||||
<translation>Nouvelle base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add new entry</source>
|
||||
@@ -835,7 +972,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save database as</source>
|
||||
<translation>Enregistrer la base de donnée sous</translation>
|
||||
<translation>Enregistrer la base de données sous</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
@@ -843,11 +980,11 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database settings</source>
|
||||
<translation>Paramètre de la base de donnée</translation>
|
||||
<translation>Paramètres de la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Import KeePass 1 database</source>
|
||||
<translation>Importer une base de donnée KeePass 1</translation>
|
||||
<translation>Importer une base de données KeePass 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clone entry</source>
|
||||
@@ -857,21 +994,13 @@ Enregistrer les modifications ?</translation>
|
||||
<source>Find</source>
|
||||
<translation>Chercher</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Nom d'utilisateur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Copier le nom d'utilisateur dans le presse-papiers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Mot de passe</translation>
|
||||
<translation>Copier le nom d'utilisateur dans le presse-papier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Copier le mot de passe dans le presse-papiers</translation>
|
||||
<translation>Copier le mot de passe dans le presse-papier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
@@ -879,7 +1008,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Perform Auto-Type</source>
|
||||
<translation>Effectuer un Auto-Type</translation>
|
||||
<translation>Effectuer un remplissage automatique</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open URL</source>
|
||||
@@ -913,12 +1042,52 @@ Enregistrer les modifications ?</translation>
|
||||
<source>Toggle window</source>
|
||||
<translation>Basculer de fenêtre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Outils</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Copier le nom d'utilisateur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Copier le mot de passe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Exporter au format CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Réparer la base de données</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>Base de données KeePass 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Tous les fichiers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Sauvegarder la base de données réparée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Erreur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Une erreur s'est produite lors de l'écriture de la base de données.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Mot de passe:</translation>
|
||||
<translation>Mot de passe :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Length:</source>
|
||||
@@ -926,7 +1095,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Character Types</source>
|
||||
<translation>Types de caractère</translation>
|
||||
<translation>Types de caractères</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Upper Case Letters</source>
|
||||
@@ -961,7 +1130,7 @@ Enregistrer les modifications ?</translation>
|
||||
<name>QCommandLineParser</name>
|
||||
<message>
|
||||
<source>Displays version information.</source>
|
||||
<translation>Afficher les informations de version</translation>
|
||||
<translation>Afficher les informations de version.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Displays this help.</source>
|
||||
@@ -1023,15 +1192,15 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error writing to underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Erreur d'écriture sur le périphérique concerné :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error opening underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Erreur d'ouverture du périphérique concerné :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading data from underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Erreur de lecture sur le périphérique concerné :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error when decompressing: </source>
|
||||
@@ -1072,7 +1241,7 @@ Enregistrer les modifications ?</translation>
|
||||
<name>SettingsWidget</name>
|
||||
<message>
|
||||
<source>Application Settings</source>
|
||||
<translation>Paramètre de l'application</translation>
|
||||
<translation>Paramètres de l'application</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
@@ -1091,23 +1260,19 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Ouvrir les base de données précédentes au démarrage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ouvrir les bases de données précédentes au démarrage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Sauvegarde automatiquement à la sortie</translation>
|
||||
<translation>Sauvegarder automatiquement à la sortie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save after every change</source>
|
||||
<translation>Sauvegarde automatiquement après chaque modification</translation>
|
||||
<translation>Sauvegarder automatiquement après chaque modification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize when copying to clipboard</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Réduire lors de la copie dans le presse-papier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
@@ -1115,11 +1280,11 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Global Auto-Type shortcut</source>
|
||||
<translation>Raccourci d'Auto-Type global</translation>
|
||||
<translation>Raccourci de remplissage automatique global</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global auto-type</source>
|
||||
<translation>Utiliser la correspondance entre le titre de l'entrée et de la fenêtre pour l'Auto-Type global</translation>
|
||||
<translation>Utiliser la correspondance entre le titre de l'entrée et de la fenêtre pour le remplissage automatique global</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
@@ -1127,26 +1292,30 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Afficher une icône dans la zone de notification</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Réduire la fenêtre vers la zone de notification lors de sa réduction</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Se rappeler les derniers fichiers-clés ouverts</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
<message>
|
||||
<source>Clear clipboard after</source>
|
||||
<translation>Vider le presse-papiers après</translation>
|
||||
<translation>Vider le presse-papier après</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
<translation>s</translation>
|
||||
<translation> s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after inactivity of</source>
|
||||
<translation>Verrouiller les bases de donnée après une inactivité de</translation>
|
||||
<translation>Verrouiller les bases de données après une inactivité de</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
@@ -1154,22 +1323,14 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing auto-type</source>
|
||||
<translation>Toujours demander avant d'effectuer un auto-type</translation>
|
||||
<translation>Toujours demander avant d'effectuer un remplissage automatique</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UnlockDatabaseWidget</name>
|
||||
<message>
|
||||
<source>Unlock database</source>
|
||||
<translation>Déverrouiller la base de donnée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Erreur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Mauvaise clé.</translation>
|
||||
<translation>Déverrouiller la base de données</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1187,19 +1348,15 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filename of the password database to open (*.kdbx)</source>
|
||||
<translation>Nom de fichier de la base de donnée de mot de pass à ouvrir (*.kdbx)</translation>
|
||||
<translation>Nom de fichier de la base de données de mot de passe à ouvrir (*.kdbx)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>Chemin vers un fichier de configuration personnalisé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>Mot de passe de la base de donnée (DANGEREUX !)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>Fichier de clé de la base de donnée</translation>
|
||||
<translation>Fichier-clé de la base de données</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
@@ -7,7 +7,15 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassX disebarluaskan dibawah ketentuan dari Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan Anda) versi 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revisi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>Menggunakan:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -18,7 +26,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Couldn't find an entry that matches the window title:</source>
|
||||
<translation>Tidak dapat menemukan entri yang cocok dengan judul jendela</translation>
|
||||
<translation>Tidak bisa menemukan entri yang cocok dengan judul jendela:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -51,15 +59,15 @@
|
||||
<name>ChangeMasterKeyWidget</name>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Kata Sandi</translation>
|
||||
<translation>Sandi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter password:</source>
|
||||
<translation>Masukan kata sandi:</translation>
|
||||
<translation>Masukkan sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat password:</source>
|
||||
<translation>Ulangi kata sandi:</translation>
|
||||
<translation>Ulangi sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file</source>
|
||||
@@ -75,7 +83,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key files</source>
|
||||
<translation>Berkas Kunci</translation>
|
||||
<translation>Berkas kunci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -91,11 +99,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to create Key File : </source>
|
||||
<translation>Tidak dapat membuat Berkas Kunci :</translation>
|
||||
<translation>Tidak bisa membuat Berkas Kunci :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select a key file</source>
|
||||
<translation>Pilih sebuah berkas kunci</translation>
|
||||
<translation>Pilih berkas kunci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Question</source>
|
||||
@@ -103,18 +111,28 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to use an empty string as password?</source>
|
||||
<translation>Apakah anda ingin menggunakan string kosong sebagai kata sandi?</translation>
|
||||
<translation>Apakah Anda benar-benar ingin menggunakan lema kosong sebagai sandi?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Kata sandi yang berbeda diberikan.</translation>
|
||||
<translation>Sandi berbeda.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Gagal menetapkan berkas kunci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Gagal menetapkan %1 sebagai berkas Kunci:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
<message>
|
||||
<source>Enter master key</source>
|
||||
<translation>Masukan kunci utama</translation>
|
||||
<translation>Masukkan kunci utama</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File:</source>
|
||||
@@ -122,7 +140,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Kata sandi:</translation>
|
||||
<translation>Sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
@@ -134,11 +152,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Tidak dapat membuka basis data</translation>
|
||||
<translation>Tidak bisa membuka basis data.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Tidak dapat membuka berkas kunci</translation>
|
||||
<translation>Tidak bisa membuka berkas kunci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>Pilih berkas kunci</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Perbaiki basis data</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Galat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Tidak bisa membuka berkas kunci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Basis data terbuka dengan baik. Tidak perlu melakukan apa-apa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Tidak bisa membuka basis data.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Sukses</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>Basis data berhasil diperbaiki
|
||||
Anda bisa menyimpannya sekarang.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Tidak bisa memperbaiki basis data.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -173,7 +228,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use recycle bin:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gunakan tong sampah:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> MiB</source>
|
||||
@@ -196,7 +251,7 @@
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
@@ -234,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Tutup?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" dalam berada mode sunting.
|
||||
Tetap tutup?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Simpan perubahan?</translation>
|
||||
@@ -256,7 +305,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Menulis basis data gagal.</translation>
|
||||
<translation>Gagal membuat basis data.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save database as</source>
|
||||
@@ -270,6 +319,60 @@ Simpan perubahan?</translation>
|
||||
<source>locked</source>
|
||||
<translation>terkunci</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>Basis data yang Anda coba buka terkunci oleh KeePassX lain yang sedang berjalan.
|
||||
Apakah Anda tetap ingin membukanya? Alternatif lain buka basis data baca-saja.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Kunci basis data</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Tidak bisa mengunci basis data karena Anda sedang menyuntingnya.
|
||||
Harap tekan batal untuk menyelesaikan ubahan Anda atau membuangnya.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Basis data ini belum pernah disimpan.
|
||||
Anda bisa menyimpan basis data atau berhenti menguncinya.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Basis data ini telah dimodifikasi.
|
||||
Apakah Anda ingin menyimpan basis data sebelum menguncinya?
|
||||
Kalau tidak, ubahan Anda akan hilang.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" dalam mode penyuntingan.
|
||||
Tetap buang ubahan dan tutup?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Ekspor basis data ke berkas CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>Berkas CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Gagal membuat berkas CSV.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>Basis data yang Anda coba buka terkunci oleh KeePassX lain yang sedang berjalan.
|
||||
Apakah Anda tetap ingin menyimpannya?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -283,7 +386,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the entry "%1" for good?</source>
|
||||
<translation>Apakah anda ingin menghapus entri "%1" untuk selamanya?</translation>
|
||||
<translation>Apakah Anda benar-benar ingin menghapus entri "%1" untuk selamanya?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entries?</source>
|
||||
@@ -291,15 +394,15 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete %1 entries for good?</source>
|
||||
<translation>Apakah anda ingin menghapus entri %1 untuk selamanya?</translation>
|
||||
<translation>Apakah Anda benar-benar ingin menghapus entri %1 untuk selamanya?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move entries to recycle bin?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Pindah entri ke tong sampah?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Do you really want to move %n entry(s) to the recycle bin?</source>
|
||||
<translation type="unfinished"><numerusform></numerusform></translation>
|
||||
<translation><numerusform>Apakah Anda benar-benar ingin memindahkan %n entri ke tong sampah?</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete group?</source>
|
||||
@@ -307,12 +410,20 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the group "%1" for good?</source>
|
||||
<translation>Apakah anda ingin menghapus grup "%1" untuk selamanya?</translation>
|
||||
<translation>Apakah Anda benar-benar ingin menghapus grup "%1" untuk selamanya?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
<translation>Grup saat ini</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Galat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Tidak bisa mengkalkulasi kunci utama</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -342,7 +453,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry history</source>
|
||||
<translation>Entri riwayat</translation>
|
||||
<translation>Riwayat entri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add entry</source>
|
||||
@@ -358,7 +469,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Kata sandi yang berbeda diberikan.</translation>
|
||||
<translation>Sandi berbeda.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New attribute</source>
|
||||
@@ -370,7 +481,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open file</source>
|
||||
<translation>Tidak dapat membuka berkas</translation>
|
||||
<translation>Tidak bisa membuka berkas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save attachment</source>
|
||||
@@ -379,7 +490,7 @@ Simpan perubahan?</translation>
|
||||
<message>
|
||||
<source>Unable to save the attachment:
|
||||
</source>
|
||||
<translation>Tidak dapat menyimpan lampiran:
|
||||
<translation>Tidak bisa menyimpan lampiran:
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -388,11 +499,11 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n week(s)</source>
|
||||
<translation><numerusform>%n minggu(s)</numerusform></translation>
|
||||
<translation><numerusform>%n minggu</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n month(s)</source>
|
||||
<translation><numerusform>%n bulan(s)</numerusform></translation>
|
||||
<translation><numerusform>%n bulan</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>1 year</source>
|
||||
@@ -415,7 +526,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove</source>
|
||||
<translation>Hapus</translation>
|
||||
<translation>Buang</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Attachments</source>
|
||||
@@ -425,6 +536,10 @@ Simpan perubahan?</translation>
|
||||
<source>Save</source>
|
||||
<translation>Simpan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Buka</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -434,11 +549,11 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit default Auto-Type sequence from the group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mengikuti urutan Ketik-Otomatis baku grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom Auto-Type sequence:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gunakan urutan Ketik-Otomatis ubahsuai:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>+</source>
|
||||
@@ -458,7 +573,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set custom sequence:</source>
|
||||
<translation>Tetapkan urutan kustom:</translation>
|
||||
<translation>Tetapkan urutan ubahsuai:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -492,7 +607,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Kata sandi:</translation>
|
||||
<translation>Sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat:</source>
|
||||
@@ -508,11 +623,11 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
<translation>Kadaluarsa</translation>
|
||||
<translation>Kedaluwarsa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Presets</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Prasetel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
@@ -551,7 +666,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit from parent group (%1)</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mengikuti grup induk (%1)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -566,7 +681,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
<translation>Kadaluarsa</translation>
|
||||
<translation>Kedaluwarsa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Search</source>
|
||||
@@ -576,6 +691,14 @@ Simpan perubahan?</translation>
|
||||
<source>Auto-type</source>
|
||||
<translation>Ketik-otomatis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Gunakan urutan ketik-otomatis baku grup induk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Tetapkan urutan ketik-otomatis baku</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
@@ -585,15 +708,15 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom icon</source>
|
||||
<translation>Gunakan ikon kustom</translation>
|
||||
<translation>Gunakan ikon ubahsuai</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add custom icon</source>
|
||||
<translation>Tambah ikon kustom</translation>
|
||||
<translation>Tambah ikon ubahsuai</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete custom icon</source>
|
||||
<translation>Hapus ikon kustom</translation>
|
||||
<translation>Hapus ikon ubahsuai</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Images</source>
|
||||
@@ -609,11 +732,11 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't delete icon!</source>
|
||||
<translation>Tidak dapat menghapus ikon!</translation>
|
||||
<translation>Tidak bisa menghapus ikon!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Can't delete icon. Still used by %n item(s).</source>
|
||||
<translation><numerusform>Can't delete icon. Still used by %n item(s).</numerusform></translation>
|
||||
<translation><numerusform>Tidak bisa menghapus ikon. Masih digunakan oleh %n item.</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -684,7 +807,7 @@ Simpan perubahan?</translation>
|
||||
<name>Group</name>
|
||||
<message>
|
||||
<source>Recycle Bin</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tong Sampah</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -699,52 +822,70 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Tidak dapat membuka basis data</translation>
|
||||
<translation>Tidak bisa membuka basis data.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass1Reader</name>
|
||||
<message>
|
||||
<source>Unable to read keyfile.</source>
|
||||
<translation>Tidak dapat membaca berkas kunci.</translation>
|
||||
<translation>Tidak bisa membaca berkas kunci.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>Bukan basis data KeePass</translation>
|
||||
<translation>Bukan basis data KeePass.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported encryption algorithm.</source>
|
||||
<translation>Algoritma enkripsi tidak didukung</translation>
|
||||
<translation>Algoritma enkripsi tidak didukung.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Versi Basis data KeePass tidak didukung</translation>
|
||||
<translation>Versi basis data KeePass tidak didukung.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Tidak bisa mengkalkulasi kunci utama</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
<message>
|
||||
<source>Not a KeePass database.</source>
|
||||
<translation>Bukan basis data KeePass</translation>
|
||||
<translation>Bukan basis data KeePass.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Versi basis data KeePass tidak didukung</translation>
|
||||
<translation>Versi basis data KeePass tidak didukung.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Kunci salah atau berkas basis data korup.</translation>
|
||||
<translation>Kunci salah atau berkas basis data rusak.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Tidak bisa mengkalkulasi kunci utama</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Berkas yang dipilih adalah basis data KeePass 1 yang lama (.kdb).
|
||||
|
||||
Anda bisa mengimpornya dengan mengklik Basis Data > 'Impor basis data KeePass 1'.
|
||||
Ini adalah migrasi satu arah. Anda tidak akan bisa lagi membuka basis data yang diimpor dengan versi lama KeePassX 0.4.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
<message>
|
||||
<source>Fatal error while testing the cryptographic functions.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Galat saat menguji fungsi kriptografi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX - Error</source>
|
||||
@@ -759,7 +900,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Recent databases</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Basis data baru-baru ini</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Help</source>
|
||||
@@ -777,13 +918,9 @@ Simpan perubahan?</translation>
|
||||
<source>Groups</source>
|
||||
<translation>Grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Ekstra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lihat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Quit</source>
|
||||
@@ -815,7 +952,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View/Edit entry</source>
|
||||
<translation>Tampil/Sunting entri</translation>
|
||||
<translation>Lihat/Sunting entri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entry</source>
|
||||
@@ -851,27 +988,19 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Clone entry</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Duplikat entri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Find</source>
|
||||
<translation>Temukan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Nama pengguna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Salin nama pengguna ke papan klip</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Kata sandi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Salin kata sandi ke papan klip</translation>
|
||||
<translation>Salin sandi ke papan klip</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Settings</source>
|
||||
@@ -879,7 +1008,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Perform Auto-Type</source>
|
||||
<translation>Melakukan Ketik-Otomatis</translation>
|
||||
<translation>Lakukan Ketik-Otomatis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open URL</source>
|
||||
@@ -907,18 +1036,58 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>read-only</source>
|
||||
<translation>hanya-baca</translation>
|
||||
<translation>baca-saja</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle window</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Jungkit jendela</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Perkakas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Salin nama pengguna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Salin sandi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Ekspor ke berkas CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Perbaiki basis data</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>Basis Data KeePass 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Semua Berkas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Simpan basis data yang sudah diperbaiki</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Galat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Gagal menyimpan basis data.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Kata sandi:</translation>
|
||||
<translation>Sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Length:</source>
|
||||
@@ -926,15 +1095,15 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Character Types</source>
|
||||
<translation>Tipe karakter</translation>
|
||||
<translation>Tipe Karakter</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Upper Case Letters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Huruf Besar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lower Case Letters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Huruf Kecil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Numbers</source>
|
||||
@@ -946,11 +1115,11 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Exclude look-alike characters</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kecualikan karakter mirip</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ensure that the password contains characters from every group</source>
|
||||
<translation>Pastikan kata sandi berisi karakter dari setiap grup</translation>
|
||||
<translation>Pastikan sandi berisi karakter dari setiap grup</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept</source>
|
||||
@@ -961,11 +1130,11 @@ Simpan perubahan?</translation>
|
||||
<name>QCommandLineParser</name>
|
||||
<message>
|
||||
<source>Displays version information.</source>
|
||||
<translation>Tampilkan informasi versi</translation>
|
||||
<translation>Tampilkan informasi versi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Displays this help.</source>
|
||||
<translation>Tampilkan bantuan ini</translation>
|
||||
<translation>Tampilkan bantuan ini.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown option '%1'.</source>
|
||||
@@ -997,45 +1166,45 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Arguments:</source>
|
||||
<translation>Argumen</translation>
|
||||
<translation>Argumen:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QSaveFile</name>
|
||||
<message>
|
||||
<source>Existing file %1 is not writable</source>
|
||||
<translation>Berkas yang ada %1 tidak dapat ditulis</translation>
|
||||
<translation>Berkas yang ada %1 tidak bisa ditulis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing canceled by application</source>
|
||||
<translation>Menulis dibatalkan oleh aplikasi</translation>
|
||||
<translation>Penulisan dibatalkan oleh aplikasi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Partial write. Partition full?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Penulisan parsial. Partisi penuh?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
<message>
|
||||
<source>Internal zlib error when compressing: </source>
|
||||
<translation>Galat zlib internal ketika mengkompress: </translation>
|
||||
<translation>Galat zlib internal ketika memampatkan:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error writing to underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Terjadi kesalahan saat menyimpan ke perangkat:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error opening underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Terjadi kesalahan saat membuka perangkat:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading data from underlying device: </source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Terjadi kesalahan saat membaca data dari perangkat:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error when decompressing: </source>
|
||||
<translation>Galat zlib internal ketika dekompress</translation>
|
||||
<translation>Galat zlib internal ketika dekompres:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1057,15 +1226,15 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Case sensitive</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Sensitif besar kecil huruf</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grup saat ini</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grup root</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1093,10 +1262,6 @@ Simpan perubahan?</translation>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Buka basis data sebelumnya saat mulai</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Otomatis simpan ketika keluar</translation>
|
||||
@@ -1107,7 +1272,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize when copying to clipboard</source>
|
||||
<translation>Kecilkan ketika menyalin ke papan klip</translation>
|
||||
<translation>Minimalkan ketika menyalin ke papan klip</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
@@ -1115,11 +1280,11 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Global Auto-Type shortcut</source>
|
||||
<translation>Jalan pintas global Ketik-Otomatis</translation>
|
||||
<translation>Pintasan global Ketik-Otomatis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global auto-type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gunakan judul entri untuk mencocokkan jendela untuk ketik-otomatis global</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
@@ -1127,18 +1292,22 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
<translation>Tampilkan sebuah ikon baki sistem</translation>
|
||||
<translation>Tampilkan ikon baki sistem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Sembunyikan jendela ke baki sistem ketika dikecilkan</translation>
|
||||
<translation>Sembunyikan jendela ke baki sistem ketika diminimalkan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Ingat berkas kunci terakhir</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
<message>
|
||||
<source>Clear clipboard after</source>
|
||||
<translation>Bersihkan papan klip setelaj</translation>
|
||||
<translation>Kosongkan papan klip setelah</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
@@ -1146,56 +1315,44 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after inactivity of</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Kunci basis data setelah tidak aktif selama</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tampilkan teks sandi secara baku</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing auto-type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Selalu tanya sebelum melakukan ketik-otomatis</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>UnlockDatabaseWidget</name>
|
||||
<message>
|
||||
<source>Unlock database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Galat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Kunci salah.</translation>
|
||||
<translation>Buka kunci basis data</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
<message>
|
||||
<source>Welcome!</source>
|
||||
<translation>Selamat Datang.</translation>
|
||||
<translation>Selamat datang!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>main</name>
|
||||
<message>
|
||||
<source>KeePassX - cross-platform password manager</source>
|
||||
<translation>KeePassX - manajer kata sandi cross-platform</translation>
|
||||
<translation>KeePassX - pengelola sandi lintas platform</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filename of the password database to open (*.kdbx)</source>
|
||||
<translation>nama berkasi dari basis data kata sandi untuk dibuka (*.kdbx)</translation>
|
||||
<translation>nama berkas dari basis data sandi untuk dibuka (*.kdbx)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>path to a custom config file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>kata sandi dari basis data (BERBAHAYA!)</translation>
|
||||
<translation>jalur ke berkas konfig ubahsuai</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassXはGNU General Public License (GPL) version 2 または version 3 (どちらかを選択)の条件で配布されます。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>リビジョン</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>利用中:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -18,7 +26,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Couldn't find an entry that matches the window title:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ウィンドウタイトルに一致するエントリーが見つかりませんでした:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -29,11 +37,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Sequence</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>シーケンス</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default sequence</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>デフォルトのシーケンス</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -44,7 +52,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Select entry to Auto-Type:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>自動入力するエントリーを選択してください:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -107,16 +115,17 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>異なるパスワードが入力されました。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>キーファイルのセットに失敗しました</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>%1 をキーファイルとしてセットできませんでした:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -147,7 +156,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>キーファイルを開けませんでした。</translation>
|
||||
<translation>キーファイルを開けませんでした</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -162,6 +171,43 @@
|
||||
<translation>キーファイルを選択</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>データベースを修復する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>エラー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>キーファイルを開けませんでした</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>データベースは正常に開かれています。行うべきことはありません。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>データベースを開けませんでした。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>データベースは正常に修復されました
|
||||
データベースの保存を行ってください。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>データベースを修復できませんでした。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -205,7 +251,7 @@
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ルート</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
@@ -243,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>閉じますか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" は編集されています。
|
||||
無視して閉じますか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>変更を保存しますか?</translation>
|
||||
@@ -292,18 +332,46 @@ Do you want to open it anyway? Alternatively the database is opened read-only.</
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>現在編集中のため、データベースをロックすることができませんでした。
|
||||
キャンセルボタンを押し、変更を完了させるか破棄してください。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>このデータベースは一度も保存されていません。
|
||||
データベースを保存してロックを解除してください。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>このデータベースは変更されました。
|
||||
ロックを行う前にデータベースを保存しますか?
|
||||
保存しない場合には変更点は失われます。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" は現在編集モードです。
|
||||
変更を破棄して閉じてしまってもよろしいですか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>データベースをCSVファイルにエクスポートする</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSVファイル</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>CSVファイルの書き込みに失敗しました。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>保存しようとしたデータベースは別のKeePassXプログラムからロックされています。
|
||||
とにかく保存しますか?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -318,7 +386,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete the entry "%1" for good?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>本当にエントリー "%1" を永遠に消去しますか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entries?</source>
|
||||
@@ -326,7 +394,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to delete %1 entries for good?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>本当に %1 個のエントリーを永遠に消去しますか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Move entries to recycle bin?</source>
|
||||
@@ -401,7 +469,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>異なるパスワードが入力されました。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>New attribute</source>
|
||||
@@ -431,11 +499,11 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n week(s)</source>
|
||||
<translation><numerusform>%s週間()</numerusform></translation>
|
||||
<translation><numerusform>%n週間</numerusform></translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>%n month(s)</source>
|
||||
<translation><numerusform>%nヶ月()</numerusform></translation>
|
||||
<translation><numerusform>%nヶ月</numerusform></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>1 year</source>
|
||||
@@ -485,7 +553,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom Auto-Type sequence:</source>
|
||||
<translation>カスタムの自動入力手順を使う</translation>
|
||||
<translation>カスタムの自動入力手順を使う:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>+</source>
|
||||
@@ -535,7 +603,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username:</source>
|
||||
<translation>ユーザ名</translation>
|
||||
<translation>ユーザ名:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
@@ -668,7 +736,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Can't delete icon. Still used by %n item(s).</source>
|
||||
<translation><numerusform>%s個のアイテム()から使われているので、アイコンを削除できません。</numerusform></translation>
|
||||
<translation><numerusform>%n個のアイテムから使われているので、アイコンを削除できません。</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -694,7 +762,7 @@ Otherwise your changes are lost.</source>
|
||||
<name>EntryAttributesModel</name>
|
||||
<message>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>名前</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -802,6 +870,16 @@ Otherwise your changes are lost.</source>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>マスターキーを計算できません</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>選択されたファイルは古い KeePass 1 のデータベース (.kdb) です。
|
||||
|
||||
データベース > 'KeePass 1 データベースをインポート' をクリックすることでインポートできます。
|
||||
これは一方向の移行操作であり、インポートされたデータベースは古い KeePassX 0.4 のバージョンでは開くことはできません。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -916,18 +994,10 @@ Otherwise your changes are lost.</source>
|
||||
<source>Find</source>
|
||||
<translation>検索</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>ユーザー名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>ユーザー名をコピー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>パスワード</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>パスワードをコピー</translation>
|
||||
@@ -970,12 +1040,48 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle window</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>ウィンドウ切替</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>ツール</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>ユーザ名をコピー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>パスワードをコピー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>CSVファイルへエクスポート</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>データベースを修復する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 データベース</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>全てのファイル</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>修復されたデータベースを保存する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>エラー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>データベースの書き込みに失敗しました。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1024,11 +1130,11 @@ Otherwise your changes are lost.</source>
|
||||
<name>QCommandLineParser</name>
|
||||
<message>
|
||||
<source>Displays version information.</source>
|
||||
<translation>バージョン情報を表示する</translation>
|
||||
<translation>バージョン情報を表示する。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Displays this help.</source>
|
||||
<translation>このヘルプを表示する</translation>
|
||||
<translation>このヘルプを表示する。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unknown option '%1'.</source>
|
||||
@@ -1067,7 +1173,7 @@ Otherwise your changes are lost.</source>
|
||||
<name>QSaveFile</name>
|
||||
<message>
|
||||
<source>Existing file %1 is not writable</source>
|
||||
<translation>存在するファイル %1 は書き込みできません。</translation>
|
||||
<translation>存在するファイル %1 は書き込みできません</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing canceled by application</source>
|
||||
@@ -1075,14 +1181,14 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Partial write. Partition full?</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>一部しか書き込めませんでした。パーティションがいっぱいかも?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>QtIOCompressor</name>
|
||||
<message>
|
||||
<source>Internal zlib error when compressing: </source>
|
||||
<translation>圧縮時に内部zlibエラーが発生しました</translation>
|
||||
<translation>圧縮時に内部zlibエラーが発生しました: </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error writing to underlying device: </source>
|
||||
@@ -1098,7 +1204,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error when decompressing: </source>
|
||||
<translation>解凍時に内部zlibエラーが発生しました</translation>
|
||||
<translation>解凍時に内部zlibエラーが発生しました: </translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1178,7 +1284,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use entry title to match windows for global auto-type</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>グローバル自動入力の際に、エントリーのタイトルとウィンドウのマッチングを行う</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
@@ -1190,7 +1296,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>最小化された際にシステムトレイへ格納する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
@@ -1246,11 +1352,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>path to a custom config file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>データベースのパスワード (危険!)</translation>
|
||||
<translation>カスタム設定ファイルへのパス</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
|
||||
1359
share/translations/keepassx_ko.ts
Normal file
1359
share/translations/keepassx_ko.ts
Normal file
File diff suppressed because it is too large
Load Diff
1362
share/translations/keepassx_lt.ts
Normal file
1362
share/translations/keepassx_lt.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX wordt verspreid onder de bepalingen van de GNU General Public License (GPL) versie 2 of (als u wenst) versie 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revisie</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>Maakt gebruik van:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -109,6 +117,16 @@
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Verschillende wachtwoorden opgegeven.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Niet gelukt het sleutelbestand in te stellen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Niet gelukt %1 als sleutelbestand in te stellen:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>Kies sleutelbestand</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Database repareren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Niet mogelijk om het sleutelbestand te openen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Database werd zonder problemen geopend. Niets te doen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Niet mogelijk om de database te openen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Gelukt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>De database is met succes gerepareerd
|
||||
U kunt deze nu opslaan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Niet mogelijk om de database te repareren.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -234,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Sluiten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" is in bewerkmodus.
|
||||
Toch sluiten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Wijzigingen opslaan?</translation>
|
||||
@@ -270,6 +319,60 @@ Opslaan?</translation>
|
||||
<source>locked</source>
|
||||
<translation>vergrendeld</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>De database die u probeert te openen is vergrendeld door een andere instantie van KeePassX.
|
||||
Wilt u toch doorgaan met openen? U kunt de database ook alleen-lezen openen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Database vergrendelen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Kan de database niet vergrendelen omdat u deze momenteel aan het bewerken bent.
|
||||
Druk op annuleren om uw wijzigingen aan te passen of gooi de wijzigingen weg.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Deze database is nog niet opgeslagen.
|
||||
U kunt de database opslaan of het vergrendelen annuleren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Deze database is gewijzigd.
|
||||
Wilt u de database opslaan voordat u deze vergrendelt?
|
||||
Zo nee, dan gaan de wijzigingen verloren.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" is gewijzigd.
|
||||
Wijzigingen ongedaan maken en doorgaan met sluiten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Database exporteren naar CSV-bestand</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV-bestand</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Schrijven van het CSV-bestand mislukt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>De database die u op probeert te slaan is vergrendeld door een andere instantie van KeePassX.
|
||||
Wilt u toch doorgaan met opslaan?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -313,6 +416,14 @@ Opslaan?</translation>
|
||||
<source>Current group</source>
|
||||
<translation>Huidige groep</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Niet mogelijk om hoofdsleutel te berekenen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -425,6 +536,10 @@ Opslaan?</translation>
|
||||
<source>Save</source>
|
||||
<translation>Opslaan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Open</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -576,6 +691,14 @@ Opslaan?</translation>
|
||||
<source>Auto-type</source>
|
||||
<translation>Auto-typen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Gebruik standaard auto-typevolgorde van bovenliggende groep</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Stel standaard auto-typevolgorde in</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
@@ -724,6 +847,10 @@ Opslaan?</translation>
|
||||
<source>Root</source>
|
||||
<translation>Alles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Niet mogelijk om hoofdsleutel te berekenen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -739,6 +866,20 @@ Opslaan?</translation>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Verkeerde sleutel of corrupte database.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<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 > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Het gekozen bestand is een oude KeePass 1 database (.kdb).
|
||||
|
||||
U kunt het importeren door te klikken op Database > 'KeePass 1 database importeren'.
|
||||
Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen met KeePassX 0.4.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +918,6 @@ Opslaan?</translation>
|
||||
<source>Groups</source>
|
||||
<translation>Groepen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Extra's</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Beeld</translation>
|
||||
@@ -857,18 +994,10 @@ Opslaan?</translation>
|
||||
<source>Find</source>
|
||||
<translation>Vind</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Gebruikersnaam</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Kopieer gebruikersnaam naar klembord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Wachtwoord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Kopieer wachtwoord naar klembord</translation>
|
||||
@@ -913,6 +1042,46 @@ Opslaan?</translation>
|
||||
<source>Toggle window</source>
|
||||
<translation>Wissel venster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Hulpmiddelen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Gebruikersnaam kopieren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Wachtwoord kopiëren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Naar CSV-bestand exporteren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Database repareren</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 Database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Alle bestanden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Gerepareerde database opslaan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Opslaan van de database is mislukt.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1093,10 +1262,6 @@ Opslaan?</translation>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Open vorige databases bij starten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation>Markeer database als gewijzigd bij wijzigen van de status</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Automatisch opslaan bij afsluiten</translation>
|
||||
@@ -1107,7 +1272,7 @@ Opslaan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize when copying to clipboard</source>
|
||||
<translation>Minimaliseer bij kopieeren naar klembord</translation>
|
||||
<translation>Minimaliseer bij kopiëren naar klembord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
@@ -1133,6 +1298,10 @@ Opslaan?</translation>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Bij minimaliseren enkel icoon in systray tonen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Onthoud laatste sleutelbestanden</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
@@ -1163,14 +1332,6 @@ Opslaan?</translation>
|
||||
<source>Unlock database</source>
|
||||
<translation>Database ontgrendelen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Verkeerd wachtwoord</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1193,10 +1354,6 @@ Opslaan?</translation>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>pad naar een configuratiebestand</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>wachtwoord van de database (GEVAARLIJK!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>sleutelbestand van de database</translation>
|
||||
|
||||
1362
share/translations/keepassx_pl.ts
Normal file
1362
share/translations/keepassx_pl.ts
Normal file
File diff suppressed because it is too large
Load Diff
1362
share/translations/keepassx_pt_BR.ts
Normal file
1362
share/translations/keepassx_pt_BR.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX é distribuído sob os termos GNU de licença pública geral (GPL) versão 2 ou (á sua escolha) versão 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -163,6 +171,42 @@
|
||||
<translation>Seleccionar o ficheiro chave</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -244,12 +288,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Fechar ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" em modo de edição.
|
||||
Fechar na mesma ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Guardar alterações ?</translation>
|
||||
@@ -310,6 +348,29 @@ Otherwise your changes are lost.</source>
|
||||
Pretende guardar a base de dados antes de a trancar ?
|
||||
Caso contrário as alterações serão perdidas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>%1 está em modo de edição.
|
||||
Fechar e Ignorar alterações ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Exportar base de dados para ficheiro CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>Ficheiro CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Falha na escrita do ficheiro CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -806,6 +867,13 @@ Caso contrário as alterações serão perdidas.</translation>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Impossível calcular chave mestra:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -920,18 +988,10 @@ Caso contrário as alterações serão perdidas.</translation>
|
||||
<source>Find</source>
|
||||
<translation>Encontrar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Nome de utilizador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Copiar nome de utilizador para inserção</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Senha</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Copiar senha para inserção</translation>
|
||||
@@ -980,6 +1040,42 @@ Caso contrário as alterações serão perdidas.</translation>
|
||||
<source>Tools</source>
|
||||
<translation>Ferramentas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Copiar nome de utilizador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Copiar senha</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Exportar para ficheiro CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1252,10 +1348,6 @@ Caso contrário as alterações serão perdidas.</translation>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>caminho para um ficheiro de configuração personalizado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>senha da base de dados (PERIGOSO !)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>ficheiro chave da base de dados</translation>
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX распространяется на условиях Стандартной общественной лицензии GNU (GPL) версии 2 или (на ваше усмотрение) версии 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Ревизия</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>С помощью:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -44,7 +52,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Select entry to Auto-Type:</source>
|
||||
<translation>Выберете запись для автоввода:</translation>
|
||||
<translation>Выберите запись для автоввода:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -103,12 +111,22 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you really want to use an empty string as password?</source>
|
||||
<translation>Вы действительно хотите использовать пустую строку как пароль?</translation>
|
||||
<translation>Вы действительно хотите использовать в качестве пароля пустую строку?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Пароли не совпадают.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Не удалось установить файл-ключ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Не удалось установить %1 как файл-ключ:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
@@ -150,7 +168,44 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file</source>
|
||||
<translation>Выберете файл-ключ</translation>
|
||||
<translation>Выберите файл-ключ</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Восстановление хранилища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Не могу открыть файл-ключ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Невозможно открыть хранилище.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Успешно</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>Хранилище было восстановлено.
|
||||
Теперь Вы можете сохранить его.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Невозможно восстановить хранилище.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -169,7 +224,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
<translation>Имя пользователя по-умолчанию:</translation>
|
||||
<translation>Имя пользователя по умолчанию:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use recycle bin:</source>
|
||||
@@ -234,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Закрыть?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>«%1» в режиме редактирования.
|
||||
Всё равно закрыть?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Сохранить изменения?</translation>
|
||||
@@ -268,14 +317,67 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>locked</source>
|
||||
<translation>заблокированно</translation>
|
||||
<translation>заблокировано</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>Хранилище, которое Вы хотите открыть, заблокировано другой запущенной копией KeePassX. Всё равно открыть? В качестве альтернативы хранилище будет открыто в режиме для чтения.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Заблокировать хранилище</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Невозможно заблокировать базу данных, так как вы в настоящее время редактируете её.
|
||||
Пожалуйста нажмите Отмена, чтобы завершить свои изменения или отклонить их.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Эта база данных никогда не была сохранена.
|
||||
Вы можете сохранить базу данных или остановить её заблокированной.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Хранилище было изменено.
|
||||
Вы хотите сохранить его перед тем, как заблокировать?
|
||||
В противном случае все изменения будут потеряны.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" в режиме редактирования.
|
||||
Отменить изменения и всё равно закрыть?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Экспортировать хранилище в файл CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>Файл CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Не удалось записать CSV файл.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>Данное хранилище заблокировано другой запущенной копией KeePassX.
|
||||
Вы уверены, что хотите продолжить сохранение?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Сменить мастер-пароль</translation>
|
||||
<translation>Изменить мастер-пароль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entry?</source>
|
||||
@@ -313,6 +415,14 @@ Save changes?</source>
|
||||
<source>Current group</source>
|
||||
<translation>Текущая группа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Невозможно вычислить мастер-пароль</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -326,7 +436,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Icon</source>
|
||||
<translation>Иконка</translation>
|
||||
<translation>Значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
@@ -425,6 +535,10 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>Сохранить</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Открыть</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -500,7 +614,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gen.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Генеральный.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
@@ -527,7 +641,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Icon</source>
|
||||
<translation>Иконка</translation>
|
||||
<translation>Значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Properties</source>
|
||||
@@ -574,26 +688,34 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-type</source>
|
||||
<translation>автоввод</translation>
|
||||
<translation>Автоввод</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Используйте стандартный автоввод из последовательности родительской группы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Последовательность автоввода указать по умолчанию</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
<message>
|
||||
<source>Use default icon</source>
|
||||
<translation>Использовать стандартную иконку</translation>
|
||||
<translation>Использовать стандартный значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use custom icon</source>
|
||||
<translation>Использовать свою иконку</translation>
|
||||
<translation>Использовать свой значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add custom icon</source>
|
||||
<translation>Добавить свою иконку</translation>
|
||||
<translation>Добавить свой значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete custom icon</source>
|
||||
<translation>Удалить свою иконку</translation>
|
||||
<translation>Удалить свой значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Images</source>
|
||||
@@ -609,11 +731,11 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't delete icon!</source>
|
||||
<translation>Не могу удалить иконку!</translation>
|
||||
<translation>Не могу удалить значок!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Can't delete icon. Still used by %n item(s).</source>
|
||||
<translation><numerusform>Не могу удалить иконку, %n запись всё ещё использует её.</numerusform><numerusform>Не могу удалить иконку, %n записи всё ещё использует её.</numerusform><numerusform>Не могу удалить иконку, %n записей всё ещё использует её.</numerusform><numerusform>Не могу удалить иконку, %n записей всё ещё использует её.</numerusform></translation>
|
||||
<translation><numerusform>Не могу удалить иконку, %n запись всё ещё использует её.</numerusform><numerusform>Не могу удалить иконку, %n записи всё ещё использует её.</numerusform><numerusform>Не могу удалить иконку, %n записей всё ещё использует её.</numerusform><numerusform>Не могу удалить значок, %n записей всё ещё использует его.</numerusform></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -724,6 +846,10 @@ Save changes?</source>
|
||||
<source>Root</source>
|
||||
<translation>Корень</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Невозможно вычислить мастер-пароль</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -739,6 +865,20 @@ Save changes?</source>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Неверный ключ или файл хранилища повреждён.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Невозможно вычислить мастер-пароль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Выбранный файл от старой KeePass 1 базы данных (.kdb).
|
||||
|
||||
Вы можете импортировать его, нажав на База Данных > 'Импорт KeePass 1 базы данных'.
|
||||
Это одностороннее перемещение. Вы не сможете открыть импортированный базу данных на старой версии KeePassX 0,4.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +917,6 @@ Save changes?</source>
|
||||
<source>Groups</source>
|
||||
<translation>Группы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Дополнительно</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Вид</translation>
|
||||
@@ -857,18 +993,10 @@ Save changes?</source>
|
||||
<source>Find</source>
|
||||
<translation>Найти</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Имя пользователя</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Скопировать имя пользователя в буфер обмена</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Пароль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Скопировать пароль в буфер обмена</translation>
|
||||
@@ -913,6 +1041,46 @@ Save changes?</source>
|
||||
<source>Toggle window</source>
|
||||
<translation>Переключить окно</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Инструменты</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Скопировать имя пользователя</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Скопировать пароль</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Экспортировать в файл CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Восстановление хранилища</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Все файлы</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Сохранить восстановленное хранилище</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -950,7 +1118,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Ensure that the password contains characters from every group</source>
|
||||
<translation>Пожалуйста, пусть пароль будет содержать символы всех видов</translation>
|
||||
<translation>Убедитесь, что пароль содержит символы всех видов</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Accept</source>
|
||||
@@ -1023,19 +1191,19 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error writing to underlying device: </source>
|
||||
<translation>Ошибка записи на нижлежащее устройство:</translation>
|
||||
<translation>Ошибка записи на низлежащее устройство:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error opening underlying device: </source>
|
||||
<translation>Ошибка открытия нижлежащего устройства:</translation>
|
||||
<translation>Ошибка открытия низлежащего устройства:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error reading data from underlying device: </source>
|
||||
<translation>Ошибка чтения с нижлежащего устройства:</translation>
|
||||
<translation>Ошибка чтения с низлежащего устройства:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Internal zlib error when decompressing: </source>
|
||||
<translation>Внутренняя ошибка zlib при расжатии:</translation>
|
||||
<translation>Внутренняя ошибка zlib при распаковке:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1093,10 +1261,6 @@ Save changes?</source>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Открывать предыдущее хранилище при запуске</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Автоматически сохранять при выходе</translation>
|
||||
@@ -1133,12 +1297,16 @@ Save changes?</source>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>При сворачивании прятать окно в область системных уведомлений</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Запоминать последние файл-ключи</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
<message>
|
||||
<source>Clear clipboard after</source>
|
||||
<translation>Потом почтистить буфер обмена</translation>
|
||||
<translation>Очищать буфер обмена через</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
@@ -1150,7 +1318,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
<translation>Показывать пароль в открытую по-умолчанию</translation>
|
||||
<translation>По умолчанию показывать пароль в открытую</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Always ask before performing auto-type</source>
|
||||
@@ -1163,14 +1331,6 @@ Save changes?</source>
|
||||
<source>Unlock database</source>
|
||||
<translation>Разблокировать хранилище</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Ошибка</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Неверный ключ.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1193,10 +1353,6 @@ Save changes?</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>путь к своему файлу настроек</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>пароль от хранилища (ОПАСНО!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>файл-ключ хранилища</translation>
|
||||
|
||||
1356
share/translations/keepassx_sl_SI.ts
Normal file
1356
share/translations/keepassx_sl_SI.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>Keepassx distribueras enligt villkoren i GNU General Public License (GPL) version 2 eller (om du vill) version 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revision</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>Använder:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -109,6 +117,16 @@
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>Olika lösenord angivna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>Kunde inte sätta nyckel-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>Kunde inte sätta %1 som nyckel-fil:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>Välj nyckel-fil</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Laga databasen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>Kan inte öppna nyckelfilen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>Databas öppnades fint. Inget att göra.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Misslyckades att öppna databasen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>Succé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>Databasens reparation har varit lyckad.
|
||||
Du kan nu spara den.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>Misslyckades med att laga databasen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -234,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>Stäng?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" är i redigerar-läge.
|
||||
Stäng ändå?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Spara ändringar?</translation>
|
||||
@@ -270,6 +319,60 @@ Spara ändringarna?</translation>
|
||||
<source>locked</source>
|
||||
<translation>låst</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>Databasen som du försöker öppna är låst av en annan instans av KeePassX.
|
||||
Vill du öppna den ändå? Databasen kommer då att öppnas skrivskyddad.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>Lås databasen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>Kan inte låsa databasen eftersom du håller på att redigera den.
|
||||
Tryck avbryt för att ansluta dina ändringar alternativt kasta dem.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>Databasen has aldrig sparats.
|
||||
Spara databasen eller sluta lås den.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>Databasen har ändrats.
|
||||
Vill du spara databasen innen du låser den?
|
||||
I annat fall försvinner ändringarna.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" är i redigeringsläge.
|
||||
Kasta ändringarna och stäng endå?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Exportera databasen till en CSV-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Kunde inte skriva till CSV-filen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>Databasen du försöker spara som är låst av en annan instans av KeePassX.
|
||||
Vill du spara endå?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -313,6 +416,14 @@ Spara ändringarna?</translation>
|
||||
<source>Current group</source>
|
||||
<translation>Nuvarande grupp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Kunde inte räkna nu master-nyckeln</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -425,6 +536,10 @@ Spara ändringarna?</translation>
|
||||
<source>Save</source>
|
||||
<translation>Spara</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Öppna</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -576,6 +691,14 @@ Spara ändringarna?</translation>
|
||||
<source>Auto-type</source>
|
||||
<translation>Auto-skriv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>Använd standard auto-skriv sekvensen från föräldergruppen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>Ange standard auto-skriv sekvens</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
@@ -724,6 +847,10 @@ Spara ändringarna?</translation>
|
||||
<source>Root</source>
|
||||
<translation>Root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Kunde inte räkna nu master-nyckeln</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -739,6 +866,20 @@ Spara ändringarna?</translation>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Fel lösenord eller korrupt databas-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</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 > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>Den valda filen är en gammal KeePass 1 databas (.kdb)
|
||||
|
||||
Du kan importera den genom att klicka på Databas > 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>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -759,7 +900,7 @@ Spara ändringarna?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Recent databases</source>
|
||||
<translation>Senast använda databser</translation>
|
||||
<translation>Senast använda databaser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Help</source>
|
||||
@@ -777,10 +918,6 @@ Spara ändringarna?</translation>
|
||||
<source>Groups</source>
|
||||
<translation>Grupper</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Extra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Vy</translation>
|
||||
@@ -857,18 +994,10 @@ Spara ändringarna?</translation>
|
||||
<source>Find</source>
|
||||
<translation>Sök</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Användarnamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Kopiera användarnamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Lösenord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Kopiera lösenord</translation>
|
||||
@@ -913,6 +1042,46 @@ Spara ändringarna?</translation>
|
||||
<source>Toggle window</source>
|
||||
<translation>Visa/dölj fönster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>Verktyg</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Kopiera användarnamn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Kopiera lösenord</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Exportera till CSV-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>Laga databasen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 databas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>Alla filer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>Spara lagad databas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>Misslyckades med att skriva till databasen.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1091,15 +1260,11 @@ Spara ändringarna?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>Öppna senaste databasen är programmet startar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation>Markera som ändrad när utökat läge ändras</translation>
|
||||
<translation>Öppna senaste databasen när programmet startar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Spara automatiskt är applikationen anslutas</translation>
|
||||
<translation>Spara automatiskt när applikationen anslutas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save after every change</source>
|
||||
@@ -1133,6 +1298,10 @@ Spara ändringarna?</translation>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>Vid minimering, minimera fönstret till systemfältet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>Komihåg senaste nyckel-filen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
@@ -1163,14 +1332,6 @@ Spara ändringarna?</translation>
|
||||
<source>Unlock database</source>
|
||||
<translation>Lås upp databas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>Fel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>Fel lösenord</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1193,10 +1354,6 @@ Spara ändringarna?</translation>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>Sökväg till egen konfigurations-fil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>lösenord för databasen (FARLIGT!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>nyckel-fil för databas</translation>
|
||||
|
||||
1360
share/translations/keepassx_uk.ts
Normal file
1360
share/translations/keepassx_uk.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX 使用的是第 2 版 GNU 通用公共授权协议(GPL)(你可以根据需要选用第 3 版).</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>修改</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>使用:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -163,6 +171,43 @@
|
||||
<translation>选择秘钥文件</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>修复数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>无法打开密钥文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>数据库打开正常。没什么可做的。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>无法打开数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>数据库已经修复成功
|
||||
现在可以保存数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>无法修复数据库</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -244,12 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>关闭?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>正在编辑 "%1" 。
|
||||
仍要关闭吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>保存修改?</translation>
|
||||
@@ -310,6 +349,30 @@ Otherwise your changes are lost.</source>
|
||||
你想在锁住它以前保存修改吗?
|
||||
否则修改将会丢失。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>正在编辑 "%1" 。
|
||||
仍然要放弃修改并且关闭吗?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>把数据库导出为CSV格式文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV格式文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>写入CSV格式文件失败</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>你要保存的数据库已被另一个KeePassX锁住。
|
||||
你仍然要保存吗?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -751,7 +814,7 @@ Otherwise your changes are lost.</source>
|
||||
<name>KeePass1OpenWidget</name>
|
||||
<message>
|
||||
<source>Import KeePass1 database</source>
|
||||
<translation>导入KeePass 1 数据库</translation>
|
||||
<translation>导入 KeePass 1 数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
@@ -807,6 +870,15 @@ Otherwise your changes are lost.</source>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>无法计算主密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>当前选择的文件是旧版本 KeePass 1 数据库(.kdb)。
|
||||
你可以通过点击 数据库 > '导入KeePass 1 数据库’ 来导入。
|
||||
这是不可逆的修改。导入后的数据库将无法由旧版的KeePassX 0.4版本打开。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -921,18 +993,10 @@ Otherwise your changes are lost.</source>
|
||||
<source>Find</source>
|
||||
<translation>查找</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>用户名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>将用户名复制到剪贴板</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>将密码复制到剪贴板</translation>
|
||||
@@ -981,6 +1045,42 @@ Otherwise your changes are lost.</source>
|
||||
<source>Tools</source>
|
||||
<translation>工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>复制用户名</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>复制密码</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>导出为CSV格式文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>修复数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>所有文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>保存修复后的数据库</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>错误</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>数据库写入失败</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1253,10 +1353,6 @@ Otherwise your changes are lost.</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>自定义配置文件路径</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>数据库密码(危险!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>数据库秘钥文件</translation>
|
||||
|
||||
@@ -9,6 +9,14 @@
|
||||
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
|
||||
<translation>KeePassX 是使用第 2 版 GNU 通用公共授權條款所發佈的 (或者,可根據你的選擇選用第 3 版)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>修改紀錄</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Using:</source>
|
||||
<translation>使用:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -109,6 +117,16 @@
|
||||
<source>Different passwords supplied.</source>
|
||||
<translation>提供了不同的密碼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation>無法設定金鑰檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation>無法設定 %1 成為金鑰檔案:
|
||||
%2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseOpenWidget</name>
|
||||
@@ -153,6 +171,43 @@
|
||||
<translation>選擇金鑰檔案</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseRepairWidget</name>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>修復資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>錯誤</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't open key file</source>
|
||||
<translation>無法打開金鑰檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Database opened fine. Nothing to do.</source>
|
||||
<translation>資料庫正常打開。沒什麼事。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>無法打開這個資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Success</source>
|
||||
<translation>成功</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database has been successfully repaired
|
||||
You can now save it.</source>
|
||||
<translation>這個資料庫已經成功修復
|
||||
現在你可以儲存它。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to repair the database.</source>
|
||||
<translation>無法開啟這個資料庫</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseSettingsWidget</name>
|
||||
<message>
|
||||
@@ -234,11 +289,6 @@
|
||||
<source>Close?</source>
|
||||
<translation>關閉?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" 正在編輯中。仍然要關閉嗎?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>儲存修改?</translation>
|
||||
@@ -268,6 +318,60 @@ Save changes?</source>
|
||||
<source>locked</source>
|
||||
<translation>已鎖住</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to open is locked by another instance of KeePassX.
|
||||
Do you want to open it anyway? Alternatively the database is opened read-only.</source>
|
||||
<translation>你嘗試要打開的資料庫已經被另一個正在執行的 KeePassX 鎖定
|
||||
你要打開它嗎?或者,打開唯讀的資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation>鎖定資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't lock the database as you are currently editing it.
|
||||
Please press cancel to finish your changes or discard them.</source>
|
||||
<translation>無法鎖定資料庫,因為目前你正在編輯它
|
||||
請按下取消完成修改或放棄</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation>這個資料庫尚未被儲存
|
||||
你能儲存資料庫或不再鎖定它</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has been modified.
|
||||
Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation>這個資料庫已經被修改
|
||||
想要在鎖定之前,儲存資料庫嗎?
|
||||
否則,這次修改將會遺失</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" 正在編輯模式。
|
||||
是否要放棄編輯及關閉?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>將資料庫輸出成 CSV 檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>CSV 檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>寫入 CSV 檔案失敗</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The database you are trying to save as is locked by another instance of KeePassX.
|
||||
Do you want to save it anyway?</source>
|
||||
<translation>你嘗試要打開的資料庫已經被另一個正在執行的 KeePassX 鎖定
|
||||
還要儲存嗎?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -311,6 +415,14 @@ Save changes?</source>
|
||||
<source>Current group</source>
|
||||
<translation>目前的群組</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>錯誤</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>無法計算主金鑰</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -423,6 +535,10 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>儲存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>打開</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -574,6 +690,14 @@ Save changes?</source>
|
||||
<source>Auto-type</source>
|
||||
<translation>自動輸入</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation>使用預設的父群組自動輸入序列</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation>設定預設自動輸入序列</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditWidgetIcons</name>
|
||||
@@ -722,6 +846,10 @@ Save changes?</source>
|
||||
<source>Root</source>
|
||||
<translation>根</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>無法計算主金鑰</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>KeePass2Reader</name>
|
||||
@@ -737,6 +865,21 @@ Save changes?</source>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>無法的金鑰或資料庫損壞</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>無法計算主金鑰</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The selected file is an old KeePass 1 database (.kdb).
|
||||
|
||||
You can import it by clicking on Database > 'Import KeePass 1 database'.
|
||||
This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version.</source>
|
||||
<translation>被選擇的檔案是舊的 KeePass 1 資料庫 (.kdb) 。
|
||||
|
||||
|
||||
你可以點選 資料庫 > 「匯入 KeePass 1 資料庫」。
|
||||
這是單向遷移。你無法用舊的 KeePassX 0.4 的版本打開被匯入的資料庫。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -775,10 +918,6 @@ Save changes?</source>
|
||||
<source>Groups</source>
|
||||
<translation>群組</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>其它</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>顯示</translation>
|
||||
@@ -855,18 +994,10 @@ Save changes?</source>
|
||||
<source>Find</source>
|
||||
<translation>尋找</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>使用者名稱</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>將使用者名稱複製到剪貼簿</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>密碼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>將密碼複製到剪貼簿</translation>
|
||||
@@ -911,6 +1042,46 @@ Save changes?</source>
|
||||
<source>Toggle window</source>
|
||||
<translation>切換視窗</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation>工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>複製使用者名稱</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>複製密碼</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>輸出成 CSV 檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repair database</source>
|
||||
<translation>修復資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>KeePass 2 資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
<translation>所有的檔案</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save repaired database</source>
|
||||
<translation>儲存已修復的資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>錯誤</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the database failed.</source>
|
||||
<translation>寫入資料庫失敗</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1091,10 +1262,6 @@ Save changes?</source>
|
||||
<source>Open previous databases on startup</source>
|
||||
<translation>在啟動時開啟最近的資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mark as modified on expanded state changes</source>
|
||||
<translation>擴展狀態發生變化時,標記為已修改</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>離開時,自動儲存</translation>
|
||||
@@ -1131,6 +1298,10 @@ Save changes?</source>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation>將視窗最小化至工作列 </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation>記住最近的金鑰檔案</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsWidgetSecurity</name>
|
||||
@@ -1161,14 +1332,6 @@ Save changes?</source>
|
||||
<source>Unlock database</source>
|
||||
<translation>解鎖資料庫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation>錯誤</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key.</source>
|
||||
<translation>錯誤的金鑰</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1191,10 +1354,6 @@ Save changes?</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>自定設定檔的路徑</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>資料庫的密碼(危險!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>資料庫的金鑰</translation>
|
||||
|
||||
@@ -78,6 +78,7 @@ set(keepassx_SOURCES
|
||||
format/KeePass2.h
|
||||
format/KeePass2RandomStream.cpp
|
||||
format/KeePass2Reader.cpp
|
||||
format/KeePass2Repair.cpp
|
||||
format/KeePass2Writer.cpp
|
||||
format/KeePass2XmlReader.cpp
|
||||
format/KeePass2XmlWriter.cpp
|
||||
@@ -86,6 +87,7 @@ set(keepassx_SOURCES
|
||||
gui/ChangeMasterKeyWidget.cpp
|
||||
gui/Clipboard.cpp
|
||||
gui/DatabaseOpenWidget.cpp
|
||||
gui/DatabaseRepairWidget.cpp
|
||||
gui/DatabaseSettingsWidget.cpp
|
||||
gui/DatabaseTabWidget.cpp
|
||||
gui/DatabaseWidget.cpp
|
||||
@@ -180,6 +182,7 @@ set(keepassx_MOC
|
||||
gui/ChangeMasterKeyWidget.h
|
||||
gui/Clipboard.h
|
||||
gui/DatabaseOpenWidget.h
|
||||
gui/DatabaseRepairWidget.h
|
||||
gui/DatabaseSettingsWidget.h
|
||||
gui/DatabaseTabWidget.h
|
||||
gui/DatabaseWidget.h
|
||||
|
||||
@@ -79,9 +79,16 @@ void AutoType::loadPlugin(const QString& pluginPath)
|
||||
QObject* pluginInstance = m_pluginLoader->instance();
|
||||
if (pluginInstance) {
|
||||
m_plugin = qobject_cast<AutoTypePlatformInterface*>(pluginInstance);
|
||||
m_executor = Q_NULLPTR;
|
||||
|
||||
if (m_plugin) {
|
||||
m_executor = m_plugin->createExecutor();
|
||||
connect(pluginInstance, SIGNAL(globalShortcutTriggered()), SIGNAL(globalShortcutTriggered()));
|
||||
if (m_plugin->isAvailable()) {
|
||||
m_executor = m_plugin->createExecutor();
|
||||
connect(pluginInstance, SIGNAL(globalShortcutTriggered()), SIGNAL(globalShortcutTriggered()));
|
||||
}
|
||||
else {
|
||||
unloadPlugin();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,6 +225,8 @@ void AutoType::performAutoTypeFromGlobal(Entry* entry, const QString& sequence)
|
||||
{
|
||||
Q_ASSERT(m_inAutoType);
|
||||
|
||||
m_plugin->raiseWindow(m_windowFromGlobal);
|
||||
|
||||
m_inAutoType = false;
|
||||
performAutoType(entry, Q_NULLPTR, sequence, m_windowFromGlobal);
|
||||
}
|
||||
@@ -566,7 +575,7 @@ bool AutoType::windowMatches(const QString& windowTitle, const QString& windowPa
|
||||
{
|
||||
if (windowPattern.startsWith("//") && windowPattern.endsWith("//") && windowPattern.size() >= 4) {
|
||||
QRegExp regExp(windowPattern.mid(2, windowPattern.size() - 4), Qt::CaseInsensitive, QRegExp::RegExp2);
|
||||
return regExp.exactMatch(windowTitle);
|
||||
return (regExp.indexIn(windowTitle) != -1);
|
||||
}
|
||||
else {
|
||||
return WildcardMatcher(windowTitle).match(windowPattern);
|
||||
|
||||
@@ -26,6 +26,7 @@ class AutoTypePlatformInterface
|
||||
{
|
||||
public:
|
||||
virtual ~AutoTypePlatformInterface() {}
|
||||
virtual bool isAvailable() = 0;
|
||||
virtual QStringList windowTitles() = 0;
|
||||
virtual WId activeWindow() = 0;
|
||||
virtual QString activeWindowTitle() = 0;
|
||||
@@ -33,6 +34,7 @@ public:
|
||||
virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0;
|
||||
virtual int platformEventFilter(void* event) = 0;
|
||||
virtual int initialTimeout() = 0;
|
||||
virtual bool raiseWindow(WId window) = 0;
|
||||
virtual void unload() {}
|
||||
|
||||
virtual AutoTypeExecutor* createExecutor() = 0;
|
||||
|
||||
@@ -33,6 +33,8 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent)
|
||||
, m_entryActivatedEmitted(false)
|
||||
{
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
// Places the window on the active (virtual) desktop instead of where the main window is.
|
||||
setAttribute(Qt::WA_X11BypassTransientForHint);
|
||||
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
||||
setWindowTitle(tr("Auto-Type - KeePassX"));
|
||||
setWindowIcon(filePath()->applicationIcon());
|
||||
@@ -41,7 +43,7 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent)
|
||||
resize(size);
|
||||
|
||||
// move dialog to the center of the screen
|
||||
QPoint screenCenter = QApplication::desktop()->screenGeometry(QCursor::pos()).center();
|
||||
QPoint screenCenter = QApplication::desktop()->availableGeometry(QCursor::pos()).center();
|
||||
move(screenCenter.x() - (size.width() / 2), screenCenter.y() - (size.height() / 2));
|
||||
|
||||
QVBoxLayout* layout = new QVBoxLayout(this);
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
if(Q_WS_X11)
|
||||
find_package(X11)
|
||||
if(PRINT_SUMMARY)
|
||||
add_feature_info(libXtest X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type")
|
||||
add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type")
|
||||
add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type")
|
||||
endif()
|
||||
|
||||
if(X11_FOUND AND X11_XTest_FOUND)
|
||||
if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND)
|
||||
add_subdirectory(x11)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -17,6 +17,11 @@
|
||||
|
||||
#include "AutoTypeTest.h"
|
||||
|
||||
bool AutoTypePlatformTest::isAvailable()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
QString AutoTypePlatformTest::keyToString(Qt::Key key)
|
||||
{
|
||||
return QString("[Key0x%1]").arg(key, 0, 16);
|
||||
@@ -103,6 +108,13 @@ int AutoTypePlatformTest::initialTimeout()
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool AutoTypePlatformTest::raiseWindow(WId window)
|
||||
{
|
||||
Q_UNUSED(window);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
AutoTypeExecturorTest::AutoTypeExecturorTest(AutoTypePlatformTest* platform)
|
||||
: m_platform(platform)
|
||||
{
|
||||
|
||||
@@ -33,22 +33,24 @@ class AutoTypePlatformTest : public QObject,
|
||||
Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface)
|
||||
|
||||
public:
|
||||
QString keyToString(Qt::Key key);
|
||||
QString keyToString(Qt::Key key) Q_DECL_OVERRIDE;
|
||||
|
||||
QStringList windowTitles();
|
||||
WId activeWindow();
|
||||
QString activeWindowTitle();
|
||||
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||
void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||
int platformEventFilter(void* event);
|
||||
int initialTimeout();
|
||||
AutoTypeExecutor* createExecutor();
|
||||
bool isAvailable() Q_DECL_OVERRIDE;
|
||||
QStringList windowTitles() Q_DECL_OVERRIDE;
|
||||
WId activeWindow() Q_DECL_OVERRIDE;
|
||||
QString activeWindowTitle() Q_DECL_OVERRIDE;
|
||||
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
|
||||
void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
|
||||
int platformEventFilter(void* event) Q_DECL_OVERRIDE;
|
||||
int initialTimeout() Q_DECL_OVERRIDE;
|
||||
bool raiseWindow(WId window) Q_DECL_OVERRIDE;
|
||||
AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE;
|
||||
|
||||
void setActiveWindowTitle(const QString& title);
|
||||
void setActiveWindowTitle(const QString& title) Q_DECL_OVERRIDE;
|
||||
|
||||
QString actionChars();
|
||||
int actionCount();
|
||||
void clearActions();
|
||||
QString actionChars() Q_DECL_OVERRIDE;
|
||||
int actionCount() Q_DECL_OVERRIDE;
|
||||
void clearActions() Q_DECL_OVERRIDE;
|
||||
|
||||
void addActionChar(AutoTypeChar* action);
|
||||
void addActionKey(AutoTypeKey* action);
|
||||
@@ -67,8 +69,8 @@ class AutoTypeExecturorTest : public AutoTypeExecutor
|
||||
public:
|
||||
explicit AutoTypeExecturorTest(AutoTypePlatformTest* platform);
|
||||
|
||||
void execChar(AutoTypeChar* action);
|
||||
void execKey(AutoTypeKey* action);
|
||||
void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE;
|
||||
void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
AutoTypePlatformTest* const m_platform;
|
||||
|
||||
@@ -30,11 +30,12 @@ AutoTypePlatformX11::AutoTypePlatformX11()
|
||||
m_dpy = QX11Info::display();
|
||||
m_rootWindow = QX11Info::appRootWindow();
|
||||
|
||||
m_atomWmState = XInternAtom(m_dpy, "WM_STATE", true);
|
||||
m_atomWmName = XInternAtom(m_dpy, "WM_NAME", true);
|
||||
m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", true);
|
||||
m_atomString = XInternAtom(m_dpy, "STRING", true);
|
||||
m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", true);
|
||||
m_atomWmState = XInternAtom(m_dpy, "WM_STATE", True);
|
||||
m_atomWmName = XInternAtom(m_dpy, "WM_NAME", True);
|
||||
m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", True);
|
||||
m_atomString = XInternAtom(m_dpy, "STRING", True);
|
||||
m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", True);
|
||||
m_atomNetActiveWindow = XInternAtom(m_dpy, "_NET_ACTIVE_WINDOW", True);
|
||||
|
||||
m_classBlacklist << "desktop_window" << "gnome-panel"; // Gnome
|
||||
m_classBlacklist << "kdesktop" << "kicker"; // KDE 3
|
||||
@@ -56,6 +57,31 @@ AutoTypePlatformX11::AutoTypePlatformX11()
|
||||
updateKeymap();
|
||||
}
|
||||
|
||||
bool AutoTypePlatformX11::isAvailable()
|
||||
{
|
||||
int ignore;
|
||||
|
||||
if (!XQueryExtension(m_dpy, "XInputExtension", &ignore, &ignore, &ignore)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!XQueryExtension(m_dpy, "XTEST", &ignore, &ignore, &ignore)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!m_xkb) {
|
||||
XkbDescPtr kbd = getKeyboard();
|
||||
|
||||
if (!kbd) {
|
||||
return false;
|
||||
}
|
||||
|
||||
XkbFreeKeyboard(kbd, XkbAllComponentsMask, True);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AutoTypePlatformX11::unload()
|
||||
{
|
||||
// Restore the KeyboardMapping to its original state.
|
||||
@@ -116,12 +142,12 @@ bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifi
|
||||
uint nativeModifiers = qtToNativeModifiers(modifiers);
|
||||
|
||||
startCatchXErrors();
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, true, GrabModeAsync, GrabModeAsync);
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, true, GrabModeAsync,
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, True, GrabModeAsync, GrabModeAsync);
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync,
|
||||
GrabModeAsync);
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, true, GrabModeAsync,
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync,
|
||||
GrabModeAsync);
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, true,
|
||||
XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True,
|
||||
GrabModeAsync, GrabModeAsync);
|
||||
stopCatchXErrors();
|
||||
|
||||
@@ -160,7 +186,7 @@ uint AutoTypePlatformX11::qtToNativeModifiers(Qt::KeyboardModifiers modifiers)
|
||||
|
||||
void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
||||
{
|
||||
KeyCode keycode = XKeysymToKeycode(m_dpy, keyToKeySym(key));
|
||||
KeyCode keycode = XKeysymToKeycode(m_dpy, charToKeySym(key));
|
||||
uint nativeModifiers = qtToNativeModifiers(modifiers);
|
||||
|
||||
XUngrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow);
|
||||
@@ -182,7 +208,7 @@ int AutoTypePlatformX11::platformEventFilter(void* event)
|
||||
&& m_currentGlobalKey
|
||||
&& xevent->xkey.keycode == m_currentGlobalKeycode
|
||||
&& (xevent->xkey.state & m_modifierMask) == m_currentGlobalNativeModifiers
|
||||
&& !QApplication::focusWidget()
|
||||
&& (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized())
|
||||
&& m_loaded) {
|
||||
if (xevent->type == KeyPress) {
|
||||
Q_EMIT globalShortcutTriggered();
|
||||
@@ -214,7 +240,7 @@ QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist)
|
||||
|
||||
// the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME
|
||||
|
||||
int retVal = XGetWindowProperty(m_dpy, window, m_atomNetWmName, 0, 1000, false, m_atomUtf8String,
|
||||
int retVal = XGetWindowProperty(m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String,
|
||||
&type, &format, &nitems, &after, &data);
|
||||
|
||||
if ((retVal == 0) && data) {
|
||||
@@ -337,13 +363,21 @@ bool AutoTypePlatformX11::isTopLevelWindow(Window window)
|
||||
unsigned long nitems;
|
||||
unsigned long after;
|
||||
unsigned char* data = Q_NULLPTR;
|
||||
int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 0, false, AnyPropertyType, &type, &format,
|
||||
int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format,
|
||||
&nitems, &after, &data);
|
||||
if (data) {
|
||||
|
||||
bool result = false;
|
||||
|
||||
if (retVal == 0 && data) {
|
||||
if (type == m_atomWmState && format == 32 && nitems > 0) {
|
||||
qint32 state = static_cast<qint32>(*data);
|
||||
result = (state != WithdrawnState);
|
||||
}
|
||||
|
||||
XFree(data);
|
||||
}
|
||||
|
||||
return (retVal == 0) && type;
|
||||
return result;
|
||||
}
|
||||
|
||||
KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch)
|
||||
@@ -436,21 +470,10 @@ void AutoTypePlatformX11::updateKeymap()
|
||||
int mod_index, mod_key;
|
||||
XModifierKeymap *modifiers;
|
||||
|
||||
if (m_xkb != NULL) XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
|
||||
|
||||
XDeviceInfo* devices;
|
||||
int num_devices;
|
||||
XID keyboard_id = XkbUseCoreKbd;
|
||||
devices = XListInputDevices(m_dpy, &num_devices);
|
||||
|
||||
for (int i = 0; i < num_devices; i++) {
|
||||
if (QString(devices[i].name) == "Virtual core XTEST keyboard") {
|
||||
keyboard_id = devices[i].id;
|
||||
break;
|
||||
}
|
||||
if (m_xkb) {
|
||||
XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
|
||||
}
|
||||
|
||||
m_xkb = XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id);
|
||||
m_xkb = getKeyboard();
|
||||
|
||||
XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode);
|
||||
if (m_keysymTable != NULL) XFree(m_keysymTable);
|
||||
@@ -519,7 +542,7 @@ void AutoTypePlatformX11::stopCatchXErrors()
|
||||
{
|
||||
Q_ASSERT(m_catchXErrors);
|
||||
|
||||
XSync(m_dpy, false);
|
||||
XSync(m_dpy, False);
|
||||
XSetErrorHandler(m_oldXErrorHandler);
|
||||
m_catchXErrors = false;
|
||||
}
|
||||
@@ -536,6 +559,27 @@ int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error)
|
||||
return 1;
|
||||
}
|
||||
|
||||
XkbDescPtr AutoTypePlatformX11::getKeyboard()
|
||||
{
|
||||
int num_devices;
|
||||
XID keyboard_id = XkbUseCoreKbd;
|
||||
XDeviceInfo* devices = XListInputDevices(m_dpy, &num_devices);
|
||||
if (!devices) {
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
|
||||
for (int i = 0; i < num_devices; i++) {
|
||||
if (QString(devices[i].name) == "Virtual core XTEST keyboard") {
|
||||
keyboard_id = devices[i].id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
XFreeDeviceList(devices);
|
||||
|
||||
return XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// The following code is taken from xvkbd 3.0 and has been slightly modified.
|
||||
// --------------------------------------------------------------------------
|
||||
@@ -568,11 +612,18 @@ int AutoTypePlatformX11::AddKeysym(KeySym keysym)
|
||||
*/
|
||||
void AutoTypePlatformX11::SendEvent(XKeyEvent* event, int event_type)
|
||||
{
|
||||
XSync(event->display, FALSE);
|
||||
XSync(event->display, False);
|
||||
int (*oldHandler) (Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler);
|
||||
|
||||
event->type = event_type;
|
||||
XTestFakeKeyEvent(event->display, event->keycode, event->type == KeyPress, 0);
|
||||
Bool press;
|
||||
if (event->type == KeyPress) {
|
||||
press = True;
|
||||
}
|
||||
else {
|
||||
press = False;
|
||||
}
|
||||
XTestFakeKeyEvent(event->display, event->keycode, press, 0);
|
||||
XFlush(event->display);
|
||||
|
||||
XSetErrorHandler(oldHandler);
|
||||
@@ -770,4 +821,38 @@ int AutoTypePlatformX11::initialTimeout()
|
||||
return 500;
|
||||
}
|
||||
|
||||
bool AutoTypePlatformX11::raiseWindow(WId window)
|
||||
{
|
||||
if (m_atomNetActiveWindow == None) {
|
||||
return false;
|
||||
}
|
||||
|
||||
XRaiseWindow(m_dpy, window);
|
||||
|
||||
XEvent event;
|
||||
event.xclient.type = ClientMessage;
|
||||
event.xclient.serial = 0;
|
||||
event.xclient.send_event = True;
|
||||
event.xclient.window = window;
|
||||
event.xclient.message_type = m_atomNetActiveWindow;
|
||||
event.xclient.format = 32;
|
||||
event.xclient.data.l[0] = 1; // FromApplication
|
||||
event.xclient.data.l[1] = QX11Info::appUserTime();
|
||||
QWidget* activeWindow = QApplication::activeWindow();
|
||||
if (activeWindow) {
|
||||
event.xclient.data.l[2] = activeWindow->internalWinId();
|
||||
}
|
||||
else {
|
||||
event.xclient.data.l[2] = 0;
|
||||
}
|
||||
event.xclient.data.l[3] = 0;
|
||||
event.xclient.data.l[4] = 0;
|
||||
XSendEvent(m_dpy, m_rootWindow, False,
|
||||
SubstructureRedirectMask | SubstructureNotifyMask,
|
||||
&event);
|
||||
XFlush(m_dpy);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Q_EXPORT_PLUGIN2(keepassx-autotype-x11, AutoTypePlatformX11)
|
||||
|
||||
@@ -42,15 +42,17 @@ class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface
|
||||
|
||||
public:
|
||||
AutoTypePlatformX11();
|
||||
bool isAvailable() Q_DECL_OVERRIDE;
|
||||
void unload() Q_DECL_OVERRIDE;
|
||||
QStringList windowTitles();
|
||||
WId activeWindow();
|
||||
QString activeWindowTitle();
|
||||
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||
void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers);
|
||||
int platformEventFilter(void* event);
|
||||
int initialTimeout();
|
||||
AutoTypeExecutor* createExecutor();
|
||||
QStringList windowTitles() Q_DECL_OVERRIDE;
|
||||
WId activeWindow() Q_DECL_OVERRIDE;
|
||||
QString activeWindowTitle() Q_DECL_OVERRIDE;
|
||||
bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
|
||||
void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
|
||||
int platformEventFilter(void* event) Q_DECL_OVERRIDE;
|
||||
int initialTimeout() Q_DECL_OVERRIDE;
|
||||
bool raiseWindow(WId window) Q_DECL_OVERRIDE;
|
||||
AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE;
|
||||
|
||||
KeySym charToKeySym(const QChar& ch);
|
||||
KeySym keyToKeySym(Qt::Key key);
|
||||
@@ -71,6 +73,7 @@ private:
|
||||
void stopCatchXErrors();
|
||||
static int x11ErrorHandler(Display* display, XErrorEvent* error);
|
||||
|
||||
XkbDescPtr getKeyboard();
|
||||
void updateKeymap();
|
||||
bool isRemapKeycodeValid();
|
||||
int AddKeysym(KeySym keysym);
|
||||
@@ -89,6 +92,7 @@ private:
|
||||
Atom m_atomNetWmName;
|
||||
Atom m_atomString;
|
||||
Atom m_atomUtf8String;
|
||||
Atom m_atomNetActiveWindow;
|
||||
QSet<QString> m_classBlacklist;
|
||||
Qt::Key m_currentGlobalKey;
|
||||
Qt::KeyboardModifiers m_currentGlobalModifiers;
|
||||
@@ -120,8 +124,8 @@ class AutoTypeExecturorX11 : public AutoTypeExecutor
|
||||
public:
|
||||
explicit AutoTypeExecturorX11(AutoTypePlatformX11* platform);
|
||||
|
||||
void execChar(AutoTypeChar* action);
|
||||
void execKey(AutoTypeKey* action);
|
||||
void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE;
|
||||
void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
AutoTypePlatformX11* const m_platform;
|
||||
|
||||
@@ -11,7 +11,7 @@ set(autotype_X11_MOC
|
||||
qt4_wrap_cpp(autotype_X11_SOURCES ${autotype_X11_MOC})
|
||||
|
||||
add_library(keepassx-autotype-x11 MODULE ${autotype_X11_SOURCES})
|
||||
target_link_libraries(keepassx-autotype-x11 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB} ${X11_XTest_LIB})
|
||||
target_link_libraries(keepassx-autotype-x11 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB})
|
||||
install(TARGETS keepassx-autotype-x11
|
||||
BUNDLE DESTINATION . COMPONENT Runtime
|
||||
LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime)
|
||||
|
||||
@@ -114,13 +114,25 @@ QPixmap Entry::iconPixmap() const
|
||||
else {
|
||||
Q_ASSERT(database());
|
||||
|
||||
QPixmap pixmap;
|
||||
if (database() && !QPixmapCache::find(m_pixmapCacheKey, &pixmap)) {
|
||||
pixmap = QPixmap::fromImage(database()->metadata()->customIcon(m_data.customIcon));
|
||||
m_pixmapCacheKey = QPixmapCache::insert(pixmap);
|
||||
if (database()) {
|
||||
return database()->metadata()->customIconPixmap(m_data.customIcon);
|
||||
}
|
||||
else {
|
||||
return QPixmap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pixmap;
|
||||
QPixmap Entry::iconScaledPixmap() const
|
||||
{
|
||||
if (m_data.customIcon.isNull()) {
|
||||
// built-in icons are 16x16 so don't need to be scaled
|
||||
return databaseIcons()->iconPixmap(m_data.iconNumber);
|
||||
}
|
||||
else {
|
||||
Q_ASSERT(database());
|
||||
|
||||
return database()->metadata()->customIconScaledPixmap(m_data.customIcon);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -248,8 +260,6 @@ void Entry::setIcon(int iconNumber)
|
||||
m_data.iconNumber = iconNumber;
|
||||
m_data.customIcon = Uuid();
|
||||
|
||||
m_pixmapCacheKey = QPixmapCache::Key();
|
||||
|
||||
Q_EMIT modified();
|
||||
emitDataChanged();
|
||||
}
|
||||
@@ -263,8 +273,6 @@ void Entry::setIcon(const Uuid& uuid)
|
||||
m_data.customIcon = uuid;
|
||||
m_data.iconNumber = 0;
|
||||
|
||||
m_pixmapCacheKey = QPixmapCache::Key();
|
||||
|
||||
Q_EMIT modified();
|
||||
emitDataChanged();
|
||||
}
|
||||
@@ -364,7 +372,6 @@ const QList<Entry*>& Entry::historyItems() const
|
||||
void Entry::addHistoryItem(Entry* entry)
|
||||
{
|
||||
Q_ASSERT(!entry->parent());
|
||||
Q_ASSERT(entry->uuid() == uuid());
|
||||
|
||||
m_history.append(entry);
|
||||
Q_EMIT modified();
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <QImage>
|
||||
#include <QMap>
|
||||
#include <QPixmap>
|
||||
#include <QPixmapCache>
|
||||
#include <QPointer>
|
||||
#include <QSet>
|
||||
#include <QUrl>
|
||||
@@ -61,6 +60,7 @@ public:
|
||||
Uuid uuid() const;
|
||||
QImage icon() const;
|
||||
QPixmap iconPixmap() const;
|
||||
QPixmap iconScaledPixmap() const;
|
||||
int iconNumber() const;
|
||||
Uuid iconUuid() const;
|
||||
QColor foregroundColor() const;
|
||||
@@ -169,7 +169,6 @@ private:
|
||||
Entry* m_tmpHistoryItem;
|
||||
bool m_modifiedSinceBegin;
|
||||
QPointer<Group> m_group;
|
||||
mutable QPixmapCache::Key m_pixmapCacheKey;
|
||||
bool m_updateTimeinfo;
|
||||
};
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@ QIcon FilePath::icon(const QString& category, const QString& name, bool fromThem
|
||||
icon.addFile(filename, QSize(size, size));
|
||||
}
|
||||
}
|
||||
filename = QString("%1/icons/application/scalable/%3.svgz").arg(m_dataPath, combinedName);
|
||||
filename = QString("%1/icons/application/scalable/%2.svgz").arg(m_dataPath, combinedName);
|
||||
if (QFile::exists(filename)) {
|
||||
icon.addFile(filename);
|
||||
}
|
||||
@@ -158,7 +158,7 @@ QIcon FilePath::onOffIcon(const QString& category, const QString& name)
|
||||
icon.addFile(filename, QSize(size, size), QIcon::Normal, state);
|
||||
}
|
||||
}
|
||||
filename = QString("%1/icons/application/scalable/%3-%4.svgz").arg(m_dataPath, combinedName, stateName);
|
||||
filename = QString("%1/icons/application/scalable/%2-%3.svgz").arg(m_dataPath, combinedName, stateName);
|
||||
if (QFile::exists(filename)) {
|
||||
icon.addFile(filename, QSize(), QIcon::Normal, state);
|
||||
}
|
||||
|
||||
@@ -134,13 +134,30 @@ QPixmap Group::iconPixmap() const
|
||||
else {
|
||||
Q_ASSERT(m_db);
|
||||
|
||||
QPixmap pixmap;
|
||||
if (m_db && !QPixmapCache::find(m_pixmapCacheKey, &pixmap)) {
|
||||
pixmap = QPixmap::fromImage(m_db->metadata()->customIcon(m_data.customIcon));
|
||||
m_pixmapCacheKey = QPixmapCache::insert(pixmap);
|
||||
if (m_db) {
|
||||
return m_db->metadata()->customIconPixmap(m_data.customIcon);
|
||||
}
|
||||
else {
|
||||
return QPixmap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pixmap;
|
||||
QPixmap Group::iconScaledPixmap() const
|
||||
{
|
||||
if (m_data.customIcon.isNull()) {
|
||||
// built-in icons are 16x16 so don't need to be scaled
|
||||
return databaseIcons()->iconPixmap(m_data.iconNumber);
|
||||
}
|
||||
else {
|
||||
Q_ASSERT(m_db);
|
||||
|
||||
if (m_db) {
|
||||
return m_db->metadata()->customIconScaledPixmap(m_data.customIcon);
|
||||
}
|
||||
else {
|
||||
return QPixmap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,8 +231,6 @@ void Group::setIcon(int iconNumber)
|
||||
m_data.iconNumber = iconNumber;
|
||||
m_data.customIcon = Uuid();
|
||||
|
||||
m_pixmapCacheKey = QPixmapCache::Key();
|
||||
|
||||
updateTimeinfo();
|
||||
Q_EMIT modified();
|
||||
Q_EMIT dataChanged(this);
|
||||
@@ -230,8 +245,6 @@ void Group::setIcon(const Uuid& uuid)
|
||||
m_data.customIcon = uuid;
|
||||
m_data.iconNumber = 0;
|
||||
|
||||
m_pixmapCacheKey = QPixmapCache::Key();
|
||||
|
||||
updateTimeinfo();
|
||||
Q_EMIT modified();
|
||||
Q_EMIT dataChanged(this);
|
||||
@@ -491,7 +504,7 @@ Group* Group::clone(Entry::CloneFlags entryFlags) const
|
||||
}
|
||||
|
||||
Q_FOREACH (Group* groupChild, children()) {
|
||||
Group* clonedGroupChild = groupChild->clone();
|
||||
Group* clonedGroupChild = groupChild->clone(entryFlags);
|
||||
clonedGroupChild->setParent(clonedGroup);
|
||||
}
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ public:
|
||||
QString notes() const;
|
||||
QImage icon() const;
|
||||
QPixmap iconPixmap() const;
|
||||
QPixmap iconScaledPixmap() const;
|
||||
int iconNumber() const;
|
||||
Uuid iconUuid() const;
|
||||
TimeInfo timeInfo() const;
|
||||
@@ -155,7 +156,6 @@ private:
|
||||
QList<Entry*> m_entries;
|
||||
|
||||
QPointer<Group> m_parent;
|
||||
mutable QPixmapCache::Key m_pixmapCacheKey;
|
||||
|
||||
bool m_updateTimeinfo;
|
||||
|
||||
|
||||
@@ -167,6 +167,43 @@ QImage Metadata::customIcon(const Uuid& uuid) const
|
||||
return m_customIcons.value(uuid);
|
||||
}
|
||||
|
||||
QPixmap Metadata::customIconPixmap(const Uuid& uuid) const
|
||||
{
|
||||
QPixmap pixmap;
|
||||
|
||||
if (!m_customIcons.contains(uuid)) {
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
QPixmapCache::Key& cacheKey = m_customIconCacheKeys[uuid];
|
||||
|
||||
if (!QPixmapCache::find(cacheKey, &pixmap)) {
|
||||
pixmap = QPixmap::fromImage(m_customIcons.value(uuid));
|
||||
cacheKey = QPixmapCache::insert(pixmap);
|
||||
}
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
QPixmap Metadata::customIconScaledPixmap(const Uuid& uuid) const
|
||||
{
|
||||
QPixmap pixmap;
|
||||
|
||||
if (!m_customIcons.contains(uuid)) {
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
QPixmapCache::Key& cacheKey = m_customIconScaledCacheKeys[uuid];
|
||||
|
||||
if (!QPixmapCache::find(cacheKey, &pixmap)) {
|
||||
QImage image = m_customIcons.value(uuid).scaled(16, 16, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
pixmap = QPixmap::fromImage(image);
|
||||
cacheKey = QPixmapCache::insert(pixmap);
|
||||
}
|
||||
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
bool Metadata::containsCustomIcon(const Uuid& uuid) const
|
||||
{
|
||||
return m_customIcons.contains(uuid);
|
||||
@@ -177,6 +214,17 @@ QHash<Uuid, QImage> Metadata::customIcons() const
|
||||
return m_customIcons;
|
||||
}
|
||||
|
||||
QHash<Uuid, QPixmap> Metadata::customIconsScaledPixmaps() const
|
||||
{
|
||||
QHash<Uuid, QPixmap> result;
|
||||
|
||||
Q_FOREACH (const Uuid& uuid, m_customIconsOrder) {
|
||||
result.insert(uuid, customIconScaledPixmap(uuid));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<Uuid> Metadata::customIconsOrder() const
|
||||
{
|
||||
return m_customIconsOrder;
|
||||
@@ -338,6 +386,9 @@ void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon)
|
||||
Q_ASSERT(!m_customIcons.contains(uuid));
|
||||
|
||||
m_customIcons.insert(uuid, icon);
|
||||
// reset cache in case there is also an icon with that uuid
|
||||
m_customIconCacheKeys[uuid] = QPixmapCache::Key();
|
||||
m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key();
|
||||
m_customIconsOrder.append(uuid);
|
||||
Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
|
||||
Q_EMIT modified();
|
||||
@@ -365,6 +416,10 @@ void Metadata::removeCustomIcon(const Uuid& uuid)
|
||||
Q_ASSERT(m_customIcons.contains(uuid));
|
||||
|
||||
m_customIcons.remove(uuid);
|
||||
QPixmapCache::remove(m_customIconCacheKeys.value(uuid));
|
||||
m_customIconCacheKeys.remove(uuid);
|
||||
QPixmapCache::remove(m_customIconScaledCacheKeys.value(uuid));
|
||||
m_customIconScaledCacheKeys.remove(uuid);
|
||||
m_customIconsOrder.removeAll(uuid);
|
||||
Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
|
||||
Q_EMIT modified();
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
#include <QDateTime>
|
||||
#include <QHash>
|
||||
#include <QImage>
|
||||
#include <QPixmap>
|
||||
#include <QPixmapCache>
|
||||
#include <QPointer>
|
||||
|
||||
#include "core/Global.h"
|
||||
@@ -78,10 +80,13 @@ public:
|
||||
bool protectNotes() const;
|
||||
// bool autoEnableVisualHiding() const;
|
||||
QImage customIcon(const Uuid& uuid) const;
|
||||
QPixmap customIconPixmap(const Uuid& uuid) const;
|
||||
QPixmap customIconScaledPixmap(const Uuid& uuid) const;
|
||||
bool containsCustomIcon(const Uuid& uuid) const;
|
||||
QHash<Uuid, QImage> customIcons() const;
|
||||
QList<Uuid> customIconsOrder() const;
|
||||
bool recycleBinEnabled() const;
|
||||
QHash<Uuid, QPixmap> customIconsScaledPixmaps() const;
|
||||
Group* recycleBin();
|
||||
const Group* recycleBin() const;
|
||||
QDateTime recycleBinChanged() const;
|
||||
@@ -153,6 +158,8 @@ private:
|
||||
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;
|
||||
|
||||
QPointer<Group> m_recycleBin;
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#include <windows.h> // for Sleep()
|
||||
#include <windows.h> // for Sleep(), SetDllDirectoryA() and SetSearchPathMode()
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
@@ -160,6 +160,16 @@ bool isHex(const QByteArray& ba)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isBase64(const QByteArray& ba)
|
||||
{
|
||||
QRegExp regexp("^(?:[a-z0-9+/]{4})*(?:[a-z0-9+/]{3}=|[a-z0-9+/]{2}==)?$",
|
||||
Qt::CaseInsensitive, QRegExp::RegExp2);
|
||||
|
||||
QString base64 = QString::fromLatin1(ba.constData(), ba.size());
|
||||
|
||||
return regexp.exactMatch(base64);
|
||||
}
|
||||
|
||||
void sleep(int ms)
|
||||
{
|
||||
Q_ASSERT(ms >= 0);
|
||||
@@ -249,4 +259,13 @@ void disableCoreDumps()
|
||||
}
|
||||
}
|
||||
|
||||
void setupSearchPaths()
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
// Make sure Windows doesn't load DLLs from the current working directory
|
||||
SetDllDirectoryA("");
|
||||
SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace Tools
|
||||
|
||||
@@ -35,10 +35,12 @@ bool readAllFromDevice(QIODevice* device, QByteArray& data);
|
||||
QDateTime currentDateTimeUtc();
|
||||
QString imageReaderFilter();
|
||||
bool isHex(const QByteArray& ba);
|
||||
bool isBase64(const QByteArray& ba);
|
||||
void sleep(int ms);
|
||||
void wait(int ms);
|
||||
QString platform();
|
||||
void disableCoreDumps();
|
||||
void setupSearchPaths();
|
||||
|
||||
} // namespace Tools
|
||||
|
||||
|
||||
@@ -83,10 +83,7 @@ public:
|
||||
// Returns \c true if the lock belongs to dead PID, or is old.
|
||||
// The attempt to delete it will tell us if it was really stale or not, though.
|
||||
bool isApparentlyStale() const;
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
static int checkFcntlWorksAfterFlock();
|
||||
#endif
|
||||
static QString processNameByPid(qint64 pid);
|
||||
|
||||
QString fileName;
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
@@ -42,10 +43,17 @@
|
||||
#include <sys/file.h> // flock
|
||||
#include <sys/types.h> // kill
|
||||
#include <signal.h> // kill
|
||||
#include <unistd.h>
|
||||
#include <unistd.h> // gethostname
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#if defined(Q_OS_MAC)
|
||||
# include <libproc.h>
|
||||
#elif defined(Q_OS_LINUX)
|
||||
# include <unistd.h>
|
||||
# include <cstdio>
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
#define EINTR_LOOP(var, cmd) \
|
||||
@@ -77,13 +85,13 @@ static inline qint64 qt_safe_write(int fd, const void *data, qint64 len)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static QString localHostName() // from QHostInfo::localHostName()
|
||||
static QByteArray localHostName() // from QHostInfo::localHostName(), modified to return a QByteArray
|
||||
{
|
||||
char hostName[512];
|
||||
if (gethostname(hostName, sizeof(hostName)) == -1)
|
||||
return QString();
|
||||
hostName[sizeof(hostName) - 1] = '\0';
|
||||
return QString::fromLocal8Bit(hostName);
|
||||
QByteArray hostName(512, Qt::Uninitialized);
|
||||
if (gethostname(hostName.data(), hostName.size()) == -1)
|
||||
return QByteArray();
|
||||
hostName.truncate(strlen(hostName.data()));
|
||||
return hostName;
|
||||
}
|
||||
|
||||
// ### merge into qt_safe_write?
|
||||
@@ -122,8 +130,8 @@ QLockFile::LockError QLockFilePrivate::tryLock_sys()
|
||||
// (otherwise we'd have to check every write call)
|
||||
// Use operator% from the fast builder to avoid multiple memory allocations.
|
||||
QByteArray fileData = QByteArray::number(QCoreApplication::applicationPid()) + '\n'
|
||||
+ qAppName().toUtf8() + '\n'
|
||||
+ localHostName().toUtf8() + '\n';
|
||||
+ QCoreApplication::applicationName().toUtf8() + '\n'
|
||||
+ localHostName() + '\n';
|
||||
|
||||
const QByteArray lockFileName = QFile::encodeName(fileName);
|
||||
const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY | O_CREAT | O_EXCL, 0644);
|
||||
@@ -161,7 +169,13 @@ bool QLockFilePrivate::removeStaleLock()
|
||||
const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY, 0644);
|
||||
if (fd < 0) // gone already?
|
||||
return false;
|
||||
#ifdef Q_OS_MAC
|
||||
// ugly workaround: ignore setNativeLocks() result on Mac since it's broken there
|
||||
setNativeLocks(fd);
|
||||
bool success = (::unlink(lockFileName) == 0);
|
||||
#else
|
||||
bool success = setNativeLocks(fd) && (::unlink(lockFileName) == 0);
|
||||
#endif
|
||||
close(fd);
|
||||
return success;
|
||||
}
|
||||
@@ -170,16 +184,48 @@ bool QLockFilePrivate::isApparentlyStale() const
|
||||
{
|
||||
qint64 pid;
|
||||
QString hostname, appname;
|
||||
if (!getLockInfo(&pid, &hostname, &appname))
|
||||
return false;
|
||||
if (hostname.isEmpty() || hostname == localHostName()) {
|
||||
if (::kill(pid, 0) == -1 && errno == ESRCH)
|
||||
return true; // PID doesn't exist anymore
|
||||
if (getLockInfo(&pid, &hostname, &appname)) {
|
||||
if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) {
|
||||
if (::kill(pid, 0) == -1 && errno == ESRCH)
|
||||
return true; // PID doesn't exist anymore
|
||||
const QString processName = processNameByPid(pid);
|
||||
if (!processName.isEmpty()) {
|
||||
QFileInfo fi(appname);
|
||||
if (fi.isSymLink())
|
||||
fi.setFile(fi.symLinkTarget());
|
||||
if (processName.toLower() != fi.fileName().toLower())
|
||||
return true; // PID got reused by a different application.
|
||||
}
|
||||
}
|
||||
}
|
||||
const qint64 age = QFileInfo(fileName).lastModified().secsTo(QDateTime::currentDateTime()) * 1000;
|
||||
return staleLockTime > 0 && age > staleLockTime;
|
||||
}
|
||||
|
||||
QString QLockFilePrivate::processNameByPid(qint64 pid)
|
||||
{
|
||||
#if defined(Q_OS_MAC)
|
||||
char name[1024];
|
||||
proc_name(pid, name, sizeof(name) / sizeof(char));
|
||||
return QFile::decodeName(name);
|
||||
#elif defined(Q_OS_LINUX)
|
||||
if (!QFile::exists(QString("/proc/version")))
|
||||
return QString();
|
||||
char exePath[64];
|
||||
char buf[PATH_MAX + 1];
|
||||
sprintf(exePath, "/proc/%lld/exe", pid);
|
||||
size_t len = static_cast<size_t>(readlink(exePath, buf, sizeof(buf)));
|
||||
if (len >= sizeof(buf)) {
|
||||
// The pid is gone. Return some invalid process name to fail the test.
|
||||
return QString("/ERROR/");
|
||||
}
|
||||
buf[len] = 0;
|
||||
return QFileInfo(QFile::decodeName(buf)).fileName();
|
||||
#else
|
||||
return QString();
|
||||
#endif
|
||||
}
|
||||
|
||||
void QLockFile::unlock()
|
||||
{
|
||||
Q_D(QLockFile);
|
||||
@@ -191,7 +237,6 @@ void QLockFile::unlock()
|
||||
qWarning() << "Could not remove our own lock file" << d->fileName << "maybe permissions changed meanwhile?";
|
||||
// This is bad because other users of this lock file will now have to wait for the stale-lock-timeout...
|
||||
}
|
||||
QFile::remove(d->fileName);
|
||||
d->lockError = QLockFile::NoError;
|
||||
d->isLocked = false;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
@@ -134,27 +135,75 @@ bool QLockFilePrivate::isApparentlyStale() const
|
||||
{
|
||||
qint64 pid;
|
||||
QString hostname, appname;
|
||||
if (!getLockInfo(&pid, &hostname, &appname))
|
||||
return false;
|
||||
|
||||
// On WinRT there seems to be no way of obtaining information about other
|
||||
// processes due to sandboxing
|
||||
#ifndef Q_OS_WINRT
|
||||
if (hostname == QString::fromLocal8Bit(localHostName())) {
|
||||
HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
|
||||
if (!procHandle)
|
||||
return true;
|
||||
// We got a handle but check if process is still alive
|
||||
DWORD dwR = ::WaitForSingleObject(procHandle, 0);
|
||||
::CloseHandle(procHandle);
|
||||
if (dwR == WAIT_TIMEOUT)
|
||||
return true;
|
||||
if (getLockInfo(&pid, &hostname, &appname)) {
|
||||
if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) {
|
||||
HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
|
||||
if (!procHandle)
|
||||
return true;
|
||||
// We got a handle but check if process is still alive
|
||||
DWORD dwR = ::WaitForSingleObject(procHandle, 0);
|
||||
::CloseHandle(procHandle);
|
||||
if (dwR == WAIT_TIMEOUT)
|
||||
return true;
|
||||
const QString processName = processNameByPid(pid);
|
||||
if (!processName.isEmpty() && processName != appname)
|
||||
return true; // PID got reused by a different application.
|
||||
}
|
||||
}
|
||||
#endif // !Q_OS_WINRT
|
||||
#else // !Q_OS_WINRT
|
||||
Q_UNUSED(pid);
|
||||
Q_UNUSED(hostname);
|
||||
Q_UNUSED(appname);
|
||||
#endif // Q_OS_WINRT
|
||||
const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime());
|
||||
return staleLockTime > 0 && age > staleLockTime;
|
||||
}
|
||||
|
||||
QString QLockFilePrivate::processNameByPid(qint64 pid)
|
||||
{
|
||||
#if !defined(Q_OS_WINRT) && !defined(Q_OS_WINCE)
|
||||
typedef DWORD (WINAPI *GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD);
|
||||
|
||||
HMODULE hPsapi = LoadLibraryA("psapi");
|
||||
if (!hPsapi)
|
||||
return QString();
|
||||
|
||||
GetModuleFileNameExFunc qGetModuleFileNameEx
|
||||
= (GetModuleFileNameExFunc)GetProcAddress(hPsapi, "GetModuleFileNameExW");
|
||||
if (!qGetModuleFileNameEx) {
|
||||
FreeLibrary(hPsapi);
|
||||
return QString();
|
||||
}
|
||||
|
||||
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, DWORD(pid));
|
||||
if (!hProcess) {
|
||||
FreeLibrary(hPsapi);
|
||||
return QString();
|
||||
}
|
||||
wchar_t buf[MAX_PATH];
|
||||
const DWORD length = qGetModuleFileNameEx(hProcess, NULL, buf, sizeof(buf) / sizeof(wchar_t));
|
||||
CloseHandle(hProcess);
|
||||
FreeLibrary(hPsapi);
|
||||
if (!length)
|
||||
return QString();
|
||||
QString name = QString::fromWCharArray(buf, length);
|
||||
int i = name.lastIndexOf(QLatin1Char('\\'));
|
||||
if (i >= 0)
|
||||
name.remove(0, i + 1);
|
||||
i = name.lastIndexOf(QLatin1Char('.'));
|
||||
if (i >= 0)
|
||||
name.truncate(i);
|
||||
return name;
|
||||
#else
|
||||
Q_UNUSED(pid);
|
||||
return QString();
|
||||
#endif
|
||||
}
|
||||
|
||||
void QLockFile::unlock()
|
||||
{
|
||||
Q_D(QLockFile);
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
bool Crypto::m_initalized(false);
|
||||
QString Crypto::m_errorStr;
|
||||
QString Crypto::m_backendVersion;
|
||||
|
||||
#if !defined(GCRYPT_VERSION_NUMBER) || (GCRYPT_VERSION_NUMBER < 0x010600)
|
||||
static int gcry_qt_mutex_init(void** p_sys)
|
||||
@@ -80,7 +81,7 @@ bool Crypto::init()
|
||||
#if !defined(GCRYPT_VERSION_NUMBER) || (GCRYPT_VERSION_NUMBER < 0x010600)
|
||||
gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_qt);
|
||||
#endif
|
||||
gcry_check_version(0);
|
||||
m_backendVersion = QString::fromLocal8Bit(gcry_check_version(0));
|
||||
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||
|
||||
if (!checkAlgorithms()) {
|
||||
@@ -108,6 +109,11 @@ QString Crypto::errorString()
|
||||
return m_errorStr;
|
||||
}
|
||||
|
||||
QString Crypto::backendVersion()
|
||||
{
|
||||
return QString("libgcrypt ").append(m_backendVersion);
|
||||
}
|
||||
|
||||
bool Crypto::backendSelfTest()
|
||||
{
|
||||
return (gcry_control(GCRYCTL_SELFTEST) == 0);
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
static bool initalized();
|
||||
static bool backendSelfTest();
|
||||
static QString errorString();
|
||||
static QString backendVersion();
|
||||
|
||||
private:
|
||||
Crypto();
|
||||
@@ -43,6 +44,7 @@ private:
|
||||
|
||||
static bool m_initalized;
|
||||
static QString m_errorStr;
|
||||
static QString m_backendVersion;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_CRYPTO_H
|
||||
|
||||
@@ -380,6 +380,10 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q
|
||||
}
|
||||
}
|
||||
|
||||
if (!cipherStream) {
|
||||
raiseError(tr("Wrong key or database file is corrupt."));
|
||||
}
|
||||
|
||||
return cipherStream.take();
|
||||
}
|
||||
|
||||
@@ -901,10 +905,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data)
|
||||
QByteArray entryUuid = data.mid(pos, 16);
|
||||
pos += 16;
|
||||
|
||||
int iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
|
||||
quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
|
||||
pos += 4;
|
||||
|
||||
if (m_entryUuids.contains(entryUuid) && (iconId < iconUuids.size())) {
|
||||
if (m_entryUuids.contains(entryUuid) && (iconId < static_cast<quint32>(iconUuids.size()))) {
|
||||
m_entryUuids[entryUuid]->setIcon(iconUuids[iconId]);
|
||||
}
|
||||
}
|
||||
@@ -917,10 +921,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data)
|
||||
quint32 groupId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
|
||||
pos += 4;
|
||||
|
||||
int iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
|
||||
quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
|
||||
pos += 4;
|
||||
|
||||
if (m_groupIds.contains(groupId) && (iconId < iconUuids.size())) {
|
||||
if (m_groupIds.contains(groupId) && (iconId < static_cast<quint32>(iconUuids.size()))) {
|
||||
m_groupIds[groupId]->setIcon(iconUuids[iconId]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "core/Database.h"
|
||||
#include "core/Endian.h"
|
||||
#include "crypto/CryptoHash.h"
|
||||
#include "format/KeePass1.h"
|
||||
#include "format/KeePass2.h"
|
||||
#include "format/KeePass2RandomStream.h"
|
||||
#include "format/KeePass2XmlReader.h"
|
||||
@@ -42,7 +43,7 @@ KeePass2Reader::KeePass2Reader()
|
||||
{
|
||||
}
|
||||
|
||||
Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& key)
|
||||
Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase)
|
||||
{
|
||||
QScopedPointer<Database> db(new Database());
|
||||
m_db = db.data();
|
||||
@@ -70,7 +71,14 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
|
||||
}
|
||||
|
||||
quint32 signature2 = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok);
|
||||
if (!ok || signature2 != KeePass2::SIGNATURE_2) {
|
||||
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"
|
||||
"This is a one-way migration. You won't be able to open the imported "
|
||||
"database with the old KeePassX 0.4 version."));
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
else if (!ok || signature2 != KeePass2::SIGNATURE_2) {
|
||||
raiseError(tr("Not a KeePass database."));
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
@@ -170,7 +178,12 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
|
||||
|
||||
if (xmlReader.hasError()) {
|
||||
raiseError(xmlReader.errorString());
|
||||
return Q_NULLPTR;
|
||||
if (keepDatabase) {
|
||||
return db.take();
|
||||
}
|
||||
else {
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
}
|
||||
|
||||
Q_ASSERT(version < 0x00030001 || !xmlReader.headerHash().isEmpty());
|
||||
@@ -178,7 +191,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
|
||||
if (!xmlReader.headerHash().isEmpty()) {
|
||||
QByteArray headerHash = CryptoHash::hash(headerStream.storedData(), CryptoHash::Sha256);
|
||||
if (headerHash != xmlReader.headerHash()) {
|
||||
raiseError("Head doesn't match hash");
|
||||
raiseError("Header doesn't match hash");
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
}
|
||||
@@ -224,6 +237,11 @@ QByteArray KeePass2Reader::xmlData()
|
||||
return m_xmlData;
|
||||
}
|
||||
|
||||
QByteArray KeePass2Reader::streamKey()
|
||||
{
|
||||
return m_protectedStreamKey;
|
||||
}
|
||||
|
||||
void KeePass2Reader::raiseError(const QString& errorMessage)
|
||||
{
|
||||
m_error = true;
|
||||
|
||||
@@ -31,12 +31,13 @@ class KeePass2Reader
|
||||
|
||||
public:
|
||||
KeePass2Reader();
|
||||
Database* readDatabase(QIODevice* device, const CompositeKey& key);
|
||||
Database* readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase = false);
|
||||
Database* readDatabase(const QString& filename, const CompositeKey& key);
|
||||
bool hasError();
|
||||
QString errorString();
|
||||
void setSaveXml(bool save);
|
||||
QByteArray xmlData();
|
||||
QByteArray streamKey();
|
||||
|
||||
private:
|
||||
void raiseError(const QString& errorMessage);
|
||||
|
||||
107
src/format/KeePass2Repair.cpp
Normal file
107
src/format/KeePass2Repair.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "KeePass2Repair.h"
|
||||
|
||||
#include <QBuffer>
|
||||
#include <QRegExp>
|
||||
|
||||
#include "format/KeePass2RandomStream.h"
|
||||
#include "format/KeePass2Reader.h"
|
||||
#include "format/KeePass2XmlReader.h"
|
||||
|
||||
KeePass2Repair::KeePass2Repair()
|
||||
: m_db(Q_NULLPTR)
|
||||
{
|
||||
}
|
||||
|
||||
KeePass2Repair::RepairResult KeePass2Repair::repairDatabase(QIODevice* device, const CompositeKey& key)
|
||||
{
|
||||
m_db = Q_NULLPTR;
|
||||
m_errorStr.clear();
|
||||
|
||||
KeePass2Reader reader;
|
||||
reader.setSaveXml(true);
|
||||
|
||||
Database* db = reader.readDatabase(device, key, true);
|
||||
if (!reader.hasError()) {
|
||||
delete db;
|
||||
return NothingTodo;
|
||||
}
|
||||
|
||||
QByteArray xmlData = reader.xmlData();
|
||||
if (!db || xmlData.isEmpty()) {
|
||||
delete db;
|
||||
m_errorStr = reader.errorString();
|
||||
return UnableToOpen;
|
||||
}
|
||||
|
||||
bool repairAction = false;
|
||||
|
||||
QString xmlStart = QString::fromLatin1(xmlData.constData(), qMin(100, xmlData.size()));
|
||||
QRegExp encodingRegExp("encoding=\"([^\"]+)\"", Qt::CaseInsensitive, QRegExp::RegExp2);
|
||||
if (encodingRegExp.indexIn(xmlStart) != -1) {
|
||||
if (encodingRegExp.cap(1).compare("utf-8", Qt::CaseInsensitive) != 0
|
||||
&& encodingRegExp.cap(1).compare("utf8", Qt::CaseInsensitive) != 0)
|
||||
{
|
||||
// database is not utf-8 encoded, we don't support repairing that
|
||||
delete db;
|
||||
return RepairFailed;
|
||||
}
|
||||
}
|
||||
|
||||
// try to fix broken databases because of bug #392
|
||||
for (int i = (xmlData.size() - 1); i >= 0; i--) {
|
||||
quint8 ch = static_cast<quint8>(xmlData.at(i));
|
||||
if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) {
|
||||
xmlData.remove(i, 1);
|
||||
repairAction = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!repairAction) {
|
||||
// we were unable to find the problem
|
||||
delete db;
|
||||
return RepairFailed;
|
||||
}
|
||||
|
||||
KeePass2RandomStream randomStream;
|
||||
randomStream.init(reader.streamKey());
|
||||
KeePass2XmlReader xmlReader;
|
||||
QBuffer buffer(&xmlData);
|
||||
buffer.open(QIODevice::ReadOnly);
|
||||
xmlReader.readDatabase(&buffer, db, &randomStream);
|
||||
|
||||
if (xmlReader.hasError()) {
|
||||
delete db;
|
||||
return RepairFailed;
|
||||
}
|
||||
else {
|
||||
m_db = db;
|
||||
return RepairSuccess;
|
||||
}
|
||||
}
|
||||
|
||||
Database* KeePass2Repair::database() const
|
||||
{
|
||||
return m_db;
|
||||
}
|
||||
|
||||
QString KeePass2Repair::errorString() const
|
||||
{
|
||||
return m_errorStr;
|
||||
}
|
||||
50
src/format/KeePass2Repair.h
Normal file
50
src/format/KeePass2Repair.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef KEEPASSX_KEEPASS2REPAIR_H
|
||||
#define KEEPASSX_KEEPASS2REPAIR_H
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QIODevice>
|
||||
|
||||
#include "core/Database.h"
|
||||
#include "keys/CompositeKey.h"
|
||||
|
||||
class KeePass2Repair
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(KeePass2Repair)
|
||||
|
||||
public:
|
||||
enum RepairResult
|
||||
{
|
||||
NothingTodo,
|
||||
UnableToOpen,
|
||||
RepairSuccess,
|
||||
RepairFailed
|
||||
};
|
||||
|
||||
KeePass2Repair();
|
||||
RepairResult repairDatabase(QIODevice* device, const CompositeKey& key);
|
||||
Database* database() const;
|
||||
QString errorString() const;
|
||||
|
||||
private:
|
||||
Database* m_db;
|
||||
QString m_errorStr;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_KEEPASS2REPAIR_H
|
||||
@@ -127,6 +127,20 @@ void KeePass2Writer::writeDatabase(QIODevice* device, Database* db)
|
||||
KeePass2XmlWriter xmlWriter;
|
||||
xmlWriter.writeDatabase(m_device, db, &randomStream, headerHash);
|
||||
|
||||
// Explicitly close/reset streams so they are flushed and we can detect
|
||||
// errors. QIODevice::close() resets errorString() etc.
|
||||
if (ioCompressor) {
|
||||
ioCompressor->close();
|
||||
}
|
||||
if (!hashedStream.reset()) {
|
||||
raiseError(hashedStream.errorString());
|
||||
return;
|
||||
}
|
||||
if (!cipherStream.reset()) {
|
||||
raiseError(cipherStream.errorString());
|
||||
return;
|
||||
}
|
||||
|
||||
if (xmlWriter.hasError()) {
|
||||
raiseError(xmlWriter.errorString());
|
||||
}
|
||||
|
||||
@@ -523,6 +523,7 @@ Group* KeePass2XmlReader::parseGroup()
|
||||
if (m_strictMode) {
|
||||
raiseError("Invalid group icon number");
|
||||
}
|
||||
iconId = 0;
|
||||
}
|
||||
else {
|
||||
if (iconId >= DatabaseIcons::IconCount) {
|
||||
@@ -702,6 +703,7 @@ Entry* KeePass2XmlReader::parseEntry(bool history)
|
||||
if (m_strictMode) {
|
||||
raiseError("Invalid entry icon number");
|
||||
}
|
||||
iconId = 0;
|
||||
}
|
||||
else {
|
||||
entry->setIcon(iconId);
|
||||
@@ -776,6 +778,13 @@ Entry* KeePass2XmlReader::parseEntry(bool history)
|
||||
}
|
||||
|
||||
Q_FOREACH (Entry* historyItem, historyItems) {
|
||||
if (historyItem->uuid() != entry->uuid()) {
|
||||
if (m_strictMode) {
|
||||
raiseError("History element with different uuid");
|
||||
} else {
|
||||
historyItem->setUuid(entry->uuid());
|
||||
}
|
||||
}
|
||||
entry->addHistoryItem(historyItem);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,12 @@ void KeePass2XmlWriter::writeDatabase(QIODevice* device, Database* db, KeePass2R
|
||||
m_xml.writeEndElement();
|
||||
|
||||
m_xml.writeEndDocument();
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
|
||||
if (m_xml.hasError()) {
|
||||
raiseError(device->errorString());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void KeePass2XmlWriter::writeDatabase(const QString& filename, Database* db)
|
||||
@@ -368,7 +374,7 @@ void KeePass2XmlWriter::writeEntry(const Entry* entry)
|
||||
}
|
||||
|
||||
if (!value.isEmpty()) {
|
||||
m_xml.writeCharacters(value);
|
||||
m_xml.writeCharacters(stripInvalidXml10Chars(value));
|
||||
}
|
||||
m_xml.writeEndElement();
|
||||
|
||||
@@ -439,7 +445,7 @@ void KeePass2XmlWriter::writeString(const QString& qualifiedName, const QString&
|
||||
m_xml.writeEmptyElement(qualifiedName);
|
||||
}
|
||||
else {
|
||||
m_xml.writeTextElement(qualifiedName, string);
|
||||
m_xml.writeTextElement(qualifiedName, stripInvalidXml10Chars(string));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -543,6 +549,31 @@ QString KeePass2XmlWriter::colorPartToString(int value)
|
||||
return str;
|
||||
}
|
||||
|
||||
QString KeePass2XmlWriter::stripInvalidXml10Chars(QString str)
|
||||
{
|
||||
for (int i = str.size() - 1; i >= 0; i--) {
|
||||
const QChar ch = str.at(i);
|
||||
const ushort uc = ch.unicode();
|
||||
|
||||
if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) {
|
||||
// keep valid surrogate pair
|
||||
i--;
|
||||
}
|
||||
else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control chracters
|
||||
|| (uc >= 0x7F && uc <= 0x84) // control chracters, valid but discouraged by XML
|
||||
|| (uc >= 0x86 && uc <= 0x9F) // control chracters, valid but discouraged by XML
|
||||
|| (uc > 0xFFFD) // noncharacter
|
||||
|| ch.isLowSurrogate() // single low surrogate
|
||||
|| ch.isHighSurrogate()) // single high surrogate
|
||||
{
|
||||
qWarning("Stripping invalid XML 1.0 codepoint %x", uc);
|
||||
str.remove(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
void KeePass2XmlWriter::raiseError(const QString& errorMessage)
|
||||
{
|
||||
m_error = true;
|
||||
|
||||
@@ -73,6 +73,7 @@ private:
|
||||
void writeColor(const QString& qualifiedName, const QColor& color);
|
||||
void writeTriState(const QString& qualifiedName, Group::TriState triState);
|
||||
QString colorPartToString(int value);
|
||||
QString stripInvalidXml10Chars(QString str);
|
||||
|
||||
void raiseError(const QString& errorMessage);
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "config-keepassx.h"
|
||||
#include "version.h"
|
||||
#include "core/FilePath.h"
|
||||
#include "crypto/Crypto.h"
|
||||
|
||||
AboutDialog::AboutDialog(QWidget* parent)
|
||||
: QDialog(parent)
|
||||
@@ -49,6 +50,12 @@ AboutDialog::AboutDialog(QWidget* parent)
|
||||
m_ui->label_git->setText(labelText);
|
||||
}
|
||||
|
||||
QString libs = QString("%1\n- Qt %2\n- %3")
|
||||
.arg(m_ui->label_libs->text())
|
||||
.arg(QString::fromLocal8Bit(qVersion()))
|
||||
.arg(Crypto::backendVersion());
|
||||
m_ui->label_libs->setText(libs);
|
||||
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close()));
|
||||
}
|
||||
|
||||
@@ -14,10 +14,20 @@
|
||||
<string>About KeePassX</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetFixedSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="iconLabel"/>
|
||||
<widget class="QLabel" name="iconLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="nameLabel">
|
||||
@@ -36,6 +46,12 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true"><a href="http://www.keepassx.org/">http://www.keepassx.org/</a></string>
|
||||
</property>
|
||||
@@ -46,6 +62,12 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</string>
|
||||
</property>
|
||||
@@ -64,6 +86,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_libs">
|
||||
<property name="text">
|
||||
<string>Using:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="standardButtons">
|
||||
|
||||
@@ -24,9 +24,15 @@
|
||||
|
||||
Application::Application(int& argc, char** argv)
|
||||
: QApplication(argc, argv)
|
||||
, m_mainWindow(Q_NULLPTR)
|
||||
{
|
||||
}
|
||||
|
||||
void Application::setMainWindow(QWidget* mainWindow)
|
||||
{
|
||||
m_mainWindow = mainWindow;
|
||||
}
|
||||
|
||||
bool Application::event(QEvent* event)
|
||||
{
|
||||
// Handle Apple QFileOpenEvent from finder (double click on .kdbx file)
|
||||
@@ -34,6 +40,16 @@ bool Application::event(QEvent* event)
|
||||
Q_EMIT openFile(static_cast<QFileOpenEvent*>(event)->file());
|
||||
return true;
|
||||
}
|
||||
#ifdef Q_OS_MAC
|
||||
// restore main window when clicking on the docker icon
|
||||
else if ((event->type() == QEvent::ApplicationActivate) && m_mainWindow) {
|
||||
m_mainWindow->ensurePolished();
|
||||
m_mainWindow->setWindowState(m_mainWindow->windowState() & ~Qt::WindowMinimized);
|
||||
m_mainWindow->show();
|
||||
m_mainWindow->raise();
|
||||
m_mainWindow->activateWindow();
|
||||
}
|
||||
#endif
|
||||
|
||||
return QApplication::event(event);
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ class Application : public QApplication
|
||||
|
||||
public:
|
||||
Application(int& argc, char** argv);
|
||||
void setMainWindow(QWidget* mainWindow);
|
||||
|
||||
bool event(QEvent* event) Q_DECL_OVERRIDE;
|
||||
#ifdef Q_WS_X11
|
||||
@@ -37,6 +38,9 @@ public:
|
||||
|
||||
Q_SIGNALS:
|
||||
void openFile(const QString& filename);
|
||||
|
||||
private:
|
||||
QWidget* m_mainWindow;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_APPLICATION_H
|
||||
|
||||
@@ -31,7 +31,7 @@ Clipboard::Clipboard(QObject* parent)
|
||||
{
|
||||
m_timer->setSingleShot(true);
|
||||
connect(m_timer, SIGNAL(timeout()), SLOT(clearClipboard()));
|
||||
connect(qApp, SIGNAL(aboutToQuit()), SLOT(cleanup()));
|
||||
connect(qApp, SIGNAL(aboutToQuit()), SLOT(clearCopiedText()));
|
||||
}
|
||||
|
||||
void Clipboard::setText(const QString& text)
|
||||
@@ -52,6 +52,14 @@ void Clipboard::setText(const QString& text)
|
||||
}
|
||||
}
|
||||
|
||||
void Clipboard::clearCopiedText()
|
||||
{
|
||||
if (m_timer->isActive()) {
|
||||
m_timer->stop();
|
||||
clearClipboard();
|
||||
}
|
||||
}
|
||||
|
||||
void Clipboard::clearClipboard()
|
||||
{
|
||||
QClipboard* clipboard = QApplication::clipboard();
|
||||
@@ -73,14 +81,6 @@ void Clipboard::clearClipboard()
|
||||
m_lastCopied.clear();
|
||||
}
|
||||
|
||||
void Clipboard::cleanup()
|
||||
{
|
||||
if (m_timer->isActive()) {
|
||||
m_timer->stop();
|
||||
clearClipboard();
|
||||
}
|
||||
}
|
||||
|
||||
Clipboard* Clipboard::instance()
|
||||
{
|
||||
if (!m_instance) {
|
||||
|
||||
@@ -33,9 +33,11 @@ public:
|
||||
|
||||
static Clipboard* instance();
|
||||
|
||||
public Q_SLOTS:
|
||||
void clearCopiedText();
|
||||
|
||||
private Q_SLOTS:
|
||||
void clearClipboard();
|
||||
void cleanup();
|
||||
|
||||
private:
|
||||
explicit Clipboard(QObject* parent = Q_NULLPTR);
|
||||
|
||||
@@ -49,10 +49,6 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
|
||||
connect(m_ui->editPassword, SIGNAL(textChanged(QString)), SLOT(activatePassword()));
|
||||
connect(m_ui->comboKeyFile, SIGNAL(editTextChanged(QString)), SLOT(activateKeyFile()));
|
||||
|
||||
connect(m_ui->checkPassword, SIGNAL(toggled(bool)), SLOT(setOkButtonEnabled()));
|
||||
connect(m_ui->checkKeyFile, SIGNAL(toggled(bool)), SLOT(setOkButtonEnabled()));
|
||||
connect(m_ui->comboKeyFile, SIGNAL(editTextChanged(QString)), SLOT(setOkButtonEnabled()));
|
||||
|
||||
connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase()));
|
||||
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject()));
|
||||
}
|
||||
@@ -75,6 +71,7 @@ void DatabaseOpenWidget::load(const QString& filename)
|
||||
}
|
||||
}
|
||||
|
||||
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
|
||||
m_ui->editPassword->setFocus();
|
||||
}
|
||||
|
||||
@@ -99,13 +96,11 @@ void DatabaseOpenWidget::openDatabase()
|
||||
{
|
||||
KeePass2Reader reader;
|
||||
CompositeKey masterKey = databaseKey();
|
||||
if (masterKey.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QFile file(m_filename);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
// TODO: error message
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(file.errorString()));
|
||||
return;
|
||||
}
|
||||
if (m_db) {
|
||||
@@ -172,14 +167,6 @@ void DatabaseOpenWidget::activateKeyFile()
|
||||
m_ui->checkKeyFile->setChecked(true);
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::setOkButtonEnabled()
|
||||
{
|
||||
bool enable = m_ui->checkPassword->isChecked()
|
||||
|| (m_ui->checkKeyFile->isChecked() && !m_ui->comboKeyFile->currentText().isEmpty());
|
||||
|
||||
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enable);
|
||||
}
|
||||
|
||||
void DatabaseOpenWidget::browseKeyFile()
|
||||
{
|
||||
QString filters = QString("%1 (*);;%2 (*.key)").arg(tr("All files"), tr("Key files"));
|
||||
|
||||
@@ -54,7 +54,6 @@ protected Q_SLOTS:
|
||||
private Q_SLOTS:
|
||||
void activatePassword();
|
||||
void activateKeyFile();
|
||||
void setOkButtonEnabled();
|
||||
void browseKeyFile();
|
||||
|
||||
protected:
|
||||
|
||||
105
src/gui/DatabaseRepairWidget.cpp
Normal file
105
src/gui/DatabaseRepairWidget.cpp
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#include "DatabaseRepairWidget.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
|
||||
#include "ui_DatabaseOpenWidget.h"
|
||||
#include "core/Database.h"
|
||||
#include "core/Metadata.h"
|
||||
#include "format/KeePass2Repair.h"
|
||||
#include "gui/MessageBox.h"
|
||||
#include "keys/FileKey.h"
|
||||
#include "keys/PasswordKey.h"
|
||||
|
||||
DatabaseRepairWidget::DatabaseRepairWidget(QWidget* parent)
|
||||
: DatabaseOpenWidget(parent)
|
||||
{
|
||||
m_ui->labelHeadline->setText(tr("Repair database"));
|
||||
|
||||
connect(this, SIGNAL(editFinished(bool)), this, SLOT(processEditFinished(bool)));
|
||||
}
|
||||
|
||||
void DatabaseRepairWidget::openDatabase()
|
||||
{
|
||||
CompositeKey masterKey;
|
||||
|
||||
if (m_ui->checkPassword->isChecked()) {
|
||||
masterKey.addKey(PasswordKey(m_ui->editPassword->text()));
|
||||
}
|
||||
|
||||
if (m_ui->checkKeyFile->isChecked()) {
|
||||
FileKey key;
|
||||
QString keyFilename = m_ui->comboKeyFile->currentText();
|
||||
QString errorMsg;
|
||||
if (!key.load(keyFilename, &errorMsg)) {
|
||||
MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg));
|
||||
Q_EMIT editFinished(false);
|
||||
return;
|
||||
}
|
||||
masterKey.addKey(key);
|
||||
}
|
||||
|
||||
KeePass2Repair repair;
|
||||
|
||||
QFile file(m_filename);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(file.errorString()));
|
||||
Q_EMIT editFinished(false);
|
||||
return;
|
||||
}
|
||||
if (m_db) {
|
||||
delete m_db;
|
||||
}
|
||||
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||
KeePass2Repair::RepairResult repairResult = repair.repairDatabase(&file, masterKey);
|
||||
QApplication::restoreOverrideCursor();
|
||||
|
||||
switch (repairResult) {
|
||||
case KeePass2Repair::NothingTodo:
|
||||
MessageBox::information(this, tr("Error"), tr("Database opened fine. Nothing to do."));
|
||||
Q_EMIT editFinished(false);
|
||||
return;
|
||||
case KeePass2Repair::UnableToOpen:
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(repair.errorString()));
|
||||
Q_EMIT editFinished(false);
|
||||
return;
|
||||
case KeePass2Repair::RepairSuccess:
|
||||
m_db = repair.database();
|
||||
MessageBox::warning(this, tr("Success"), tr("The database has been successfully repaired\nYou can now save it."));
|
||||
Q_EMIT editFinished(true);
|
||||
return;
|
||||
case KeePass2Repair::RepairFailed:
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to repair the database."));
|
||||
Q_EMIT editFinished(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void DatabaseRepairWidget::processEditFinished(bool result)
|
||||
{
|
||||
if (result) {
|
||||
Q_EMIT success();
|
||||
}
|
||||
else {
|
||||
Q_EMIT error();
|
||||
}
|
||||
}
|
||||
41
src/gui/DatabaseRepairWidget.h
Normal file
41
src/gui/DatabaseRepairWidget.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
|
||||
*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
#ifndef KEEPASSX_DATABASEREPAIRWIDGET_H
|
||||
#define KEEPASSX_DATABASEREPAIRWIDGET_H
|
||||
|
||||
#include "gui/DatabaseOpenWidget.h"
|
||||
|
||||
class DatabaseRepairWidget : public DatabaseOpenWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DatabaseRepairWidget(QWidget* parent = Q_NULLPTR);
|
||||
|
||||
Q_SIGNALS:
|
||||
void success();
|
||||
void error();
|
||||
|
||||
protected:
|
||||
void openDatabase() Q_DECL_OVERRIDE;
|
||||
|
||||
private Q_SLOTS:
|
||||
void processEditFinished(bool result);
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_DATABASEREPAIRWIDGET_H
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "core/Metadata.h"
|
||||
#include "core/qsavefile.h"
|
||||
#include "format/CsvExporter.h"
|
||||
#include "gui/Clipboard.h"
|
||||
#include "gui/DatabaseWidget.h"
|
||||
#include "gui/DatabaseWidgetStateSync.h"
|
||||
#include "gui/DragTabBar.h"
|
||||
@@ -130,11 +131,10 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
|
||||
|
||||
// test if we can read/write or read the file
|
||||
QFile file(fileName);
|
||||
// TODO: error handling
|
||||
if (!file.open(QIODevice::ReadWrite)) {
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
// can't open
|
||||
// TODO: error message
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(file.errorString()));
|
||||
return;
|
||||
}
|
||||
else {
|
||||
@@ -295,24 +295,29 @@ bool DatabaseTabWidget::saveDatabase(Database* db)
|
||||
DatabaseManagerStruct& dbStruct = m_dbList[db];
|
||||
|
||||
if (dbStruct.saveToFilename) {
|
||||
bool result = false;
|
||||
|
||||
QSaveFile saveFile(dbStruct.filePath);
|
||||
QSaveFile saveFile(dbStruct.canonicalFilePath);
|
||||
if (saveFile.open(QIODevice::WriteOnly)) {
|
||||
m_writer.writeDatabase(&saveFile, db);
|
||||
result = saveFile.commit();
|
||||
}
|
||||
|
||||
if (result) {
|
||||
dbStruct.modified = false;
|
||||
updateTabName(db);
|
||||
return true;
|
||||
if (m_writer.hasError()) {
|
||||
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
|
||||
+ m_writer.errorString());
|
||||
return false;
|
||||
}
|
||||
if (!saveFile.commit()) {
|
||||
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
|
||||
+ saveFile.errorString());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
|
||||
+ saveFile.errorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
dbStruct.modified = false;
|
||||
updateTabName(db);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return saveDatabaseAs(db);
|
||||
@@ -326,8 +331,12 @@ bool DatabaseTabWidget::saveDatabaseAs(Database* db)
|
||||
if (dbStruct.saveToFilename) {
|
||||
oldFileName = dbStruct.filePath;
|
||||
}
|
||||
else {
|
||||
oldFileName = tr("New database").append(".kdbx");
|
||||
}
|
||||
QString fileName = fileDialog()->getSaveFileName(this, tr("Save database as"),
|
||||
oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)"));
|
||||
oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)"),
|
||||
Q_NULLPTR, 0, "kdbx");
|
||||
if (!fileName.isEmpty()) {
|
||||
QFileInfo fileInfo(fileName);
|
||||
QString lockFilePath;
|
||||
@@ -370,12 +379,20 @@ bool DatabaseTabWidget::saveDatabaseAs(Database* db)
|
||||
}
|
||||
|
||||
m_writer.writeDatabase(&saveFile, db);
|
||||
if (m_writer.hasError()) {
|
||||
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
|
||||
+ m_writer.errorString());
|
||||
return false;
|
||||
}
|
||||
if (!saveFile.commit()) {
|
||||
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
|
||||
+ saveFile.errorString());
|
||||
return false;
|
||||
}
|
||||
|
||||
// refresh fileinfo since the file didn't exist before
|
||||
fileInfo.refresh();
|
||||
|
||||
dbStruct.modified = false;
|
||||
dbStruct.saveToFilename = true;
|
||||
dbStruct.readOnly = false;
|
||||
@@ -442,7 +459,8 @@ void DatabaseTabWidget::exportToCsv()
|
||||
}
|
||||
|
||||
QString fileName = fileDialog()->getSaveFileName(this, tr("Export database to CSV file"),
|
||||
QString(), tr("CSV file").append(" (*.csv)"));
|
||||
QString(), tr("CSV file").append(" (*.csv)"),
|
||||
Q_NULLPTR, 0, "csv");
|
||||
if (fileName.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -622,6 +640,8 @@ bool DatabaseTabWidget::hasLockableDatabases() const
|
||||
|
||||
void DatabaseTabWidget::lockDatabases()
|
||||
{
|
||||
clipboard()->clearCopiedText();
|
||||
|
||||
for (int i = 0; i < count(); i++) {
|
||||
DatabaseWidget* dbWidget = static_cast<DatabaseWidget*>(widget(i));
|
||||
Database* db = databaseFromDatabaseWidget(dbWidget);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QKeyEvent>
|
||||
#include <QSplitter>
|
||||
#include <QTimer>
|
||||
#include <QProcess>
|
||||
@@ -88,6 +89,7 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent)
|
||||
m_searchUi->closeSearchButton->setShortcut(Qt::Key_Escape);
|
||||
m_searchWidget->hide();
|
||||
m_searchUi->caseSensitiveCheckBox->setVisible(false);
|
||||
m_searchUi->searchEdit->installEventFilter(this);
|
||||
|
||||
QVBoxLayout* vLayout = new QVBoxLayout(rightHandSideWidget);
|
||||
vLayout->setMargin(0);
|
||||
@@ -339,14 +341,24 @@ void DatabaseWidget::deleteEntries()
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (selected.size() > 1) {
|
||||
QMessageBox::StandardButton result = MessageBox::question(
|
||||
QMessageBox::StandardButton result;
|
||||
|
||||
if (selected.size() == 1) {
|
||||
result = MessageBox::question(
|
||||
this, tr("Move entry to recycle bin?"),
|
||||
tr("Do you really want to move entry \"%1\" to the recycle bin?")
|
||||
.arg(selectedEntries.first()->title()),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
}
|
||||
else {
|
||||
result = MessageBox::question(
|
||||
this, tr("Move entries to recycle bin?"),
|
||||
tr("Do you really want to move %n entry(s) to the recycle bin?", 0, selected.size()),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
if (result == QMessageBox::No) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == QMessageBox::No) {
|
||||
return;
|
||||
}
|
||||
|
||||
Q_FOREACH (Entry* entry, selectedEntries) {
|
||||
@@ -491,7 +503,9 @@ void DatabaseWidget::deleteGroup()
|
||||
}
|
||||
|
||||
bool inRecylceBin = Tools::hasChild(m_db->metadata()->recycleBin(), currentGroup);
|
||||
if (inRecylceBin || !m_db->metadata()->recycleBinEnabled()) {
|
||||
bool isRecycleBin = (currentGroup == m_db->metadata()->recycleBin());
|
||||
bool isRecycleBinSubgroup = Tools::hasChild(currentGroup, m_db->metadata()->recycleBin());
|
||||
if (inRecylceBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) {
|
||||
QMessageBox::StandardButton result = MessageBox::question(
|
||||
this, tr("Delete group?"),
|
||||
tr("Do you really want to delete the group \"%1\" for good?")
|
||||
@@ -869,8 +883,7 @@ bool DatabaseWidget::dbHasKey() const
|
||||
bool DatabaseWidget::canDeleteCurrentGroup() const
|
||||
{
|
||||
bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup();
|
||||
bool isRecycleBin = m_db->metadata()->recycleBin() == m_groupView->currentGroup();
|
||||
return !isRootGroup && !isRecycleBin;
|
||||
return !isRootGroup;
|
||||
}
|
||||
|
||||
bool DatabaseWidget::isInSearchMode() const
|
||||
@@ -889,8 +902,17 @@ void DatabaseWidget::clearLastGroup(Group* group)
|
||||
void DatabaseWidget::lock()
|
||||
{
|
||||
Q_ASSERT(currentMode() != DatabaseWidget::LockedMode);
|
||||
if (isInSearchMode()) {
|
||||
closeSearch();
|
||||
}
|
||||
|
||||
if (m_groupView->currentGroup()) {
|
||||
m_groupBeforeLock = m_groupView->currentGroup()->uuid();
|
||||
}
|
||||
else {
|
||||
m_groupBeforeLock = m_db->rootGroup()->uuid();
|
||||
}
|
||||
|
||||
m_groupBeforeLock = m_groupView->currentGroup()->uuid();
|
||||
clearAllWidgets();
|
||||
m_unlockDatabaseWidget->load(m_filename);
|
||||
setCurrentWidget(m_unlockDatabaseWidget);
|
||||
@@ -973,3 +995,34 @@ bool DatabaseWidget::currentEntryHasNotes()
|
||||
}
|
||||
return !currentEntry->notes().isEmpty();
|
||||
}
|
||||
|
||||
bool DatabaseWidget::eventFilter(QObject* object, QEvent* event)
|
||||
{
|
||||
if (object == m_searchUi->searchEdit) {
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
||||
|
||||
if (keyEvent->matches(QKeySequence::Copy)) {
|
||||
// If Control+C is pressed in the search edit when no
|
||||
// text is selected, copy the password of the current
|
||||
// entry.
|
||||
Entry* currentEntry = m_entryView->currentEntry();
|
||||
if (currentEntry && !m_searchUi->searchEdit->hasSelectedText()) {
|
||||
setClipboardTextAndMinimize(currentEntry->password());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (keyEvent->matches(QKeySequence::MoveToNextLine)) {
|
||||
// If Down is pressed at EOL in the search edit, move
|
||||
// the focus to the entry view.
|
||||
if (!m_searchUi->searchEdit->hasSelectedText()
|
||||
&& m_searchUi->searchEdit->cursorPosition() == m_searchUi->searchEdit->text().size()) {
|
||||
m_entryView->setFocus();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -102,6 +102,9 @@ Q_SIGNALS:
|
||||
void splitterSizesChanged();
|
||||
void entryColumnSizesChanged();
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject* object, QEvent* event) Q_DECL_OVERRIDE;
|
||||
|
||||
public Q_SLOTS:
|
||||
void createEntry();
|
||||
void cloneEntry();
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "ui_EditWidgetIcons.h"
|
||||
|
||||
#include <QFileDialog>
|
||||
#include <QImageReader>
|
||||
|
||||
#include "core/Group.h"
|
||||
#include "core/Metadata.h"
|
||||
@@ -98,7 +99,7 @@ void EditWidgetIcons::load(Uuid currentUuid, Database* database, IconStruct icon
|
||||
m_database = database;
|
||||
m_currentUuid = currentUuid;
|
||||
|
||||
m_customIconModel->setIcons(database->metadata()->customIcons(),
|
||||
m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps(),
|
||||
database->metadata()->customIconsOrder());
|
||||
|
||||
Uuid iconUuid = iconStruct.uuid;
|
||||
@@ -129,17 +130,21 @@ void EditWidgetIcons::addCustomIcon()
|
||||
QString filename = QFileDialog::getOpenFileName(
|
||||
this, tr("Select Image"), "", filter);
|
||||
if (!filename.isEmpty()) {
|
||||
QImage image(filename);
|
||||
QImageReader imageReader(filename);
|
||||
// detect from content, otherwise reading fails if file extension is wrong
|
||||
imageReader.setDecideFormatFromContent(true);
|
||||
QImage image = imageReader.read();
|
||||
if (!image.isNull()) {
|
||||
Uuid uuid = Uuid::random();
|
||||
m_database->metadata()->addCustomIconScaled(uuid, image);
|
||||
m_customIconModel->setIcons(m_database->metadata()->customIcons(),
|
||||
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
|
||||
m_database->metadata()->customIconsOrder());
|
||||
QModelIndex index = m_customIconModel->indexFromUuid(uuid);
|
||||
m_ui->customIconsView->setCurrentIndex(index);
|
||||
}
|
||||
else {
|
||||
// TODO: show error
|
||||
MessageBox::critical(this, tr("Error"),
|
||||
tr("Can't read icon:").append("\n").append(imageReader.errorString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -183,7 +188,7 @@ void EditWidgetIcons::removeCustomIcon()
|
||||
}
|
||||
|
||||
m_database->metadata()->removeCustomIcon(iconUuid);
|
||||
m_customIconModel->setIcons(m_database->metadata()->customIcons(),
|
||||
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
|
||||
m_database->metadata()->customIconsOrder());
|
||||
if (m_customIconModel->rowCount() > 0) {
|
||||
m_ui->customIconsView->setCurrentIndex(m_customIconModel->index(0, 0));
|
||||
|
||||
@@ -53,7 +53,7 @@ QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, QSt
|
||||
|
||||
QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QString dir,
|
||||
const QString& filter, QString* selectedFilter,
|
||||
QFileDialog::Options options)
|
||||
QFileDialog::Options options, const QString& defaultExtension)
|
||||
{
|
||||
if (!m_nextFileName.isEmpty()) {
|
||||
QString result = m_nextFileName;
|
||||
@@ -65,8 +65,30 @@ QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QSt
|
||||
dir = config()->get("LastDir").toString();
|
||||
}
|
||||
|
||||
QString result = QFileDialog::getSaveFileName(parent, caption, dir, filter,
|
||||
selectedFilter, options);
|
||||
QString result;
|
||||
#if defined(Q_OS_MAC) || defined(Q_OS_WIN)
|
||||
Q_UNUSED(defaultExtension);
|
||||
// the native dialogs on these platforms already append the file extension
|
||||
result = QFileDialog::getSaveFileName(parent, caption, dir, filter,
|
||||
selectedFilter, options);
|
||||
#else
|
||||
QFileDialog dialog(parent, caption, dir, filter);
|
||||
dialog.setAcceptMode(QFileDialog::AcceptSave);
|
||||
dialog.setFileMode(QFileDialog::AnyFile);
|
||||
if (selectedFilter) {
|
||||
dialog.selectNameFilter(*selectedFilter);
|
||||
}
|
||||
dialog.setOptions(options);
|
||||
dialog.setDefaultSuffix(defaultExtension);
|
||||
|
||||
QStringList results;
|
||||
if (dialog.exec()) {
|
||||
results = dialog.selectedFiles();
|
||||
if (!results.isEmpty()) {
|
||||
result = results[0];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// on Mac OS X the focus is lost after closing the native dialog
|
||||
if (parent) {
|
||||
|
||||
@@ -27,10 +27,11 @@ class FileDialog
|
||||
public:
|
||||
QString getOpenFileName(QWidget* parent = Q_NULLPTR, const QString& caption = QString(),
|
||||
QString dir = QString(), const QString& filter = QString(),
|
||||
QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = Q_NULLPTR);
|
||||
QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = 0);
|
||||
QString getSaveFileName(QWidget* parent = Q_NULLPTR, const QString& caption = QString(),
|
||||
QString dir = QString(), const QString& filter = QString(),
|
||||
QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = Q_NULLPTR);
|
||||
QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = 0,
|
||||
const QString& defaultExtension = QString());
|
||||
|
||||
/**
|
||||
* Sets the result of the next get* method call.
|
||||
|
||||
@@ -54,7 +54,7 @@ CustomIconModel::CustomIconModel(QObject* parent)
|
||||
{
|
||||
}
|
||||
|
||||
void CustomIconModel::setIcons(const QHash<Uuid, QImage>& icons, const QList<Uuid>& iconsOrder)
|
||||
void CustomIconModel::setIcons(const QHash<Uuid, QPixmap>& icons, const QList<Uuid>& iconsOrder)
|
||||
{
|
||||
beginResetModel();
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#define KEEPASSX_ICONMODELS_H
|
||||
|
||||
#include <QAbstractListModel>
|
||||
#include <QImage>
|
||||
#include <QPixmap>
|
||||
|
||||
#include "core/Global.h"
|
||||
#include "core/Uuid.h"
|
||||
@@ -44,12 +44,12 @@ public:
|
||||
|
||||
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
|
||||
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
|
||||
void setIcons(const QHash<Uuid, QImage>& icons, const QList<Uuid>& iconsOrder);
|
||||
void setIcons(const QHash<Uuid, QPixmap>& icons, const QList<Uuid>& iconsOrder);
|
||||
Uuid uuidFromIndex(const QModelIndex& index) const;
|
||||
QModelIndex indexFromUuid(const Uuid& uuid) const;
|
||||
|
||||
private:
|
||||
QHash<Uuid, QImage> m_icons;
|
||||
QHash<Uuid, QPixmap> m_icons;
|
||||
QList<Uuid> m_iconsOrder;
|
||||
};
|
||||
|
||||
|
||||
@@ -49,7 +49,8 @@ void KeePass1OpenWidget::openDatabase()
|
||||
|
||||
QFile file(m_filename);
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
// TODO: error message
|
||||
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
|
||||
.append(file.errorString()));
|
||||
return;
|
||||
}
|
||||
if (m_db) {
|
||||
|
||||
@@ -20,14 +20,19 @@
|
||||
|
||||
#include <QCloseEvent>
|
||||
#include <QShortcut>
|
||||
#include <QTimer>
|
||||
|
||||
#include "autotype/AutoType.h"
|
||||
#include "core/Config.h"
|
||||
#include "core/FilePath.h"
|
||||
#include "core/InactivityTimer.h"
|
||||
#include "core/Metadata.h"
|
||||
#include "format/KeePass2Writer.h"
|
||||
#include "gui/AboutDialog.h"
|
||||
#include "gui/DatabaseWidget.h"
|
||||
#include "gui/DatabaseRepairWidget.h"
|
||||
#include "gui/FileDialog.h"
|
||||
#include "gui/MessageBox.h"
|
||||
|
||||
const QString MainWindow::BaseWindowTitle = "KeePassX";
|
||||
|
||||
@@ -92,9 +97,7 @@ MainWindow::MainWindow()
|
||||
m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::Key_U);
|
||||
m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_U);
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized()));
|
||||
#endif
|
||||
|
||||
m_ui->actionDatabaseNew->setIcon(filePath()->icon("actions", "document-new"));
|
||||
m_ui->actionDatabaseOpen->setIcon(filePath()->icon("actions", "document-open"));
|
||||
@@ -164,6 +167,8 @@ MainWindow::MainWindow()
|
||||
SLOT(changeDatabaseSettings()));
|
||||
connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget,
|
||||
SLOT(importKeePass1Database()));
|
||||
connect(m_ui->actionRepairDatabase, SIGNAL(triggered()), this,
|
||||
SLOT(repairDatabase()));
|
||||
connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget,
|
||||
SLOT(exportToCsv()));
|
||||
connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget,
|
||||
@@ -367,6 +372,7 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
|
||||
m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
|
||||
m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
|
||||
m_ui->actionImportKeePass1->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
|
||||
m_ui->actionRepairDatabase->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
|
||||
|
||||
m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases());
|
||||
}
|
||||
@@ -447,10 +453,11 @@ void MainWindow::closeEvent(QCloseEvent* event)
|
||||
void MainWindow::changeEvent(QEvent *event)
|
||||
{
|
||||
if ((event->type() == QEvent::WindowStateChange) && isMinimized()
|
||||
&& isTrayIconEnabled() && config()->get("GUI/MinimizeToTray").toBool())
|
||||
&& isTrayIconEnabled() && m_trayIcon && m_trayIcon->isVisible()
|
||||
&& config()->get("GUI/MinimizeToTray").toBool())
|
||||
{
|
||||
event->ignore();
|
||||
hide();
|
||||
QTimer::singleShot(0, this, SLOT(hide()));
|
||||
}
|
||||
else {
|
||||
QMainWindow::changeEvent(event);
|
||||
@@ -512,6 +519,7 @@ void MainWindow::updateTrayIcon()
|
||||
}
|
||||
else {
|
||||
if (m_trayIcon) {
|
||||
m_trayIcon->hide();
|
||||
delete m_trayIcon;
|
||||
m_trayIcon = Q_NULLPTR;
|
||||
}
|
||||
@@ -575,10 +583,12 @@ void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason)
|
||||
|
||||
void MainWindow::toggleWindow()
|
||||
{
|
||||
if (QApplication::activeWindow() == this) {
|
||||
if ((QApplication::activeWindow() == this) && isVisible() && !isMinimized()) {
|
||||
hide();
|
||||
}
|
||||
else {
|
||||
ensurePolished();
|
||||
setWindowState(windowState() & ~Qt::WindowMinimized);
|
||||
show();
|
||||
raise();
|
||||
activateWindow();
|
||||
@@ -595,8 +605,43 @@ void MainWindow::lockDatabasesAfterInactivity()
|
||||
m_ui->tabWidget->lockDatabases();
|
||||
}
|
||||
|
||||
void MainWindow::repairDatabase()
|
||||
{
|
||||
QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files"));
|
||||
QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QString(),
|
||||
filter);
|
||||
if (fileName.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QScopedPointer<QDialog> dialog(new QDialog(this));
|
||||
DatabaseRepairWidget* dbRepairWidget = new DatabaseRepairWidget(dialog.data());
|
||||
connect(dbRepairWidget, SIGNAL(success()), dialog.data(), SLOT(accept()));
|
||||
connect(dbRepairWidget, SIGNAL(error()), dialog.data(), SLOT(reject()));
|
||||
dbRepairWidget->load(fileName);
|
||||
if (dialog->exec() == QDialog::Accepted && dbRepairWidget->database()) {
|
||||
QString saveFileName = fileDialog()->getSaveFileName(this, tr("Save repaired database"), QString(),
|
||||
tr("KeePass 2 Database").append(" (*.kdbx)"),
|
||||
Q_NULLPTR, 0, "kdbx");
|
||||
|
||||
if (!saveFileName.isEmpty()) {
|
||||
KeePass2Writer writer;
|
||||
writer.writeDatabase(saveFileName, dbRepairWidget->database());
|
||||
if (writer.hasError()) {
|
||||
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
|
||||
+ writer.errorString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::isTrayIconEnabled() const
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
// systray not useful on OS X
|
||||
return false;
|
||||
#else
|
||||
return config()->get("GUI/ShowTrayIcon").toBool()
|
||||
&& QSystemTrayIcon::isSystemTrayAvailable();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ private Q_SLOTS:
|
||||
void trayIconTriggered(QSystemTrayIcon::ActivationReason reason);
|
||||
void toggleWindow();
|
||||
void lockDatabasesAfterInactivity();
|
||||
void repairDatabase();
|
||||
|
||||
private:
|
||||
static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0);
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionImportKeePass1"/>
|
||||
<addaction name="actionExportCsv"/>
|
||||
<addaction name="actionRepairDatabase"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionQuit"/>
|
||||
</widget>
|
||||
@@ -422,6 +423,11 @@
|
||||
<string>Export to CSV file</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRepairDatabase">
|
||||
<property name="text">
|
||||
<string>Repair database</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
||||
@@ -49,7 +49,7 @@ void PasswordComboBox::setEcho(bool echo)
|
||||
// Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6)
|
||||
setStyleSheet("QComboBox { font-family: monospace,Menlo,Monaco; }");
|
||||
#else
|
||||
setStyleSheet("QComboBox { font-family: monospace,Courier; }");
|
||||
setStyleSheet("QComboBox { font-family: monospace,Courier New; }");
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ void PasswordEdit::updateStylesheet()
|
||||
// Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6)
|
||||
stylesheet.append("font-family: monospace,Menlo,Monaco; ");
|
||||
#else
|
||||
stylesheet.append("font-family: monospace; ");
|
||||
stylesheet.append("font-family: monospace,Courier New; ");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -88,6 +88,14 @@ void PasswordGeneratorWidget::reset()
|
||||
updateGenerator();
|
||||
}
|
||||
|
||||
void PasswordGeneratorWidget::regeneratePassword()
|
||||
{
|
||||
if (m_generator->isValid()) {
|
||||
QString password = m_generator->generatePassword();
|
||||
m_ui->editNewPassword->setEditText(password);
|
||||
}
|
||||
}
|
||||
|
||||
void PasswordGeneratorWidget::updateApplyEnabled(const QString& password)
|
||||
{
|
||||
m_ui->buttonApply->setEnabled(!password.isEmpty());
|
||||
@@ -111,6 +119,10 @@ void PasswordGeneratorWidget::sliderMoved()
|
||||
|
||||
void PasswordGeneratorWidget::spinBoxChanged()
|
||||
{
|
||||
if (m_updatingSpinBox) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Interlock so that we don't update twice - this causes issues as the spinbox can go higher than slider
|
||||
m_updatingSpinBox = true;
|
||||
|
||||
@@ -161,12 +173,39 @@ PasswordGenerator::GeneratorFlags PasswordGeneratorWidget::generatorFlags()
|
||||
|
||||
void PasswordGeneratorWidget::updateGenerator()
|
||||
{
|
||||
m_generator->setLength(m_ui->spinBoxLength->value());
|
||||
m_generator->setCharClasses(charClasses());
|
||||
m_generator->setFlags(generatorFlags());
|
||||
PasswordGenerator::CharClasses classes = charClasses();
|
||||
PasswordGenerator::GeneratorFlags flags = generatorFlags();
|
||||
|
||||
if (m_generator->isValid()) {
|
||||
QString password = m_generator->generatePassword();
|
||||
m_ui->editNewPassword->setEditText(password);
|
||||
int minLength = 0;
|
||||
if (flags.testFlag(PasswordGenerator::CharFromEveryGroup)) {
|
||||
if (classes.testFlag(PasswordGenerator::LowerLetters)) {
|
||||
minLength++;
|
||||
}
|
||||
if (classes.testFlag(PasswordGenerator::UpperLetters)) {
|
||||
minLength++;
|
||||
}
|
||||
if (classes.testFlag(PasswordGenerator::Numbers)) {
|
||||
minLength++;
|
||||
}
|
||||
if (classes.testFlag(PasswordGenerator::SpecialCharacters)) {
|
||||
minLength++;
|
||||
}
|
||||
}
|
||||
minLength = qMax(minLength, 1);
|
||||
|
||||
if (m_ui->spinBoxLength->value() < minLength) {
|
||||
m_updatingSpinBox = true;
|
||||
m_ui->spinBoxLength->setValue(minLength);
|
||||
m_ui->sliderLength->setValue(minLength);
|
||||
m_updatingSpinBox = false;
|
||||
}
|
||||
|
||||
m_ui->spinBoxLength->setMinimum(minLength);
|
||||
m_ui->sliderLength->setMinimum(minLength);
|
||||
|
||||
m_generator->setLength(m_ui->spinBoxLength->value());
|
||||
m_generator->setCharClasses(classes);
|
||||
m_generator->setFlags(flags);
|
||||
|
||||
regeneratePassword();
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ public:
|
||||
~PasswordGeneratorWidget();
|
||||
void loadSettings();
|
||||
void reset();
|
||||
void regeneratePassword();
|
||||
|
||||
Q_SIGNALS:
|
||||
void newPassword(const QString& password);
|
||||
|
||||
@@ -41,6 +41,11 @@ SettingsWidget::SettingsWidget(QWidget* parent)
|
||||
|
||||
m_generalUi->autoTypeShortcutWidget->setVisible(autoType()->isAvailable());
|
||||
m_generalUi->autoTypeShortcutLabel->setVisible(autoType()->isAvailable());
|
||||
#ifdef Q_OS_MAC
|
||||
// systray not useful on OS X
|
||||
m_generalUi->systrayShowCheckBox->setVisible(false);
|
||||
m_generalUi->systrayMinimizeToTrayCheckBox->setVisible(false);
|
||||
#endif
|
||||
|
||||
connect(this, SIGNAL(accepted()), SLOT(saveSettings()));
|
||||
connect(this, SIGNAL(rejected()), SLOT(reject()));
|
||||
|
||||
@@ -33,5 +33,6 @@ void UnlockDatabaseWidget::clearForms()
|
||||
m_ui->comboKeyFile->clear();
|
||||
m_ui->checkPassword->setChecked(false);
|
||||
m_ui->checkKeyFile->setChecked(false);
|
||||
m_ui->buttonTogglePassword->setChecked(false);
|
||||
m_db = Q_NULLPTR;
|
||||
}
|
||||
|
||||
@@ -294,6 +294,7 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
|
||||
m_mainUi->expireDatePicker->setReadOnly(m_history);
|
||||
m_mainUi->notesEdit->setReadOnly(m_history);
|
||||
m_mainUi->tooglePasswordGeneratorButton->setChecked(false);
|
||||
m_mainUi->tooglePasswordGeneratorButton->setDisabled(m_history);
|
||||
m_mainUi->passwordGenerator->reset();
|
||||
m_advancedUi->addAttachmentButton->setEnabled(!m_history);
|
||||
updateAttachmentButtonsEnabled(m_advancedUi->attachmentsView->currentIndex());
|
||||
@@ -486,6 +487,7 @@ void EditEntryWidget::clear()
|
||||
|
||||
void EditEntryWidget::togglePasswordGeneratorButton(bool checked)
|
||||
{
|
||||
m_mainUi->passwordGenerator->regeneratePassword();
|
||||
m_mainUi->passwordGenerator->setVisible(checked);
|
||||
}
|
||||
|
||||
@@ -671,6 +673,14 @@ void EditEntryWidget::openAttachment(const QModelIndex& index)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!file->flush()) {
|
||||
MessageBox::warning(this, tr("Error"),
|
||||
tr("Unable to save the attachment:\n").append(file->errorString()));
|
||||
return;
|
||||
}
|
||||
|
||||
file->close();
|
||||
|
||||
QDesktopServices::openUrl(QUrl::fromLocalFile(file->fileName()));
|
||||
}
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
|
||||
switch (index.column()) {
|
||||
case ParentGroup:
|
||||
if (entry->group()) {
|
||||
return entry->group()->iconPixmap();
|
||||
return entry->group()->iconScaledPixmap();
|
||||
}
|
||||
break;
|
||||
case Title:
|
||||
@@ -154,7 +154,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
|
||||
return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex);
|
||||
}
|
||||
else {
|
||||
return entry->iconPixmap();
|
||||
return entry->iconScaledPixmap();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -239,7 +239,7 @@ QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
else {
|
||||
data->setData(mimeTypes().first(), encoded);
|
||||
data->setData(mimeTypes().at(0), encoded);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ QVariant GroupModel::data(const QModelIndex& index, int role) const
|
||||
return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex);
|
||||
}
|
||||
else {
|
||||
return group->iconPixmap();
|
||||
return group->iconScaledPixmap();
|
||||
}
|
||||
}
|
||||
else if (role == Qt::FontRole) {
|
||||
@@ -357,7 +357,7 @@ QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const
|
||||
return Q_NULLPTR;
|
||||
}
|
||||
else {
|
||||
data->setData(mimeTypes().first(), encoded);
|
||||
data->setData(mimeTypes().at(0), encoded);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ public:
|
||||
QModelIndex index(Group* group) const;
|
||||
Group* groupFromIndex(const QModelIndex& index) const;
|
||||
|
||||
int rowCount(const QModelIndex& parent = QModelIndex()) const;
|
||||
int columnCount(const QModelIndex& parent = QModelIndex()) const;
|
||||
int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
|
||||
int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
|
||||
QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
|
||||
QModelIndex parent(const QModelIndex& index) const Q_DECL_OVERRIDE;
|
||||
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
|
||||
|
||||
@@ -49,7 +49,7 @@ private Q_SLOTS:
|
||||
void modelReset();
|
||||
|
||||
protected:
|
||||
void dragMoveEvent(QDragMoveEvent* event);
|
||||
void dragMoveEvent(QDragMoveEvent* event) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
void recInitExpanded(Group* group);
|
||||
|
||||
@@ -211,7 +211,10 @@ QByteArray FileKey::loadXmlKey(QXmlStreamReader& xmlReader)
|
||||
while (!xmlReader.error() && xmlReader.readNextStartElement()) {
|
||||
if (xmlReader.name() == "Data") {
|
||||
// TODO: do we need to enforce a specific data.size()?
|
||||
data = QByteArray::fromBase64(xmlReader.readElementText().toLatin1());
|
||||
QByteArray rawData = xmlReader.readElementText().toLatin1();
|
||||
if (Tools::isBase64(rawData)) {
|
||||
data = QByteArray::fromBase64(rawData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ int main(int argc, char** argv)
|
||||
#ifdef QT_NO_DEBUG
|
||||
Tools::disableCoreDumps();
|
||||
#endif
|
||||
Tools::setupSearchPaths();
|
||||
|
||||
Application app(argc, argv);
|
||||
Application::setApplicationName("keepassx");
|
||||
@@ -82,6 +83,7 @@ int main(int argc, char** argv)
|
||||
|
||||
MainWindow mainWindow;
|
||||
mainWindow.show();
|
||||
app.setMainWindow(&mainWindow);
|
||||
|
||||
QObject::connect(&app, SIGNAL(openFile(QString)), &mainWindow, SLOT(openDatabase(QString)));
|
||||
|
||||
|
||||
@@ -54,7 +54,9 @@ void HashedBlockStream::init()
|
||||
|
||||
bool HashedBlockStream::reset()
|
||||
{
|
||||
if (isWritable()) {
|
||||
// Write final block(s) only if device is writable and we haven't
|
||||
// already written a final block.
|
||||
if (isWritable() && (!m_buffer.isEmpty() || m_blockIndex != 0)) {
|
||||
if (!m_buffer.isEmpty()) {
|
||||
if (!writeHashedBlock()) {
|
||||
return false;
|
||||
@@ -74,7 +76,9 @@ bool HashedBlockStream::reset()
|
||||
|
||||
void HashedBlockStream::close()
|
||||
{
|
||||
if (isWritable()) {
|
||||
// Write final block(s) only if device is writable and we haven't
|
||||
// already written a final block.
|
||||
if (isWritable() && (!m_buffer.isEmpty() || m_blockIndex != 0)) {
|
||||
if (!m_buffer.isEmpty()) {
|
||||
writeHashedBlock();
|
||||
}
|
||||
|
||||
@@ -31,8 +31,8 @@ public:
|
||||
HashedBlockStream(QIODevice* baseDevice, qint32 blockSize);
|
||||
~HashedBlockStream();
|
||||
|
||||
bool reset();
|
||||
void close();
|
||||
bool reset() Q_DECL_OVERRIDE;
|
||||
void close() Q_DECL_OVERRIDE;
|
||||
|
||||
protected:
|
||||
qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE;
|
||||
|
||||
@@ -25,6 +25,7 @@ SymmetricCipherStream::SymmetricCipherStream(QIODevice* baseDevice, SymmetricCip
|
||||
, m_bufferFilling(false)
|
||||
, m_error(false)
|
||||
, m_isInitalized(false)
|
||||
, m_dataWritten(false)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -43,6 +44,16 @@ bool SymmetricCipherStream::init(const QByteArray& key, const QByteArray& iv)
|
||||
return m_isInitalized;
|
||||
}
|
||||
|
||||
void SymmetricCipherStream::resetInternalState()
|
||||
{
|
||||
m_buffer.clear();
|
||||
m_bufferPos = 0;
|
||||
m_bufferFilling = false;
|
||||
m_error = false;
|
||||
m_dataWritten = false;
|
||||
m_cipher->reset();
|
||||
}
|
||||
|
||||
bool SymmetricCipherStream::open(QIODevice::OpenMode mode)
|
||||
{
|
||||
if (!m_isInitalized) {
|
||||
@@ -54,27 +65,25 @@ bool SymmetricCipherStream::open(QIODevice::OpenMode mode)
|
||||
|
||||
bool SymmetricCipherStream::reset()
|
||||
{
|
||||
if (isWritable()) {
|
||||
if (isWritable() && m_dataWritten) {
|
||||
if (!writeBlock(true)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
m_buffer.clear();
|
||||
m_bufferPos = 0;
|
||||
m_bufferFilling = false;
|
||||
m_error = false;
|
||||
m_cipher->reset();
|
||||
resetInternalState();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SymmetricCipherStream::close()
|
||||
{
|
||||
if (isWritable()) {
|
||||
if (isWritable() && m_dataWritten) {
|
||||
writeBlock(true);
|
||||
}
|
||||
|
||||
resetInternalState();
|
||||
|
||||
LayeredStream::close();
|
||||
}
|
||||
|
||||
@@ -115,11 +124,25 @@ qint64 SymmetricCipherStream::readData(char* data, qint64 maxSize)
|
||||
|
||||
bool SymmetricCipherStream::readBlock()
|
||||
{
|
||||
QByteArray newData;
|
||||
|
||||
if (m_bufferFilling) {
|
||||
m_buffer.append(m_baseDevice->read(m_cipher->blockSize() - m_buffer.size()));
|
||||
newData.resize(m_cipher->blockSize() - m_buffer.size());
|
||||
}
|
||||
else {
|
||||
m_buffer = m_baseDevice->read(m_cipher->blockSize());
|
||||
m_buffer.clear();
|
||||
newData.resize(m_cipher->blockSize());
|
||||
}
|
||||
|
||||
int readResult = m_baseDevice->read(newData.data(), newData.size());
|
||||
|
||||
if (readResult == -1) {
|
||||
m_error = true;
|
||||
setErrorString(m_baseDevice->errorString());
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
m_buffer.append(newData.left(readResult));
|
||||
}
|
||||
|
||||
if (m_buffer.size() != m_cipher->blockSize()) {
|
||||
@@ -172,6 +195,7 @@ qint64 SymmetricCipherStream::writeData(const char* data, qint64 maxSize)
|
||||
return -1;
|
||||
}
|
||||
|
||||
m_dataWritten = true;
|
||||
qint64 bytesRemaining = maxSize;
|
||||
qint64 offset = 0;
|
||||
|
||||
@@ -200,6 +224,8 @@ qint64 SymmetricCipherStream::writeData(const char* data, qint64 maxSize)
|
||||
|
||||
bool SymmetricCipherStream::writeBlock(bool lastBlock)
|
||||
{
|
||||
Q_ASSERT(lastBlock || (m_buffer.size() == m_cipher->blockSize()));
|
||||
|
||||
if (lastBlock) {
|
||||
// PKCS7 padding
|
||||
int padLen = m_cipher->blockSize() - m_buffer.size();
|
||||
@@ -207,9 +233,6 @@ bool SymmetricCipherStream::writeBlock(bool lastBlock)
|
||||
m_buffer.append(static_cast<char>(padLen));
|
||||
}
|
||||
}
|
||||
else if (m_buffer.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!m_cipher->processInPlace(m_buffer)) {
|
||||
m_error = true;
|
||||
@@ -219,7 +242,7 @@ bool SymmetricCipherStream::writeBlock(bool lastBlock)
|
||||
|
||||
if (m_baseDevice->write(m_buffer) != m_buffer.size()) {
|
||||
m_error = true;
|
||||
setErrorString(m_cipher->errorString());
|
||||
setErrorString(m_baseDevice->errorString());
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -42,6 +42,7 @@ protected:
|
||||
qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
void resetInternalState();
|
||||
bool readBlock();
|
||||
bool writeBlock(bool lastBlock);
|
||||
|
||||
@@ -51,6 +52,7 @@ private:
|
||||
bool m_bufferFilling;
|
||||
bool m_error;
|
||||
bool m_isInitalized;
|
||||
bool m_dataWritten;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_SYMMETRICCIPHERSTREAM_H
|
||||
|
||||
@@ -93,9 +93,9 @@ set(TEST_LIBRARIES
|
||||
${ZLIB_LIBRARIES}
|
||||
)
|
||||
|
||||
set(modeltest_SOURCRS modeltest.cpp)
|
||||
qt4_wrap_cpp(modeltest_SOURCRS modeltest.h)
|
||||
add_library(modeltest STATIC ${modeltest_SOURCRS})
|
||||
set(testsupport_SOURCES modeltest.cpp FailDevice.cpp)
|
||||
qt4_wrap_cpp(testsupport_SOURCES modeltest.h FailDevice.h)
|
||||
add_library(testsupport STATIC ${testsupport_SOURCES})
|
||||
|
||||
add_unit_test(NAME testgroup SOURCES TestGroup.cpp MOCS TestGroup.h
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
@@ -110,13 +110,13 @@ add_unit_test(NAME testkeepass2reader SOURCES TestKeePass2Reader.cpp MOCS TestKe
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testkeepass2writer SOURCES TestKeePass2Writer.cpp MOCS TestKeePass2Writer.h
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
LIBS testsupport ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testgroupmodel SOURCES TestGroupModel.cpp MOCS TestGroupModel.h
|
||||
LIBS modeltest ${TEST_LIBRARIES})
|
||||
LIBS testsupport ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testentrymodel SOURCES TestEntryModel.cpp MOCS TestEntryModel.h
|
||||
LIBS modeltest ${TEST_LIBRARIES})
|
||||
LIBS testsupport ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testcryptohash SOURCES TestCryptoHash.cpp MOCS TestCryptoHash.h
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
@@ -125,7 +125,7 @@ add_unit_test(NAME testsymmetriccipher SOURCES TestSymmetricCipher.cpp MOCS Test
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testhashedblockstream SOURCES TestHashedBlockStream.cpp MOCS TestHashedBlockStream.h
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
LIBS testsupport ${TEST_LIBRARIES})
|
||||
|
||||
add_unit_test(NAME testkeepass2randomstream SOURCES TestKeePass2RandomStream.cpp MOCS TestKeePass2RandomStream.h
|
||||
LIBS ${TEST_LIBRARIES})
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user