Compare commits

...

43 Commits
2.0.0 ... 2.0.3

Author SHA1 Message Date
Felix Geyer
c8857ac2ba Finalize changelog. 2016-09-04 17:57:47 +02:00
Felix Geyer
367fbbba39 Update translations. 2016-09-04 17:14:15 +02:00
Felix Geyer
abf469f743 Prepare for 2.0.3 release. 2016-09-03 22:05:22 +02:00
Felix Geyer
878995366a Ask the user before moving an entry to the recycle bin.
Closes #447
2016-09-02 12:00:12 +02:00
Felix Geyer
1635a5211f Pass entryFlags to clone() when recursing into sub-groups.
Based on https://github.com/keepassx/keepassx/pull/178 by Mois Moshev <mois@monomon.me>

Closes #525
2016-09-02 11:47:22 +02:00
Felix Geyer
595b1011dd Refresh fileInfo after creating the file.
Fixes canonicalFilePath() returning an empty string.
2016-09-02 11:35:39 +02:00
Felix Geyer
9bb291235d Fix monospace font on Windows.
Closes #424
2016-09-02 11:35:39 +02:00
Felix Geyer
7d4ef0b8d0 Generate new password whenever the generator widget is opened.
Closes #414
2016-09-02 11:35:39 +02:00
Florian Geyer
8d16522d39 Repair UUID of inconsistent history items.
Closes #130
2016-08-03 23:48:40 +02:00
Felix Geyer
cd1192b409 Allow deleting the recycle bin.
Closes #46
2016-08-03 23:45:04 +02:00
Felix Geyer
bf2fd63131 Fix crash when deleting parent group of recycle bin.
In these cases delete the group instead of trying to move it to the recycle bin.

Closes #520
2016-08-03 23:27:02 +02:00
Felix Geyer
9532bedd7d Update min. length for password generator.
Update the minimum length for the password generator depending on the chosen
options.

Closes #420
2016-07-31 22:07:47 +02:00
Felix Geyer
e9c8363b70 Save to canonical file path so we don't overwrite symlinks.
When saving a database we previously replaced symlinks with a regular file.

Closes #442
2016-07-31 18:29:43 +02:00
Felix Geyer
fb57ed2bcd Add proper error handling when QSaveFile::open() fails.
Based on pull request by Valeriy <jazzvoid@gmail.com>

Closes #450
2016-07-31 17:07:31 +02:00
Felix Geyer
57ec558396 Detect image format solely on content.
Otherwise reading fails if the file extension is wrong.

Closes #512
2016-07-31 15:36:29 +02:00
Felix Geyer
6e2de1cd79 Display proper error message when reading an icon fails.
Refs #512
2016-07-31 14:44:45 +02:00
Felix Geyer
8ace3ab7f2 Don't consider windows with WithdrawnState as top level windows.
Fixes many bogus windows in auto-type window list when using gnome-shell.
2016-07-31 14:44:45 +02:00
Felix Geyer
18e4dca6c9 Explicitly include QFile in TestKeePass2Writer.
Closes #452
2016-07-31 14:44:45 +02:00
Felix Geyer
48eca3e11f Display an error message when opening the database fails.
Closes #462
2016-05-20 16:49:32 +02:00
Felix Geyer
57c1a0f4b6 Show proper error message when key is wrong for .kdb files. 2016-04-09 16:09:53 +02:00
Felix Geyer
bde4d63fdb Fix typo. 2016-04-09 16:02:49 +02:00
Felix Geyer
4867d26f7d Update optional dependencies in the README. 2016-02-13 11:24:11 +01:00
Felix Geyer
9bd3ab717e Print libXtst instead of libXtest in the feature summary.
The protocol is called XTEST but the library libxtst.

Closes #440
2016-02-13 11:13:15 +01:00
Felix Geyer
3679b21701 Fix typo in changelog. 2016-02-02 01:22:48 +01:00
Felix Geyer
49f58b4ed8 Prepare 2.0.2 release. 2016-02-02 01:21:39 +01:00
Felix Geyer
235361faf4 Explicitly cast char constant to QChar. 2016-02-02 00:57:28 +01:00
Felix Geyer
208b803fbe Fix KeePass2Repair to retain multi-byte UTF-8 chars.
Since char is (often) unsigned the ch < 0x20 check matched all
multi-byte encoded UTF-8 chars.
2016-02-02 00:41:16 +01:00
Felix Geyer
8a92cec03f Keep valid surrogate pairs in stripInvalidXml10Chars(). 2016-02-02 00:38:58 +01:00
Felix Geyer
00f068b93e Fix typo in changelog. 2016-01-31 20:00:44 +01:00
Felix Geyer
654353e26b Update translations. 2016-01-31 19:03:25 +01:00
Felix Geyer
d670ef2638 Prepare for 2.0.1 release. 2016-01-31 18:49:35 +01:00
Felix Geyer
aff935b3c7 Properly handle a missing key filename. 2016-01-31 17:08:50 +01:00
Felix Geyer
107c0673c7 Make sure we don't write negative icon ids into the database. 2016-01-31 17:06:51 +01:00
Felix Geyer
c14d04b3e8 Fix crash when icon id is larger than INT_MAX.
In these cases icon id was interpreted as a negative number.
The QList access with a negative index resulted in a crash.
2016-01-31 16:44:34 +01:00
Felix Geyer
7a017041bf Allow opening databases that have no password and keyfile.
Closes #391
2016-01-31 16:17:24 +01:00
Felix Geyer
eb56bd8973 Add repair functionality to strip invalid XML chars.
Refs #392
2016-01-28 23:07:04 +01:00
Felix Geyer
93585aded7 Always display scaled custom icons.
Closes #322
2016-01-26 22:44:38 +01:00
Felix Geyer
38245aa2a9 Add iconScaledPixmap() convenience functions. 2016-01-24 20:12:33 +01:00
Felix Geyer
1f33e6f044 Add Metadata::customIconScaledPixmap(). 2016-01-24 20:12:33 +01:00
Felix Geyer
4752adf9d3 Move pixmap caching to Metadata. 2016-01-24 20:12:21 +01:00
Felix Geyer
2d741afe3e Strip invalid XML chars when writing databases.
These characters are unprintable or just plain invalid.
QXmlStreamReader throws and error when reading XML documents with such chars.

Closes #392
2016-01-24 17:20:16 +01:00
Florian Geyer
5e6b17aba4 Disable password generator button when showing entry in history mode.
Closes #422
2016-01-22 22:55:28 +01:00
Florian Geyer
c51098e2cf Flush temporary file before opening attachment.
Closes #390
2015-12-16 21:38:20 +01:00
70 changed files with 2823 additions and 456 deletions

View File

@@ -1,3 +1,35 @@
2.0.3 (2016-09-04)
=========================
- Improved error reporting when reading / writing databases fails. [#450, #462]
- Display an error message when opening a custom icon fails.
- Detect custom icon format based on contents instead of the filename. [#512]
- Keep symlink intact when saving databases. [#442].
- Fix a crash when deleting parent group of recycle bin. [#520]
- Display a confirm dialog before moving an entry to the recycle bin. [#447]
- Repair UUIDs of inconsistent history items. [#130]
- Only include top-level windows in auto-type window list when using gnome-shell.
- Update translations.
2.0.2 (2016-02-02)
=========================
- Fix regression in database writer that caused it to strip certain special
characters (characters from Unicode plane > 0).
- Fix bug in repair function that caused it to strip non-ASCII characters.
2.0.1 (2016-01-31)
=========================
- Flush temporary file before opening attachment. [#390]
- Disable password generator when showing entry in history mode. [#422]
- Strip invalid XML chars when writing databases. [#392]
- Add repair function to fix databases with invalid XML chars. [#392]
- Display custom icons scaled. [#322]
- Allow opening databases that have no password and keyfile. [#391]
- Fix crash when importing .kdb files with invalid icon ids. [#425]
- Update translations.
2.0 (2015-12-06)
=========================

View File

@@ -33,8 +33,8 @@ option(WITH_TESTS "Enable building of unit tests" ON)
option(WITH_GUI_TESTS "Enable building of GUI tests" OFF)
option(WITH_CXX11 "Build with the C++ 11 standard" ON)
set(KEEPASSX_VERSION "2.0")
set(KEEPASSX_VERSION_NUM "2.0")
set(KEEPASSX_VERSION "2.0.3")
set(KEEPASSX_VERSION_NUM "2.0.3")
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1)

View File

@@ -57,12 +57,12 @@ The following libraries are required:
* Qt 4 (>= 4.6)
* libgcrypt
* zlib
* libxtst (optional for auto-type on X11)
* libxi, libxtst (optional for auto-type on X11)
On Debian you can install them with:
```bash
sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev
sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxi-dev libxtst-dev
```
#### Build Steps

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Revize</translation>
</message>
<message>
<source>Using:</source>
<translation>S použitím:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -95,7 +99,7 @@
</message>
<message>
<source>Unable to create Key File : </source>
<translation>Nedaří se 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,7 +107,7 @@
</message>
<message>
<source>Question</source>
<translation>Otázka</translation>
<translation>Dotaz</translation>
</message>
<message>
<source>Do you really want to use an empty string as password?</source>
@@ -148,7 +152,7 @@
</message>
<message>
<source>Unable to open the database.</source>
<translation>Databázi se nepodařilo otevřít.</translation>
<translation>Databázi se nedaří otevřít.</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
@@ -167,6 +171,43 @@
<translation>Vyberte soubor s klíčem</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Opravit databázi</translation>
</message>
<message>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Nedaří se otevřít soubor s klíčem</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Databáze je v pořádku otevřená. Není třeba žádného zásahu.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Nedaří se otevřít databázi.</translation>
</message>
<message>
<source>Success</source>
<translation>Úspěch</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Databáze je úspěšně opravená
Nyní můžete uložit.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Databázi se nedaří opravit.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -179,7 +220,7 @@
</message>
<message>
<source>Transform rounds:</source>
<translation>Počet průchodů algoritmu:</translation>
<translation>Počet průchodů šifrovacího algoritmu:</translation>
</message>
<message>
<source>Default username:</source>
@@ -191,7 +232,7 @@
</message>
<message>
<source> MiB</source>
<translation type="unfinished"/>
<translation> MiB</translation>
</message>
<message>
<source>Benchmark</source>
@@ -199,11 +240,11 @@
</message>
<message>
<source>Max. history items:</source>
<translation>Nejvyšší umožněný počet položek historie:</translation>
<translation>Omezit počet uchovávaných předchozích verzí položky na:</translation>
</message>
<message>
<source>Max. history size:</source>
<translation>Nejvyšší umožněný objem dat historie záznamů:</translation>
<translation>Omezit datový objem předchozích verzí položek na:</translation>
</message>
</context>
<context>
@@ -214,7 +255,7 @@
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Databáze aplikace KeePass verze 2</translation>
<translation>Databáze ve formátu KeePass verze 2</translation>
</message>
<message>
<source>All files</source>
@@ -234,11 +275,11 @@
</message>
<message>
<source>Open KeePass 1 database</source>
<translation>Otevřít databázi aplikace KeePass verze 1</translation>
<translation>Otevřít databázi ve formátu KeePass verze 1</translation>
</message>
<message>
<source>KeePass 1 database</source>
<translation>Databáze aplikace KeePass verze 1</translation>
<translation>Databáze ve formátu KeePass verze 1</translation>
</message>
<message>
<source>All files (*)</source>
@@ -255,7 +296,7 @@
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
<translation>%1 bylo změněno.
<translation>%1 bylo změněno.
Uložit změny?</translation>
</message>
<message>
@@ -282,7 +323,7 @@ Uložit změny?</translation>
<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
.lock soubor). To znamená, že je nejspíš už otevřená v jiném okně KeePassX
(v případě sdíleného úložiště, třeba i na jiném počítači). Pokud tomu tak není,
je zámek nejspíš pozůstatkem předchozího neočekávaného ukončení aplikace
a je možné ho smazat. V každém případě, dotčenou databázi je možné otevřít
@@ -302,7 +343,7 @@ Pokud chcete změny dokončit, klikněte na Zrušit. V opačném případě změ
<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>
Buď ji můžete uložit, nebo neuzamknout.</translation>
</message>
<message>
<source>This database has been modified.
@@ -315,7 +356,7 @@ Pokud ne, provedené změny budou ztraceny.</translation>
<message>
<source>&quot;%1&quot; is in edit mode.
Discard changes and close anyway?</source>
<translation>%1 je právě upravováno.
<translation>„%1“ je právě upravováno.
Přesto zavřít a zahodit změny?</translation>
</message>
<message>
@@ -349,7 +390,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
<translation>Opravdu chcete nenávratně smazat položku %1?</translation>
<translation>Opravdu chcete nenávratně smazat položku „%1“?</translation>
</message>
<message>
<source>Delete entries?</source>
@@ -373,7 +414,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Do you really want to delete the group &quot;%1&quot; for good?</source>
<translation>Opravdu chcete nenávratně smazat skupinu %1?</translation>
<translation>Opravdu chcete nenávratně smazat skupinu „%1“?</translation>
</message>
<message>
<source>Current group</source>
@@ -385,7 +426,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Unable to calculate master key</source>
<translation>Nepodařilo se spočítat hlavní klíč</translation>
<translation>Nedaří se spočítat hlavní klíč</translation>
</message>
</context>
<context>
@@ -520,11 +561,11 @@ Přesto uložit?</translation>
</message>
<message>
<source>+</source>
<translation type="unfinished"/>
<translation>+</translation>
</message>
<message>
<source>-</source>
<translation type="unfinished"/>
<translation>-</translation>
</message>
<message>
<source>Window title:</source>
@@ -574,7 +615,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Repeat:</source>
<translation>Zopakovat:</translation>
<translation>Zopakování hesla:</translation>
</message>
<message>
<source>Gen.</source>
@@ -590,7 +631,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Presets</source>
<translation>Přednastavené</translation>
<translation>Předpřipravené</translation>
</message>
<message>
<source>Notes:</source>
@@ -699,7 +740,7 @@ Přesto uložit?</translation>
</message>
<message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<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>
<translation><numerusform>Ikonu není možné smazat. Je používána %n položkou.</numerusform><numerusform>Ikonu není možné smazat. Je používána %n položkami.</numerusform><numerusform>Ikonu není možné smazat. Ještě jí používá %n položek.</numerusform></translation>
</message>
</context>
<context>
@@ -777,7 +818,7 @@ Přesto uložit?</translation>
<name>KeePass1OpenWidget</name>
<message>
<source>Import KeePass1 database</source>
<translation>Importovat databázi aplikace KeePass verze 1</translation>
<translation>Importovat databázi ve formátu KeePass verze 1</translation>
</message>
<message>
<source>Error</source>
@@ -785,14 +826,14 @@ Přesto uložit?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Databázi nelze otevřít.</translation>
<translation>Databázi se nedaří otevřít.</translation>
</message>
</context>
<context>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
<translation>Soubor s klíčem nebylo možné načíst.</translation>
<translation>Nedaří se načíst soubor s klíčem.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -833,6 +874,16 @@ Přesto uložit?</translation>
<source>Unable to calculate master key</source>
<translation>Nedaří se spočítat hlavní klíč</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Zvolený soubor je databáze ve starém formátu KeePass 1 (.kdb).
Můžete ho importovat pomocí Databáze Importovat databázi KeePass 1.
Jedná se o jednosměrný převod. Databázi, vzniklou z importu, nepůjde otevřít ve staré verzi KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -877,7 +928,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Quit</source>
<translation>Ukončit</translation>
<translation>Ukončit aplikaci</translation>
</message>
<message>
<source>About</source>
@@ -993,7 +1044,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Toggle window</source>
<translation>Přepnout okno</translation>
<translation>Zobrazit/skrýt okno</translation>
</message>
<message>
<source>Tools</source>
@@ -1011,6 +1062,30 @@ Přesto uložit?</translation>
<source>Export to CSV file</source>
<translation>Exportovat do CSV souboru</translation>
</message>
<message>
<source>Repair database</source>
<translation>Opravit databázi</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Databáze ve formátu KeePass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Všechny soubory</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Uložit opravenou databázi</translation>
</message>
<message>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Zápis do databáze se nezdařil.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1036,7 +1111,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Numbers</source>
<translation>Čísla</translation>
<translation>Číslice</translation>
</message>
<message>
<source>Special Characters</source>
@@ -1155,7 +1230,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Case sensitive</source>
<translation>Rozlišovat velikost písmen</translation>
<translation>Rozlišovat malá/velká písmena</translation>
</message>
<message>
<source>Current group</source>
@@ -1221,7 +1296,7 @@ Přesto uložit?</translation>
</message>
<message>
<source>Show a system tray icon</source>
<translation>Zobrazit ikonu v oznamovací oblasti systémového panelu</translation>
<translation>Zobrazovat ikonu v oznamovací oblasti systémového panelu</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Revision</translation>
</message>
<message>
<source>Using:</source>
<translation>Bruger:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,43 @@
<translation>Vælg nøglefil</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Reparer database</translation>
</message>
<message>
<source>Error</source>
<translation>Fejl</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Kan ikke åbne nøglefil</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Databasen åbnede fint. Intet at gøre.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Kan ikke åbne databasen.</translation>
</message>
<message>
<source>Success</source>
<translation>Succes</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Databasen er blevet succesfuldt repareret
Du kan gemme den nu.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Kan ikke reparere databasen.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -828,6 +869,16 @@ Vil du alligevel gemme?</translation>
<source>Unable to calculate master key</source>
<translation>Kan ikke beregne hovednøgle</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Den valgte fil er en gammel KeePass 1 databasefil (.kdb).
Du kan importere den ved at klikke Database &gt; &apos;Importér KeePass 1 database&apos;.
Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den importerede database med den gamle KeePassX 0.4 version.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1006,6 +1057,30 @@ Vil du alligevel gemme?</translation>
<source>Export to CSV file</source>
<translation>Eksportér til CSV-fil</translation>
</message>
<message>
<source>Repair database</source>
<translation>Reparer database</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 Database</translation>
</message>
<message>
<source>All files</source>
<translation>Alle filer</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Gem repareret database</translation>
</message>
<message>
<source>Error</source>
<translation>Fejl</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Skrivning til database fejler.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Überarbeitung</translation>
</message>
<message>
<source>Using:</source>
<translation>In Benutzung:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -166,6 +170,43 @@
<translation>Schlüsseldatei auswählen</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Datenbank reparieren</translation>
</message>
<message>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Schlüsseldatei kann nicht geöffnet werden</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Datenbank wurde ordnungsgemäß geöffnet. Es gibt nichts zu tun.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Öffnen der Datenbank nicht möglich.</translation>
</message>
<message>
<source>Success</source>
<translation>Erfolg</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Datenbank erfolgreich repariert
sie kann nun gespeichert werden.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Reparieren der Datenbank nicht möglich.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -826,6 +867,16 @@ Soll sie dennoch gespeichert werden? </translation>
<source>Unable to calculate master key</source>
<translation>Berechnung des &quot;master keys&quot; gescheitert</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Die ausgewählte Datei ist eine alte KeePass 1 Datenbank (.kdb).
Zum Importieren gehen Sie auf Datenbank &gt; &apos;KeePass 1 Datenbank importieren&apos;.
Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann später nicht mehr mit der alten KeePassX Version 0.4 geöffnet werden.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1004,6 +1055,30 @@ Soll sie dennoch gespeichert werden? </translation>
<source>Export to CSV file</source>
<translation>Als CSV Datei exportieren</translation>
</message>
<message>
<source>Repair database</source>
<translation>Datenbank reparieren</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 Datenbank</translation>
</message>
<message>
<source>All files</source>
<translation>Alle Dateien</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Reparierte Datenbank speichern</translation>
</message>
<message>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Schreiben der Datenbank fehlgeschlagen.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -172,6 +172,42 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Success</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -329,6 +365,10 @@ Discard changes and close anyway?</source>
Do you want to save it anyway?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -383,6 +423,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -705,6 +753,14 @@ Do you want to save it anyway?</source>
<numerusform></numerusform>
</translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -818,6 +874,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1022,6 +1082,30 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Export to CSV file</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Repair database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All files</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Save repaired database</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -9,6 +9,14 @@
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassX es distribuido bajo los términos de la versión 2 de la Licencia Pública GNU (GPL) o por la versión 3 (si así lo prefiere).</translation>
</message>
<message>
<source>Revision</source>
<translation>Revisión</translation>
</message>
<message>
<source>Using:</source>
<translation>Usando:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -163,6 +171,43 @@
<translation>Seleccionar archivo llave</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Reparar base de datos</translation>
</message>
<message>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>No se puede abrir el archivo llave</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Base de datos abierta correctamente. Nada que hacer.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>No se pudo abrir la base de datos.</translation>
</message>
<message>
<source>Success</source>
<translation>Éxito</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>La base de datos ha sido reparada correctamente
Ahora puede guardarla.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>No se pudo reparar la base de datos.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -322,6 +367,12 @@ Discard changes and close anyway?</source>
<source>Writing the CSV file failed.</source>
<translation>La escritura del archivo CSV falló.</translation>
</message>
<message>
<source>The database you are trying to save as is locked by another instance of KeePassX.
Do you want to save it anyway?</source>
<translation>La base de datos que está tratando de guardar está bloqueda por otra instancia de KeePassX.
̉¿Desea guardarla de cualquier manera?</translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -819,6 +870,16 @@ Discard changes and close anyway?</source>
<source>Unable to calculate master key</source>
<translation>No se puede calcular la clave maestra</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>El archivo seleccionado es una vieja base de datos de KeePass 1 (.kdb).
Puede importarla haciendo click en &apos;Base de datos&apos; &gt; &apos;Importar base de datos de Keepass 1&apos;.
Esta migración es en un único sentido. No podrá abrir la base importada con la vieja versión 0.4 de KeePassX. </translation>
</message>
</context>
<context>
<name>Main</name>
@@ -997,6 +1058,30 @@ Discard changes and close anyway?</source>
<source>Export to CSV file</source>
<translation>Exportar a un archivo CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Reparar la base de datos</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Base de datos de KeePass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Todos los archivos</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Guardar base de datos reparada</translation>
</message>
<message>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Fallo al escribir la base de datos.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1269,10 +1354,6 @@ Discard changes and close anyway?</source>
<source>path to a custom config file</source>
<translation>ruta a un archivo de configuración personalizado</translation>
</message>
<message>
<source>password of the database (DANGEROUS!)</source>
<translation>contraseña de la base de datos (¡PELIGROSO!)</translation>
</message>
<message>
<source>key file of the database</source>
<translation>archivo llave de la base de datos</translation>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Version</translation>
</message>
<message>
<source>Using:</source>
<translation>Utilise :</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -79,7 +83,7 @@
</message>
<message>
<source>Key files</source>
<translation>Fichiers de clé</translation>
<translation>Fichiers-clés</translation>
</message>
<message>
<source>All files</source>
@@ -120,7 +124,7 @@
<message>
<source>Failed to set %1 as the Key file:
%2</source>
<translation>Impossible de définir %1 comme fichier-clé:
<translation>Impossible de définir %1 comme fichier-clé :
%2</translation>
</message>
</context>
@@ -167,6 +171,43 @@
<translation>Choisissez un fichier-clé</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Réparer la base de données</translation>
</message>
<message>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Impossible d&apos;ouvrir le fichier-clé</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>La base de données s&apos;est bien ouverte. Aucune action à effectuer.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Impossible d&apos;ouvrir la base de données.</translation>
</message>
<message>
<source>Success</source>
<translation>Succès</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>La base de données a correctement é réparée.
Vous pouvez maintenant la sauvegarder.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Impossible de réparer la base de données.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -286,7 +327,7 @@ Voulez-vous quand même l&apos;ouvrir ? Dans ce cas, elle sera ouverte en lectur
</message>
<message>
<source>Lock database</source>
<translation>Verrouiiler la base de données</translation>
<translation>Verrouiller la base de données</translation>
</message>
<message>
<source>Can't lock the database as you are currently editing it.
@@ -449,7 +490,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<message>
<source>Unable to save the attachment:
</source>
<translation>Impossible d&apos;enregistrer le fichier attaché:
<translation>Impossible d&apos;enregistrer le fichier attaché :
</translation>
</message>
<message>
@@ -532,7 +573,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Set custom sequence:</source>
<translation>Définir une séquence personnalisé :</translation>
<translation>Définir une séquence personnalisée :</translation>
</message>
</context>
<context>
@@ -562,7 +603,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Username:</source>
<translation>Non d&apos;utilisateur :</translation>
<translation>Nom d&apos;utilisateur :</translation>
</message>
<message>
<source>Password:</source>
@@ -755,7 +796,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Username</source>
<translation>Non d&apos;utilisateur</translation>
<translation>Nom d&apos;utilisateur</translation>
</message>
<message>
<source>URL</source>
@@ -792,7 +833,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Not a KeePass database.</source>
<translation>Ce n&apos;est pas une base de donnée KeePass.</translation>
<translation>Ce n&apos;est pas une base de données KeePass.</translation>
</message>
<message>
<source>Unsupported encryption algorithm.</source>
@@ -800,7 +841,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
<translation>Version de base de donnée KeePass non supportée.</translation>
<translation>Version de base de données KeePass non supportée.</translation>
</message>
<message>
<source>Root</source>
@@ -815,20 +856,30 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>KeePass2Reader</name>
<message>
<source>Not a KeePass database.</source>
<translation>Ce n&apos;est pas une base de donnée KeePass.</translation>
<translation>Ce n&apos;est pas une base de données KeePass.</translation>
</message>
<message>
<source>Unsupported KeePass database version.</source>
<translation>Version de base de donnée KeePass non supportée.</translation>
<translation>Version de base de données KeePass non supportée.</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation>Mauvaise clé ou fichier de base de donnée corrompu.</translation>
<translation>Mauvaise clé ou fichier de base de données corrompu.</translation>
</message>
<message>
<source>Unable to calculate master key</source>
<translation>Impossible de calculer la clé maître</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Le fichier sélectionné est une ancienne base de données pour KeePass 1 (.kdb).
Vous pouvez l&apos;importer en cliquant sur &quot;Base de données&quot; &gt; &quot;Importer une base de données KeePass 1&quot;.
Ceci est une migration à sens unique. Vous ne serez plus en mesure d&apos;ouvrir la base de données importée avec l&apos;ancienne version KeePassX version 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -861,7 +912,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Copy attribute to clipboard</source>
<translation>Copier l&apos;attribut dans le presse-papiers</translation>
<translation>Copier l&apos;attribut dans le presse-papier</translation>
</message>
<message>
<source>Groups</source>
@@ -881,19 +932,19 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Open database</source>
<translation>Ouvrir une base de donnée</translation>
<translation>Ouvrir une base de données</translation>
</message>
<message>
<source>Save database</source>
<translation>Enregistrer la base de donnée</translation>
<translation>Enregistrer la base de données</translation>
</message>
<message>
<source>Close database</source>
<translation>Fermer la base de donnée</translation>
<translation>Fermer la base de données</translation>
</message>
<message>
<source>New database</source>
<translation>Nouvelle base de donnée</translation>
<translation>Nouvelle base de données</translation>
</message>
<message>
<source>Add new entry</source>
@@ -921,7 +972,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Save database as</source>
<translation>Enregistrer la base de donnée sous</translation>
<translation>Enregistrer la base de données sous</translation>
</message>
<message>
<source>Change master key</source>
@@ -929,11 +980,11 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Database settings</source>
<translation>Paramètre de la base de donnée</translation>
<translation>Paramètres de la base de données</translation>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Importer une base de donnée KeePass 1</translation>
<translation>Importer une base de données KeePass 1</translation>
</message>
<message>
<source>Clone entry</source>
@@ -945,11 +996,11 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Copy username to clipboard</source>
<translation>Copier le nom d&apos;utilisateur dans le presse-papiers</translation>
<translation>Copier le nom d&apos;utilisateur dans le presse-papier</translation>
</message>
<message>
<source>Copy password to clipboard</source>
<translation>Copier le mot de passe dans le presse-papiers</translation>
<translation>Copier le mot de passe dans le presse-papier</translation>
</message>
<message>
<source>Settings</source>
@@ -1007,6 +1058,30 @@ Voulez-vous quand même la sauvegarder ?</translation>
<source>Export to CSV file</source>
<translation>Exporter au format CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Réparer la base de données</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Base de données KeePass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Tous les fichiers</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Sauvegarder la base de données réparée</translation>
</message>
<message>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Une erreur s&apos;est produite lors de l&apos;écriture de la base de données.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1020,7 +1095,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Character Types</source>
<translation>Types de caractère</translation>
<translation>Types de caractères</translation>
</message>
<message>
<source>Upper Case Letters</source>
@@ -1055,7 +1130,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>QCommandLineParser</name>
<message>
<source>Displays version information.</source>
<translation>Afficher les informations de version</translation>
<translation>Afficher les informations de version.</translation>
</message>
<message>
<source>Displays this help.</source>
@@ -1166,7 +1241,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>SettingsWidget</name>
<message>
<source>Application Settings</source>
<translation>Paramètre de l&apos;application</translation>
<translation>Paramètres de l&apos;application</translation>
</message>
<message>
<source>General</source>
@@ -1185,19 +1260,19 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Open previous databases on startup</source>
<translation>Ouvrir les base de données précédentes au démarrage</translation>
<translation>Ouvrir les bases de données précédentes au démarrage</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Sauvegarde automatiquement à la sortie</translation>
<translation>Sauvegarder automatiquement à la sortie</translation>
</message>
<message>
<source>Automatically save after every change</source>
<translation>Sauvegarde automatiquement après chaque modification</translation>
<translation>Sauvegarder automatiquement après chaque modification</translation>
</message>
<message>
<source>Minimize when copying to clipboard</source>
<translation>Réduire lors de la copie dans le presse-papiers</translation>
<translation>Réduire lors de la copie dans le presse-papier</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
@@ -1232,7 +1307,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>SettingsWidgetSecurity</name>
<message>
<source>Clear clipboard after</source>
<translation>Vider le presse-papiers après</translation>
<translation>Vider le presse-papier après</translation>
</message>
<message>
<source> sec</source>
@@ -1240,7 +1315,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
<translation>Verrouiller les bases de donnée après une inactivité de</translation>
<translation>Verrouiller les bases de données après une inactivité de</translation>
</message>
<message>
<source>Show passwords in cleartext by default</source>
@@ -1255,7 +1330,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>UnlockDatabaseWidget</name>
<message>
<source>Unlock database</source>
<translation>Déverrouiller la base de donnée</translation>
<translation>Déverrouiller la base de données</translation>
</message>
</context>
<context>
@@ -1273,7 +1348,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>filename of the password database to open (*.kdbx)</source>
<translation>Nom de fichier de la base de donnée de mot de pass à ouvrir (*.kdbx)</translation>
<translation>Nom de fichier de la base de données de mot de passe à ouvrir (*.kdbx)</translation>
</message>
<message>
<source>path to a custom config file</source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Revisi</translation>
</message>
<message>
<source>Using:</source>
<translation>Menggunakan:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -79,7 +83,7 @@
</message>
<message>
<source>Key files</source>
<translation>Berkas Kunci</translation>
<translation>Berkas kunci</translation>
</message>
<message>
<source>All files</source>
@@ -99,7 +103,7 @@
</message>
<message>
<source>Select a key file</source>
<translation>Pilih sebuah berkas kunci</translation>
<translation>Pilih berkas kunci</translation>
</message>
<message>
<source>Question</source>
@@ -111,7 +115,7 @@
</message>
<message>
<source>Different passwords supplied.</source>
<translation>Sandi yang berbeda diberikan.</translation>
<translation>Sandi berbeda.</translation>
</message>
<message>
<source>Failed to set key file</source>
@@ -167,6 +171,43 @@
<translation>Pilih berkas kunci</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Perbaiki basis data</translation>
</message>
<message>
<source>Error</source>
<translation>Galat</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Tidak bisa membuka berkas kunci</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Basis data terbuka dengan baik. Tidak perlu melakukan apa-apa.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Tidak bisa membuka basis data.</translation>
</message>
<message>
<source>Success</source>
<translation>Sukses</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Basis data berhasil diperbaiki
Anda bisa menyimpannya sekarang.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Tidak bisa memperbaiki basis data.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -428,7 +469,7 @@ Apakah Anda tetap ingin menyimpannya?</translation>
</message>
<message>
<source>Different passwords supplied.</source>
<translation>Kata sandi yang berbeda diberikan.</translation>
<translation>Sandi berbeda.</translation>
</message>
<message>
<source>New attribute</source>
@@ -586,7 +627,7 @@ Apakah Anda tetap ingin menyimpannya?</translation>
</message>
<message>
<source>Presets</source>
<translation type="unfinished"/>
<translation>Prasetel</translation>
</message>
<message>
<source>Notes:</source>
@@ -829,6 +870,16 @@ Apakah Anda tetap ingin menyimpannya?</translation>
<source>Unable to calculate master key</source>
<translation>Tidak bisa mengkalkulasi kunci utama</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Berkas yang dipilih adalah basis data KeePass 1 yang lama (.kdb).
Anda bisa mengimpornya dengan mengklik Basis Data &gt; &apos;Impor basis data KeePass 1&apos;.
Ini adalah migrasi satu arah. Anda tidak akan bisa lagi membuka basis data yang diimpor dengan versi lama KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1007,6 +1058,30 @@ Apakah Anda tetap ingin menyimpannya?</translation>
<source>Export to CSV file</source>
<translation>Ekspor ke berkas CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Perbaiki basis data</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Basis Data KeePass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Semua Berkas</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Simpan basis data yang sudah diperbaiki</translation>
</message>
<message>
<source>Error</source>
<translation>Galat</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Gagal menyimpan basis data.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1117,15 +1192,15 @@ Apakah Anda tetap ingin menyimpannya?</translation>
</message>
<message>
<source>Error writing to underlying device: </source>
<translation type="unfinished"/>
<translation>Terjadi kesalahan saat menyimpan ke perangkat:</translation>
</message>
<message>
<source>Error opening underlying device: </source>
<translation type="unfinished"/>
<translation>Terjadi kesalahan saat membuka perangkat:</translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
<translation type="unfinished"/>
<translation>Terjadi kesalahan saat membaca data dari perangkat:</translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Revisione</translation>
</message>
<message>
<source>Using:</source>
<translation>In uso:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -48,7 +52,7 @@
</message>
<message>
<source>Select entry to Auto-Type:</source>
<translation>Selezionare una voce per Auto-Type:</translation>
<translation>Seleziona una voce per Auto-Type:</translation>
</message>
</context>
<context>
@@ -59,11 +63,11 @@
</message>
<message>
<source>Enter password:</source>
<translation>Inserire password:</translation>
<translation>Inserisci password:</translation>
</message>
<message>
<source>Repeat password:</source>
<translation>Ripetere password:</translation>
<translation>Ripeti password:</translation>
</message>
<message>
<source>Key file</source>
@@ -75,7 +79,7 @@
</message>
<message>
<source>Create</source>
<translation>Creare</translation>
<translation>Crea</translation>
</message>
<message>
<source>Key files</source>
@@ -87,7 +91,7 @@
</message>
<message>
<source>Create Key File...</source>
<translation>Creare file chiave...</translation>
<translation>Crea file chiave...</translation>
</message>
<message>
<source>Error</source>
@@ -120,18 +124,19 @@
<message>
<source>Failed to set %1 as the Key file:
%2</source>
<translation>Impossibile impostare %1 come file Chiave: %2</translation>
<translation>Impossibile impostare %1 come file chiave:
%2</translation>
</message>
</context>
<context>
<name>DatabaseOpenWidget</name>
<message>
<source>Enter master key</source>
<translation>Inserire password</translation>
<translation>Inserisci la chiave principale</translation>
</message>
<message>
<source>Key File:</source>
<translation>File Chiave:</translation>
<translation>File chiave:</translation>
</message>
<message>
<source>Password:</source>
@@ -139,7 +144,7 @@
</message>
<message>
<source>Browse</source>
<translation>Sfogliare</translation>
<translation>Sfoglia</translation>
</message>
<message>
<source>Error</source>
@@ -159,18 +164,55 @@
</message>
<message>
<source>Key files</source>
<translation>Files chiave</translation>
<translation>File chiave</translation>
</message>
<message>
<source>Select key file</source>
<translation>Seleziona file chiave</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Ripara database</translation>
</message>
<message>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Impossibile aprire il file chiave</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Database aperto correttamente. Nessuna operazione da eseguire.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Impossibile aprire il database</translation>
</message>
<message>
<source>Success</source>
<translation>Successo</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Il database è stato riparato con successo
Adesso puoi salvarlo.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Impossibile riparare il database</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
<source>Database name:</source>
<translation>Nome database:</translation>
<translation>Nome del database:</translation>
</message>
<message>
<source>Database description:</source>
@@ -178,7 +220,7 @@
</message>
<message>
<source>Transform rounds:</source>
<translation>Rounds di trasformazione:</translation>
<translation>Round di trasformazione:</translation>
</message>
<message>
<source>Default username:</source>
@@ -186,7 +228,7 @@
</message>
<message>
<source>Use recycle bin:</source>
<translation>Utilizzare cestino:</translation>
<translation>Utilizza cestino:</translation>
</message>
<message>
<source> MiB</source>
@@ -254,7 +296,7 @@
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
<translation>&quot;%1&quot; è stata modificata.
<translation>&quot;%1&quot; è stata modificato.
Salvare le modifiche?</translation>
</message>
<message>
@@ -263,11 +305,11 @@ Salvare le modifiche?</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Scrittura del database fallita.</translation>
<translation>Scrittura del database non riuscita.</translation>
</message>
<message>
<source>Save database as</source>
<translation>Salvare database come</translation>
<translation>Salva database come</translation>
</message>
<message>
<source>New database</source>
@@ -280,18 +322,18 @@ 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>Il Database che stai tentando di aprire è bloccato da un&apos;altra esecuzione di KeePassX.
Vuoi aprirlo comunque? In alternativa, il database verrà aperto in sola lettura.</translation>
<translation>Il database che stai tentando di aprire è bloccato da un&apos;altra istanza di KeePassX.
Vuoi aprirlo comunque? Altrimenti il database verrà aperto in sola lettura.</translation>
</message>
<message>
<source>Lock database</source>
<translation>Bloccare database</translation>
<translation>Blocca 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>Non è possibile bloccare il database nel modo in cui lo stai modificando.
Premere annulla per terminare le modifiche o scartarle .</translation>
<translation>Non è possibile bloccare il database dato che lo stai modificando.
Premere Annulla per completare le modifiche o scartarle.</translation>
</message>
<message>
<source>This database has never been saved.
@@ -323,12 +365,12 @@ Annullare le modifiche e chiudere comunque?</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
<translation>Scrittura del file CSV fallita.</translation>
<translation>Scrittura del file CSV non riuscita.</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&apos;altra istanza di KeePassX.
<translation>Il database che stai tentando di salvare è bloccato da un&apos;altra istanza di KeePassX.
Vuoi salvare comunque?</translation>
</message>
</context>
@@ -336,7 +378,7 @@ Vuoi salvare comunque?</translation>
<name>DatabaseWidget</name>
<message>
<source>Change master key</source>
<translation>Cambia password principale</translation>
<translation>Cambia chiave principale</translation>
</message>
<message>
<source>Delete entry?</source>
@@ -457,15 +499,15 @@ Vuoi salvare comunque?</translation>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%n settimana(e)</numerusform><numerusform>%n settimana(e)</numerusform></translation>
<translation><numerusform>%n settimana</numerusform><numerusform>%n settimane</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
<translation><numerusform>%n mese(i)</numerusform><numerusform>%n mese(i)</numerusform></translation>
<translation><numerusform>%n mese</numerusform><numerusform>%n mesi</numerusform></translation>
</message>
<message>
<source>1 year</source>
<translation>1 anno</translation>
<translation>Un anno</translation>
</message>
</context>
<context>
@@ -476,15 +518,15 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Add</source>
<translation>Aggiungere</translation>
<translation>Aggiungi</translation>
</message>
<message>
<source>Edit</source>
<translation>Modificare</translation>
<translation>Modifica</translation>
</message>
<message>
<source>Remove</source>
<translation>Rimuovere</translation>
<translation>Rimuovi</translation>
</message>
<message>
<source>Attachments</source>
@@ -492,26 +534,26 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Save</source>
<translation>Salvare</translation>
<translation>Salva</translation>
</message>
<message>
<source>Open</source>
<translation>Aprire</translation>
<translation>Apri</translation>
</message>
</context>
<context>
<name>EditEntryWidgetAutoType</name>
<message>
<source>Enable Auto-Type for this entry</source>
<translation>Abilitare Auto-Type per questa voce</translation>
<translation>Abilita Auto-Type per questa voce</translation>
</message>
<message>
<source>Inherit default Auto-Type sequence from the group</source>
<translation>Ereditare la sequenza predefinita di Auto-Type dal gruppo</translation>
<translation>Eredita la sequenza predefinita di Auto-Type dal gruppo</translation>
</message>
<message>
<source>Use custom Auto-Type sequence:</source>
<translation>Usare sequenza personalizzata di Auto-Type:</translation>
<translation>Usa sequenza personalizzata di Auto-Type:</translation>
</message>
<message>
<source>+</source>
@@ -527,30 +569,30 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Use default sequence</source>
<translation>Usare sequenza predefinita</translation>
<translation>Usa sequenza predefinita</translation>
</message>
<message>
<source>Set custom sequence:</source>
<translation>Impostare sequenza personalizzata:</translation>
<translation>Imposta sequenza personalizzata:</translation>
</message>
</context>
<context>
<name>EditEntryWidgetHistory</name>
<message>
<source>Show</source>
<translation>Mostrare</translation>
<translation>Mostra</translation>
</message>
<message>
<source>Restore</source>
<translation>Ripristinare</translation>
<translation>Ripristina</translation>
</message>
<message>
<source>Delete</source>
<translation>Eliminare</translation>
<translation>Elimina</translation>
</message>
<message>
<source>Delete all</source>
<translation>Eliminare tutti</translation>
<translation>Elimina tutti</translation>
</message>
</context>
<context>
@@ -569,7 +611,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Repeat:</source>
<translation>Ripetere:</translation>
<translation>Ripeti:</translation>
</message>
<message>
<source>Gen.</source>
@@ -585,7 +627,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Presets</source>
<translation>Presets</translation>
<translation>Preimpostazioni</translation>
</message>
<message>
<source>Notes:</source>
@@ -624,7 +666,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Inherit from parent group (%1)</source>
<translation>Ereditare dal gruppo genitore (%1)</translation>
<translation>Eredita dal gruppo genitore (%1)</translation>
</message>
</context>
<context>
@@ -643,7 +685,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Search</source>
<translation>Cercare</translation>
<translation>Cerca</translation>
</message>
<message>
<source>Auto-type</source>
@@ -651,30 +693,30 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Use default auto-type sequence of parent group</source>
<translation>Ereditare la sequenza predefinita di auto-type dal gruppo</translation>
<translation>Eredita la sequenza predefinita di auto-type dal gruppo</translation>
</message>
<message>
<source>Set default auto-type sequence</source>
<translation>Usare sequenza auto-type predefinita</translation>
<translation>Usa sequenza di auto-type predefinita</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
<source>Use default icon</source>
<translation>Usare icona predefinita</translation>
<translation>Usa icona predefinita</translation>
</message>
<message>
<source>Use custom icon</source>
<translation>Usare icona personalizzata</translation>
<translation>Usa icona personalizzata</translation>
</message>
<message>
<source>Add custom icon</source>
<translation>Aggiungere icona personalizzata</translation>
<translation>Aggiungi icona personalizzata</translation>
</message>
<message>
<source>Delete custom icon</source>
<translation>Rimuovere icona personalizzata</translation>
<translation>Rimuovi icona personalizzata</translation>
</message>
<message>
<source>Images</source>
@@ -686,7 +728,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Select Image</source>
<translation>Seleziona Immagine</translation>
<translation>Seleziona immagine</translation>
</message>
<message>
<source>Can&apos;t delete icon!</source>
@@ -694,18 +736,18 @@ Vuoi salvare comunque?</translation>
</message>
<message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Impossibile eliminare l&apos;icona in quanto è in uso da %n voce(i).</numerusform><numerusform>Impossibile eliminare l&apos;icona in quanto è in uso da %n voce(i).</numerusform></translation>
<translation><numerusform>Impossibile eliminare l&apos;icona in quanto è in uso da %n voce.</numerusform><numerusform>Impossibile eliminare l&apos;icona in quanto è in uso da %n voci.</numerusform></translation>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
<message>
<source>Created:</source>
<translation>Creato:</translation>
<translation>Creazione:</translation>
</message>
<message>
<source>Modified:</source>
<translation>Modificato:</translation>
<translation>Modifica:</translation>
</message>
<message>
<source>Accessed:</source>
@@ -713,7 +755,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Uuid:</source>
<translation>Uuid:</translation>
<translation>UUID:</translation>
</message>
</context>
<context>
@@ -754,7 +796,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Username</source>
<translation>Nome Utente</translation>
<translation>Nome utente</translation>
</message>
<message>
<source>URL</source>
@@ -772,7 +814,7 @@ Vuoi salvare comunque?</translation>
<name>KeePass1OpenWidget</name>
<message>
<source>Import KeePass1 database</source>
<translation>Importare database KeePass1</translation>
<translation>Importa database KeePass1</translation>
</message>
<message>
<source>Error</source>
@@ -787,7 +829,7 @@ Vuoi salvare comunque?</translation>
<name>KeePass1Reader</name>
<message>
<source>Unable to read keyfile.</source>
<translation>Impossibile leggere il file chiave.</translation>
<translation>Impossibile leggere il file della chiave.</translation>
</message>
<message>
<source>Not a KeePass database.</source>
@@ -807,7 +849,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Unable to calculate master key</source>
<translation>Impossibile calcolare la chiave master</translation>
<translation>Impossibile calcolare la chiave principale</translation>
</message>
</context>
<context>
@@ -822,11 +864,21 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation>Password errata o file database corrotto.</translation>
<translation>Chiave errata o file del database danneggiato.</translation>
</message>
<message>
<source>Unable to calculate master key</source>
<translation>Impossibile calcolare la chiave master</translation>
<translation>Impossibile calcolare la chiave principale</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Il file selezionato è un vecchio database KeePass 1 (.kdb).
Puoi importarlo facendo clic su Database &gt; &apos;Importa database KeePass 1&apos;.
Questa è una migrazione in una sola direzione. Non potrai aprire il database importato con la vecchia versione 0.4 di KeePassX. </translation>
</message>
</context>
<context>
@@ -872,23 +924,23 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Quit</source>
<translation>Uscire</translation>
<translation>Esci</translation>
</message>
<message>
<source>About</source>
<translation>A Proposito</translation>
<translation>Informazioni</translation>
</message>
<message>
<source>Open database</source>
<translation>Aprire database</translation>
<translation>Apri database</translation>
</message>
<message>
<source>Save database</source>
<translation>Salvare database</translation>
<translation>Salva database</translation>
</message>
<message>
<source>Close database</source>
<translation>Chiudere database</translation>
<translation>Chiudi database</translation>
</message>
<message>
<source>New database</source>
@@ -896,35 +948,35 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Add new entry</source>
<translation>Aggiungere nuova voce</translation>
<translation>Aggiungi nuova voce</translation>
</message>
<message>
<source>View/Edit entry</source>
<translation>Visualizzare/Modificare voce</translation>
<translation>Visualizza/modifica voce</translation>
</message>
<message>
<source>Delete entry</source>
<translation>Eliminare voce</translation>
<translation>Elimina voce</translation>
</message>
<message>
<source>Add new group</source>
<translation>Aggiungere nuovo gruppo</translation>
<translation>Aggiungi nuovo gruppo</translation>
</message>
<message>
<source>Edit group</source>
<translation>Modificare gruppo</translation>
<translation>Modifica gruppo</translation>
</message>
<message>
<source>Delete group</source>
<translation>Eliminare gruppo</translation>
<translation>Elimina gruppo</translation>
</message>
<message>
<source>Save database as</source>
<translation>Salvare database come</translation>
<translation>Salva database come</translation>
</message>
<message>
<source>Change master key</source>
<translation>Cambiare password principale</translation>
<translation>Cambia chiave principale</translation>
</message>
<message>
<source>Database settings</source>
@@ -932,7 +984,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Import KeePass 1 database</source>
<translation>Importare database KeePass 1</translation>
<translation>Importa database KeePass 1</translation>
</message>
<message>
<source>Clone entry</source>
@@ -940,15 +992,15 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Find</source>
<translation>Trovare</translation>
<translation>Trova</translation>
</message>
<message>
<source>Copy username to clipboard</source>
<translation>Copiare nome utente negli appunti</translation>
<translation>Copia nome utente negli appunti</translation>
</message>
<message>
<source>Copy password to clipboard</source>
<translation>Copiare password negli appunti</translation>
<translation>Copia password negli appunti</translation>
</message>
<message>
<source>Settings</source>
@@ -956,15 +1008,15 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Perform Auto-Type</source>
<translation>Eseguire Auto-Type</translation>
<translation>Esegui Auto-Type</translation>
</message>
<message>
<source>Open URL</source>
<translation>Aprire URL</translation>
<translation>Apri URL</translation>
</message>
<message>
<source>Lock databases</source>
<translation>Bloccare database</translation>
<translation>Blocca database</translation>
</message>
<message>
<source>Title</source>
@@ -1006,6 +1058,30 @@ Vuoi salvare comunque?</translation>
<source>Export to CSV file</source>
<translation>Esporta in un file CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Ripara database</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Database KeePass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Tutti i file</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Salva il database riparato</translation>
</message>
<message>
<source>Error</source>
<translation>Errore</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Scrittura del database non riuscita.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1039,26 +1115,26 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Exclude look-alike characters</source>
<translation>Escludere caratteri simili</translation>
<translation>Escludi caratteri simili</translation>
</message>
<message>
<source>Ensure that the password contains characters from every group</source>
<translation>Assicurare che la password contenga caratteri di ogni gruppo</translation>
<translation>Verifica che la password contenga caratteri di ogni gruppo</translation>
</message>
<message>
<source>Accept</source>
<translation>Accettare</translation>
<translation>Accetta</translation>
</message>
</context>
<context>
<name>QCommandLineParser</name>
<message>
<source>Displays version information.</source>
<translation>Mostrare informazioni sulla versione.</translation>
<translation>Mostra informazioni sulla versione.</translation>
</message>
<message>
<source>Displays this help.</source>
<translation>Mostrare questo aiuto.</translation>
<translation>Mostra questo aiuto.</translation>
</message>
<message>
<source>Unknown option &apos;%1&apos;.</source>
@@ -1101,7 +1177,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Writing canceled by application</source>
<translation>Scrittura cancellata dall&apos;applicazione</translation>
<translation>Scrittura annullata dall&apos;applicazione</translation>
</message>
<message>
<source>Partial write. Partition full?</source>
@@ -1146,7 +1222,7 @@ Vuoi salvare comunque?</translation>
<name>SearchWidget</name>
<message>
<source>Find:</source>
<translation>Trovare:</translation>
<translation>Trova:</translation>
</message>
<message>
<source>Case sensitive</source>
@@ -1184,23 +1260,23 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Open previous databases on startup</source>
<translation>Aprire precedente database all&apos;avvio</translation>
<translation>Apri il database precedente all&apos;avvio</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Salvare automaticamente all&apos;uscita</translation>
<translation>Salva automaticamente all&apos;uscita</translation>
</message>
<message>
<source>Automatically save after every change</source>
<translation>Salvare automaticamente dopo ogni modifica</translation>
<translation>Salva automaticamente dopo ogni modifica</translation>
</message>
<message>
<source>Minimize when copying to clipboard</source>
<translation>Minimizzare quando si copia negli appunti</translation>
<translation>Minimizza quando si copia negli appunti</translation>
</message>
<message>
<source>Use group icon on entry creation</source>
<translation>Usare l&apos;icona del gruppo alla creazione di una voce</translation>
<translation>Usa l&apos;icona del gruppo alla creazione di una voce</translation>
</message>
<message>
<source>Global Auto-Type shortcut</source>
@@ -1208,7 +1284,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Use entry title to match windows for global auto-type</source>
<translation>Utilizzare il titolo della voce per abbinare la finestra per auto-type globale</translation>
<translation>Utilizza il titolo della voce per abbinare la finestra per auto-type globale</translation>
</message>
<message>
<source>Language</source>
@@ -1224,14 +1300,14 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Remember last key files</source>
<translation>Ricorda gli ultimi files chiave</translation>
<translation>Ricorda gli ultimi file di chiavi</translation>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
<message>
<source>Clear clipboard after</source>
<translation>Pulire appunti dopo</translation>
<translation>Pulisci appunti dopo</translation>
</message>
<message>
<source> sec</source>
@@ -1239,22 +1315,22 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
<translation>Bloccare i database dopo un&apos;inattività di</translation>
<translation>Blocca i database dopo un&apos;inattività di</translation>
</message>
<message>
<source>Show passwords in cleartext by default</source>
<translation>Mostrare la password in chiaro in maniera predefinita</translation>
<translation>Mostra la password in chiaro in maniera predefinita</translation>
</message>
<message>
<source>Always ask before performing auto-type</source>
<translation>Chiedere sempre prima di eseguire auto-type</translation>
<translation>Chiedi sempre prima di eseguire auto-type</translation>
</message>
</context>
<context>
<name>UnlockDatabaseWidget</name>
<message>
<source>Unlock database</source>
<translation>Sbloccare database</translation>
<translation>Sblocca database</translation>
</message>
</context>
<context>
@@ -1272,7 +1348,7 @@ Vuoi salvare comunque?</translation>
</message>
<message>
<source>filename of the password database to open (*.kdbx)</source>
<translation>nome del file del database da aprire (*.kdbx)</translation>
<translation>nome del file di database da aprire (*.kdbx)</translation>
</message>
<message>
<source>path to a custom config file</source>

View File

@@ -9,6 +9,14 @@
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassXはGNU General Public License (GPL) version 2 version 3 ()</translation>
</message>
<message>
<source>Revision</source>
<translation></translation>
</message>
<message>
<source>Using:</source>
<translation>:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -18,7 +26,7 @@
</message>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
<translation type="unfinished"/>
<translation>:</translation>
</message>
</context>
<context>
@@ -29,11 +37,11 @@
</message>
<message>
<source>Sequence</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Default sequence</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>
@@ -44,7 +52,7 @@
</message>
<message>
<source>Select entry to Auto-Type:</source>
<translation type="unfinished"/>
<translation>:</translation>
</message>
</context>
<context>
@@ -107,16 +115,17 @@
</message>
<message>
<source>Different passwords supplied.</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Failed to set key file</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Failed to set %1 as the Key file:
%2</source>
<translation type="unfinished"/>
<translation>%1 :
%2</translation>
</message>
</context>
<context>
@@ -147,7 +156,7 @@
</message>
<message>
<source>Can&apos;t open key file</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>All files</source>
@@ -162,6 +171,43 @@
<translation></translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation></translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation></translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation></translation>
</message>
<message>
<source>Success</source>
<translation></translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>
</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation></translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -205,7 +251,7 @@
<name>DatabaseTabWidget</name>
<message>
<source>Root</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>KeePass 2 Database</source>
@@ -286,35 +332,46 @@ Do you want to open it anyway? Alternatively the database is opened read-only.</
<message>
<source>Can't lock the database as you are currently editing it.
Please press cancel to finish your changes or discard them.</source>
<translation type="unfinished"/>
<translation>現在編集中のため、データベースをロックすることができませんでした。
キャンセルボタンを押し、変更を完了させるか破棄してください。</translation>
</message>
<message>
<source>This database has never been saved.
You can save the database or stop locking it.</source>
<translation type="unfinished"/>
<translation>このデータベースは一度も保存されていません。
データベースを保存してロックを解除してください。</translation>
</message>
<message>
<source>This database has been modified.
Do you want to save the database before locking it?
Otherwise your changes are lost.</source>
<translation type="unfinished"/>
<translation>このデータベースは変更されました。
ロックを行う前にデータベースを保存しますか?
保存しない場合には変更点は失われます。</translation>
</message>
<message>
<source>&quot;%1&quot; is in edit mode.
Discard changes and close anyway?</source>
<translation type="unfinished"/>
<translation>&quot;%1&quot; は現在編集モードです。
変更を破棄して閉じてしまってもよろしいですか?</translation>
</message>
<message>
<source>Export database to CSV file</source>
<translation type="unfinished"/>
<translation>データベースをCSVファイルにエクスポートする</translation>
</message>
<message>
<source>CSV file</source>
<translation type="unfinished"/>
<translation>CSVファイル</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
<translation type="unfinished"/>
<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>
@@ -329,7 +386,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Do you really want to delete the entry &quot;%1&quot; for good?</source>
<translation type="unfinished"/>
<translation>本当にエントリー &quot;%1&quot; を永遠に消去しますか?</translation>
</message>
<message>
<source>Delete entries?</source>
@@ -337,7 +394,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Do you really want to delete %1 entries for good?</source>
<translation type="unfinished"/>
<translation>本当に %1 個のエントリーを永遠に消去しますか?</translation>
</message>
<message>
<source>Move entries to recycle bin?</source>
@@ -412,7 +469,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Different passwords supplied.</source>
<translation type="unfinished"/>
<translation>異なるパスワードが入力されました。</translation>
</message>
<message>
<source>New attribute</source>
@@ -442,11 +499,11 @@ Discard changes and close anyway?</source>
</message>
<message numerus="yes">
<source>%n week(s)</source>
<translation><numerusform>%s週間()</numerusform></translation>
<translation><numerusform>%n週間</numerusform></translation>
</message>
<message numerus="yes">
<source>%n month(s)</source>
<translation><numerusform>%nヶ月()</numerusform></translation>
<translation><numerusform>%nヶ月</numerusform></translation>
</message>
<message>
<source>1 year</source>
@@ -496,7 +553,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Use custom Auto-Type sequence:</source>
<translation>使</translation>
<translation>カスタムの自動入力手順を使う:</translation>
</message>
<message>
<source>+</source>
@@ -546,7 +603,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Username:</source>
<translation></translation>
<translation>ユーザ名:</translation>
</message>
<message>
<source>Password:</source>
@@ -679,7 +736,7 @@ Discard changes and close anyway?</source>
</message>
<message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>%s個のアイテム()使</numerusform></translation>
<translation><numerusform>%n個のアイテムから使われているので、アイコンを削除できません。</numerusform></translation>
</message>
</context>
<context>
@@ -705,7 +762,7 @@ Discard changes and close anyway?</source>
<name>EntryAttributesModel</name>
<message>
<source>Name</source>
<translation type="unfinished"/>
<translation>名前</translation>
</message>
</context>
<context>
@@ -813,6 +870,16 @@ Discard changes and close anyway?</source>
<source>Unable to calculate master key</source>
<translation>マスターキーを計算できません</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation> KeePass 1 (.kdb)
&gt; &apos;KeePass 1 &apos;
KeePassX 0.4 </translation>
</message>
</context>
<context>
<name>Main</name>
@@ -973,7 +1040,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Toggle window</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Tools</source>
@@ -981,15 +1048,39 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Copy username</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Copy password</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Export to CSV file</source>
<translation type="unfinished"/>
<translation>CSVファイルへエクスポート</translation>
</message>
<message>
<source>Repair database</source>
<translation></translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 </translation>
</message>
<message>
<source>All files</source>
<translation></translation>
</message>
<message>
<source>Save repaired database</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation></translation>
</message>
</context>
<context>
@@ -1039,11 +1130,11 @@ Discard changes and close anyway?</source>
<name>QCommandLineParser</name>
<message>
<source>Displays version information.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Displays this help.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Unknown option &apos;%1&apos;.</source>
@@ -1082,7 +1173,7 @@ Discard changes and close anyway?</source>
<name>QSaveFile</name>
<message>
<source>Existing file %1 is not writable</source>
<translation> %1 </translation>
<translation> %1 </translation>
</message>
<message>
<source>Writing canceled by application</source>
@@ -1090,14 +1181,14 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Partial write. Partition full?</source>
<translation type="unfinished"/>
<translation></translation>
</message>
</context>
<context>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
<translation>zlibエラーが発生しました</translation>
<translation>zlibエラーが発生しました: </translation>
</message>
<message>
<source>Error writing to underlying device: </source>
@@ -1113,7 +1204,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
<translation>zlibエラーが発生しました</translation>
<translation>zlibエラーが発生しました: </translation>
</message>
</context>
<context>
@@ -1193,7 +1284,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Use entry title to match windows for global auto-type</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Language</source>
@@ -1205,7 +1296,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Hide window to system tray when minimized</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Remember last key files</source>
@@ -1261,11 +1352,7 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>path to a custom config file</source>
<translation type="unfinished"/>
</message>
<message>
<source>password of the database (DANGEROUS!)</source>
<translation> (!)</translation>
<translation></translation>
</message>
<message>
<source>key file of the database</source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation></translation>
</message>
<message>
<source>Using:</source>
<translation>:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -166,6 +170,43 @@
<translation> </translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation> </translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation> </translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation> . .</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation> .</translation>
</message>
<message>
<source>Success</source>
<translation></translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>
.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation> .</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -826,6 +867,16 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>마스터 키를 계산할 수 없습니다</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation> KeePass 1 (.kdb).
&gt; &apos;KeePass 1 &apos; .
, KeePassX 0.4 .</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1004,6 +1055,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>CSV </translation>
</message>
<message>
<source>Repair database</source>
<translation> </translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 </translation>
</message>
<message>
<source>All files</source>
<translation> </translation>
</message>
<message>
<source>Save repaired database</source>
<translation> </translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation> .</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -13,12 +13,16 @@
<source>Revision</source>
<translation>Poversijis</translation>
</message>
<message>
<source>Using:</source>
<translation>Naudojama:</translation>
</message>
</context>
<context>
<name>AutoType</name>
<message>
<source>Auto-Type - KeePassX</source>
<translation>Automatinis Rinkimas - KeePassX</translation>
<translation>Automatinis rinkimas - KeePassX</translation>
</message>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
@@ -44,11 +48,11 @@
<name>AutoTypeSelectDialog</name>
<message>
<source>Auto-Type - KeePassX</source>
<translation>Automatinis Rinkimas - KeePassX</translation>
<translation>Automatinis rinkimas - KeePassX</translation>
</message>
<message>
<source>Select entry to Auto-Type:</source>
<translation>Pasirinkite įrašą Automatiniam Rinkimui:</translation>
<translation>Pasirinkite įrašą automatiniam rinkimui:</translation>
</message>
</context>
<context>
@@ -59,7 +63,7 @@
</message>
<message>
<source>Enter password:</source>
<translation>Įveskite slaptažodį:</translation>
<translation>Įrašykite slaptažodį:</translation>
</message>
<message>
<source>Repeat password:</source>
@@ -87,7 +91,7 @@
</message>
<message>
<source>Create Key File...</source>
<translation>Sukurti Rakto Failą...</translation>
<translation>Sukurti rakto failą...</translation>
</message>
<message>
<source>Error</source>
@@ -95,7 +99,7 @@
</message>
<message>
<source>Unable to create Key File : </source>
<translation>Nepavyko sukurti Rakto Failo : </translation>
<translation>Nepavyko sukurti rakto failo : </translation>
</message>
<message>
<source>Select a key file</source>
@@ -120,7 +124,7 @@
<message>
<source>Failed to set %1 as the Key file:
%2</source>
<translation>Nepavyko nustatyti %1 kaip Rakto failą:
<translation>Nepavyko nustatyti %1 kaip rakto failą:
%2</translation>
</message>
</context>
@@ -132,7 +136,7 @@
</message>
<message>
<source>Key File:</source>
<translation>Rakto Failas:</translation>
<translation>Rakto failas:</translation>
</message>
<message>
<source>Password:</source>
@@ -167,6 +171,43 @@
<translation>Pasirinkite rakto failą</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Taisyti duomenų bazę</translation>
</message>
<message>
<source>Error</source>
<translation>Klaida</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Nepavyksta atverti rakto failo</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Duomenų bazė atsivėrė tvarkingai. Nėra atlikti.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Nepavyko atverti duomenų bazės.</translation>
</message>
<message>
<source>Success</source>
<translation>Pavyko</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Duomenų bazė buvo sėkmingai pataisyta
Dabar galite įrašyti.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Duomenų bazės pataisyti nepavyko.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -214,7 +255,7 @@
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 Duomenų Bazė</translation>
<translation>KeePass 2 duomenų bazė</translation>
</message>
<message>
<source>All files</source>
@@ -400,7 +441,7 @@ Ar vis tiek norite ją įrašyti?</translation>
</message>
<message>
<source>Auto-Type</source>
<translation>Automatinis Rinkimas</translation>
<translation>Automatinis rinkimas</translation>
</message>
<message>
<source>Properties</source>
@@ -504,15 +545,15 @@ Ar vis tiek norite ją įrašyti?</translation>
<name>EditEntryWidgetAutoType</name>
<message>
<source>Enable Auto-Type for this entry</source>
<translation>Įjungti šiam įrašui Automatinį Rinkimą</translation>
<translation>Įjungti šiam įrašui automatinį rinkimą</translation>
</message>
<message>
<source>Inherit default Auto-Type sequence from the group</source>
<translation>Paveldėti numatytąją Automatinio Rinkimo seką grupės</translation>
<translation>Paveldėti numatytąją automatinio rinkimo seką iš grupės</translation>
</message>
<message>
<source>Use custom Auto-Type sequence:</source>
<translation>Naudoti tinkintą Automatinio Rinkimo seka:</translation>
<translation>Naudoti tinkintą automatinio rinkimo seka:</translation>
</message>
<message>
<source>+</source>
@@ -687,7 +728,7 @@ Ar vis tiek norite ją įrašyti?</translation>
</message>
<message>
<source>Select Image</source>
<translation>Pasirinkite Paveikslą</translation>
<translation>Pasirinkite paveikslą</translation>
</message>
<message>
<source>Can&apos;t delete icon!</source>
@@ -829,6 +870,16 @@ Ar vis tiek norite ją įrašyti?</translation>
<source>Unable to calculate master key</source>
<translation>Nepavyko apskaičiuoti pagrindinio rakto</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Pasirinktas failas yra sena KeePass 1 duomenų bazė (.kdb).
Jūs galite importuoti, nuspausdami Duomenų bazė &gt; &quot;Importuoti KeePass 1 duomenų bazę&quot;.
Tai yra vienakryptis perkėlimas. Jūs negalėsite atverti importuotos duomenų bazės, naudodami senąją KeePassX 0.4 versija.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -957,7 +1008,7 @@ Ar vis tiek norite ją įrašyti?</translation>
</message>
<message>
<source>Perform Auto-Type</source>
<translation>Atlikti Automatinį Rinkimą</translation>
<translation>Atlikti automatinį rinkimą</translation>
</message>
<message>
<source>Open URL</source>
@@ -1007,6 +1058,30 @@ Ar vis tiek norite ją įrašyti?</translation>
<source>Export to CSV file</source>
<translation>Eksportuoti į CSV failą</translation>
</message>
<message>
<source>Repair database</source>
<translation>Taisyti duomenų bazę</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 duomenų bazė</translation>
</message>
<message>
<source>All files</source>
<translation>Visi failai</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Įrašyti pataisytą duomenų bazę</translation>
</message>
<message>
<source>Error</source>
<translation>Klaida</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Duomenų bazės rašymas nepavyko.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1020,15 +1095,15 @@ Ar vis tiek norite ją įrašyti?</translation>
</message>
<message>
<source>Character Types</source>
<translation>Simbolių Tipai</translation>
<translation>Simbolių tipai</translation>
</message>
<message>
<source>Upper Case Letters</source>
<translation>Viršutinio Registro Raidės</translation>
<translation>Viršutinio registro raidės</translation>
</message>
<message>
<source>Lower Case Letters</source>
<translation>Apatinio Registro Raidės</translation>
<translation>Apatinio registro raidės</translation>
</message>
<message>
<source>Numbers</source>
@@ -1036,7 +1111,7 @@ Ar vis tiek norite ją įrašyti?</translation>
</message>
<message>
<source>Special Characters</source>
<translation>Specialūs Simboliai</translation>
<translation>Specialūs simboliai</translation>
</message>
<message>
<source>Exclude look-alike characters</source>
@@ -1166,7 +1241,7 @@ Ar vis tiek norite ją įrašyti?</translation>
<name>SettingsWidget</name>
<message>
<source>Application Settings</source>
<translation>Programos Nustatymai</translation>
<translation>Programos nustatymai</translation>
</message>
<message>
<source>General</source>
@@ -1205,7 +1280,7 @@ Ar vis tiek norite ją įrašyti?</translation>
</message>
<message>
<source>Global Auto-Type shortcut</source>
<translation>Visuotinis Automatinio Rinkimo spartusis klavišas</translation>
<translation>Visuotinis automatinio rinkimo spartusis klavišas</translation>
</message>
<message>
<source>Use entry title to match windows for global auto-type</source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Revisie</translation>
</message>
<message>
<source>Using:</source>
<translation>Maakt gebruik van:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,43 @@
<translation>Kies sleutelbestand</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Database repareren</translation>
</message>
<message>
<source>Error</source>
<translation>Fout</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Niet mogelijk om het sleutelbestand te openen</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Database werd zonder problemen geopend. Niets te doen.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Niet mogelijk om de database te openen.</translation>
</message>
<message>
<source>Success</source>
<translation>Gelukt</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>De database is met succes gerepareerd
U kunt deze nu opslaan.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Niet mogelijk om de database te repareren.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -829,6 +870,16 @@ Wilt u toch doorgaan met opslaan?</translation>
<source>Unable to calculate master key</source>
<translation>Niet mogelijk om hoofdsleutel te berekenen</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Het gekozen bestand is een oude KeePass 1 database (.kdb).
U kunt het importeren door te klikken op Database &gt; &apos;KeePass 1 database importeren&apos;.
Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen met KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1007,6 +1058,30 @@ Wilt u toch doorgaan met opslaan?</translation>
<source>Export to CSV file</source>
<translation>Naar CSV-bestand exporteren</translation>
</message>
<message>
<source>Repair database</source>
<translation>Database repareren</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 Database</translation>
</message>
<message>
<source>All files</source>
<translation>Alle bestanden</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Gerepareerde database opslaan</translation>
</message>
<message>
<source>Error</source>
<translation>Fout</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Opslaan van de database is mislukt.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1197,7 +1272,7 @@ Wilt u toch doorgaan met opslaan?</translation>
</message>
<message>
<source>Minimize when copying to clipboard</source>
<translation>Minimaliseer bij kopieeren naar klembord</translation>
<translation>Minimaliseer bij kopiëren naar klembord</translation>
</message>
<message>
<source>Use group icon on entry creation</source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Rewizja</translation>
</message>
<message>
<source>Using:</source>
<translation>Używanie:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -22,7 +26,7 @@
</message>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
<translation type="unfinished"/>
<translation>Nie mogę znaleźć wpisu, który by pasował do tytułu okna: </translation>
</message>
</context>
<context>
@@ -95,7 +99,7 @@
</message>
<message>
<source>Unable to create Key File : </source>
<translation>Nie można utworzyć pliku klucza</translation>
<translation>Nie można utworzyć pliku klucza :</translation>
</message>
<message>
<source>Select a key file</source>
@@ -111,16 +115,17 @@
</message>
<message>
<source>Different passwords supplied.</source>
<translation type="unfinished"/>
<translation>Podano różne hasła.</translation>
</message>
<message>
<source>Failed to set key file</source>
<translation type="unfinished"/>
<translation>Błąd w ustawianiu pliku z kluczem</translation>
</message>
<message>
<source>Failed to set %1 as the Key file:
%2</source>
<translation type="unfinished"/>
<translation>Błąd w ustawieniu %1 jako plik klucza:
%2</translation>
</message>
</context>
<context>
@@ -166,6 +171,43 @@
<translation>Wybierz plik z kluczem</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Napraw bazę</translation>
</message>
<message>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Nie mogę otworzyć pliku z kluczem</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Pomyślnie otworzono bazę. Nic do zrobienia.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Nie można otworzyć bazy kluczy.</translation>
</message>
<message>
<source>Success</source>
<translation>Sukces</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Baza została naprawiona
Możesz teraz już zapisać.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Nie mogę naprawić bazę.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -174,7 +216,7 @@
</message>
<message>
<source>Database description:</source>
<translation>Opis bazy danych</translation>
<translation>Opis bazy danych:</translation>
</message>
<message>
<source>Transform rounds:</source>
@@ -198,11 +240,11 @@
</message>
<message>
<source>Max. history items:</source>
<translation type="unfinished"/>
<translation>Max. ilość wpisów w historii:</translation>
</message>
<message>
<source>Max. history size:</source>
<translation type="unfinished"/>
<translation>Max. rozmiar historii:</translation>
</message>
</context>
<context>
@@ -237,24 +279,25 @@
</message>
<message>
<source>KeePass 1 database</source>
<translation>Baza danych KeePass1</translation>
<translation>Baza danych KeePass 1</translation>
</message>
<message>
<source>All files (*)</source>
<translation>Wszystkie pliki(*)</translation>
<translation>Wszystkie pliki (*)</translation>
</message>
<message>
<source>Close?</source>
<translation>Zamknąć ?</translation>
<translation>Zamknąć?</translation>
</message>
<message>
<source>Save changes?</source>
<translation>Zapisać zmiany ?</translation>
<translation>Zapisać zmiany?</translation>
</message>
<message>
<source>&quot;%1&quot; was modified.
Save changes?</source>
<translation>&quot;%1&quot; został zmieniony. Zapisać zmiany ?</translation>
<translation>&quot;%1&quot; został zmieniony.
Zapisać zmiany?</translation>
</message>
<message>
<source>Error</source>
@@ -274,12 +317,13 @@ Save changes?</source>
</message>
<message>
<source>locked</source>
<translation>plik CSV</translation>
<translation>zablokowana</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 type="unfinished"/>
<translation>Baza, którą próbujesz otworzyć, jest zablokowana przez inną instancję KeePassX.
Czy chcesz otworzyć pomimo tego? Inaczej baza będzie otwarta tylko do odczytu.</translation>
</message>
<message>
<source>Lock database</source>
@@ -288,23 +332,28 @@ Do you want to open it anyway? Alternatively the database is opened read-only.</
<message>
<source>Can't lock the database as you are currently editing it.
Please press cancel to finish your changes or discard them.</source>
<translation type="unfinished"/>
<translation>Nie można zablokować bazy, którą edytujesz.
Naciśnij anuluj, aby zakończyć zmiany albo porzucić je.</translation>
</message>
<message>
<source>This database has never been saved.
You can save the database or stop locking it.</source>
<translation type="unfinished"/>
<translation>Baza nie została nigdy zapisana.
Możesz ją zapisać albo przestać blokować.</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>Baza została zmodyfikowana.
Czy chcesz zapisać przed zablokowaniem jej?
W przeciwnym wypadku zmiany zostaną porzucone.</translation>
</message>
<message>
<source>&quot;%1&quot; is in edit mode.
Discard changes and close anyway?</source>
<translation type="unfinished"/>
<translation>&quot;%1&quot; jest w trybie edytowania.
Odrzucić zmiany i zamknąć?</translation>
</message>
<message>
<source>Export database to CSV file</source>
@@ -321,7 +370,8 @@ Discard changes and close anyway?</source>
<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>Baza, którą próbujesz zapisać jest zablokowana przez inną instancję KeePassX.
Czy chcesz zapisać mimo to?</translation>
</message>
</context>
<context>
@@ -352,7 +402,7 @@ Do you want to save it anyway?</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><numerusform></numerusform></translation>
<translation><numerusform>Czy na pewno chcesz przenieść %n wpis do kosza?</numerusform><numerusform>Czy na pewno chcesz przenieść %n wpisów do kosza?</numerusform><numerusform>Czy na pewno chcesz przenieść %n wpisów do kosza?</numerusform></translation>
</message>
<message>
<source>Delete group?</source>
@@ -407,7 +457,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Add entry</source>
<translation>Nowy wpis</translation>
<translation>Dodaj wpis</translation>
</message>
<message>
<source>Edit entry</source>
@@ -419,7 +469,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Different passwords supplied.</source>
<translation type="unfinished"/>
<translation>Podano różne hasła.</translation>
</message>
<message>
<source>New attribute</source>
@@ -565,7 +615,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Gen.</source>
<translation type="unfinished"/>
<translation>Gen.</translation>
</message>
<message>
<source>URL:</source>
@@ -577,7 +627,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Presets</source>
<translation type="unfinished"/>
<translation>Prezentuje</translation>
</message>
<message>
<source>Notes:</source>
@@ -686,7 +736,7 @@ Do you want to save it anyway?</source>
</message>
<message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation>
<translation><numerusform>Nie mogę usunąć ikony. Nadal używana przez %n wpis.</numerusform><numerusform>Nie mogę usunąć ikony. Nadal używana przez %n wpisów.</numerusform><numerusform>Nie mogę usunąć ikony. Nadal używana przez %n wpisów.</numerusform></translation>
</message>
</context>
<context>
@@ -820,6 +870,16 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Nie mogę wyliczyć głównego klucza</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Wybrany plik jest bazą starego KeePassX 1 (.kdb).
Możesz zaimportować przez wybranie Baza &gt; &apos;Importuj bazę danych KeePass 1&apos;.
Nie będzie można skonwertować nowej bazy do starego programu KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -980,7 +1040,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Toggle window</source>
<translation type="unfinished"/>
<translation>Pokaż/ukryj okno</translation>
</message>
<message>
<source>Tools</source>
@@ -998,6 +1058,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>Eksport do pliku CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Napraw bazę</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Baza KeePass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Wszystkie pliki</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Zapisz naprawioną bazę</translation>
</message>
<message>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Błąd przy zapisie bazy.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1011,7 +1095,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Character Types</source>
<translation type="unfinished"/>
<translation>Typy znaków</translation>
</message>
<message>
<source>Upper Case Letters</source>
@@ -1035,7 +1119,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Ensure that the password contains characters from every group</source>
<translation type="unfinished"/>
<translation>Zapewnij, że hasło będzie zawierało znaki ze wszystkich grup</translation>
</message>
<message>
<source>Accept</source>
@@ -1074,7 +1158,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Usage: %1</source>
<translation type="unfinished"/>
<translation>Używanie: %1</translation>
</message>
<message>
<source>Options:</source>
@@ -1089,7 +1173,7 @@ Do you want to save it anyway?</source>
<name>QSaveFile</name>
<message>
<source>Existing file %1 is not writable</source>
<translation type="unfinished"/>
<translation>Istniejący plik %1 jest nie do zapisu</translation>
</message>
<message>
<source>Writing canceled by application</source>
@@ -1097,7 +1181,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Partial write. Partition full?</source>
<translation type="unfinished"/>
<translation>Częściowy zapis. Pełny dysk?</translation>
</message>
</context>
<context>
@@ -1108,15 +1192,15 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Error writing to underlying device: </source>
<translation type="unfinished"/>
<translation>Błąd w zapisie na urządzenie:</translation>
</message>
<message>
<source>Error opening underlying device: </source>
<translation type="unfinished"/>
<translation>Błąd w otwieraniu z urządzenia:</translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
<translation type="unfinished"/>
<translation>Błąd w odczycie danych z urządzenia:</translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
@@ -1150,7 +1234,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Root group</source>
<translation type="unfinished"/>
<translation>Główna grupa</translation>
</message>
</context>
<context>
@@ -1200,7 +1284,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Use entry title to match windows for global auto-type</source>
<translation type="unfinished"/>
<translation>Wykorzystaj tytuł wpisu do dopasowania dla globalnego auto-wpisywania</translation>
</message>
<message>
<source>Language</source>
@@ -1227,7 +1311,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source> sec</source>
<translation type="unfinished"/>
<translation>s</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
@@ -1260,15 +1344,15 @@ Do you want to save it anyway?</source>
<name>main</name>
<message>
<source>KeePassX - cross-platform password manager</source>
<translation type="unfinished"/>
<translation>KeePassX - wieloplatformowy menadżer haseł</translation>
</message>
<message>
<source>filename of the password database to open (*.kdbx)</source>
<translation type="unfinished"/>
<translation>nazwa pliku z bazą haseł do otwarcia (*.kdbx)</translation>
</message>
<message>
<source>path to a custom config file</source>
<translation type="unfinished"/>
<translation>ścieżka do pliku z ustawieniami</translation>
</message>
<message>
<source>key file of the database</source>

View File

@@ -11,7 +11,11 @@
</message>
<message>
<source>Revision</source>
<translation type="unfinished"/>
<translation>Revisão</translation>
</message>
<message>
<source>Using:</source>
<translation>Usando:</translation>
</message>
</context>
<context>
@@ -22,7 +26,7 @@
</message>
<message>
<source>Couldn&apos;t find an entry that matches the window title:</source>
<translation>Não foi possível encontrar uma entrada que corresponda ao título da janela:</translation>
<translation>Não foi possível localizar uma entrada que corresponda ao título da janela:</translation>
</message>
</context>
<context>
@@ -95,7 +99,7 @@
</message>
<message>
<source>Unable to create Key File : </source>
<translation>Não foi possível criar o Arquivo-Chave :</translation>
<translation>Não foi possível criar o Arquivo-Chave : </translation>
</message>
<message>
<source>Select a key file</source>
@@ -167,15 +171,52 @@
<translation>Escolha o arquivo-chave</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Reparar banco de dados</translation>
</message>
<message>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Não foi possível abrir arquivo-chave</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Banco de dados aberto com sucesso. Nada para fazer.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Não foi possível abrir o banco de dados.</translation>
</message>
<message>
<source>Success</source>
<translation>Sucesso</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>O banco de dados foi reparado com sucesso
Você pode salvá-lo agora.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Não foi possível reparar o banco de dados.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
<source>Database name:</source>
<translation>Nome do Banco de Dados:</translation>
<translation>Nome do banco de dados:</translation>
</message>
<message>
<source>Database description:</source>
<translation>Descrição do Banco de Dados:</translation>
<translation>Descrição do banco de dados:</translation>
</message>
<message>
<source>Transform rounds:</source>
@@ -191,7 +232,7 @@
</message>
<message>
<source> MiB</source>
<translation>MB</translation>
<translation> MB</translation>
</message>
<message>
<source>Benchmark</source>
@@ -199,18 +240,18 @@
</message>
<message>
<source>Max. history items:</source>
<translation>Máx. Itens no histórico:</translation>
<translation>Máx. itens no histórico:</translation>
</message>
<message>
<source>Max. history size:</source>
<translation>Tamanho Máx. do histórico:</translation>
<translation>Tamanho máx. do histórico:</translation>
</message>
</context>
<context>
<name>DatabaseTabWidget</name>
<message>
<source>Root</source>
<translation>Raíz</translation>
<translation>Raiz</translation>
</message>
<message>
<source>KeePass 2 Database</source>
@@ -230,7 +271,7 @@
</message>
<message>
<source>File not found!</source>
<translation>Arquivo não encontrado!</translation>
<translation>Arquivo não localizado!</translation>
</message>
<message>
<source>Open KeePass 1 database</source>
@@ -238,7 +279,7 @@
</message>
<message>
<source>KeePass 1 database</source>
<translation>banco de dados KeePass 1</translation>
<translation>Banco de dados KeePass 1</translation>
</message>
<message>
<source>All files (*)</source>
@@ -276,13 +317,13 @@ Salvar alterações?</translation>
</message>
<message>
<source>locked</source>
<translation>Trancado</translation>
<translation>trancado</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>O banco de dados que você está tentando abrir está bloqueado por outra instância do KeePassX.
Você quer abri-lo de qualquer forma? Alternativamente o banco de dados é aberto como somente leitura.</translation>
Você quer abri-lo de qualquer forma? Alternativamente, o banco de dados é aberto como somente leitura.</translation>
</message>
<message>
<source>Lock database</source>
@@ -292,23 +333,27 @@ Você quer abri-lo de qualquer forma? Alternativamente o banco de dados é abert
<source>Can't lock the database as you are currently editing it.
Please press cancel to finish your changes or discard them.</source>
<translation>Não é possível trancar o banco de dados uma vez que você o está editando.
Por favor aperte cancelar para finalizar suas alterações ou descartá-las.</translation>
Por favor, aperte cancelar para finalizar suas alterações ou descartá-las.</translation>
</message>
<message>
<source>This database has never been saved.
You can save the database or stop locking it.</source>
<translation type="unfinished"/>
<translation>Esse banco de dados nunca foi salvo.
Você pode salvar o banco de dados ou parar de trancá-lo.</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>Esse banco de dados foi modificado.
Você deseja salvar o banco de dados antes de travá-lo?
Do contrário, suas alterações serão perdidas.</translation>
</message>
<message>
<source>&quot;%1&quot; is in edit mode.
Discard changes and close anyway?</source>
<translation type="unfinished"/>
<translation>&quot;%1&quot; está em modo de edição.
Descartar alterações e fechar mesmo assim?</translation>
</message>
<message>
<source>Export database to CSV file</source>
@@ -325,7 +370,8 @@ Discard changes and close anyway?</source>
<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>O banco de dados que você está tentando salvar como está travado por uma outra instância de KeePassX.
Você deseja salvá-lo mesmo assim?</translation>
</message>
</context>
<context>
@@ -356,7 +402,7 @@ Do you want to save it anyway?</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>Você realmente deseja mover %n entrada para a lixeira?</numerusform><numerusform>Você realmente deseja mover %n entradas para a lixeira?</numerusform></translation>
</message>
<message>
<source>Delete group?</source>
@@ -565,7 +611,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Repeat:</source>
<translation>Repetir</translation>
<translation>Repetir:</translation>
</message>
<message>
<source>Gen.</source>
@@ -577,7 +623,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Expires</source>
<translation>Expira em:</translation>
<translation>Expira em</translation>
</message>
<message>
<source>Presets</source>
@@ -647,18 +693,18 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Use default auto-type sequence of parent group</source>
<translation type="unfinished"/>
<translation>Usar sequência de auto-digitação padrão do grupo pai</translation>
</message>
<message>
<source>Set default auto-type sequence</source>
<translation type="unfinished"/>
<translation>Definir sequência auto-digitação padrão</translation>
</message>
</context>
<context>
<name>EditWidgetIcons</name>
<message>
<source>Use default icon</source>
<translation>Usar Ícone padrão</translation>
<translation>Usar ícone padrão</translation>
</message>
<message>
<source>Use custom icon</source>
@@ -690,7 +736,7 @@ Do you want to save it anyway?</source>
</message>
<message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Não é possível apagar o ícone. Ainda usado por %n item.</numerusform><numerusform>Não é possível apagar o ícone. Ainda usado por %n item(s).</numerusform></translation>
<translation><numerusform>Não é possível apagar o ícone. Ainda usado por %n item.</numerusform><numerusform>Não é possível apagar o ícone. Ainda usado por %n itens.</numerusform></translation>
</message>
</context>
<context>
@@ -818,18 +864,28 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
<translation>Chave errada ou arquivo de banco de dados está corrompido.</translation>
</message>
<message>
<source>Unable to calculate master key</source>
<translation type="unfinished"/>
<translation>Não foi possível calcular a chave mestre</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>O arquivo selecionado é um banco de dados antigo do KeePass 1 (.kdb).
Você pode importá-lo clicando em Banco de Dados &gt; &apos;Importar banco de dados KeePass 1&apos;.
Esta é uma migração de uma via. Você não poderá abrir o banco de dados importado com a versão antiga do KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
<translation type="unfinished"/>
<translation>Erro fatal enquanto testava as funções criptográficas.</translation>
</message>
<message>
<source>KeePassX - Error</source>
@@ -936,7 +992,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Find</source>
<translation>Encontrar</translation>
<translation>Localizar</translation>
</message>
<message>
<source>Copy username to clipboard</source>
@@ -1002,6 +1058,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>Exportar para arquivo CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Reparar banco de dados</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>Banco de dados Keepass 2</translation>
</message>
<message>
<source>All files</source>
<translation>Todos arquivos</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Salvar banco de dados reparado</translation>
</message>
<message>
<source>Error</source>
<translation>Erro</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Escrita do banco de dados falhou.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1108,45 +1188,45 @@ Do you want to save it anyway?</source>
<name>QtIOCompressor</name>
<message>
<source>Internal zlib error when compressing: </source>
<translation>Erro interno do zlib ao compactar:</translation>
<translation>Erro interno do zlib ao compactar: </translation>
</message>
<message>
<source>Error writing to underlying device: </source>
<translation>Erro ao gravar no dispositivo subjacente:</translation>
<translation>Erro ao gravar no dispositivo subjacente: </translation>
</message>
<message>
<source>Error opening underlying device: </source>
<translation>Erro ao abrir dispositivo subjacente:</translation>
<translation>Erro ao abrir dispositivo subjacente: </translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
<translation type="unfinished"/>
<translation>Erro ao ler dados do dispositivo subjacente: </translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
<translation type="unfinished"/>
<translation>Erro interno do zlib ao descompactar: </translation>
</message>
</context>
<context>
<name>QtIOCompressor::open</name>
<message>
<source>The gzip format not supported in this version of zlib.</source>
<translation type="unfinished"/>
<translation>Sem suporte ao formato gzip nesta versão do zlib.</translation>
</message>
<message>
<source>Internal zlib error: </source>
<translation>Erro interno do zlib:</translation>
<translation>Erro interno do zlib: </translation>
</message>
</context>
<context>
<name>SearchWidget</name>
<message>
<source>Find:</source>
<translation>Encontrar:</translation>
<translation>Localizar:</translation>
</message>
<message>
<source>Case sensitive</source>
<translation>diferenciar maiúsculas e minúsculas</translation>
<translation>Diferenciar maiúsculas e minúsculas</translation>
</message>
<message>
<source>Current group</source>
@@ -1154,7 +1234,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Root group</source>
<translation>Grupo Raíz</translation>
<translation>Grupo Raiz</translation>
</message>
</context>
<context>
@@ -1196,15 +1276,15 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Use group icon on entry creation</source>
<translation type="unfinished"/>
<translation>Usar ícone de grupo na criação da entrada</translation>
</message>
<message>
<source>Global Auto-Type shortcut</source>
<translation type="unfinished"/>
<translation>Atalho para Auto-Digitação Global</translation>
</message>
<message>
<source>Use entry title to match windows for global auto-type</source>
<translation type="unfinished"/>
<translation>Usar título da entrada para comparar janelas para auto-digitação global</translation>
</message>
<message>
<source>Language</source>
@@ -1216,34 +1296,34 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Hide window to system tray when minimized</source>
<translation type="unfinished"/>
<translation>Ocultar janela na bandeja de sistema quando minimizada</translation>
</message>
<message>
<source>Remember last key files</source>
<translation type="unfinished"/>
<translation>Lembrar dos últimos arquivos-chave</translation>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>
<message>
<source>Clear clipboard after</source>
<translation type="unfinished"/>
<translation>Limpar área de transferência após</translation>
</message>
<message>
<source> sec</source>
<translation type="unfinished"/>
<translation> seg</translation>
</message>
<message>
<source>Lock databases after inactivity of</source>
<translation type="unfinished"/>
<translation>Travar bancos de dados após inatividade de</translation>
</message>
<message>
<source>Show passwords in cleartext by default</source>
<translation type="unfinished"/>
<translation>Mostrar senhas em texto claro por padrão</translation>
</message>
<message>
<source>Always ask before performing auto-type</source>
<translation type="unfinished"/>
<translation>Sempre perguntar antes de realizar auto-digitação</translation>
</message>
</context>
<context>
@@ -1257,26 +1337,26 @@ Do you want to save it anyway?</source>
<name>WelcomeWidget</name>
<message>
<source>Welcome!</source>
<translation>Bemvindo!</translation>
<translation>Bem-vindo!</translation>
</message>
</context>
<context>
<name>main</name>
<message>
<source>KeePassX - cross-platform password manager</source>
<translation>KeePassX - gerenciador de senhas Multiplataforma</translation>
<translation>KeePassX - gerenciador de senhas multiplataforma</translation>
</message>
<message>
<source>filename of the password database to open (*.kdbx)</source>
<translation type="unfinished"/>
<translation>nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx)</translation>
</message>
<message>
<source>path to a custom config file</source>
<translation type="unfinished"/>
<translation>caminho para um arquivo de configuração personalizado</translation>
</message>
<message>
<source>key file of the database</source>
<translation type="unfinished"/>
<translation>arquivo-chave do banco de dados</translation>
</message>
</context>
</TS>

View File

@@ -9,6 +9,14 @@
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassX é distribuído sob os termos GNU de licença pública geral (GPL) versão 2 ou (á sua escolha) versão 3.</translation>
</message>
<message>
<source>Revision</source>
<translation type="unfinished"/>
</message>
<message>
<source>Using:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AutoType</name>
@@ -163,6 +171,42 @@
<translation>Seleccionar o ficheiro chave</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to repair the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -322,6 +366,11 @@ Fechar e Ignorar alterações ?</translation>
<source>Writing the CSV file failed.</source>
<translation>Falha na escrita do ficheiro CSV</translation>
</message>
<message>
<source>The database you are trying to save as is locked by another instance of KeePassX.
Do you want to save it anyway?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -818,6 +867,13 @@ Fechar e Ignorar alterações ?</translation>
<source>Unable to calculate master key</source>
<translation>Impossível calcular chave mestra:</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>Main</name>
@@ -996,6 +1052,30 @@ Fechar e Ignorar alterações ?</translation>
<source>Export to CSV file</source>
<translation>Exportar para ficheiro CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePass 2 Database</source>
<translation type="unfinished"/>
</message>
<message>
<source>All files</source>
<translation type="unfinished"/>
</message>
<message>
<source>Save repaired database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Writing the database failed.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1268,10 +1348,6 @@ Fechar e Ignorar alterações ?</translation>
<source>path to a custom config file</source>
<translation>caminho para um ficheiro de configuração personalizado</translation>
</message>
<message>
<source>password of the database (DANGEROUS!)</source>
<translation>senha da base de dados (PERIGOSO !)</translation>
</message>
<message>
<source>key file of the database</source>
<translation>ficheiro chave da base de dados</translation>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Ревизия</translation>
</message>
<message>
<source>Using:</source>
<translation>С помощью:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,43 @@
<translation>Выберите файл-ключ</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Восстановление хранилища</translation>
</message>
<message>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Не могу открыть файл-ключ</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Невозможно открыть хранилище.</translation>
</message>
<message>
<source>Success</source>
<translation>Успешно</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Хранилище было восстановлено.
Теперь Вы можете сохранить его.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Невозможно восстановить хранилище.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -290,12 +331,14 @@ Do you want to open it anyway? Alternatively the database is opened read-only.</
<message>
<source>Can't lock the database as you are currently editing it.
Please press cancel to finish your changes or discard them.</source>
<translation type="unfinished"/>
<translation>Невозможно заблокировать базу данных, так как вы в настоящее время редактируете её.
Пожалуйста нажмите Отмена, чтобы завершить свои изменения или отклонить их.</translation>
</message>
<message>
<source>This database has never been saved.
You can save the database or stop locking it.</source>
<translation type="unfinished"/>
<translation>Эта база данных никогда не была сохранена.
Вы можете сохранить базу данных или остановить её заблокированной.</translation>
</message>
<message>
<source>This database has been modified.
@@ -571,7 +614,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Gen.</source>
<translation type="unfinished"/>
<translation>Генеральный.</translation>
</message>
<message>
<source>URL:</source>
@@ -649,11 +692,11 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Use default auto-type sequence of parent group</source>
<translation type="unfinished"/>
<translation>Используйте стандартный автоввод из последовательности родительской группы</translation>
</message>
<message>
<source>Set default auto-type sequence</source>
<translation type="unfinished"/>
<translation>Последовательность автоввода указать по умолчанию</translation>
</message>
</context>
<context>
@@ -826,6 +869,16 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Невозможно вычислить мастер-пароль</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Выбранный файл от старой KeePass 1 базы данных (.kdb).
Вы можете импортировать его, нажав на База Данных &gt; &apos;Импорт KeePass 1 базы данных&apos;.
Это одностороннее перемещение. Вы не сможете открыть импортированный базу данных на старой версии KeePassX 0,4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1004,6 +1057,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>Экспортировать в файл CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Восстановление хранилища</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation type="unfinished"/>
</message>
<message>
<source>All files</source>
<translation>Все файлы</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Сохранить восстановленное хранилище</translation>
</message>
<message>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation type="unfinished"/>
</message>
<message>
<source>Using:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,42 @@
<translation>Izberi datoteko s ključi</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to repair the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -827,6 +867,13 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Izračun glavnega ključa ni uspel</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>Main</name>
@@ -1005,6 +1052,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>Izvozi v CSV datoteko</translation>
</message>
<message>
<source>Repair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePass 2 Database</source>
<translation type="unfinished"/>
</message>
<message>
<source>All files</source>
<translation type="unfinished"/>
</message>
<message>
<source>Save repaired database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Writing the database failed.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Revision</translation>
</message>
<message>
<source>Using:</source>
<translation>Använder:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,43 @@
<translation>Välj nyckel-fil</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Laga databasen</translation>
</message>
<message>
<source>Error</source>
<translation>Fel</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Kan inte öppna nyckelfilen</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Databas öppnades fint. Inget att göra.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Misslyckades att öppna databasen.</translation>
</message>
<message>
<source>Success</source>
<translation>Succé</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Databasens reparation har varit lyckad.
Du kan nu spara den.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Misslyckades med att laga databasen.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -291,7 +332,7 @@ Vill du öppna den ändå? Databasen kommer då att öppnas skrivskyddad.</trans
<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 att redigera den.
<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>
@@ -829,6 +870,16 @@ Vill du spara endå?</translation>
<source>Unable to calculate master key</source>
<translation>Kunde inte räkna nu master-nyckeln</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Den valda filen är en gammal KeePass 1 databas (.kdb)
Du kan importera den genom att klicka Databas &gt; Importera KeePass 1 databas.
Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas. Det som används i KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -849,7 +900,7 @@ Vill du spara endå?</translation>
</message>
<message>
<source>Recent databases</source>
<translation>Senast använda databser</translation>
<translation>Senast använda databaser</translation>
</message>
<message>
<source>Help</source>
@@ -1007,6 +1058,30 @@ Vill du spara endå?</translation>
<source>Export to CSV file</source>
<translation>Exportera till CSV-fil</translation>
</message>
<message>
<source>Repair database</source>
<translation>Laga databasen</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 databas</translation>
</message>
<message>
<source>All files</source>
<translation>Alla filer</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Spara lagad databas</translation>
</message>
<message>
<source>Error</source>
<translation>Fel</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Misslyckades med att skriva till databasen.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1185,11 +1260,11 @@ Vill du spara endå?</translation>
</message>
<message>
<source>Open previous databases on startup</source>
<translation>Öppna senaste databasen är programmet startar</translation>
<translation>Öppna senaste databasen r programmet startar</translation>
</message>
<message>
<source>Automatically save on exit</source>
<translation>Spara automatiskt är applikationen anslutas</translation>
<translation>Spara automatiskt r applikationen anslutas</translation>
</message>
<message>
<source>Automatically save after every change</source>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation>Ревізія</translation>
</message>
<message>
<source>Using:</source>
<translation>Використання:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,42 @@
<translation>Оберіть файл-ключ</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation type="unfinished"/>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Success</source>
<translation type="unfinished"/>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to repair the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -828,6 +868,16 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Неможливо вирахувати майстер-пароль</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation>Обрано файл сховища попередньої версії KeePass 1 (.kdb).
Ви можете імпортувати його, натиснувши Сховище &gt; &apos;Імпортувати сховище KeePass 1&apos;.
Це односторонній спосіб міграції. Ви не зможете відкрити імпортоване сховище в попередній версії KeePassX 0.4.</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1006,6 +1056,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>Експортувати в файл CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation type="unfinished"/>
</message>
<message>
<source>KeePass 2 Database</source>
<translation type="unfinished"/>
</message>
<message>
<source>All files</source>
<translation type="unfinished"/>
</message>
<message>
<source>Save repaired database</source>
<translation type="unfinished"/>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Writing the database failed.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -9,6 +9,14 @@
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation>KeePassX 使 2 GNU (GPL)( 3 ).</translation>
</message>
<message>
<source>Revision</source>
<translation></translation>
</message>
<message>
<source>Using:</source>
<translation>使:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -163,6 +171,43 @@
<translation></translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation></translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation></translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation></translation>
</message>
<message>
<source>Success</source>
<translation></translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>
</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation></translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -307,19 +352,26 @@ Otherwise your changes are lost.</source>
<message>
<source>&quot;%1&quot; is in edit mode.
Discard changes and close anyway?</source>
<translation type="unfinished"/>
<translation>正在编辑 &quot;%1&quot; 。
仍然要放弃修改并且关闭吗?</translation>
</message>
<message>
<source>Export database to CSV file</source>
<translation type="unfinished"/>
<translation>把数据库导出为CSV格式文件</translation>
</message>
<message>
<source>CSV file</source>
<translation type="unfinished"/>
<translation>CSV格式文件</translation>
</message>
<message>
<source>Writing the CSV file failed.</source>
<translation type="unfinished"/>
<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>
@@ -762,7 +814,7 @@ Discard changes and close anyway?</source>
<name>KeePass1OpenWidget</name>
<message>
<source>Import KeePass1 database</source>
<translation>KeePass 1 </translation>
<translation>导入 KeePass 1 数据库</translation>
</message>
<message>
<source>Error</source>
@@ -818,6 +870,15 @@ Discard changes and close anyway?</source>
<source>Unable to calculate master key</source>
<translation>无法计算主密码</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation> KeePass 1 .kdb
&gt; &apos;KeePass 1
KeePassX 0.4</translation>
</message>
</context>
<context>
<name>Main</name>
@@ -986,15 +1047,39 @@ Discard changes and close anyway?</source>
</message>
<message>
<source>Copy username</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Copy password</source>
<translation type="unfinished"/>
<translation></translation>
</message>
<message>
<source>Export to CSV file</source>
<translation type="unfinished"/>
<translation>CSV格式文件</translation>
</message>
<message>
<source>Repair database</source>
<translation></translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 </translation>
</message>
<message>
<source>All files</source>
<translation></translation>
</message>
<message>
<source>Save repaired database</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation></translation>
</message>
</context>
<context>
@@ -1268,10 +1353,6 @@ Discard changes and close anyway?</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>

View File

@@ -13,6 +13,10 @@
<source>Revision</source>
<translation></translation>
</message>
<message>
<source>Using:</source>
<translation>使</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -167,6 +171,43 @@
<translation></translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation></translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation></translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation></translation>
</message>
<message>
<source>Success</source>
<translation></translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>
</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation></translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -828,6 +869,17 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>無法計算主金鑰</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation> KeePass 1 (.kdb)
&gt; KeePass 1
KeePassX 0.4 </translation>
</message>
</context>
<context>
<name>Main</name>
@@ -1006,6 +1058,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation> CSV </translation>
</message>
<message>
<source>Repair database</source>
<translation></translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation>KeePass 2 </translation>
</message>
<message>
<source>All files</source>
<translation></translation>
</message>
<message>
<source>Save repaired database</source>
<translation></translation>
</message>
<message>
<source>Error</source>
<translation></translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation></translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>

View File

@@ -78,6 +78,7 @@ set(keepassx_SOURCES
format/KeePass2.h
format/KeePass2RandomStream.cpp
format/KeePass2Reader.cpp
format/KeePass2Repair.cpp
format/KeePass2Writer.cpp
format/KeePass2XmlReader.cpp
format/KeePass2XmlWriter.cpp
@@ -86,6 +87,7 @@ set(keepassx_SOURCES
gui/ChangeMasterKeyWidget.cpp
gui/Clipboard.cpp
gui/DatabaseOpenWidget.cpp
gui/DatabaseRepairWidget.cpp
gui/DatabaseSettingsWidget.cpp
gui/DatabaseTabWidget.cpp
gui/DatabaseWidget.cpp
@@ -180,6 +182,7 @@ set(keepassx_MOC
gui/ChangeMasterKeyWidget.h
gui/Clipboard.h
gui/DatabaseOpenWidget.h
gui/DatabaseRepairWidget.h
gui/DatabaseSettingsWidget.h
gui/DatabaseTabWidget.h
gui/DatabaseWidget.h

View File

@@ -2,7 +2,7 @@ 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")
add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type")
endif()
if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND)

View File

@@ -363,13 +363,21 @@ bool AutoTypePlatformX11::isTopLevelWindow(Window window)
unsigned long nitems;
unsigned long after;
unsigned char* data = Q_NULLPTR;
int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 0, False, AnyPropertyType, &type, &format,
int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format,
&nitems, &after, &data);
if (data) {
bool result = false;
if (retVal == 0 && data) {
if (type == m_atomWmState && format == 32 && nitems > 0) {
qint32 state = static_cast<qint32>(*data);
result = (state != WithdrawnState);
}
XFree(data);
}
return (retVal == 0) && type;
return result;
}
KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch)

View File

@@ -114,13 +114,25 @@ QPixmap Entry::iconPixmap() const
else {
Q_ASSERT(database());
QPixmap pixmap;
if (database() && !QPixmapCache::find(m_pixmapCacheKey, &pixmap)) {
pixmap = QPixmap::fromImage(database()->metadata()->customIcon(m_data.customIcon));
m_pixmapCacheKey = QPixmapCache::insert(pixmap);
if (database()) {
return database()->metadata()->customIconPixmap(m_data.customIcon);
}
else {
return QPixmap();
}
}
}
return pixmap;
QPixmap Entry::iconScaledPixmap() const
{
if (m_data.customIcon.isNull()) {
// built-in icons are 16x16 so don't need to be scaled
return databaseIcons()->iconPixmap(m_data.iconNumber);
}
else {
Q_ASSERT(database());
return database()->metadata()->customIconScaledPixmap(m_data.customIcon);
}
}
@@ -248,8 +260,6 @@ void Entry::setIcon(int iconNumber)
m_data.iconNumber = iconNumber;
m_data.customIcon = Uuid();
m_pixmapCacheKey = QPixmapCache::Key();
Q_EMIT modified();
emitDataChanged();
}
@@ -263,8 +273,6 @@ void Entry::setIcon(const Uuid& uuid)
m_data.customIcon = uuid;
m_data.iconNumber = 0;
m_pixmapCacheKey = QPixmapCache::Key();
Q_EMIT modified();
emitDataChanged();
}
@@ -364,7 +372,6 @@ const QList<Entry*>& Entry::historyItems() const
void Entry::addHistoryItem(Entry* entry)
{
Q_ASSERT(!entry->parent());
Q_ASSERT(entry->uuid() == uuid());
m_history.append(entry);
Q_EMIT modified();

View File

@@ -22,7 +22,6 @@
#include <QImage>
#include <QMap>
#include <QPixmap>
#include <QPixmapCache>
#include <QPointer>
#include <QSet>
#include <QUrl>
@@ -61,6 +60,7 @@ public:
Uuid uuid() const;
QImage icon() const;
QPixmap iconPixmap() const;
QPixmap iconScaledPixmap() const;
int iconNumber() const;
Uuid iconUuid() const;
QColor foregroundColor() const;
@@ -169,7 +169,6 @@ private:
Entry* m_tmpHistoryItem;
bool m_modifiedSinceBegin;
QPointer<Group> m_group;
mutable QPixmapCache::Key m_pixmapCacheKey;
bool m_updateTimeinfo;
};

View File

@@ -134,13 +134,30 @@ QPixmap Group::iconPixmap() const
else {
Q_ASSERT(m_db);
QPixmap pixmap;
if (m_db && !QPixmapCache::find(m_pixmapCacheKey, &pixmap)) {
pixmap = QPixmap::fromImage(m_db->metadata()->customIcon(m_data.customIcon));
m_pixmapCacheKey = QPixmapCache::insert(pixmap);
if (m_db) {
return m_db->metadata()->customIconPixmap(m_data.customIcon);
}
else {
return QPixmap();
}
}
}
return pixmap;
QPixmap Group::iconScaledPixmap() const
{
if (m_data.customIcon.isNull()) {
// built-in icons are 16x16 so don't need to be scaled
return databaseIcons()->iconPixmap(m_data.iconNumber);
}
else {
Q_ASSERT(m_db);
if (m_db) {
return m_db->metadata()->customIconScaledPixmap(m_data.customIcon);
}
else {
return QPixmap();
}
}
}
@@ -214,8 +231,6 @@ void Group::setIcon(int iconNumber)
m_data.iconNumber = iconNumber;
m_data.customIcon = Uuid();
m_pixmapCacheKey = QPixmapCache::Key();
updateTimeinfo();
Q_EMIT modified();
Q_EMIT dataChanged(this);
@@ -230,8 +245,6 @@ void Group::setIcon(const Uuid& uuid)
m_data.customIcon = uuid;
m_data.iconNumber = 0;
m_pixmapCacheKey = QPixmapCache::Key();
updateTimeinfo();
Q_EMIT modified();
Q_EMIT dataChanged(this);
@@ -491,7 +504,7 @@ Group* Group::clone(Entry::CloneFlags entryFlags) const
}
Q_FOREACH (Group* groupChild, children()) {
Group* clonedGroupChild = groupChild->clone();
Group* clonedGroupChild = groupChild->clone(entryFlags);
clonedGroupChild->setParent(clonedGroup);
}

View File

@@ -58,6 +58,7 @@ public:
QString notes() const;
QImage icon() const;
QPixmap iconPixmap() const;
QPixmap iconScaledPixmap() const;
int iconNumber() const;
Uuid iconUuid() const;
TimeInfo timeInfo() const;
@@ -155,7 +156,6 @@ private:
QList<Entry*> m_entries;
QPointer<Group> m_parent;
mutable QPixmapCache::Key m_pixmapCacheKey;
bool m_updateTimeinfo;

View File

@@ -167,6 +167,43 @@ QImage Metadata::customIcon(const Uuid& uuid) const
return m_customIcons.value(uuid);
}
QPixmap Metadata::customIconPixmap(const Uuid& uuid) const
{
QPixmap pixmap;
if (!m_customIcons.contains(uuid)) {
return pixmap;
}
QPixmapCache::Key& cacheKey = m_customIconCacheKeys[uuid];
if (!QPixmapCache::find(cacheKey, &pixmap)) {
pixmap = QPixmap::fromImage(m_customIcons.value(uuid));
cacheKey = QPixmapCache::insert(pixmap);
}
return pixmap;
}
QPixmap Metadata::customIconScaledPixmap(const Uuid& uuid) const
{
QPixmap pixmap;
if (!m_customIcons.contains(uuid)) {
return pixmap;
}
QPixmapCache::Key& cacheKey = m_customIconScaledCacheKeys[uuid];
if (!QPixmapCache::find(cacheKey, &pixmap)) {
QImage image = m_customIcons.value(uuid).scaled(16, 16, Qt::KeepAspectRatio, Qt::SmoothTransformation);
pixmap = QPixmap::fromImage(image);
cacheKey = QPixmapCache::insert(pixmap);
}
return pixmap;
}
bool Metadata::containsCustomIcon(const Uuid& uuid) const
{
return m_customIcons.contains(uuid);
@@ -177,6 +214,17 @@ QHash<Uuid, QImage> Metadata::customIcons() const
return m_customIcons;
}
QHash<Uuid, QPixmap> Metadata::customIconsScaledPixmaps() const
{
QHash<Uuid, QPixmap> result;
Q_FOREACH (const Uuid& uuid, m_customIconsOrder) {
result.insert(uuid, customIconScaledPixmap(uuid));
}
return result;
}
QList<Uuid> Metadata::customIconsOrder() const
{
return m_customIconsOrder;
@@ -338,6 +386,9 @@ void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon)
Q_ASSERT(!m_customIcons.contains(uuid));
m_customIcons.insert(uuid, icon);
// reset cache in case there is also an icon with that uuid
m_customIconCacheKeys[uuid] = QPixmapCache::Key();
m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key();
m_customIconsOrder.append(uuid);
Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
Q_EMIT modified();
@@ -365,6 +416,10 @@ void Metadata::removeCustomIcon(const Uuid& uuid)
Q_ASSERT(m_customIcons.contains(uuid));
m_customIcons.remove(uuid);
QPixmapCache::remove(m_customIconCacheKeys.value(uuid));
m_customIconCacheKeys.remove(uuid);
QPixmapCache::remove(m_customIconScaledCacheKeys.value(uuid));
m_customIconScaledCacheKeys.remove(uuid);
m_customIconsOrder.removeAll(uuid);
Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count());
Q_EMIT modified();

View File

@@ -22,6 +22,8 @@
#include <QDateTime>
#include <QHash>
#include <QImage>
#include <QPixmap>
#include <QPixmapCache>
#include <QPointer>
#include "core/Global.h"
@@ -78,10 +80,13 @@ public:
bool protectNotes() const;
// bool autoEnableVisualHiding() const;
QImage customIcon(const Uuid& uuid) const;
QPixmap customIconPixmap(const Uuid& uuid) const;
QPixmap customIconScaledPixmap(const Uuid& uuid) const;
bool containsCustomIcon(const Uuid& uuid) const;
QHash<Uuid, QImage> customIcons() const;
QList<Uuid> customIconsOrder() const;
bool recycleBinEnabled() const;
QHash<Uuid, QPixmap> customIconsScaledPixmaps() const;
Group* recycleBin();
const Group* recycleBin() const;
QDateTime recycleBinChanged() const;
@@ -153,6 +158,8 @@ private:
MetadataData m_data;
QHash<Uuid, QImage> m_customIcons;
mutable QHash<Uuid, QPixmapCache::Key> m_customIconCacheKeys;
mutable QHash<Uuid, QPixmapCache::Key> m_customIconScaledCacheKeys;
QList<Uuid> m_customIconsOrder;
QPointer<Group> m_recycleBin;

View File

@@ -380,6 +380,10 @@ SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const Q
}
}
if (!cipherStream) {
raiseError(tr("Wrong key or database file is corrupt."));
}
return cipherStream.take();
}
@@ -901,10 +905,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data)
QByteArray entryUuid = data.mid(pos, 16);
pos += 16;
int iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
pos += 4;
if (m_entryUuids.contains(entryUuid) && (iconId < iconUuids.size())) {
if (m_entryUuids.contains(entryUuid) && (iconId < static_cast<quint32>(iconUuids.size()))) {
m_entryUuids[entryUuid]->setIcon(iconUuids[iconId]);
}
}
@@ -917,10 +921,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data)
quint32 groupId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
pos += 4;
int iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
pos += 4;
if (m_groupIds.contains(groupId) && (iconId < iconUuids.size())) {
if (m_groupIds.contains(groupId) && (iconId < static_cast<quint32>(iconUuids.size()))) {
m_groupIds[groupId]->setIcon(iconUuids[iconId]);
}
}

View File

@@ -43,7 +43,7 @@ KeePass2Reader::KeePass2Reader()
{
}
Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& key)
Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase)
{
QScopedPointer<Database> db(new Database());
m_db = db.data();
@@ -178,7 +178,12 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
if (xmlReader.hasError()) {
raiseError(xmlReader.errorString());
return Q_NULLPTR;
if (keepDatabase) {
return db.take();
}
else {
return Q_NULLPTR;
}
}
Q_ASSERT(version < 0x00030001 || !xmlReader.headerHash().isEmpty());
@@ -186,7 +191,7 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
if (!xmlReader.headerHash().isEmpty()) {
QByteArray headerHash = CryptoHash::hash(headerStream.storedData(), CryptoHash::Sha256);
if (headerHash != xmlReader.headerHash()) {
raiseError("Head doesn't match hash");
raiseError("Header doesn't match hash");
return Q_NULLPTR;
}
}
@@ -232,6 +237,11 @@ QByteArray KeePass2Reader::xmlData()
return m_xmlData;
}
QByteArray KeePass2Reader::streamKey()
{
return m_protectedStreamKey;
}
void KeePass2Reader::raiseError(const QString& errorMessage)
{
m_error = true;

View File

@@ -31,12 +31,13 @@ class KeePass2Reader
public:
KeePass2Reader();
Database* readDatabase(QIODevice* device, const CompositeKey& key);
Database* readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase = false);
Database* readDatabase(const QString& filename, const CompositeKey& key);
bool hasError();
QString errorString();
void setSaveXml(bool save);
QByteArray xmlData();
QByteArray streamKey();
private:
void raiseError(const QString& errorMessage);

View File

@@ -0,0 +1,107 @@
/*
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "KeePass2Repair.h"
#include <QBuffer>
#include <QRegExp>
#include "format/KeePass2RandomStream.h"
#include "format/KeePass2Reader.h"
#include "format/KeePass2XmlReader.h"
KeePass2Repair::KeePass2Repair()
: m_db(Q_NULLPTR)
{
}
KeePass2Repair::RepairResult KeePass2Repair::repairDatabase(QIODevice* device, const CompositeKey& key)
{
m_db = Q_NULLPTR;
m_errorStr.clear();
KeePass2Reader reader;
reader.setSaveXml(true);
Database* db = reader.readDatabase(device, key, true);
if (!reader.hasError()) {
delete db;
return NothingTodo;
}
QByteArray xmlData = reader.xmlData();
if (!db || xmlData.isEmpty()) {
delete db;
m_errorStr = reader.errorString();
return UnableToOpen;
}
bool repairAction = false;
QString xmlStart = QString::fromLatin1(xmlData.constData(), qMin(100, xmlData.size()));
QRegExp encodingRegExp("encoding=\"([^\"]+)\"", Qt::CaseInsensitive, QRegExp::RegExp2);
if (encodingRegExp.indexIn(xmlStart) != -1) {
if (encodingRegExp.cap(1).compare("utf-8", Qt::CaseInsensitive) != 0
&& encodingRegExp.cap(1).compare("utf8", Qt::CaseInsensitive) != 0)
{
// database is not utf-8 encoded, we don't support repairing that
delete db;
return RepairFailed;
}
}
// try to fix broken databases because of bug #392
for (int i = (xmlData.size() - 1); i >= 0; i--) {
quint8 ch = static_cast<quint8>(xmlData.at(i));
if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) {
xmlData.remove(i, 1);
repairAction = true;
}
}
if (!repairAction) {
// we were unable to find the problem
delete db;
return RepairFailed;
}
KeePass2RandomStream randomStream;
randomStream.init(reader.streamKey());
KeePass2XmlReader xmlReader;
QBuffer buffer(&xmlData);
buffer.open(QIODevice::ReadOnly);
xmlReader.readDatabase(&buffer, db, &randomStream);
if (xmlReader.hasError()) {
delete db;
return RepairFailed;
}
else {
m_db = db;
return RepairSuccess;
}
}
Database* KeePass2Repair::database() const
{
return m_db;
}
QString KeePass2Repair::errorString() const
{
return m_errorStr;
}

View File

@@ -0,0 +1,50 @@
/*
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEEPASSX_KEEPASS2REPAIR_H
#define KEEPASSX_KEEPASS2REPAIR_H
#include <QCoreApplication>
#include <QIODevice>
#include "core/Database.h"
#include "keys/CompositeKey.h"
class KeePass2Repair
{
Q_DECLARE_TR_FUNCTIONS(KeePass2Repair)
public:
enum RepairResult
{
NothingTodo,
UnableToOpen,
RepairSuccess,
RepairFailed
};
KeePass2Repair();
RepairResult repairDatabase(QIODevice* device, const CompositeKey& key);
Database* database() const;
QString errorString() const;
private:
Database* m_db;
QString m_errorStr;
};
#endif // KEEPASSX_KEEPASS2REPAIR_H

View File

@@ -523,6 +523,7 @@ Group* KeePass2XmlReader::parseGroup()
if (m_strictMode) {
raiseError("Invalid group icon number");
}
iconId = 0;
}
else {
if (iconId >= DatabaseIcons::IconCount) {
@@ -702,6 +703,7 @@ Entry* KeePass2XmlReader::parseEntry(bool history)
if (m_strictMode) {
raiseError("Invalid entry icon number");
}
iconId = 0;
}
else {
entry->setIcon(iconId);
@@ -776,6 +778,13 @@ Entry* KeePass2XmlReader::parseEntry(bool history)
}
Q_FOREACH (Entry* historyItem, historyItems) {
if (historyItem->uuid() != entry->uuid()) {
if (m_strictMode) {
raiseError("History element with different uuid");
} else {
historyItem->setUuid(entry->uuid());
}
}
entry->addHistoryItem(historyItem);
}

View File

@@ -374,7 +374,7 @@ void KeePass2XmlWriter::writeEntry(const Entry* entry)
}
if (!value.isEmpty()) {
m_xml.writeCharacters(value);
m_xml.writeCharacters(stripInvalidXml10Chars(value));
}
m_xml.writeEndElement();
@@ -445,7 +445,7 @@ void KeePass2XmlWriter::writeString(const QString& qualifiedName, const QString&
m_xml.writeEmptyElement(qualifiedName);
}
else {
m_xml.writeTextElement(qualifiedName, string);
m_xml.writeTextElement(qualifiedName, stripInvalidXml10Chars(string));
}
}
@@ -549,6 +549,31 @@ QString KeePass2XmlWriter::colorPartToString(int value)
return str;
}
QString KeePass2XmlWriter::stripInvalidXml10Chars(QString str)
{
for (int i = str.size() - 1; i >= 0; i--) {
const QChar ch = str.at(i);
const ushort uc = ch.unicode();
if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) {
// keep valid surrogate pair
i--;
}
else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control chracters
|| (uc >= 0x7F && uc <= 0x84) // control chracters, valid but discouraged by XML
|| (uc >= 0x86 && uc <= 0x9F) // control chracters, valid but discouraged by XML
|| (uc > 0xFFFD) // noncharacter
|| ch.isLowSurrogate() // single low surrogate
|| ch.isHighSurrogate()) // single high surrogate
{
qWarning("Stripping invalid XML 1.0 codepoint %x", uc);
str.remove(i, 1);
}
}
return str;
}
void KeePass2XmlWriter::raiseError(const QString& errorMessage)
{
m_error = true;

View File

@@ -73,6 +73,7 @@ private:
void writeColor(const QString& qualifiedName, const QColor& color);
void writeTriState(const QString& qualifiedName, Group::TriState triState);
QString colorPartToString(int value);
QString stripInvalidXml10Chars(QString str);
void raiseError(const QString& errorMessage);

View File

@@ -49,10 +49,6 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
connect(m_ui->editPassword, SIGNAL(textChanged(QString)), SLOT(activatePassword()));
connect(m_ui->comboKeyFile, SIGNAL(editTextChanged(QString)), SLOT(activateKeyFile()));
connect(m_ui->checkPassword, SIGNAL(toggled(bool)), SLOT(setOkButtonEnabled()));
connect(m_ui->checkKeyFile, SIGNAL(toggled(bool)), SLOT(setOkButtonEnabled()));
connect(m_ui->comboKeyFile, SIGNAL(editTextChanged(QString)), SLOT(setOkButtonEnabled()));
connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase()));
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject()));
}
@@ -75,6 +71,7 @@ void DatabaseOpenWidget::load(const QString& filename)
}
}
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
m_ui->editPassword->setFocus();
}
@@ -99,13 +96,11 @@ void DatabaseOpenWidget::openDatabase()
{
KeePass2Reader reader;
CompositeKey masterKey = databaseKey();
if (masterKey.isEmpty()) {
return;
}
QFile file(m_filename);
if (!file.open(QIODevice::ReadOnly)) {
// TODO: error message
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
.append(file.errorString()));
return;
}
if (m_db) {
@@ -172,14 +167,6 @@ void DatabaseOpenWidget::activateKeyFile()
m_ui->checkKeyFile->setChecked(true);
}
void DatabaseOpenWidget::setOkButtonEnabled()
{
bool enable = m_ui->checkPassword->isChecked()
|| (m_ui->checkKeyFile->isChecked() && !m_ui->comboKeyFile->currentText().isEmpty());
m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(enable);
}
void DatabaseOpenWidget::browseKeyFile()
{
QString filters = QString("%1 (*);;%2 (*.key)").arg(tr("All files"), tr("Key files"));

View File

@@ -54,7 +54,6 @@ protected Q_SLOTS:
private Q_SLOTS:
void activatePassword();
void activateKeyFile();
void setOkButtonEnabled();
void browseKeyFile();
protected:

View File

@@ -0,0 +1,105 @@
/*
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "DatabaseRepairWidget.h"
#include <QFile>
#include <QFileInfo>
#include "ui_DatabaseOpenWidget.h"
#include "core/Database.h"
#include "core/Metadata.h"
#include "format/KeePass2Repair.h"
#include "gui/MessageBox.h"
#include "keys/FileKey.h"
#include "keys/PasswordKey.h"
DatabaseRepairWidget::DatabaseRepairWidget(QWidget* parent)
: DatabaseOpenWidget(parent)
{
m_ui->labelHeadline->setText(tr("Repair database"));
connect(this, SIGNAL(editFinished(bool)), this, SLOT(processEditFinished(bool)));
}
void DatabaseRepairWidget::openDatabase()
{
CompositeKey masterKey;
if (m_ui->checkPassword->isChecked()) {
masterKey.addKey(PasswordKey(m_ui->editPassword->text()));
}
if (m_ui->checkKeyFile->isChecked()) {
FileKey key;
QString keyFilename = m_ui->comboKeyFile->currentText();
QString errorMsg;
if (!key.load(keyFilename, &errorMsg)) {
MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg));
Q_EMIT editFinished(false);
return;
}
masterKey.addKey(key);
}
KeePass2Repair repair;
QFile file(m_filename);
if (!file.open(QIODevice::ReadOnly)) {
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
.append(file.errorString()));
Q_EMIT editFinished(false);
return;
}
if (m_db) {
delete m_db;
}
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
KeePass2Repair::RepairResult repairResult = repair.repairDatabase(&file, masterKey);
QApplication::restoreOverrideCursor();
switch (repairResult) {
case KeePass2Repair::NothingTodo:
MessageBox::information(this, tr("Error"), tr("Database opened fine. Nothing to do."));
Q_EMIT editFinished(false);
return;
case KeePass2Repair::UnableToOpen:
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
.append(repair.errorString()));
Q_EMIT editFinished(false);
return;
case KeePass2Repair::RepairSuccess:
m_db = repair.database();
MessageBox::warning(this, tr("Success"), tr("The database has been successfully repaired\nYou can now save it."));
Q_EMIT editFinished(true);
return;
case KeePass2Repair::RepairFailed:
MessageBox::warning(this, tr("Error"), tr("Unable to repair the database."));
Q_EMIT editFinished(false);
return;
}
}
void DatabaseRepairWidget::processEditFinished(bool result)
{
if (result) {
Q_EMIT success();
}
else {
Q_EMIT error();
}
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright (C) 2016 Felix Geyer <debfx@fobos.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 or (at your option)
* version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEEPASSX_DATABASEREPAIRWIDGET_H
#define KEEPASSX_DATABASEREPAIRWIDGET_H
#include "gui/DatabaseOpenWidget.h"
class DatabaseRepairWidget : public DatabaseOpenWidget
{
Q_OBJECT
public:
explicit DatabaseRepairWidget(QWidget* parent = Q_NULLPTR);
Q_SIGNALS:
void success();
void error();
protected:
void openDatabase() Q_DECL_OVERRIDE;
private Q_SLOTS:
void processEditFinished(bool result);
};
#endif // KEEPASSX_DATABASEREPAIRWIDGET_H

View File

@@ -131,11 +131,10 @@ void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw,
// test if we can read/write or read the file
QFile file(fileName);
// TODO: error handling
if (!file.open(QIODevice::ReadWrite)) {
if (!file.open(QIODevice::ReadOnly)) {
// can't open
// TODO: error message
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
.append(file.errorString()));
return;
}
else {
@@ -296,7 +295,7 @@ bool DatabaseTabWidget::saveDatabase(Database* db)
DatabaseManagerStruct& dbStruct = m_dbList[db];
if (dbStruct.saveToFilename) {
QSaveFile saveFile(dbStruct.filePath);
QSaveFile saveFile(dbStruct.canonicalFilePath);
if (saveFile.open(QIODevice::WriteOnly)) {
m_writer.writeDatabase(&saveFile, db);
if (m_writer.hasError()) {
@@ -310,6 +309,11 @@ bool DatabaseTabWidget::saveDatabase(Database* db)
return false;
}
}
else {
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
+ saveFile.errorString());
return false;
}
dbStruct.modified = false;
updateTabName(db);
@@ -386,6 +390,9 @@ bool DatabaseTabWidget::saveDatabaseAs(Database* db)
return false;
}
// refresh fileinfo since the file didn't exist before
fileInfo.refresh();
dbStruct.modified = false;
dbStruct.saveToFilename = true;
dbStruct.readOnly = false;

View File

@@ -341,14 +341,24 @@ void DatabaseWidget::deleteEntries()
}
}
else {
if (selected.size() > 1) {
QMessageBox::StandardButton result = MessageBox::question(
QMessageBox::StandardButton result;
if (selected.size() == 1) {
result = MessageBox::question(
this, tr("Move entry to recycle bin?"),
tr("Do you really want to move entry \"%1\" to the recycle bin?")
.arg(selectedEntries.first()->title()),
QMessageBox::Yes | QMessageBox::No);
}
else {
result = MessageBox::question(
this, tr("Move entries to recycle bin?"),
tr("Do you really want to move %n entry(s) to the recycle bin?", 0, selected.size()),
QMessageBox::Yes | QMessageBox::No);
if (result == QMessageBox::No) {
return;
}
}
if (result == QMessageBox::No) {
return;
}
Q_FOREACH (Entry* entry, selectedEntries) {
@@ -493,7 +503,9 @@ void DatabaseWidget::deleteGroup()
}
bool inRecylceBin = Tools::hasChild(m_db->metadata()->recycleBin(), currentGroup);
if (inRecylceBin || !m_db->metadata()->recycleBinEnabled()) {
bool isRecycleBin = (currentGroup == m_db->metadata()->recycleBin());
bool isRecycleBinSubgroup = Tools::hasChild(currentGroup, m_db->metadata()->recycleBin());
if (inRecylceBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) {
QMessageBox::StandardButton result = MessageBox::question(
this, tr("Delete group?"),
tr("Do you really want to delete the group \"%1\" for good?")
@@ -871,8 +883,7 @@ bool DatabaseWidget::dbHasKey() const
bool DatabaseWidget::canDeleteCurrentGroup() const
{
bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup();
bool isRecycleBin = m_db->metadata()->recycleBin() == m_groupView->currentGroup();
return !isRootGroup && !isRecycleBin;
return !isRootGroup;
}
bool DatabaseWidget::isInSearchMode() const

View File

@@ -19,6 +19,7 @@
#include "ui_EditWidgetIcons.h"
#include <QFileDialog>
#include <QImageReader>
#include "core/Group.h"
#include "core/Metadata.h"
@@ -98,7 +99,7 @@ void EditWidgetIcons::load(Uuid currentUuid, Database* database, IconStruct icon
m_database = database;
m_currentUuid = currentUuid;
m_customIconModel->setIcons(database->metadata()->customIcons(),
m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps(),
database->metadata()->customIconsOrder());
Uuid iconUuid = iconStruct.uuid;
@@ -129,17 +130,21 @@ void EditWidgetIcons::addCustomIcon()
QString filename = QFileDialog::getOpenFileName(
this, tr("Select Image"), "", filter);
if (!filename.isEmpty()) {
QImage image(filename);
QImageReader imageReader(filename);
// detect from content, otherwise reading fails if file extension is wrong
imageReader.setDecideFormatFromContent(true);
QImage image = imageReader.read();
if (!image.isNull()) {
Uuid uuid = Uuid::random();
m_database->metadata()->addCustomIconScaled(uuid, image);
m_customIconModel->setIcons(m_database->metadata()->customIcons(),
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
m_database->metadata()->customIconsOrder());
QModelIndex index = m_customIconModel->indexFromUuid(uuid);
m_ui->customIconsView->setCurrentIndex(index);
}
else {
// TODO: show error
MessageBox::critical(this, tr("Error"),
tr("Can't read icon:").append("\n").append(imageReader.errorString()));
}
}
}
@@ -183,7 +188,7 @@ void EditWidgetIcons::removeCustomIcon()
}
m_database->metadata()->removeCustomIcon(iconUuid);
m_customIconModel->setIcons(m_database->metadata()->customIcons(),
m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(),
m_database->metadata()->customIconsOrder());
if (m_customIconModel->rowCount() > 0) {
m_ui->customIconsView->setCurrentIndex(m_customIconModel->index(0, 0));

View File

@@ -54,7 +54,7 @@ CustomIconModel::CustomIconModel(QObject* parent)
{
}
void CustomIconModel::setIcons(const QHash<Uuid, QImage>& icons, const QList<Uuid>& iconsOrder)
void CustomIconModel::setIcons(const QHash<Uuid, QPixmap>& icons, const QList<Uuid>& iconsOrder)
{
beginResetModel();

View File

@@ -19,7 +19,7 @@
#define KEEPASSX_ICONMODELS_H
#include <QAbstractListModel>
#include <QImage>
#include <QPixmap>
#include "core/Global.h"
#include "core/Uuid.h"
@@ -44,12 +44,12 @@ public:
virtual int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
void setIcons(const QHash<Uuid, QImage>& icons, const QList<Uuid>& iconsOrder);
void setIcons(const QHash<Uuid, QPixmap>& icons, const QList<Uuid>& iconsOrder);
Uuid uuidFromIndex(const QModelIndex& index) const;
QModelIndex indexFromUuid(const Uuid& uuid) const;
private:
QHash<Uuid, QImage> m_icons;
QHash<Uuid, QPixmap> m_icons;
QList<Uuid> m_iconsOrder;
};

View File

@@ -49,7 +49,8 @@ void KeePass1OpenWidget::openDatabase()
QFile file(m_filename);
if (!file.open(QIODevice::ReadOnly)) {
// TODO: error message
MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n")
.append(file.errorString()));
return;
}
if (m_db) {

View File

@@ -27,8 +27,12 @@
#include "core/FilePath.h"
#include "core/InactivityTimer.h"
#include "core/Metadata.h"
#include "format/KeePass2Writer.h"
#include "gui/AboutDialog.h"
#include "gui/DatabaseWidget.h"
#include "gui/DatabaseRepairWidget.h"
#include "gui/FileDialog.h"
#include "gui/MessageBox.h"
const QString MainWindow::BaseWindowTitle = "KeePassX";
@@ -163,6 +167,8 @@ MainWindow::MainWindow()
SLOT(changeDatabaseSettings()));
connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget,
SLOT(importKeePass1Database()));
connect(m_ui->actionRepairDatabase, SIGNAL(triggered()), this,
SLOT(repairDatabase()));
connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget,
SLOT(exportToCsv()));
connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget,
@@ -366,6 +372,7 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode)
m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->actionImportKeePass1->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->actionRepairDatabase->setEnabled(inDatabaseTabWidgetOrWelcomeWidget);
m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases());
}
@@ -598,6 +605,36 @@ void MainWindow::lockDatabasesAfterInactivity()
m_ui->tabWidget->lockDatabases();
}
void MainWindow::repairDatabase()
{
QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files"));
QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QString(),
filter);
if (fileName.isEmpty()) {
return;
}
QScopedPointer<QDialog> dialog(new QDialog(this));
DatabaseRepairWidget* dbRepairWidget = new DatabaseRepairWidget(dialog.data());
connect(dbRepairWidget, SIGNAL(success()), dialog.data(), SLOT(accept()));
connect(dbRepairWidget, SIGNAL(error()), dialog.data(), SLOT(reject()));
dbRepairWidget->load(fileName);
if (dialog->exec() == QDialog::Accepted && dbRepairWidget->database()) {
QString saveFileName = fileDialog()->getSaveFileName(this, tr("Save repaired database"), QString(),
tr("KeePass 2 Database").append(" (*.kdbx)"),
Q_NULLPTR, 0, "kdbx");
if (!saveFileName.isEmpty()) {
KeePass2Writer writer;
writer.writeDatabase(saveFileName, dbRepairWidget->database());
if (writer.hasError()) {
MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n"
+ writer.errorString());
}
}
}
}
bool MainWindow::isTrayIconEnabled() const
{
#ifdef Q_OS_MAC

View File

@@ -66,6 +66,7 @@ private Q_SLOTS:
void trayIconTriggered(QSystemTrayIcon::ActivationReason reason);
void toggleWindow();
void lockDatabasesAfterInactivity();
void repairDatabase();
private:
static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0);

View File

@@ -121,6 +121,7 @@
<addaction name="separator"/>
<addaction name="actionImportKeePass1"/>
<addaction name="actionExportCsv"/>
<addaction name="actionRepairDatabase"/>
<addaction name="separator"/>
<addaction name="actionQuit"/>
</widget>
@@ -422,6 +423,11 @@
<string>Export to CSV file</string>
</property>
</action>
<action name="actionRepairDatabase">
<property name="text">
<string>Repair database</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View File

@@ -49,7 +49,7 @@ void PasswordComboBox::setEcho(bool echo)
// Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6)
setStyleSheet("QComboBox { font-family: monospace,Menlo,Monaco; }");
#else
setStyleSheet("QComboBox { font-family: monospace,Courier; }");
setStyleSheet("QComboBox { font-family: monospace,Courier New; }");
#endif
}

View File

@@ -60,7 +60,7 @@ void PasswordEdit::updateStylesheet()
// Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6)
stylesheet.append("font-family: monospace,Menlo,Monaco; ");
#else
stylesheet.append("font-family: monospace; ");
stylesheet.append("font-family: monospace,Courier New; ");
#endif
}

View File

@@ -88,6 +88,14 @@ void PasswordGeneratorWidget::reset()
updateGenerator();
}
void PasswordGeneratorWidget::regeneratePassword()
{
if (m_generator->isValid()) {
QString password = m_generator->generatePassword();
m_ui->editNewPassword->setEditText(password);
}
}
void PasswordGeneratorWidget::updateApplyEnabled(const QString& password)
{
m_ui->buttonApply->setEnabled(!password.isEmpty());
@@ -111,6 +119,10 @@ void PasswordGeneratorWidget::sliderMoved()
void PasswordGeneratorWidget::spinBoxChanged()
{
if (m_updatingSpinBox) {
return;
}
// Interlock so that we don't update twice - this causes issues as the spinbox can go higher than slider
m_updatingSpinBox = true;
@@ -161,12 +173,39 @@ PasswordGenerator::GeneratorFlags PasswordGeneratorWidget::generatorFlags()
void PasswordGeneratorWidget::updateGenerator()
{
m_generator->setLength(m_ui->spinBoxLength->value());
m_generator->setCharClasses(charClasses());
m_generator->setFlags(generatorFlags());
PasswordGenerator::CharClasses classes = charClasses();
PasswordGenerator::GeneratorFlags flags = generatorFlags();
if (m_generator->isValid()) {
QString password = m_generator->generatePassword();
m_ui->editNewPassword->setEditText(password);
int minLength = 0;
if (flags.testFlag(PasswordGenerator::CharFromEveryGroup)) {
if (classes.testFlag(PasswordGenerator::LowerLetters)) {
minLength++;
}
if (classes.testFlag(PasswordGenerator::UpperLetters)) {
minLength++;
}
if (classes.testFlag(PasswordGenerator::Numbers)) {
minLength++;
}
if (classes.testFlag(PasswordGenerator::SpecialCharacters)) {
minLength++;
}
}
minLength = qMax(minLength, 1);
if (m_ui->spinBoxLength->value() < minLength) {
m_updatingSpinBox = true;
m_ui->spinBoxLength->setValue(minLength);
m_ui->sliderLength->setValue(minLength);
m_updatingSpinBox = false;
}
m_ui->spinBoxLength->setMinimum(minLength);
m_ui->sliderLength->setMinimum(minLength);
m_generator->setLength(m_ui->spinBoxLength->value());
m_generator->setCharClasses(classes);
m_generator->setFlags(flags);
regeneratePassword();
}

View File

@@ -39,6 +39,7 @@ public:
~PasswordGeneratorWidget();
void loadSettings();
void reset();
void regeneratePassword();
Q_SIGNALS:
void newPassword(const QString& password);

View File

@@ -294,6 +294,7 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
m_mainUi->expireDatePicker->setReadOnly(m_history);
m_mainUi->notesEdit->setReadOnly(m_history);
m_mainUi->tooglePasswordGeneratorButton->setChecked(false);
m_mainUi->tooglePasswordGeneratorButton->setDisabled(m_history);
m_mainUi->passwordGenerator->reset();
m_advancedUi->addAttachmentButton->setEnabled(!m_history);
updateAttachmentButtonsEnabled(m_advancedUi->attachmentsView->currentIndex());
@@ -486,6 +487,7 @@ void EditEntryWidget::clear()
void EditEntryWidget::togglePasswordGeneratorButton(bool checked)
{
m_mainUi->passwordGenerator->regeneratePassword();
m_mainUi->passwordGenerator->setVisible(checked);
}
@@ -671,6 +673,14 @@ void EditEntryWidget::openAttachment(const QModelIndex& index)
return;
}
if (!file->flush()) {
MessageBox::warning(this, tr("Error"),
tr("Unable to save the attachment:\n").append(file->errorString()));
return;
}
file->close();
QDesktopServices::openUrl(QUrl::fromLocalFile(file->fileName()));
}

View File

@@ -146,7 +146,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
switch (index.column()) {
case ParentGroup:
if (entry->group()) {
return entry->group()->iconPixmap();
return entry->group()->iconScaledPixmap();
}
break;
case Title:
@@ -154,7 +154,7 @@ QVariant EntryModel::data(const QModelIndex& index, int role) const
return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex);
}
else {
return entry->iconPixmap();
return entry->iconScaledPixmap();
}
}
}

View File

@@ -136,7 +136,7 @@ QVariant GroupModel::data(const QModelIndex& index, int role) const
return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex);
}
else {
return group->iconPixmap();
return group->iconScaledPixmap();
}
}
else if (role == Qt::FontRole) {

View File

@@ -210,17 +210,16 @@ void TestEntryModel::testCustomIconModel()
QCOMPARE(model->rowCount(), 0);
QHash<Uuid, QImage> icons;
QHash<Uuid, QPixmap> icons;
QList<Uuid> iconsOrder;
Uuid iconUuid(QByteArray(16, '2'));
QImage icon;
icons.insert(iconUuid, icon);
icons.insert(iconUuid, QPixmap());
iconsOrder << iconUuid;
Uuid iconUuid2(QByteArray(16, '1'));
QImage icon2;
icons.insert(iconUuid2, icon2);
icons.insert(iconUuid2, QPixmap());
iconsOrder << iconUuid2;
model->setIcons(icons, iconsOrder);

View File

@@ -386,7 +386,12 @@ void TestGroup::testClone()
QVERIFY(clonedSubGroupEntry->uuid() != subGroupEntry->uuid());
QCOMPARE(clonedSubGroupEntry->title(), QString("SubGroupEntry"));
Group* clonedGroupKeepUuid = originalGroup->clone(Entry::CloneNoFlags);
QCOMPARE(clonedGroupKeepUuid->entries().at(0)->uuid(), originalGroupEntry->uuid());
QCOMPARE(clonedGroupKeepUuid->children().at(0)->entries().at(0)->uuid(), subGroupEntry->uuid());
delete clonedGroup;
delete clonedGroupKeepUuid;
delete db;
}

View File

@@ -18,8 +18,10 @@
#include "TestKeePass2Writer.h"
#include <QBuffer>
#include <QFile>
#include <QTest>
#include "config-keepassx-tests.h"
#include "tests.h"
#include "FailDevice.h"
#include "core/Database.h"
@@ -27,6 +29,7 @@
#include "core/Metadata.h"
#include "crypto/Crypto.h"
#include "format/KeePass2Reader.h"
#include "format/KeePass2Repair.h"
#include "format/KeePass2Writer.h"
#include "format/KeePass2XmlWriter.h"
#include "keys/PasswordKey.h"
@@ -127,6 +130,34 @@ void TestKeePass2Writer::testDeviceFailure()
delete db;
}
void TestKeePass2Writer::testRepair()
{
QString brokenDbFilename = QString(KEEPASSX_TEST_DATA_DIR).append("/bug392.kdbx");
// master password = test
// entry username: testuser\x10\x20AC
// entry password: testpw
CompositeKey key;
key.addKey(PasswordKey("test"));
// test that we can't open the broken database
KeePass2Reader reader;
Database* dbBroken = reader.readDatabase(brokenDbFilename, key);
QVERIFY(!dbBroken);
QVERIFY(reader.hasError());
// test if we can repair the database
KeePass2Repair repair;
QFile file(brokenDbFilename);
file.open(QIODevice::ReadOnly);
QCOMPARE(repair.repairDatabase(&file, key), KeePass2Repair::RepairSuccess);
Database* dbRepaired = repair.database();
QVERIFY(dbRepaired);
QCOMPARE(dbRepaired->rootGroup()->entries().size(), 1);
QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->username(), QString("testuser").append(QChar(0x20AC)));
QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->password(), QString("testpw"));
}
void TestKeePass2Writer::cleanupTestCase()
{
delete m_dbOrg;

View File

@@ -33,6 +33,7 @@ private Q_SLOTS:
void testAttachments();
void testNonAsciiPasswords();
void testDeviceFailure();
void testRepair();
void cleanupTestCase();
private:

View File

@@ -17,6 +17,7 @@
#include "TestKeePass2XmlReader.h"
#include <QBuffer>
#include <QFile>
#include <QTest>
@@ -26,6 +27,7 @@
#include "core/Metadata.h"
#include "crypto/Crypto.h"
#include "format/KeePass2XmlReader.h"
#include "format/KeePass2XmlWriter.h"
#include "config-keepassx-tests.h"
QTEST_GUILESS_MAIN(TestKeePass2XmlReader)
@@ -66,6 +68,18 @@ QDateTime TestKeePass2XmlReader::genDT(int year, int month, int day, int hour, i
return QDateTime(date, time, Qt::UTC);
}
QByteArray TestKeePass2XmlReader::strToBytes(const QString& str)
{
QByteArray result;
for (int i = 0; i < str.size(); i++) {
result.append(str.at(i).unicode() >> 8);
result.append(str.at(i).unicode() & 0xFF);
}
return result;
}
void TestKeePass2XmlReader::initTestCase()
{
QVERIFY(Crypto::init());
@@ -393,6 +407,8 @@ void TestKeePass2XmlReader::testBroken_data()
QTest::newRow("BrokenGroupReference (not strict)") << "BrokenGroupReference" << false << false;
QTest::newRow("BrokenDeletedObjects (strict)") << "BrokenDeletedObjects" << true << true;
QTest::newRow("BrokenDeletedObjects (not strict)") << "BrokenDeletedObjects" << false << false;
QTest::newRow("BrokenDifferentEntryHistoryUuid (strict)") << "BrokenDifferentEntryHistoryUuid" << true << true;
QTest::newRow("BrokenDifferentEntryHistoryUuid (not strict)") << "BrokenDifferentEntryHistoryUuid" << false << false;
}
void TestKeePass2XmlReader::testEmptyUuids()
@@ -408,6 +424,97 @@ void TestKeePass2XmlReader::testEmptyUuids()
QVERIFY(!reader.hasError());
}
void TestKeePass2XmlReader::testInvalidXmlChars()
{
QScopedPointer<Database> dbWrite(new Database());
QString strPlainInvalid = QString().append(QChar(0x02)).append(QChar(0x19))
.append(QChar(0xFFFE)).append(QChar(0xFFFF));
QString strPlainValid = QString().append(QChar(0x09)).append(QChar(0x0A))
.append(QChar(0x20)).append(QChar(0xD7FF))
.append(QChar(0xE000)).append(QChar(0xFFFD));
// U+10437 in UTF-16: D801 DC37
// high low surrogate
QString strSingleHighSurrogate1 = QString().append(QChar(0xD801));
QString strSingleHighSurrogate2 = QString().append(QChar(0x31)).append(QChar(0xD801)).append(QChar(0x32));
QString strHighHighSurrogate = QString().append(QChar(0xD801)).append(QChar(0xD801));
QString strSingleLowSurrogate1 = QString().append(QChar(0xDC37));
QString strSingleLowSurrogate2 = QString().append(QChar((0x31))).append(QChar(0xDC37)).append(QChar(0x32));
QString strLowLowSurrogate = QString().append(QChar(0xDC37)).append(QChar(0xDC37));
QString strSurrogateValid1 = QString().append(QChar(0xD801)).append(QChar(0xDC37));
QString strSurrogateValid2 = QString().append(QChar(0x31)).append(QChar(0xD801)).append(QChar(0xDC37)).append(QChar(0x32));
Entry* entry = new Entry();
entry->setUuid(Uuid::random());
entry->setGroup(dbWrite->rootGroup());
entry->attributes()->set("PlainInvalid", strPlainInvalid);
entry->attributes()->set("PlainValid", strPlainValid);
entry->attributes()->set("SingleHighSurrogate1", strSingleHighSurrogate1);
entry->attributes()->set("SingleHighSurrogate2", strSingleHighSurrogate2);
entry->attributes()->set("HighHighSurrogate", strHighHighSurrogate);
entry->attributes()->set("SingleLowSurrogate1", strSingleLowSurrogate1);
entry->attributes()->set("SingleLowSurrogate2", strSingleLowSurrogate2);
entry->attributes()->set("LowLowSurrogate", strLowLowSurrogate);
entry->attributes()->set("SurrogateValid1", strSurrogateValid1);
entry->attributes()->set("SurrogateValid2", strSurrogateValid2);
QBuffer buffer;
buffer.open(QIODevice::ReadWrite);
KeePass2XmlWriter writer;
writer.writeDatabase(&buffer, dbWrite.data());
QVERIFY(!writer.hasError());
buffer.seek(0);
KeePass2XmlReader reader;
reader.setStrictMode(true);
QScopedPointer<Database> dbRead(reader.readDatabase(&buffer));
if (reader.hasError()) {
qWarning("Database read error: %s", qPrintable(reader.errorString()));
}
QVERIFY(!reader.hasError());
QVERIFY(!dbRead.isNull());
QCOMPARE(dbRead->rootGroup()->entries().size(), 1);
Entry* entryRead = dbRead->rootGroup()->entries().at(0);
EntryAttributes* attrRead = entryRead->attributes();
QCOMPARE(strToBytes(attrRead->value("PlainInvalid")), QByteArray());
QCOMPARE(strToBytes(attrRead->value("PlainValid")), strToBytes(strPlainValid));
QCOMPARE(strToBytes(attrRead->value("SingleHighSurrogate1")), QByteArray());
QCOMPARE(strToBytes(attrRead->value("SingleHighSurrogate2")), strToBytes(QString("12")));
QCOMPARE(strToBytes(attrRead->value("HighHighSurrogate")), QByteArray());
QCOMPARE(strToBytes(attrRead->value("SingleLowSurrogate1")), QByteArray());
QCOMPARE(strToBytes(attrRead->value("SingleLowSurrogate2")), strToBytes(QString("12")));
QCOMPARE(strToBytes(attrRead->value("LowLowSurrogate")), QByteArray());
QCOMPARE(strToBytes(attrRead->value("SurrogateValid1")), strToBytes(strSurrogateValid1));
QCOMPARE(strToBytes(attrRead->value("SurrogateValid2")), strToBytes(strSurrogateValid2));
}
void TestKeePass2XmlReader::testRepairUuidHistoryItem()
{
KeePass2XmlReader reader;
QString xmlFile = QString("%1/%2.xml").arg(KEEPASSX_TEST_DATA_DIR, "BrokenDifferentEntryHistoryUuid");
QVERIFY(QFile::exists(xmlFile));
QScopedPointer<Database> db(reader.readDatabase(xmlFile));
if (reader.hasError()) {
qWarning("Database read error: %s", qPrintable(reader.errorString()));
}
QVERIFY(!reader.hasError());
QList<Entry*> entries = db.data()->rootGroup()->entries();
QCOMPARE(entries.size(), 1);
Entry* entry = entries.at(0);
QList<Entry*> historyItems = entry->historyItems();
QCOMPARE(historyItems.size(), 1);
Entry* historyItem = historyItems.at(0);
QVERIFY(!entry->uuid().isNull());
QVERIFY(!historyItem->uuid().isNull());
QCOMPARE(historyItem->uuid(), entry->uuid());
}
void TestKeePass2XmlReader::cleanupTestCase()
{
delete m_db;

View File

@@ -42,10 +42,13 @@ private Q_SLOTS:
void testBroken();
void testBroken_data();
void testEmptyUuids();
void testInvalidXmlChars();
void testRepairUuidHistoryItem();
void cleanupTestCase();
private:
static QDateTime genDT(int year, int month, int day, int hour, int min, int second);
static QByteArray strToBytes(const QString& str);
Database* m_db;
};

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<KeePassFile>
<Root>
<Group>
<UUID>lmU+9n0aeESKZvcEze+bRg==</UUID>
<Name>Test</Name>
<Entry>
<UUID>MTExMTExMTExMTExMTExMQ==</UUID>
<History>
<Entry>
<UUID>MjIyMjIyMjIyMjIyMjIyMg==</UUID>
</Entry>
</History>
</Entry>
</Group>
</Root>
</KeePassFile>

BIN
tests/data/bug392.kdbx Normal file

Binary file not shown.

View File

@@ -239,6 +239,7 @@ void TestGui::testSearch()
QVERIFY(entryDeleteWidget->isEnabled());
QVERIFY(!m_db->metadata()->recycleBin());
MessageBox::setNextAnswer(QMessageBox::Yes);
QTest::mouseClick(entryDeleteWidget, Qt::LeftButton);
QCOMPARE(entryView->model()->rowCount(), 3);