mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-12-04 15:39:34 +01:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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
|
||||
|
||||
19
CHANGELOG
19
CHANGELOG
@@ -1,3 +1,22 @@
|
||||
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")
|
||||
set(KEEPASSX_VERSION_NUM "2.0")
|
||||
|
||||
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>
|
||||
|
||||
@@ -3,22 +3,26 @@
|
||||
<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>
|
||||
</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 +44,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 +95,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>
|
||||
@@ -103,11 +107,21 @@
|
||||
</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 +148,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open the database.</source>
|
||||
<translation>Databázi nebylo možné otevřít.</translation>
|
||||
<translation>Databázi se nepodařilo 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>
|
||||
@@ -165,7 +179,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Transform rounds:</source>
|
||||
<translation>Počet průchodů:</translation>
|
||||
<translation>Počet průchodů algoritmu:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
@@ -173,7 +187,7 @@
|
||||
</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>
|
||||
@@ -185,11 +199,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history items:</source>
|
||||
<translation>Nejvyšší umožněný položek historie:</translation>
|
||||
<translation>Nejvyšší umožněný počet položek historie:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history size:</source>
|
||||
<translation>Nejvyšší umožněná velikost historie:</translation>
|
||||
<translation>Nejvyšší umožněný objem dat historie záznamů:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -200,7 +214,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
<translation>Databáze aplikace KeePass 2</translation>
|
||||
<translation>Databáze aplikace KeePass verze 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -220,11 +234,11 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Open KeePass 1 database</source>
|
||||
<translation>Otevřít databázi aplikace KeePass 1</translation>
|
||||
<translation>Otevřít databázi aplikace KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 1 database</source>
|
||||
<translation>Databáze aplikace KeePass 1</translation>
|
||||
<translation>Databáze aplikace KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files (*)</source>
|
||||
@@ -234,12 +248,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>
|
||||
@@ -270,6 +278,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íš již 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 neuzamykat.</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 +349,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 +357,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 +365,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 +373,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>Nepodařilo se spočítat hlavní klíč</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidget</name>
|
||||
@@ -330,7 +404,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 +444,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 +453,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 +462,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,20 +499,24 @@ 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>
|
||||
@@ -500,7 +578,7 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gen.</source>
|
||||
<translation>Obec.</translation>
|
||||
<translation>Tvoř</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
@@ -551,7 +629,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 +652,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 +671,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 +699,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. Používá ji %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 +732,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 +777,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 aplikace KeePass verze 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
@@ -724,6 +810,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 +829,16 @@ 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>
|
||||
</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,10 +871,6 @@ 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>
|
||||
@@ -847,7 +937,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 +947,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 +961,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>
|
||||
@@ -913,6 +995,22 @@ Uložit změny?</translation>
|
||||
<source>Toggle window</source>
|
||||
<translation>Přepnout 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -942,15 +1040,15 @@ Uložit změny?</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 +1067,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 +1083,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 +1091,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 +1102,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 +1110,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 +1121,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 +1140,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>
|
||||
@@ -1087,39 +1185,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 +1221,26 @@ Uložit změny?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
<translation>Zobrazit ikonu v oznamovací oblasti</translation>
|
||||
<translation>Zobrazit 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 +1248,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 +1261,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 +1273,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,16 @@
|
||||
<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>
|
||||
</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 +44,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 +107,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 +136,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Adgangskode:</translation>
|
||||
<translation>Kodeord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
@@ -165,7 +179,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Transform rounds:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Transformationsrunder:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
@@ -185,18 +199,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 +248,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 +255,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 +278,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 +345,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 +353,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 +361,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 +369,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 +400,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 +412,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry history</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Indtastningshistorik</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add entry</source>
|
||||
@@ -356,7 +428,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 +449,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 +494,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 +527,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 +565,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Adgangskode:</translation>
|
||||
<translation>Kodeord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat:</source>
|
||||
@@ -497,7 +573,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Gen.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Generer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
@@ -509,7 +585,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Presets</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Predefinerede</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
@@ -571,7 +647,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 +694,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 +803,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 +824,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -774,10 +866,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 +924,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 +942,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 +956,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 +990,28 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Adgangskode:</translation>
|
||||
<translation>Kodeord:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Length:</source>
|
||||
@@ -923,7 +1019,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 +1027,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 +1035,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 +1116,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 +1128,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 +1150,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 +1158,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Rodgruppe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1073,7 +1169,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>General</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Generelt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Security</source>
|
||||
@@ -1084,15 +1180,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 +1200,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 +1222,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 +1239,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 +1256,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 +1268,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 +1276,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,11 @@
|
||||
</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>
|
||||
</context>
|
||||
<context>
|
||||
@@ -109,6 +113,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>
|
||||
@@ -234,12 +247,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 +277,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 +373,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 +492,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 +647,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 +803,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 +822,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -776,10 +864,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 +940,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 +988,22 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1092,10 +1184,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 +1220,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 +1241,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 +1254,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 +1276,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>
|
||||
@@ -316,6 +324,11 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -824,6 +837,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>
|
||||
@@ -1274,10 +1294,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>
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key files</source>
|
||||
<translation>Archivos de llaves</translation>
|
||||
<translation>Archivos llave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>All files</source>
|
||||
@@ -109,6 +109,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 +128,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key File:</source>
|
||||
<translation>Archivo clave:</translation>
|
||||
<translation>Archivo llave:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
@@ -196,7 +206,7 @@
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Raíz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
@@ -234,12 +244,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 +274,60 @@ 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>
|
||||
</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 +365,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 +485,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 +640,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 +794,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 +815,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +857,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 +915,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 +933,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 +981,22 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1065,7 +1149,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Grupo raíz</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1093,10 +1177,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 +1213,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 +1247,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>
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -25,7 +29,7 @@
|
||||
<name>AutoTypeAssociationsModel</name>
|
||||
<message>
|
||||
<source>Window</source>
|
||||
<translation>Fenêtre </translation>
|
||||
<translation>Fenêtre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Sequence</source>
|
||||
@@ -63,7 +67,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Key file</source>
|
||||
<translation>Fichier de clé</translation>
|
||||
<translation>Fichier-clé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
@@ -83,7 +87,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 +95,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 +113,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 +152,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 +160,11 @@
|
||||
</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>
|
||||
@@ -177,7 +191,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source> MiB</source>
|
||||
<translation>MiB</translation>
|
||||
<translation> MiB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Benchmark</source>
|
||||
@@ -208,7 +222,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 +230,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 +246,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 +264,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 +278,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>Verrouiiler 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 +373,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 +392,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Advanced</source>
|
||||
<translation>Avancées</translation>
|
||||
<translation>Avancé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Icon</source>
|
||||
@@ -330,11 +400,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 +449,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 +466,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 +493,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 +524,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 +532,14 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set custom sequence:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Définir une séquence personnalisé :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetHistory</name>
|
||||
<message>
|
||||
<source>Show</source>
|
||||
<translation>Exposer</translation>
|
||||
<translation>Afficher</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restore</source>
|
||||
@@ -484,19 +558,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>Non 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 +578,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>URL:</source>
|
||||
<translation>URL:</translation>
|
||||
<translation>URL :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
@@ -516,7 +590,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
<translation>Notes:</translation>
|
||||
<translation>Notes :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -531,15 +605,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 +640,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
<translation>Expires</translation>
|
||||
<translation>Expiration</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Search</source>
|
||||
@@ -574,7 +648,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 +687,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 +714,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Uuid:</source>
|
||||
<translation>Uuid:</translation>
|
||||
<translation>Uuid :</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -684,14 +766,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,14 +781,14 @@ 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>
|
||||
@@ -724,6 +806,10 @@ Enregistrer les modifications ?</translation>
|
||||
<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>
|
||||
@@ -739,6 +825,10 @@ Enregistrer les modifications ?</translation>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Mauvaise clé ou fichier de base de donnée corrompu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation>Impossible de calculer la clé maître</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +867,6 @@ Enregistrer les modifications ?</translation>
|
||||
<source>Groups</source>
|
||||
<translation>Groupes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Extras</source>
|
||||
<translation>Extras</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Vue</translation>
|
||||
@@ -857,18 +943,10 @@ 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>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Copier le mot de passe dans le presse-papiers</translation>
|
||||
@@ -879,7 +957,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 +991,28 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Mot de passe:</translation>
|
||||
<translation>Mot de passe :</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Length:</source>
|
||||
@@ -1023,15 +1117,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>
|
||||
@@ -1093,10 +1187,6 @@ Enregistrer les modifications ?</translation>
|
||||
<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"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Sauvegarde automatiquement à la sortie</translation>
|
||||
@@ -1107,7 +1197,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Minimize when copying to clipboard</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Réduire lors de la copie dans le presse-papiers</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use group icon on entry creation</source>
|
||||
@@ -1115,11 +1205,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,11 +1217,15 @@ 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>
|
||||
@@ -1142,7 +1236,7 @@ Enregistrer les modifications ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> sec</source>
|
||||
<translation>s</translation>
|
||||
<translation> s</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after inactivity of</source>
|
||||
@@ -1154,7 +1248,7 @@ 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>
|
||||
@@ -1163,14 +1257,6 @@ Enregistrer les modifications ?</translation>
|
||||
<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>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WelcomeWidget</name>
|
||||
@@ -1193,13 +1279,9 @@ Enregistrer les modifications ?</translation>
|
||||
<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,11 @@
|
||||
</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>
|
||||
</context>
|
||||
<context>
|
||||
@@ -18,7 +22,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 +55,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>
|
||||
@@ -91,7 +95,7 @@
|
||||
</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>
|
||||
@@ -103,18 +107,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 yang berbeda diberikan.</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 +136,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Kata sandi:</translation>
|
||||
<translation>Sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
@@ -134,11 +148,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>
|
||||
@@ -173,7 +187,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Use recycle bin:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Gunakan tong sampah:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> MiB</source>
|
||||
@@ -196,7 +210,7 @@
|
||||
<name>DatabaseTabWidget</name>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 2 Database</source>
|
||||
@@ -234,12 +248,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 +264,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 +278,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 +345,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 +353,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 +369,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 +412,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Entry history</source>
|
||||
<translation>Entri riwayat</translation>
|
||||
<translation>Riwayat entri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add entry</source>
|
||||
@@ -370,7 +440,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 +449,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 +458,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 +485,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove</source>
|
||||
<translation>Hapus</translation>
|
||||
<translation>Buang</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Attachments</source>
|
||||
@@ -425,6 +495,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 +508,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 +532,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 +566,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Kata sandi:</translation>
|
||||
<translation>Sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Repeat:</source>
|
||||
@@ -508,7 +582,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
<translation>Kadaluarsa</translation>
|
||||
<translation>Kedaluwarsa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Presets</source>
|
||||
@@ -551,7 +625,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 +640,7 @@ Simpan perubahan?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Expires</source>
|
||||
<translation>Kadaluarsa</translation>
|
||||
<translation>Kedaluwarsa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Search</source>
|
||||
@@ -576,6 +650,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 +667,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 +691,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 +766,7 @@ Simpan perubahan?</translation>
|
||||
<name>Group</name>
|
||||
<message>
|
||||
<source>Recycle Bin</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Tong Sampah</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -699,52 +781,60 @@ 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>
|
||||
</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 +849,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 +867,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 +901,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 +937,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 +957,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 +985,34 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
<message>
|
||||
<source>Password:</source>
|
||||
<translation>Kata sandi:</translation>
|
||||
<translation>Sandi:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Length:</source>
|
||||
@@ -926,15 +1020,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 +1040,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 +1055,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,29 +1091,29 @@ 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>
|
||||
@@ -1035,7 +1129,7 @@ Simpan perubahan?</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 +1151,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 +1187,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 +1197,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 +1205,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 +1217,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 +1240,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>
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
<name>AboutDialog</name>
|
||||
<message>
|
||||
<source>About KeePassX</source>
|
||||
<translation>A proposito di KeePassX</translation>
|
||||
<translation>Informazioni su 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 è distribuito sotto i termini della licenza
|
||||
GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</translation>
|
||||
<translation>KeePassX è distribuito sotto i termini della licenza GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Revision</source>
|
||||
<translation>Revisione</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -19,7 +22,7 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Couldn't find an entry that matches the window title:</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile trovare una voce che corrisponda al titolo della finestra</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -68,7 +71,7 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Browse</source>
|
||||
<translation>Sfogliare</translation>
|
||||
<translation>Sfoglia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Create</source>
|
||||
@@ -96,7 +99,7 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Select a key file</source>
|
||||
<translation>Selezionare file chiave</translation>
|
||||
<translation>Seleziona il file chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Question</source>
|
||||
@@ -112,12 +115,12 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set key file</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile impostare il file chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to set %1 as the Key file:
|
||||
%2</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile impostare %1 come file Chiave: %2</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -156,11 +159,11 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Key files</source>
|
||||
<translation>File chiave</translation>
|
||||
<translation>Files chiave</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file</source>
|
||||
<translation>Selezionare file chiave</translation>
|
||||
<translation>Seleziona file chiave</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -171,11 +174,11 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Database description:</source>
|
||||
<translation>Descrizione database:</translation>
|
||||
<translation>Descrizione del database:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Transform rounds:</source>
|
||||
<translation>Round di trasformazione:</translation>
|
||||
<translation>Rounds di trasformazione:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
@@ -191,7 +194,7 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Benchmark</source>
|
||||
<translation>Benchmark</translation>
|
||||
<translation>Prestazione</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Max. history items:</source>
|
||||
@@ -218,7 +221,7 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Open database</source>
|
||||
<translation>Aprire database</translation>
|
||||
<translation>Apri database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Warning</source>
|
||||
@@ -230,7 +233,7 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
</message>
|
||||
<message>
|
||||
<source>Open KeePass 1 database</source>
|
||||
<translation>Aprire database KeePass 1</translation>
|
||||
<translation>Apri database KeePass 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePass 1 database</source>
|
||||
@@ -244,12 +247,6 @@ GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3.</
|
||||
<source>Close?</source>
|
||||
<translation>Chiudere?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Close anyway?</source>
|
||||
<translation>"%1" è in modalità modifica.
|
||||
Chiudere comunque?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Save changes?</source>
|
||||
<translation>Salvare modifiche?</translation>
|
||||
@@ -283,34 +280,63 @@ Salvare le modifiche?</translation>
|
||||
<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 type="unfinished"/>
|
||||
<translation>Il Database che stai tentando di aprire è bloccato da un'altra esecuzione di KeePassX.
|
||||
Vuoi aprirlo comunque? In alternativa, il database verrà aperto in sola lettura.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock database</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Bloccare 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 type="unfinished"/>
|
||||
<translation>Non è possibile bloccare il database nel modo in cui lo stai modificando.
|
||||
Premere annulla per terminare le modifiche o scartarle .</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Questo database non è mai stato salvato.
|
||||
È possibile salvare il database o interrompere il blocco.</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>Questo database è stato modificato.
|
||||
Vuoi salvare il database prima di bloccarlo?
|
||||
Altrimenti le modifiche verranno perse.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation>"%1" è in modalità modifica.
|
||||
Annullare le modifiche e chiudere comunque?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation>Esporta il database come file CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation>file CSV</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation>Scrittura del file CSV fallita.</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>Il database che si sta tentando di salvare è bloccato da un'altra istanza di KeePassX.
|
||||
Vuoi salvare comunque?</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
<message>
|
||||
<source>Change master key</source>
|
||||
<translation>Cambiare password principale</translation>
|
||||
<translation>Cambia password principale</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete entry?</source>
|
||||
@@ -350,11 +376,11 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Errore</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile calcolare la chiave principale</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -409,7 +435,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select file</source>
|
||||
<translation>Selezionare file</translation>
|
||||
<translation>Seleziona file</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to open file</source>
|
||||
@@ -422,7 +448,7 @@ Otherwise your changes are lost.</source>
|
||||
<message>
|
||||
<source>Unable to save the attachment:
|
||||
</source>
|
||||
<translation>Impossibile salvare l'allegato
|
||||
<translation>Impossibile salvare l'allegato:
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -470,7 +496,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Aprire</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -559,7 +585,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Presets</source>
|
||||
<translation>Programmare</translation>
|
||||
<translation>Presets</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Notes:</source>
|
||||
@@ -582,19 +608,19 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add group</source>
|
||||
<translation>Aggiungere gruppo</translation>
|
||||
<translation>Aggiungi gruppo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Edit group</source>
|
||||
<translation>Modificare gruppo</translation>
|
||||
<translation>Modifica gruppo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable</source>
|
||||
<translation>Abilitare</translation>
|
||||
<translation>Abilita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Disable</source>
|
||||
<translation>Disabilitare</translation>
|
||||
<translation>Disabilita</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Inherit from parent group (%1)</source>
|
||||
@@ -625,11 +651,11 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use default auto-type sequence of parent group</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ereditare la sequenza predefinita di auto-type dal gruppo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Usare sequenza auto-type predefinita</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -660,11 +686,11 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Select Image</source>
|
||||
<translation>Selezionare Immagine</translation>
|
||||
<translation>Seleziona Immagine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Can't delete icon!</source>
|
||||
<translation>Impossibile eliminare icona!</translation>
|
||||
<translation>Impossibile eliminare l'icona!</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source>Can't delete icon. Still used by %n item(s).</source>
|
||||
@@ -739,7 +765,7 @@ Otherwise your changes are lost.</source>
|
||||
<name>Group</name>
|
||||
<message>
|
||||
<source>Recycle Bin</source>
|
||||
<translation>Cestino (Gruppo)</translation>
|
||||
<translation>Cestino</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -773,15 +799,15 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Versione database non supportata</translation>
|
||||
<translation>Versione database KeePass non supportata.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Root</source>
|
||||
<translation>Root (KeePass1Reader)</translation>
|
||||
<translation>Root</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile calcolare la chiave master</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -792,26 +818,26 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unsupported KeePass database version.</source>
|
||||
<translation>Versione database non supportata</translation>
|
||||
<translation>Versione database KeePass non supportata.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Wrong key or database file is corrupt.</source>
|
||||
<translation>Password errata o database corrotto.</translation>
|
||||
<translation>Password errata o file database corrotto.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Unable to calculate master key</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Impossibile calcolare la chiave master</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
<message>
|
||||
<source>Fatal error while testing the cryptographic functions.</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Errore fatale durante il test delle funzioni di crittografia.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KeePassX - Error</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>KeePassx - Errore</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -834,7 +860,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy attribute to clipboard</source>
|
||||
<translation>Copiare attributi negli appunti</translation>
|
||||
<translation>Copia attributi negli appunti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Groups</source>
|
||||
@@ -842,7 +868,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>View</source>
|
||||
<translation>Visualizzare</translation>
|
||||
<translation>Visualizza</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Quit</source>
|
||||
@@ -916,18 +942,10 @@ Otherwise your changes are lost.</source>
|
||||
<source>Find</source>
|
||||
<translation>Trovare</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Username</source>
|
||||
<translation>Nome Utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username to clipboard</source>
|
||||
<translation>Copiare nome utente negli appunti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Password</source>
|
||||
<translation>Password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password to clipboard</source>
|
||||
<translation>Copiare password negli appunti</translation>
|
||||
@@ -962,7 +980,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show toolbar</source>
|
||||
<translation>Mostrare barra degli strumenti</translation>
|
||||
<translation>Mostra barra degli strumenti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>read-only</source>
|
||||
@@ -970,11 +988,23 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Toggle window</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Cambia finestra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Tools</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Strumenti</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation>Copia nome utente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation>Copia password</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation>Esporta in un file CSV</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1120,7 +1150,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Case sensitive</source>
|
||||
<translation>Case sensitive</translation>
|
||||
<translation>Riconoscimento di maiuscole e minuscole</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Current group</source>
|
||||
@@ -1150,7 +1180,7 @@ Otherwise your changes are lost.</source>
|
||||
<name>SettingsWidgetGeneral</name>
|
||||
<message>
|
||||
<source>Remember last databases</source>
|
||||
<translation>Ricordare ultimo database</translation>
|
||||
<translation>Ricorda ultimo database</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open previous databases on startup</source>
|
||||
@@ -1182,19 +1212,19 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Language</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Lingua</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show a system tray icon</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Mostra un'icona nell'area di notifica del sistema</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Hide window to system tray when minimized</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Nascondi la finestra nell'area di notifica del sistema quando viene minimizzata</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remember last key files</source>
|
||||
<translation type="unfinished"/>
|
||||
<translation>Ricorda gli ultimi files chiave</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -1209,7 +1239,7 @@ Otherwise your changes are lost.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lock databases after inactivity of</source>
|
||||
<translation>Bloccare database dopo un'inattività di</translation>
|
||||
<translation>Bloccare i database dopo un'inattività di</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show passwords in cleartext by default</source>
|
||||
@@ -1231,14 +1261,14 @@ Otherwise your changes are lost.</source>
|
||||
<name>WelcomeWidget</name>
|
||||
<message>
|
||||
<source>Welcome!</source>
|
||||
<translation>Benvenuto/a!</translation>
|
||||
<translation>Benvenuto!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>main</name>
|
||||
<message>
|
||||
<source>KeePassX - cross-platform password manager</source>
|
||||
<translation>KeePassX - gestore di password cross-platform</translation>
|
||||
<translation>KeePassX - gestore di password multipiattafroma</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>filename of the password database to open (*.kdbx)</source>
|
||||
@@ -1248,10 +1278,6 @@ Otherwise your changes are lost.</source>
|
||||
<source>path to a custom config file</source>
|
||||
<translation>percorso ad un file di configurazione personalizzato</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>password of the database (DANGEROUS!)</source>
|
||||
<translation>password del database (PERICOLOSO!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>key file of the database</source>
|
||||
<translation>file chiave del database</translation>
|
||||
|
||||
@@ -243,12 +243,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>
|
||||
@@ -305,6 +299,23 @@ Do you want to save the database before locking it?
|
||||
Otherwise your changes are lost.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -916,18 +927,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>
|
||||
@@ -976,6 +979,18 @@ Otherwise your changes are lost.</source>
|
||||
<source>Tools</source>
|
||||
<translation>ツール</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
|
||||
1284
share/translations/keepassx_ko.ts
Normal file
1284
share/translations/keepassx_ko.ts
Normal file
File diff suppressed because it is too large
Load Diff
1287
share/translations/keepassx_lt.ts
Normal file
1287
share/translations/keepassx_lt.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,10 @@
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -109,6 +113,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>
|
||||
@@ -234,12 +248,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 +278,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 +375,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 +495,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 +650,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 +806,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 +825,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +867,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 +943,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 +991,22 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1093,10 +1187,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>
|
||||
@@ -1133,6 +1223,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 +1257,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 +1279,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>
|
||||
|
||||
1278
share/translations/keepassx_pl.ts
Normal file
1278
share/translations/keepassx_pl.ts
Normal file
File diff suppressed because it is too large
Load Diff
1282
share/translations/keepassx_pt_BR.ts
Normal file
1282
share/translations/keepassx_pt_BR.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -244,12 +244,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 +304,24 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -920,18 +932,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 +984,18 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -44,7 +48,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Select entry to Auto-Type:</source>
|
||||
<translation>Выберете запись для автоввода:</translation>
|
||||
<translation>Выберите запись для автоввода:</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -103,12 +107,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 +164,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Select key file</source>
|
||||
<translation>Выберете файл-ключ</translation>
|
||||
<translation>Выберите файл-ключ</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -169,7 +183,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>Default username:</source>
|
||||
<translation>Имя пользователя по-умолчанию:</translation>
|
||||
<translation>Имя пользователя по умолчанию:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Use recycle bin:</source>
|
||||
@@ -234,12 +248,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 +276,65 @@ 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 type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>This database has never been saved.
|
||||
You can save the database or stop locking it.</source>
|
||||
<translation type="unfinished"/>
|
||||
</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 +372,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 +393,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Icon</source>
|
||||
<translation>Иконка</translation>
|
||||
<translation>Значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Auto-Type</source>
|
||||
@@ -425,6 +492,10 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>Сохранить</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>Открыть</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -527,7 +598,7 @@ Save changes?</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Icon</source>
|
||||
<translation>Иконка</translation>
|
||||
<translation>Значок</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Properties</source>
|
||||
@@ -574,26 +645,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 type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Set default auto-type sequence</source>
|
||||
<translation type="unfinished"/>
|
||||
</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 +688,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 +803,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 +822,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +864,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 +940,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 +988,22 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -950,7 +1041,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 +1114,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 +1184,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 +1220,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 +1241,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 +1254,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 +1276,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>
|
||||
|
||||
1285
share/translations/keepassx_sl_SI.ts
Normal file
1285
share/translations/keepassx_sl_SI.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,10 @@
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -109,6 +113,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>
|
||||
@@ -234,12 +248,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 +278,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 +375,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 +495,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 +650,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 +806,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 +825,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -777,10 +867,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 +943,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 +991,22 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1093,10 +1187,6 @@ Spara ändringarna?</translation>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
<source>Automatically save on exit</source>
|
||||
<translation>Spara automatiskt är applikationen anslutas</translation>
|
||||
@@ -1133,6 +1223,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 +1257,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 +1279,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>
|
||||
|
||||
1286
share/translations/keepassx_uk.ts
Normal file
1286
share/translations/keepassx_uk.ts
Normal file
File diff suppressed because it is too large
Load Diff
@@ -244,12 +244,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 +304,23 @@ Otherwise your changes are lost.</source>
|
||||
你想在锁住它以前保存修改吗?
|
||||
否则修改将会丢失。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>"%1" is in edit mode.
|
||||
Discard changes and close anyway?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export database to CSV file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>CSV file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Writing the CSV file failed.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DatabaseWidget</name>
|
||||
@@ -921,18 +932,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 +984,18 @@ Otherwise your changes are lost.</source>
|
||||
<source>Tools</source>
|
||||
<translation>工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy username</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy password</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<source>Export to CSV file</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
<name>AutoType</name>
|
||||
@@ -109,6 +113,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>
|
||||
@@ -234,11 +248,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 +277,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 +374,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 +494,10 @@ Save changes?</source>
|
||||
<source>Save</source>
|
||||
<translation>儲存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open</source>
|
||||
<translation>打開</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EditEntryWidgetAutoType</name>
|
||||
@@ -574,6 +649,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 +805,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 +824,10 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>Main</name>
|
||||
@@ -775,10 +866,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 +942,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 +990,22 @@ 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>
|
||||
</context>
|
||||
<context>
|
||||
<name>PasswordGeneratorWidget</name>
|
||||
@@ -1091,10 +1186,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 +1222,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 +1256,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 +1278,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>
|
||||
|
||||
@@ -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(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type")
|
||||
add_feature_info(libXtest 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,7 +363,7 @@ 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, 0, False, AnyPropertyType, &type, &format,
|
||||
&nitems, &after, &data);
|
||||
if (data) {
|
||||
XFree(data);
|
||||
@@ -436,21 +462,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 +534,7 @@ void AutoTypePlatformX11::stopCatchXErrors()
|
||||
{
|
||||
Q_ASSERT(m_catchXErrors);
|
||||
|
||||
XSync(m_dpy, false);
|
||||
XSync(m_dpy, False);
|
||||
XSetErrorHandler(m_oldXErrorHandler);
|
||||
m_catchXErrors = false;
|
||||
}
|
||||
@@ -536,6 +551,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 +604,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 +813,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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
@@ -295,24 +296,24 @@ bool DatabaseTabWidget::saveDatabase(Database* db)
|
||||
DatabaseManagerStruct& dbStruct = m_dbList[db];
|
||||
|
||||
if (dbStruct.saveToFilename) {
|
||||
bool result = false;
|
||||
|
||||
QSaveFile saveFile(dbStruct.filePath);
|
||||
if (saveFile.open(QIODevice::WriteOnly)) {
|
||||
m_writer.writeDatabase(&saveFile, db);
|
||||
result = saveFile.commit();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
dbStruct.modified = false;
|
||||
updateTabName(db);
|
||||
return true;
|
||||
}
|
||||
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 +327,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,6 +375,11 @@ 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());
|
||||
@@ -442,7 +452,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 +633,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);
|
||||
@@ -889,8 +891,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 +984,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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <QCloseEvent>
|
||||
#include <QShortcut>
|
||||
#include <QTimer>
|
||||
|
||||
#include "autotype/AutoType.h"
|
||||
#include "core/Config.h"
|
||||
@@ -92,9 +93,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"));
|
||||
@@ -447,10 +446,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 +512,7 @@ void MainWindow::updateTrayIcon()
|
||||
}
|
||||
else {
|
||||
if (m_trayIcon) {
|
||||
m_trayIcon->hide();
|
||||
delete m_trayIcon;
|
||||
m_trayIcon = Q_NULLPTR;
|
||||
}
|
||||
@@ -575,10 +576,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();
|
||||
@@ -597,6 +600,11 @@ void MainWindow::lockDatabasesAfterInactivity()
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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})
|
||||
|
||||
63
tests/FailDevice.cpp
Normal file
63
tests/FailDevice.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (C) 2015 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 "FailDevice.h"
|
||||
|
||||
FailDevice::FailDevice(int failAfter, QObject* parent)
|
||||
: QBuffer(parent)
|
||||
, m_failAfter(failAfter)
|
||||
, m_readCount(0)
|
||||
, m_writeCount(0)
|
||||
{
|
||||
}
|
||||
|
||||
bool FailDevice::open(QIODevice::OpenMode openMode)
|
||||
{
|
||||
return QBuffer::open(openMode | QIODevice::Unbuffered);
|
||||
}
|
||||
|
||||
qint64 FailDevice::readData(char* data, qint64 len)
|
||||
{
|
||||
if (m_readCount >= m_failAfter) {
|
||||
setErrorString("FAILDEVICE");
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
qint64 result = QBuffer::readData(data, len);
|
||||
if (result != -1) {
|
||||
m_readCount += result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
qint64 FailDevice::writeData(const char* data, qint64 len)
|
||||
{
|
||||
if (m_writeCount >= m_failAfter) {
|
||||
setErrorString("FAILDEVICE");
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
qint64 result = QBuffer::writeData(data, len);
|
||||
if (result != -1) {
|
||||
m_writeCount += result;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
43
tests/FailDevice.h
Normal file
43
tests/FailDevice.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (C) 2015 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_FAILDEVICE_H
|
||||
#define KEEPASSX_FAILDEVICE_H
|
||||
|
||||
#include <QBuffer>
|
||||
|
||||
#include "core/Global.h"
|
||||
|
||||
class FailDevice : public QBuffer
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit FailDevice(int failAfter, QObject* parent = Q_NULLPTR);
|
||||
bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE;
|
||||
|
||||
protected:
|
||||
qint64 readData(char* data, qint64 len) Q_DECL_OVERRIDE;
|
||||
qint64 writeData(const char* data, qint64 len) Q_DECL_OVERRIDE;
|
||||
|
||||
private:
|
||||
int m_failAfter;
|
||||
int m_readCount;
|
||||
int m_writeCount;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_FAILDEVICE_H
|
||||
@@ -38,7 +38,6 @@ void TestAutoType::initTestCase()
|
||||
QVERIFY(Crypto::init());
|
||||
Config::createTempFileInstance();
|
||||
AutoType::createTestInstance();
|
||||
config()->set("AutoTypeEntryTitleMatch", false);
|
||||
config()->set("security/autotypeask", false);
|
||||
|
||||
QPluginLoader loader(filePath()->pluginPath("keepassx-autotype-test"));
|
||||
@@ -56,6 +55,7 @@ void TestAutoType::initTestCase()
|
||||
|
||||
void TestAutoType::init()
|
||||
{
|
||||
config()->set("AutoTypeEntryTitleMatch", false);
|
||||
m_test->clearActions();
|
||||
|
||||
m_db = new Database();
|
||||
@@ -64,11 +64,12 @@ void TestAutoType::init()
|
||||
m_group = new Group();
|
||||
m_db->setRootGroup(m_group);
|
||||
|
||||
AutoTypeAssociations::Association association;
|
||||
|
||||
m_entry1 = new Entry();
|
||||
m_entry1->setGroup(m_group);
|
||||
m_entry1->setUsername("myuser");
|
||||
m_entry1->setPassword("mypass");
|
||||
AutoTypeAssociations::Association association;
|
||||
association.window = "custom window";
|
||||
association.sequence = "{username}association{password}";
|
||||
m_entry1->autoTypeAssociations()->add(association);
|
||||
@@ -77,6 +78,19 @@ void TestAutoType::init()
|
||||
m_entry2->setGroup(m_group);
|
||||
m_entry2->setPassword("myuser");
|
||||
m_entry2->setTitle("entry title");
|
||||
|
||||
m_entry3 = new Entry();
|
||||
m_entry3->setGroup(m_group);
|
||||
m_entry3->setPassword("regex");
|
||||
association.window = "//REGEX1//";
|
||||
association.sequence = "regex1";
|
||||
m_entry3->autoTypeAssociations()->add(association);
|
||||
association.window = "//^REGEX2$//";
|
||||
association.sequence = "regex2";
|
||||
m_entry3->autoTypeAssociations()->add(association);
|
||||
association.window = "//^REGEX3-([rd]\\d){2}$//";
|
||||
association.sequence = "regex3";
|
||||
m_entry3->autoTypeAssociations()->add(association);
|
||||
}
|
||||
|
||||
void TestAutoType::cleanup()
|
||||
@@ -147,12 +161,36 @@ void TestAutoType::testGlobalAutoTypeTitleMatch()
|
||||
|
||||
void TestAutoType::testGlobalAutoTypeTitleMatchDisabled()
|
||||
{
|
||||
config()->set("AutoTypeEntryTitleMatch", false);
|
||||
|
||||
m_test->setActiveWindowTitle("An Entry Title!");
|
||||
MessageBox::setNextAnswer(QMessageBox::Ok);
|
||||
m_autoType->performGlobalAutoType(m_dbList);
|
||||
|
||||
QCOMPARE(m_test->actionChars(), QString());
|
||||
|
||||
}
|
||||
|
||||
void TestAutoType::testGlobalAutoTypeRegExp()
|
||||
{
|
||||
// substring matches are ok
|
||||
m_test->setActiveWindowTitle("lorem REGEX1 ipsum");
|
||||
m_autoType->performGlobalAutoType(m_dbList);
|
||||
QCOMPARE(m_test->actionChars(), QString("regex1"));
|
||||
m_test->clearActions();
|
||||
|
||||
// should be case-insensitive
|
||||
m_test->setActiveWindowTitle("lorem regex1 ipsum");
|
||||
m_autoType->performGlobalAutoType(m_dbList);
|
||||
QCOMPARE(m_test->actionChars(), QString("regex1"));
|
||||
m_test->clearActions();
|
||||
|
||||
// exact match
|
||||
m_test->setActiveWindowTitle("REGEX2");
|
||||
m_autoType->performGlobalAutoType(m_dbList);
|
||||
QCOMPARE(m_test->actionChars(), QString("regex2"));
|
||||
m_test->clearActions();
|
||||
|
||||
// a bit more complicated regex
|
||||
m_test->setActiveWindowTitle("REGEX3-R2D2");
|
||||
m_autoType->performGlobalAutoType(m_dbList);
|
||||
QCOMPARE(m_test->actionChars(), QString("regex3"));
|
||||
m_test->clearActions();
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ private Q_SLOTS:
|
||||
void testGlobalAutoTypeWithOneMatch();
|
||||
void testGlobalAutoTypeTitleMatch();
|
||||
void testGlobalAutoTypeTitleMatchDisabled();
|
||||
void testGlobalAutoTypeRegExp();
|
||||
|
||||
private:
|
||||
AutoTypePlatformInterface* m_platform;
|
||||
@@ -53,6 +54,7 @@ private:
|
||||
Group* m_group;
|
||||
Entry* m_entry1;
|
||||
Entry* m_entry2;
|
||||
Entry* m_entry3;
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_TESTAUTOTYPE_H
|
||||
|
||||
@@ -120,6 +120,6 @@ void TestEntry::testClone()
|
||||
QCOMPARE(entryCloneNone->uuid(), entryOrg->uuid());
|
||||
QCOMPARE(entryCloneHistory->title(), QString("New Title"));
|
||||
QCOMPARE(entryCloneHistory->historyItems().size(), 1);
|
||||
QCOMPARE(entryCloneHistory->historyItems().first()->title(), QString("Original Title"));
|
||||
QCOMPARE(entryCloneHistory->historyItems().at(0)->title(), QString("Original Title"));
|
||||
QCOMPARE(entryCloneHistory->timeInfo().creationTime(), entryOrg->timeInfo().creationTime());
|
||||
}
|
||||
|
||||
@@ -60,19 +60,19 @@ void TestExporter::testToDbExporter()
|
||||
Database* dbExp = ToDbExporter().exportGroup(groupOrg);
|
||||
|
||||
QCOMPARE(dbExp->rootGroup()->children().size(), 1);
|
||||
Group* groupExp = dbExp->rootGroup()->children().first();
|
||||
Group* groupExp = dbExp->rootGroup()->children().at(0);
|
||||
QVERIFY(groupExp != groupOrg);
|
||||
QCOMPARE(groupExp->name(), groupOrg->name());
|
||||
QCOMPARE(groupExp->entries().size(), 1);
|
||||
|
||||
Entry* entryExp = groupExp->entries().first();
|
||||
Entry* entryExp = groupExp->entries().at(0);
|
||||
QCOMPARE(entryExp->title(), entryOrg->title());
|
||||
QCOMPARE(dbExp->metadata()->customIcons().size(), 1);
|
||||
QVERIFY(dbExp->metadata()->containsCustomIcon(iconUuid));
|
||||
QCOMPARE(entryExp->iconNumber(), entryOrg->iconNumber());
|
||||
|
||||
QCOMPARE(entryExp->historyItems().size(), 1);
|
||||
QCOMPARE(entryExp->historyItems().first()->iconUuid(), iconUuid);
|
||||
QCOMPARE(entryExp->historyItems().at(0)->iconUuid(), iconUuid);
|
||||
|
||||
delete dbOrg;
|
||||
delete dbExp;
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <QTest>
|
||||
|
||||
#include "tests.h"
|
||||
#include "FailDevice.h"
|
||||
#include "crypto/Crypto.h"
|
||||
#include "streams/HashedBlockStream.h"
|
||||
|
||||
@@ -71,3 +72,34 @@ void TestHashedBlockStream::testWriteRead()
|
||||
buffer.reset();
|
||||
buffer.buffer().clear();
|
||||
}
|
||||
|
||||
void TestHashedBlockStream::testReset()
|
||||
{
|
||||
QBuffer buffer;
|
||||
QVERIFY(buffer.open(QIODevice::WriteOnly));
|
||||
|
||||
HashedBlockStream writer(&buffer, 16);
|
||||
QVERIFY(writer.open(QIODevice::WriteOnly));
|
||||
QCOMPARE(writer.write(QByteArray(8, 'Z')), qint64(8));
|
||||
// test if reset() and close() write only one final block
|
||||
QVERIFY(writer.reset());
|
||||
QVERIFY(writer.reset());
|
||||
writer.close();
|
||||
QCOMPARE(buffer.buffer().size(), 8 + (32 + 4 + 4) * 2);
|
||||
}
|
||||
|
||||
void TestHashedBlockStream::testWriteFailure()
|
||||
{
|
||||
FailDevice failDevice(1500);
|
||||
QVERIFY(failDevice.open(QIODevice::WriteOnly));
|
||||
|
||||
QByteArray input(2000, 'Z');
|
||||
|
||||
HashedBlockStream writer(&failDevice, 500);
|
||||
QVERIFY(writer.open(QIODevice::WriteOnly));
|
||||
|
||||
QCOMPARE(writer.write(input.left(900)), qint64(900));
|
||||
writer.write(input.left(900));
|
||||
QVERIFY(!writer.reset());
|
||||
QCOMPARE(writer.errorString(), QString("FAILDEVICE"));
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ class TestHashedBlockStream : public QObject
|
||||
private Q_SLOTS:
|
||||
void initTestCase();
|
||||
void testWriteRead();
|
||||
void testReset();
|
||||
void testWriteFailure();
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_TESTHASHEDBLOCKSTREAM_H
|
||||
|
||||
@@ -71,7 +71,7 @@ void TestKeePass1Reader::testBasic()
|
||||
QVERIFY(entry11->timeInfo().expires());
|
||||
QCOMPARE(entry11->timeInfo().expiryTime(), genDT(2012, 5, 9, 10, 32));
|
||||
QCOMPARE(entry11->attachments()->keys().size(), 1);
|
||||
QCOMPARE(entry11->attachments()->keys().first(), QString("attachment.txt"));
|
||||
QCOMPARE(entry11->attachments()->keys().at(0), QString("attachment.txt"));
|
||||
QCOMPARE(entry11->attachments()->value("attachment.txt"), QByteArray("hello world\n"));
|
||||
|
||||
Entry* entry12 = group1->entries().at(1);
|
||||
@@ -118,7 +118,7 @@ void TestKeePass1Reader::testCustomIcons()
|
||||
{
|
||||
QCOMPARE(m_db->metadata()->customIcons().size(), 1);
|
||||
|
||||
Entry* entry = m_db->rootGroup()->children().at(1)->entries().first();
|
||||
Entry* entry = m_db->rootGroup()->children().at(1)->entries().at(0);
|
||||
|
||||
QCOMPARE(entry->icon().width(), 16);
|
||||
QCOMPARE(entry->icon().height(), 16);
|
||||
|
||||
@@ -21,12 +21,14 @@
|
||||
#include <QTest>
|
||||
|
||||
#include "tests.h"
|
||||
#include "FailDevice.h"
|
||||
#include "core/Database.h"
|
||||
#include "core/Group.h"
|
||||
#include "core/Metadata.h"
|
||||
#include "crypto/Crypto.h"
|
||||
#include "format/KeePass2Reader.h"
|
||||
#include "format/KeePass2Writer.h"
|
||||
#include "format/KeePass2XmlWriter.h"
|
||||
#include "keys/PasswordKey.h"
|
||||
|
||||
QTEST_GUILESS_MAIN(TestKeePass2Writer)
|
||||
@@ -101,6 +103,30 @@ void TestKeePass2Writer::testNonAsciiPasswords()
|
||||
QCOMPARE(m_dbTest->rootGroup()->entries()[0]->password(), m_dbOrg->rootGroup()->entries()[0]->password());
|
||||
}
|
||||
|
||||
void TestKeePass2Writer::testDeviceFailure()
|
||||
{
|
||||
CompositeKey key;
|
||||
key.addKey(PasswordKey("test"));
|
||||
Database* db = new Database();
|
||||
db->setKey(key);
|
||||
// Disable compression so we write a predictable number of bytes.
|
||||
db->setCompressionAlgo(Database::CompressionNone);
|
||||
|
||||
Entry* entry = new Entry();
|
||||
entry->setParent(db->rootGroup());
|
||||
QByteArray attachment(4096, 'Z');
|
||||
entry->attachments()->set("test", attachment);
|
||||
|
||||
FailDevice failDevice(512);
|
||||
QVERIFY(failDevice.open(QIODevice::WriteOnly));
|
||||
KeePass2Writer writer;
|
||||
writer.writeDatabase(&failDevice, db);
|
||||
QVERIFY(writer.hasError());
|
||||
QCOMPARE(writer.errorString(), QString("FAILDEVICE"));
|
||||
|
||||
delete db;
|
||||
}
|
||||
|
||||
void TestKeePass2Writer::cleanupTestCase()
|
||||
{
|
||||
delete m_dbOrg;
|
||||
|
||||
@@ -32,6 +32,7 @@ private Q_SLOTS:
|
||||
void testProtectedAttributes();
|
||||
void testAttachments();
|
||||
void testNonAsciiPasswords();
|
||||
void testDeviceFailure();
|
||||
void cleanupTestCase();
|
||||
|
||||
private:
|
||||
|
||||
@@ -315,7 +315,7 @@ void TestKeePass2XmlReader::testEntry2()
|
||||
|
||||
void TestKeePass2XmlReader::testEntryHistory()
|
||||
{
|
||||
const Entry* entryMain = m_db->rootGroup()->entries().first();
|
||||
const Entry* entryMain = m_db->rootGroup()->entries().at(0);
|
||||
QCOMPARE(entryMain->historyItems().size(), 2);
|
||||
|
||||
{
|
||||
|
||||
@@ -113,6 +113,7 @@ void TestKeys::testFileKey_data()
|
||||
{
|
||||
QTest::addColumn<QString>("type");
|
||||
QTest::newRow("Xml") << QString("Xml");
|
||||
QTest::newRow("XmlBrokenBase64") << QString("XmlBrokenBase64");
|
||||
QTest::newRow("Binary") << QString("Binary");
|
||||
QTest::newRow("Hex") << QString("Hex");
|
||||
QTest::newRow("Hashed") << QString("Hashed");
|
||||
|
||||
@@ -207,3 +207,22 @@ void TestSymmetricCipher::testPadding()
|
||||
QByteArray decrypted = streamDec.readAll();
|
||||
QCOMPARE(decrypted, plainText);
|
||||
}
|
||||
|
||||
void TestSymmetricCipher::testStreamReset()
|
||||
{
|
||||
QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4");
|
||||
QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f");
|
||||
|
||||
QBuffer buffer;
|
||||
QVERIFY(buffer.open(QIODevice::WriteOnly));
|
||||
SymmetricCipherStream writer(&buffer, SymmetricCipher::Aes256, SymmetricCipher::Cbc,
|
||||
SymmetricCipher::Encrypt);
|
||||
QVERIFY(writer.init(key, iv));
|
||||
QVERIFY(writer.open(QIODevice::WriteOnly));
|
||||
QCOMPARE(writer.write(QByteArray(4, 'Z')), qint64(4));
|
||||
// test if reset() and close() write only one block
|
||||
QVERIFY(writer.reset());
|
||||
QVERIFY(writer.reset());
|
||||
writer.close();
|
||||
QCOMPARE(buffer.buffer().size(), 16);
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ private Q_SLOTS:
|
||||
void testAes256CbcDecryption();
|
||||
void testSalsa20();
|
||||
void testPadding();
|
||||
void testStreamReset();
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_TESTSYMMETRICCIPHER_H
|
||||
|
||||
BIN
tests/data/FileKeyXmlBrokenBase64.kdbx
Normal file
BIN
tests/data/FileKeyXmlBrokenBase64.kdbx
Normal file
Binary file not shown.
9
tests/data/FileKeyXmlBrokenBase64.key
Normal file
9
tests/data/FileKeyXmlBrokenBase64.key
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<KeyFile>
|
||||
<Meta>
|
||||
<Version>1.00</Version>
|
||||
</Meta>
|
||||
<Key>
|
||||
<Data>yy</Data>
|
||||
</Key>
|
||||
</KeyFile>
|
||||
@@ -57,11 +57,21 @@ void TestGui::initTestCase()
|
||||
m_tabWidget = m_mainWindow->findChild<DatabaseTabWidget*>("tabWidget");
|
||||
m_mainWindow->show();
|
||||
Tools::wait(50);
|
||||
|
||||
QByteArray tmpData;
|
||||
QFile sourceDbFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"));
|
||||
QVERIFY(sourceDbFile.open(QIODevice::ReadOnly));
|
||||
QVERIFY(Tools::readAllFromDevice(&sourceDbFile, tmpData));
|
||||
|
||||
QVERIFY(m_orgDbFile.open());
|
||||
m_orgDbFileName = QFileInfo(m_orgDbFile.fileName()).fileName();
|
||||
QCOMPARE(m_orgDbFile.write(tmpData), static_cast<qint64>((tmpData.size())));
|
||||
m_orgDbFile.close();
|
||||
}
|
||||
|
||||
void TestGui::testOpenDatabase()
|
||||
{
|
||||
fileDialog()->setNextFileName(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"));
|
||||
fileDialog()->setNextFileName(m_orgDbFile.fileName());
|
||||
triggerAction("actionDatabaseOpen");
|
||||
|
||||
QWidget* databaseOpenWidget = m_mainWindow->findChild<QWidget*>("databaseOpenWidget");
|
||||
@@ -75,7 +85,7 @@ void TestGui::testOpenDatabase()
|
||||
void TestGui::testTabs()
|
||||
{
|
||||
QCOMPARE(m_tabWidget->count(), 1);
|
||||
QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("NewDatabase.kdbx"));
|
||||
QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), m_orgDbFileName);
|
||||
|
||||
m_dbWidget = m_tabWidget->currentDatabaseWidget();
|
||||
m_db = m_dbWidget->database();
|
||||
@@ -103,7 +113,7 @@ void TestGui::testEditEntry()
|
||||
QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton);
|
||||
// make sure the database isn't marked as modified
|
||||
// wait for modified timer
|
||||
QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("NewDatabase.kdbx"));
|
||||
QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), m_orgDbFileName);
|
||||
}
|
||||
|
||||
void TestGui::testAddEntry()
|
||||
@@ -134,7 +144,7 @@ void TestGui::testAddEntry()
|
||||
QCOMPARE(entry->title(), QString("test"));
|
||||
QCOMPARE(entry->historyItems().size(), 0);
|
||||
// wait for modified timer
|
||||
QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("NewDatabase.kdbx*"));
|
||||
QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("%1*").arg(m_orgDbFileName));
|
||||
|
||||
QAction* entryEditAction = m_mainWindow->findChild<QAction*>("actionEntryEdit");
|
||||
QVERIFY(entryEditAction->isEnabled());
|
||||
@@ -200,6 +210,10 @@ void TestGui::testSearch()
|
||||
// Search for "some"
|
||||
QTest::keyClicks(searchEdit, "some");
|
||||
QTRY_COMPARE(entryView->model()->rowCount(), 4);
|
||||
// Press Down to focus on the entry view
|
||||
QVERIFY(!entryView->hasFocus());
|
||||
QTest::keyClick(searchEdit, Qt::Key_Down);
|
||||
QVERIFY(entryView->hasFocus());
|
||||
|
||||
clickIndex(entryView->model()->index(0, 1), entryView, Qt::LeftButton);
|
||||
QAction* entryEditAction = m_mainWindow->findChild<QAction*>("actionEntryEdit");
|
||||
@@ -352,7 +366,7 @@ void TestGui::testDragAndDropGroup()
|
||||
|
||||
void TestGui::testSaveAs()
|
||||
{
|
||||
QFileInfo fileInfo(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx"));
|
||||
QFileInfo fileInfo(m_orgDbFile.fileName());
|
||||
QDateTime lastModified = fileInfo.lastModified();
|
||||
|
||||
m_db->metadata()->setName("SaveAs");
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QObject>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
class Database;
|
||||
class DatabaseTabWidget;
|
||||
@@ -60,6 +61,8 @@ private:
|
||||
MainWindow* m_mainWindow;
|
||||
DatabaseTabWidget* m_tabWidget;
|
||||
DatabaseWidget* m_dbWidget;
|
||||
QTemporaryFile m_orgDbFile;
|
||||
QString m_orgDbFileName;
|
||||
QString m_tmpFileName;
|
||||
Database* m_db;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user