Merge branch '2.0'

This commit is contained in:
Felix Geyer 2016-02-08 18:13:29 +01:00
commit d6d92ce90a
20 changed files with 382 additions and 176 deletions

View File

@ -1,3 +1,22 @@
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) 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_GUI_TESTS "Enable building of GUI tests" OFF)
option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF) option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF)
set(KEEPASSX_VERSION "2.0") set(KEEPASSX_VERSION "2.0.2")
set(KEEPASSX_VERSION_NUM "2.0") set(KEEPASSX_VERSION_NUM "2.0.2")
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1) set(CMAKE_COMPILER_IS_CLANG 1)

View File

@ -13,6 +13,10 @@
<source>Revision</source> <source>Revision</source>
<translation>Revision</translation> <translation>Revision</translation>
</message> </message>
<message>
<source>Using:</source>
<translation>Bruger:</translation>
</message>
</context> </context>
<context> <context>
<name>AutoType</name> <name>AutoType</name>
@ -828,6 +832,16 @@ Vil du alligevel gemme?</translation>
<source>Unable to calculate master key</source> <source>Unable to calculate master key</source>
<translation>Kan ikke beregne hovednøgle</translation> <translation>Kan ikke beregne hovednøgle</translation>
</message> </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>
<context> <context>
<name>Main</name> <name>Main</name>

View File

@ -172,6 +172,42 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </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> <context>
<name>DatabaseSettingsWidget</name> <name>DatabaseSettingsWidget</name>
<message> <message>
@ -1022,6 +1058,30 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Export to CSV file</source> <source>Export to CSV file</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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>
<context> <context>
<name>PasswordGeneratorWidget</name> <name>PasswordGeneratorWidget</name>

View File

@ -13,6 +13,10 @@
<source>Revision</source> <source>Revision</source>
<translation>Version</translation> <translation>Version</translation>
</message> </message>
<message>
<source>Using:</source>
<translation>Utilise :</translation>
</message>
</context> </context>
<context> <context>
<name>AutoType</name> <name>AutoType</name>
@ -79,7 +83,7 @@
</message> </message>
<message> <message>
<source>Key files</source> <source>Key files</source>
<translation>Fichiers de clé</translation> <translation>Fichiers-clés</translation>
</message> </message>
<message> <message>
<source>All files</source> <source>All files</source>
@ -120,7 +124,7 @@
<message> <message>
<source>Failed to set %1 as the Key file: <source>Failed to set %1 as the Key file:
%2</source> %2</source>
<translation>Impossible de définir %1 comme fichier-clé: <translation>Impossible de définir %1 comme fichier-clé :
%2</translation> %2</translation>
</message> </message>
</context> </context>
@ -286,7 +290,7 @@ Voulez-vous quand même l&apos;ouvrir ? Dans ce cas, elle sera ouverte en lectur
</message> </message>
<message> <message>
<source>Lock database</source> <source>Lock database</source>
<translation>Verrouiiler la base de données</translation> <translation>Verrouiller la base de données</translation>
</message> </message>
<message> <message>
<source>Can't lock the database as you are currently editing it. <source>Can't lock the database as you are currently editing it.
@ -449,7 +453,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<message> <message>
<source>Unable to save the attachment: <source>Unable to save the attachment:
</source> </source>
<translation>Impossible d&apos;enregistrer le fichier attaché: <translation>Impossible d&apos;enregistrer le fichier attaché :
</translation> </translation>
</message> </message>
<message> <message>
@ -532,7 +536,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Set custom sequence:</source> <source>Set custom sequence:</source>
<translation>Définir une séquence personnalisé :</translation> <translation>Définir une séquence personnalisée :</translation>
</message> </message>
</context> </context>
<context> <context>
@ -562,7 +566,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Username:</source> <source>Username:</source>
<translation>Non d&apos;utilisateur :</translation> <translation>Nom d&apos;utilisateur :</translation>
</message> </message>
<message> <message>
<source>Password:</source> <source>Password:</source>
@ -755,7 +759,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Username</source> <source>Username</source>
<translation>Non d&apos;utilisateur</translation> <translation>Nom d&apos;utilisateur</translation>
</message> </message>
<message> <message>
<source>URL</source> <source>URL</source>
@ -792,7 +796,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Not a KeePass database.</source> <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>
<message> <message>
<source>Unsupported encryption algorithm.</source> <source>Unsupported encryption algorithm.</source>
@ -800,7 +804,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Unsupported KeePass database version.</source> <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>
<message> <message>
<source>Root</source> <source>Root</source>
@ -815,20 +819,30 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>KeePass2Reader</name> <name>KeePass2Reader</name>
<message> <message>
<source>Not a KeePass database.</source> <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>
<message> <message>
<source>Unsupported KeePass database version.</source> <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>
<message> <message>
<source>Wrong key or database file is corrupt.</source> <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>
<message> <message>
<source>Unable to calculate master key</source> <source>Unable to calculate master key</source>
<translation>Impossible de calculer la clé maître</translation> <translation>Impossible de calculer la clé maître</translation>
</message> </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>
<context> <context>
<name>Main</name> <name>Main</name>
@ -861,7 +875,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Copy attribute to clipboard</source> <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>
<message> <message>
<source>Groups</source> <source>Groups</source>
@ -881,19 +895,19 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Open database</source> <source>Open database</source>
<translation>Ouvrir une base de donnée</translation> <translation>Ouvrir une base de données</translation>
</message> </message>
<message> <message>
<source>Save database</source> <source>Save database</source>
<translation>Enregistrer la base de donnée</translation> <translation>Enregistrer la base de données</translation>
</message> </message>
<message> <message>
<source>Close database</source> <source>Close database</source>
<translation>Fermer la base de donnée</translation> <translation>Fermer la base de données</translation>
</message> </message>
<message> <message>
<source>New database</source> <source>New database</source>
<translation>Nouvelle base de donnée</translation> <translation>Nouvelle base de données</translation>
</message> </message>
<message> <message>
<source>Add new entry</source> <source>Add new entry</source>
@ -921,7 +935,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Save database as</source> <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>
<message> <message>
<source>Change master key</source> <source>Change master key</source>
@ -929,11 +943,11 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Database settings</source> <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>
<message> <message>
<source>Import KeePass 1 database</source> <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>
<message> <message>
<source>Clone entry</source> <source>Clone entry</source>
@ -945,11 +959,11 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Copy username to clipboard</source> <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>
<message> <message>
<source>Copy password to clipboard</source> <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>
<message> <message>
<source>Settings</source> <source>Settings</source>
@ -1020,7 +1034,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Character Types</source> <source>Character Types</source>
<translation>Types de caractère</translation> <translation>Types de caractères</translation>
</message> </message>
<message> <message>
<source>Upper Case Letters</source> <source>Upper Case Letters</source>
@ -1055,7 +1069,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>QCommandLineParser</name> <name>QCommandLineParser</name>
<message> <message>
<source>Displays version information.</source> <source>Displays version information.</source>
<translation>Afficher les informations de version</translation> <translation>Afficher les informations de version.</translation>
</message> </message>
<message> <message>
<source>Displays this help.</source> <source>Displays this help.</source>
@ -1166,7 +1180,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>SettingsWidget</name> <name>SettingsWidget</name>
<message> <message>
<source>Application Settings</source> <source>Application Settings</source>
<translation>Paramètre de l&apos;application</translation> <translation>Paramètres de l&apos;application</translation>
</message> </message>
<message> <message>
<source>General</source> <source>General</source>
@ -1185,19 +1199,19 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Open previous databases on startup</source> <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>
<message> <message>
<source>Automatically save on exit</source> <source>Automatically save on exit</source>
<translation>Sauvegarde automatiquement à la sortie</translation> <translation>Sauvegarder automatiquement à la sortie</translation>
</message> </message>
<message> <message>
<source>Automatically save after every change</source> <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>
<message> <message>
<source>Minimize when copying to clipboard</source> <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>
<message> <message>
<source>Use group icon on entry creation</source> <source>Use group icon on entry creation</source>
@ -1232,7 +1246,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>SettingsWidgetSecurity</name> <name>SettingsWidgetSecurity</name>
<message> <message>
<source>Clear clipboard after</source> <source>Clear clipboard after</source>
<translation>Vider le presse-papiers après</translation> <translation>Vider le presse-papier après</translation>
</message> </message>
<message> <message>
<source> sec</source> <source> sec</source>
@ -1240,7 +1254,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>Lock databases after inactivity of</source> <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>
<message> <message>
<source>Show passwords in cleartext by default</source> <source>Show passwords in cleartext by default</source>
@ -1255,7 +1269,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
<name>UnlockDatabaseWidget</name> <name>UnlockDatabaseWidget</name>
<message> <message>
<source>Unlock database</source> <source>Unlock database</source>
<translation>Déverrouiller la base de donnée</translation> <translation>Déverrouiller la base de données</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1273,7 +1287,7 @@ Voulez-vous quand même la sauvegarder ?</translation>
</message> </message>
<message> <message>
<source>filename of the password database to open (*.kdbx)</source> <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>
<message> <message>
<source>path to a custom config file</source> <source>path to a custom config file</source>

View File

@ -13,6 +13,10 @@
<source>Revision</source> <source>Revision</source>
<translation>Revisi</translation> <translation>Revisi</translation>
</message> </message>
<message>
<source>Using:</source>
<translation>Menggunakan:</translation>
</message>
</context> </context>
<context> <context>
<name>AutoType</name> <name>AutoType</name>
@ -79,7 +83,7 @@
</message> </message>
<message> <message>
<source>Key files</source> <source>Key files</source>
<translation>Berkas Kunci</translation> <translation>Berkas kunci</translation>
</message> </message>
<message> <message>
<source>All files</source> <source>All files</source>
@ -99,7 +103,7 @@
</message> </message>
<message> <message>
<source>Select a key file</source> <source>Select a key file</source>
<translation>Pilih sebuah berkas kunci</translation> <translation>Pilih berkas kunci</translation>
</message> </message>
<message> <message>
<source>Question</source> <source>Question</source>
@ -111,7 +115,7 @@
</message> </message>
<message> <message>
<source>Different passwords supplied.</source> <source>Different passwords supplied.</source>
<translation>Sandi yang berbeda diberikan.</translation> <translation>Sandi berbeda.</translation>
</message> </message>
<message> <message>
<source>Failed to set key file</source> <source>Failed to set key file</source>
@ -428,7 +432,7 @@ Apakah Anda tetap ingin menyimpannya?</translation>
</message> </message>
<message> <message>
<source>Different passwords supplied.</source> <source>Different passwords supplied.</source>
<translation>Kata sandi yang berbeda diberikan.</translation> <translation>Sandi berbeda.</translation>
</message> </message>
<message> <message>
<source>New attribute</source> <source>New attribute</source>
@ -586,7 +590,7 @@ Apakah Anda tetap ingin menyimpannya?</translation>
</message> </message>
<message> <message>
<source>Presets</source> <source>Presets</source>
<translation type="unfinished"/> <translation>Prasetel</translation>
</message> </message>
<message> <message>
<source>Notes:</source> <source>Notes:</source>
@ -829,6 +833,16 @@ Apakah Anda tetap ingin menyimpannya?</translation>
<source>Unable to calculate master key</source> <source>Unable to calculate master key</source>
<translation>Tidak bisa mengkalkulasi kunci utama</translation> <translation>Tidak bisa mengkalkulasi kunci utama</translation>
</message> </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>
<context> <context>
<name>Main</name> <name>Main</name>

View File

@ -13,6 +13,10 @@
<source>Revision</source> <source>Revision</source>
<translation>Revisione</translation> <translation>Revisione</translation>
</message> </message>
<message>
<source>Using:</source>
<translation>In uso:</translation>
</message>
</context> </context>
<context> <context>
<name>AutoType</name> <name>AutoType</name>
@ -48,7 +52,7 @@
</message> </message>
<message> <message>
<source>Select entry to Auto-Type:</source> <source>Select entry to Auto-Type:</source>
<translation>Selezionare una voce per Auto-Type:</translation> <translation>Seleziona una voce per Auto-Type:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -59,11 +63,11 @@
</message> </message>
<message> <message>
<source>Enter password:</source> <source>Enter password:</source>
<translation>Inserire password:</translation> <translation>Inserisci password:</translation>
</message> </message>
<message> <message>
<source>Repeat password:</source> <source>Repeat password:</source>
<translation>Ripetere password:</translation> <translation>Ripeti password:</translation>
</message> </message>
<message> <message>
<source>Key file</source> <source>Key file</source>
@ -75,7 +79,7 @@
</message> </message>
<message> <message>
<source>Create</source> <source>Create</source>
<translation>Creare</translation> <translation>Crea</translation>
</message> </message>
<message> <message>
<source>Key files</source> <source>Key files</source>
@ -87,7 +91,7 @@
</message> </message>
<message> <message>
<source>Create Key File...</source> <source>Create Key File...</source>
<translation>Creare file chiave...</translation> <translation>Crea file chiave...</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
@ -120,18 +124,19 @@
<message> <message>
<source>Failed to set %1 as the Key file: <source>Failed to set %1 as the Key file:
%2</source> %2</source>
<translation>Impossibile impostare %1 come file Chiave: %2</translation> <translation>Impossibile impostare %1 come file chiave:
%2</translation>
</message> </message>
</context> </context>
<context> <context>
<name>DatabaseOpenWidget</name> <name>DatabaseOpenWidget</name>
<message> <message>
<source>Enter master key</source> <source>Enter master key</source>
<translation>Inserire password</translation> <translation>Inserisci la chiave principale</translation>
</message> </message>
<message> <message>
<source>Key File:</source> <source>Key File:</source>
<translation>File Chiave:</translation> <translation>File chiave:</translation>
</message> </message>
<message> <message>
<source>Password:</source> <source>Password:</source>
@ -139,7 +144,7 @@
</message> </message>
<message> <message>
<source>Browse</source> <source>Browse</source>
<translation>Sfogliare</translation> <translation>Sfoglia</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
@ -159,7 +164,7 @@
</message> </message>
<message> <message>
<source>Key files</source> <source>Key files</source>
<translation>Files chiave</translation> <translation>File chiave</translation>
</message> </message>
<message> <message>
<source>Select key file</source> <source>Select key file</source>
@ -170,7 +175,7 @@
<name>DatabaseSettingsWidget</name> <name>DatabaseSettingsWidget</name>
<message> <message>
<source>Database name:</source> <source>Database name:</source>
<translation>Nome database:</translation> <translation>Nome del database:</translation>
</message> </message>
<message> <message>
<source>Database description:</source> <source>Database description:</source>
@ -178,7 +183,7 @@
</message> </message>
<message> <message>
<source>Transform rounds:</source> <source>Transform rounds:</source>
<translation>Rounds di trasformazione:</translation> <translation>Round di trasformazione:</translation>
</message> </message>
<message> <message>
<source>Default username:</source> <source>Default username:</source>
@ -186,7 +191,7 @@
</message> </message>
<message> <message>
<source>Use recycle bin:</source> <source>Use recycle bin:</source>
<translation>Utilizzare cestino:</translation> <translation>Utilizza cestino:</translation>
</message> </message>
<message> <message>
<source> MiB</source> <source> MiB</source>
@ -254,7 +259,7 @@
<message> <message>
<source>&quot;%1&quot; was modified. <source>&quot;%1&quot; was modified.
Save changes?</source> Save changes?</source>
<translation>&quot;%1&quot; è stata modificata. <translation>&quot;%1&quot; è stata modificato.
Salvare le modifiche?</translation> Salvare le modifiche?</translation>
</message> </message>
<message> <message>
@ -263,11 +268,11 @@ Salvare le modifiche?</translation>
</message> </message>
<message> <message>
<source>Writing the database failed.</source> <source>Writing the database failed.</source>
<translation>Scrittura del database fallita.</translation> <translation>Scrittura del database non riuscita.</translation>
</message> </message>
<message> <message>
<source>Save database as</source> <source>Save database as</source>
<translation>Salvare database come</translation> <translation>Salva database come</translation>
</message> </message>
<message> <message>
<source>New database</source> <source>New database</source>
@ -280,18 +285,18 @@ Salvare le modifiche?</translation>
<message> <message>
<source>The database you are trying to open is locked by another instance of KeePassX. <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> 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. <translation>Il database che stai tentando di aprire è bloccato da un&apos;altra istanza di KeePassX.
Vuoi aprirlo comunque? In alternativa, il database verrà aperto in sola lettura.</translation> Vuoi aprirlo comunque? Altrimenti il database verrà aperto in sola lettura.</translation>
</message> </message>
<message> <message>
<source>Lock database</source> <source>Lock database</source>
<translation>Bloccare database</translation> <translation>Blocca database</translation>
</message> </message>
<message> <message>
<source>Can't lock the database as you are currently editing it. <source>Can't lock the database as you are currently editing it.
Please press cancel to finish your changes or discard them.</source> Please press cancel to finish your changes or discard them.</source>
<translation>Non è possibile bloccare il database nel modo in cui lo stai modificando. <translation>Non è possibile bloccare il database dato che lo stai modificando.
Premere annulla per terminare le modifiche o scartarle .</translation> Premere Annulla per completare le modifiche o scartarle.</translation>
</message> </message>
<message> <message>
<source>This database has never been saved. <source>This database has never been saved.
@ -323,12 +328,12 @@ Annullare le modifiche e chiudere comunque?</translation>
</message> </message>
<message> <message>
<source>Writing the CSV file failed.</source> <source>Writing the CSV file failed.</source>
<translation>Scrittura del file CSV fallita.</translation> <translation>Scrittura del file CSV non riuscita.</translation>
</message> </message>
<message> <message>
<source>The database you are trying to save as is locked by another instance of KeePassX. <source>The database you are trying to save as is locked by another instance of KeePassX.
Do you want to save it anyway?</source> 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> Vuoi salvare comunque?</translation>
</message> </message>
</context> </context>
@ -336,7 +341,7 @@ Vuoi salvare comunque?</translation>
<name>DatabaseWidget</name> <name>DatabaseWidget</name>
<message> <message>
<source>Change master key</source> <source>Change master key</source>
<translation>Cambia password principale</translation> <translation>Cambia chiave principale</translation>
</message> </message>
<message> <message>
<source>Delete entry?</source> <source>Delete entry?</source>
@ -457,15 +462,15 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>%n week(s)</source> <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>
<message numerus="yes"> <message numerus="yes">
<source>%n month(s)</source> <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>
<message> <message>
<source>1 year</source> <source>1 year</source>
<translation>1 anno</translation> <translation>Un anno</translation>
</message> </message>
</context> </context>
<context> <context>
@ -476,15 +481,15 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Add</source> <source>Add</source>
<translation>Aggiungere</translation> <translation>Aggiungi</translation>
</message> </message>
<message> <message>
<source>Edit</source> <source>Edit</source>
<translation>Modificare</translation> <translation>Modifica</translation>
</message> </message>
<message> <message>
<source>Remove</source> <source>Remove</source>
<translation>Rimuovere</translation> <translation>Rimuovi</translation>
</message> </message>
<message> <message>
<source>Attachments</source> <source>Attachments</source>
@ -492,26 +497,26 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Save</source> <source>Save</source>
<translation>Salvare</translation> <translation>Salva</translation>
</message> </message>
<message> <message>
<source>Open</source> <source>Open</source>
<translation>Aprire</translation> <translation>Apri</translation>
</message> </message>
</context> </context>
<context> <context>
<name>EditEntryWidgetAutoType</name> <name>EditEntryWidgetAutoType</name>
<message> <message>
<source>Enable Auto-Type for this entry</source> <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>
<message> <message>
<source>Inherit default Auto-Type sequence from the group</source> <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>
<message> <message>
<source>Use custom Auto-Type sequence:</source> <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>
<message> <message>
<source>+</source> <source>+</source>
@ -527,30 +532,30 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Use default sequence</source> <source>Use default sequence</source>
<translation>Usare sequenza predefinita</translation> <translation>Usa sequenza predefinita</translation>
</message> </message>
<message> <message>
<source>Set custom sequence:</source> <source>Set custom sequence:</source>
<translation>Impostare sequenza personalizzata:</translation> <translation>Imposta sequenza personalizzata:</translation>
</message> </message>
</context> </context>
<context> <context>
<name>EditEntryWidgetHistory</name> <name>EditEntryWidgetHistory</name>
<message> <message>
<source>Show</source> <source>Show</source>
<translation>Mostrare</translation> <translation>Mostra</translation>
</message> </message>
<message> <message>
<source>Restore</source> <source>Restore</source>
<translation>Ripristinare</translation> <translation>Ripristina</translation>
</message> </message>
<message> <message>
<source>Delete</source> <source>Delete</source>
<translation>Eliminare</translation> <translation>Elimina</translation>
</message> </message>
<message> <message>
<source>Delete all</source> <source>Delete all</source>
<translation>Eliminare tutti</translation> <translation>Elimina tutti</translation>
</message> </message>
</context> </context>
<context> <context>
@ -569,7 +574,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Repeat:</source> <source>Repeat:</source>
<translation>Ripetere:</translation> <translation>Ripeti:</translation>
</message> </message>
<message> <message>
<source>Gen.</source> <source>Gen.</source>
@ -585,7 +590,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Presets</source> <source>Presets</source>
<translation>Presets</translation> <translation>Preimpostazioni</translation>
</message> </message>
<message> <message>
<source>Notes:</source> <source>Notes:</source>
@ -624,7 +629,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Inherit from parent group (%1)</source> <source>Inherit from parent group (%1)</source>
<translation>Ereditare dal gruppo genitore (%1)</translation> <translation>Eredita dal gruppo genitore (%1)</translation>
</message> </message>
</context> </context>
<context> <context>
@ -643,7 +648,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Search</source> <source>Search</source>
<translation>Cercare</translation> <translation>Cerca</translation>
</message> </message>
<message> <message>
<source>Auto-type</source> <source>Auto-type</source>
@ -651,30 +656,30 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Use default auto-type sequence of parent group</source> <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>
<message> <message>
<source>Set default auto-type sequence</source> <source>Set default auto-type sequence</source>
<translation>Usare sequenza auto-type predefinita</translation> <translation>Usa sequenza di auto-type predefinita</translation>
</message> </message>
</context> </context>
<context> <context>
<name>EditWidgetIcons</name> <name>EditWidgetIcons</name>
<message> <message>
<source>Use default icon</source> <source>Use default icon</source>
<translation>Usare icona predefinita</translation> <translation>Usa icona predefinita</translation>
</message> </message>
<message> <message>
<source>Use custom icon</source> <source>Use custom icon</source>
<translation>Usare icona personalizzata</translation> <translation>Usa icona personalizzata</translation>
</message> </message>
<message> <message>
<source>Add custom icon</source> <source>Add custom icon</source>
<translation>Aggiungere icona personalizzata</translation> <translation>Aggiungi icona personalizzata</translation>
</message> </message>
<message> <message>
<source>Delete custom icon</source> <source>Delete custom icon</source>
<translation>Rimuovere icona personalizzata</translation> <translation>Rimuovi icona personalizzata</translation>
</message> </message>
<message> <message>
<source>Images</source> <source>Images</source>
@ -686,7 +691,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Select Image</source> <source>Select Image</source>
<translation>Seleziona Immagine</translation> <translation>Seleziona immagine</translation>
</message> </message>
<message> <message>
<source>Can&apos;t delete icon!</source> <source>Can&apos;t delete icon!</source>
@ -694,18 +699,18 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source> <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> </message>
</context> </context>
<context> <context>
<name>EditWidgetProperties</name> <name>EditWidgetProperties</name>
<message> <message>
<source>Created:</source> <source>Created:</source>
<translation>Creato:</translation> <translation>Creazione:</translation>
</message> </message>
<message> <message>
<source>Modified:</source> <source>Modified:</source>
<translation>Modificato:</translation> <translation>Modifica:</translation>
</message> </message>
<message> <message>
<source>Accessed:</source> <source>Accessed:</source>
@ -713,7 +718,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Uuid:</source> <source>Uuid:</source>
<translation>Uuid:</translation> <translation>UUID:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -754,7 +759,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Username</source> <source>Username</source>
<translation>Nome Utente</translation> <translation>Nome utente</translation>
</message> </message>
<message> <message>
<source>URL</source> <source>URL</source>
@ -772,7 +777,7 @@ Vuoi salvare comunque?</translation>
<name>KeePass1OpenWidget</name> <name>KeePass1OpenWidget</name>
<message> <message>
<source>Import KeePass1 database</source> <source>Import KeePass1 database</source>
<translation>Importare database KeePass1</translation> <translation>Importa database KeePass1</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
@ -787,7 +792,7 @@ Vuoi salvare comunque?</translation>
<name>KeePass1Reader</name> <name>KeePass1Reader</name>
<message> <message>
<source>Unable to read keyfile.</source> <source>Unable to read keyfile.</source>
<translation>Impossibile leggere il file chiave.</translation> <translation>Impossibile leggere il file della chiave.</translation>
</message> </message>
<message> <message>
<source>Not a KeePass database.</source> <source>Not a KeePass database.</source>
@ -807,7 +812,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Unable to calculate master key</source> <source>Unable to calculate master key</source>
<translation>Impossibile calcolare la chiave master</translation> <translation>Impossibile calcolare la chiave principale</translation>
</message> </message>
</context> </context>
<context> <context>
@ -822,11 +827,21 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Wrong key or database file is corrupt.</source> <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>
<message> <message>
<source>Unable to calculate master key</source> <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> </message>
</context> </context>
<context> <context>
@ -872,23 +887,23 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Quit</source> <source>Quit</source>
<translation>Uscire</translation> <translation>Esci</translation>
</message> </message>
<message> <message>
<source>About</source> <source>About</source>
<translation>A Proposito</translation> <translation>Informazioni</translation>
</message> </message>
<message> <message>
<source>Open database</source> <source>Open database</source>
<translation>Aprire database</translation> <translation>Apri database</translation>
</message> </message>
<message> <message>
<source>Save database</source> <source>Save database</source>
<translation>Salvare database</translation> <translation>Salva database</translation>
</message> </message>
<message> <message>
<source>Close database</source> <source>Close database</source>
<translation>Chiudere database</translation> <translation>Chiudi database</translation>
</message> </message>
<message> <message>
<source>New database</source> <source>New database</source>
@ -896,35 +911,35 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Add new entry</source> <source>Add new entry</source>
<translation>Aggiungere nuova voce</translation> <translation>Aggiungi nuova voce</translation>
</message> </message>
<message> <message>
<source>View/Edit entry</source> <source>View/Edit entry</source>
<translation>Visualizzare/Modificare voce</translation> <translation>Visualizza/modifica voce</translation>
</message> </message>
<message> <message>
<source>Delete entry</source> <source>Delete entry</source>
<translation>Eliminare voce</translation> <translation>Elimina voce</translation>
</message> </message>
<message> <message>
<source>Add new group</source> <source>Add new group</source>
<translation>Aggiungere nuovo gruppo</translation> <translation>Aggiungi nuovo gruppo</translation>
</message> </message>
<message> <message>
<source>Edit group</source> <source>Edit group</source>
<translation>Modificare gruppo</translation> <translation>Modifica gruppo</translation>
</message> </message>
<message> <message>
<source>Delete group</source> <source>Delete group</source>
<translation>Eliminare gruppo</translation> <translation>Elimina gruppo</translation>
</message> </message>
<message> <message>
<source>Save database as</source> <source>Save database as</source>
<translation>Salvare database come</translation> <translation>Salva database come</translation>
</message> </message>
<message> <message>
<source>Change master key</source> <source>Change master key</source>
<translation>Cambiare password principale</translation> <translation>Cambia chiave principale</translation>
</message> </message>
<message> <message>
<source>Database settings</source> <source>Database settings</source>
@ -932,7 +947,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Import KeePass 1 database</source> <source>Import KeePass 1 database</source>
<translation>Importare database KeePass 1</translation> <translation>Importa database KeePass 1</translation>
</message> </message>
<message> <message>
<source>Clone entry</source> <source>Clone entry</source>
@ -940,15 +955,15 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Find</source> <source>Find</source>
<translation>Trovare</translation> <translation>Trova</translation>
</message> </message>
<message> <message>
<source>Copy username to clipboard</source> <source>Copy username to clipboard</source>
<translation>Copiare nome utente negli appunti</translation> <translation>Copia nome utente negli appunti</translation>
</message> </message>
<message> <message>
<source>Copy password to clipboard</source> <source>Copy password to clipboard</source>
<translation>Copiare password negli appunti</translation> <translation>Copia password negli appunti</translation>
</message> </message>
<message> <message>
<source>Settings</source> <source>Settings</source>
@ -956,15 +971,15 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Perform Auto-Type</source> <source>Perform Auto-Type</source>
<translation>Eseguire Auto-Type</translation> <translation>Esegui Auto-Type</translation>
</message> </message>
<message> <message>
<source>Open URL</source> <source>Open URL</source>
<translation>Aprire URL</translation> <translation>Apri URL</translation>
</message> </message>
<message> <message>
<source>Lock databases</source> <source>Lock databases</source>
<translation>Bloccare database</translation> <translation>Blocca database</translation>
</message> </message>
<message> <message>
<source>Title</source> <source>Title</source>
@ -1039,26 +1054,26 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Exclude look-alike characters</source> <source>Exclude look-alike characters</source>
<translation>Escludere caratteri simili</translation> <translation>Escludi caratteri simili</translation>
</message> </message>
<message> <message>
<source>Ensure that the password contains characters from every group</source> <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>
<message> <message>
<source>Accept</source> <source>Accept</source>
<translation>Accettare</translation> <translation>Accetta</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QCommandLineParser</name> <name>QCommandLineParser</name>
<message> <message>
<source>Displays version information.</source> <source>Displays version information.</source>
<translation>Mostrare informazioni sulla versione.</translation> <translation>Mostra informazioni sulla versione.</translation>
</message> </message>
<message> <message>
<source>Displays this help.</source> <source>Displays this help.</source>
<translation>Mostrare questo aiuto.</translation> <translation>Mostra questo aiuto.</translation>
</message> </message>
<message> <message>
<source>Unknown option &apos;%1&apos;.</source> <source>Unknown option &apos;%1&apos;.</source>
@ -1101,7 +1116,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Writing canceled by application</source> <source>Writing canceled by application</source>
<translation>Scrittura cancellata dall&apos;applicazione</translation> <translation>Scrittura annullata dall&apos;applicazione</translation>
</message> </message>
<message> <message>
<source>Partial write. Partition full?</source> <source>Partial write. Partition full?</source>
@ -1146,7 +1161,7 @@ Vuoi salvare comunque?</translation>
<name>SearchWidget</name> <name>SearchWidget</name>
<message> <message>
<source>Find:</source> <source>Find:</source>
<translation>Trovare:</translation> <translation>Trova:</translation>
</message> </message>
<message> <message>
<source>Case sensitive</source> <source>Case sensitive</source>
@ -1184,23 +1199,23 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Open previous databases on startup</source> <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>
<message> <message>
<source>Automatically save on exit</source> <source>Automatically save on exit</source>
<translation>Salvare automaticamente all&apos;uscita</translation> <translation>Salva automaticamente all&apos;uscita</translation>
</message> </message>
<message> <message>
<source>Automatically save after every change</source> <source>Automatically save after every change</source>
<translation>Salvare automaticamente dopo ogni modifica</translation> <translation>Salva automaticamente dopo ogni modifica</translation>
</message> </message>
<message> <message>
<source>Minimize when copying to clipboard</source> <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>
<message> <message>
<source>Use group icon on entry creation</source> <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>
<message> <message>
<source>Global Auto-Type shortcut</source> <source>Global Auto-Type shortcut</source>
@ -1208,7 +1223,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Use entry title to match windows for global auto-type</source> <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>
<message> <message>
<source>Language</source> <source>Language</source>
@ -1224,14 +1239,14 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Remember last key files</source> <source>Remember last key files</source>
<translation>Ricorda gli ultimi files chiave</translation> <translation>Ricorda gli ultimi file di chiavi</translation>
</message> </message>
</context> </context>
<context> <context>
<name>SettingsWidgetSecurity</name> <name>SettingsWidgetSecurity</name>
<message> <message>
<source>Clear clipboard after</source> <source>Clear clipboard after</source>
<translation>Pulire appunti dopo</translation> <translation>Pulisci appunti dopo</translation>
</message> </message>
<message> <message>
<source> sec</source> <source> sec</source>
@ -1239,22 +1254,22 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>Lock databases after inactivity of</source> <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>
<message> <message>
<source>Show passwords in cleartext by default</source> <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>
<message> <message>
<source>Always ask before performing auto-type</source> <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> </message>
</context> </context>
<context> <context>
<name>UnlockDatabaseWidget</name> <name>UnlockDatabaseWidget</name>
<message> <message>
<source>Unlock database</source> <source>Unlock database</source>
<translation>Sbloccare database</translation> <translation>Sblocca database</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1272,7 +1287,7 @@ Vuoi salvare comunque?</translation>
</message> </message>
<message> <message>
<source>filename of the password database to open (*.kdbx)</source> <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>
<message> <message>
<source>path to a custom config file</source> <source>path to a custom config file</source>

View File

@ -13,6 +13,10 @@
<source>Revision</source> <source>Revision</source>
<translation>Revision</translation> <translation>Revision</translation>
</message> </message>
<message>
<source>Using:</source>
<translation>Använder:</translation>
</message>
</context> </context>
<context> <context>
<name>AutoType</name> <name>AutoType</name>
@ -829,6 +833,13 @@ Vill du spara endå?</translation>
<source>Unable to calculate master key</source> <source>Unable to calculate master key</source>
<translation>Kunde inte räkna nu master-nyckeln</translation> <translation>Kunde inte räkna nu master-nyckeln</translation>
</message> </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>
<context> <context>
<name>Main</name> <name>Main</name>
@ -849,7 +860,7 @@ Vill du spara endå?</translation>
</message> </message>
<message> <message>
<source>Recent databases</source> <source>Recent databases</source>
<translation>Senast använda databser</translation> <translation>Senast använda databaser</translation>
</message> </message>
<message> <message>
<source>Help</source> <source>Help</source>
@ -1185,11 +1196,11 @@ Vill du spara endå?</translation>
</message> </message>
<message> <message>
<source>Open previous databases on startup</source> <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>
<message> <message>
<source>Automatically save on exit</source> <source>Automatically save on exit</source>
<translation>Spara automatiskt är applikationen anslutas</translation> <translation>Spara automatiskt r applikationen anslutas</translation>
</message> </message>
<message> <message>
<source>Automatically save after every change</source> <source>Automatically save after every change</source>

View File

@ -13,6 +13,10 @@
<source>Revision</source> <source>Revision</source>
<translation>Ревізія</translation> <translation>Ревізія</translation>
</message> </message>
<message>
<source>Using:</source>
<translation>Використання:</translation>
</message>
</context> </context>
<context> <context>
<name>AutoType</name> <name>AutoType</name>
@ -828,6 +832,16 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source> <source>Unable to calculate master key</source>
<translation>Неможливо вирахувати майстер-пароль</translation> <translation>Неможливо вирахувати майстер-пароль</translation>
</message> </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>
<context> <context>
<name>Main</name> <name>Main</name>

View File

@ -901,10 +901,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data)
QByteArray entryUuid = data.mid(pos, 16); QByteArray entryUuid = data.mid(pos, 16);
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; 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]); m_entryUuids[entryUuid]->setIcon(iconUuids[iconId]);
} }
} }
@ -917,10 +917,10 @@ bool KeePass1Reader::parseCustomIcons4(const QByteArray& data)
quint32 groupId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); quint32 groupId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
pos += 4; pos += 4;
int iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER);
pos += 4; 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]); m_groupIds[groupId]->setIcon(iconUuids[iconId]);
} }
} }

View File

@ -66,7 +66,7 @@ KeePass2Repair::RepairResult KeePass2Repair::repairDatabase(QIODevice* device, c
// try to fix broken databases because of bug #392 // try to fix broken databases because of bug #392
for (int i = (xmlData.size() - 1); i >= 0; i--) { for (int i = (xmlData.size() - 1); i >= 0; i--) {
char ch = xmlData.at(i); quint8 ch = static_cast<quint8>(xmlData.at(i));
if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) { if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) {
xmlData.remove(i, 1); xmlData.remove(i, 1);
repairAction = true; repairAction = true;

View File

@ -523,6 +523,7 @@ Group* KeePass2XmlReader::parseGroup()
if (m_strictMode) { if (m_strictMode) {
raiseError("Invalid group icon number"); raiseError("Invalid group icon number");
} }
iconId = 0;
} }
else { else {
if (iconId >= DatabaseIcons::IconCount) { if (iconId >= DatabaseIcons::IconCount) {
@ -702,6 +703,7 @@ Entry* KeePass2XmlReader::parseEntry(bool history)
if (m_strictMode) { if (m_strictMode) {
raiseError("Invalid entry icon number"); raiseError("Invalid entry icon number");
} }
iconId = 0;
} }
else { else {
entry->setIcon(iconId); entry->setIcon(iconId);

View File

@ -550,11 +550,19 @@ QString KeePass2XmlWriter::colorPartToString(int value)
QString KeePass2XmlWriter::stripInvalidXml10Chars(QString str) QString KeePass2XmlWriter::stripInvalidXml10Chars(QString str)
{ {
for (int i = str.size() - 1; i >= 0; i--) { for (int i = str.size() - 1; i >= 0; i--) {
const ushort uc = str.at(i).unicode(); const QChar ch = str.at(i);
const ushort uc = ch.unicode();
if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) {
|| (uc > 0xD7FF && uc < 0xE000) // keep valid surrogate pair
|| (uc > 0xFFFD)) 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); qWarning("Stripping invalid XML 1.0 codepoint %x", uc);
str.remove(i, 1); str.remove(i, 1);

View File

@ -49,10 +49,6 @@ DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent)
connect(m_ui->editPassword, SIGNAL(textChanged(QString)), SLOT(activatePassword())); connect(m_ui->editPassword, SIGNAL(textChanged(QString)), SLOT(activatePassword()));
connect(m_ui->comboKeyFile, SIGNAL(editTextChanged(QString)), SLOT(activateKeyFile())); 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(accepted()), SLOT(openDatabase()));
connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); 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(); m_ui->editPassword->setFocus();
} }
@ -99,9 +96,6 @@ void DatabaseOpenWidget::openDatabase()
{ {
KeePass2Reader reader; KeePass2Reader reader;
CompositeKey masterKey = databaseKey(); CompositeKey masterKey = databaseKey();
if (masterKey.isEmpty()) {
return;
}
QFile file(m_filename); QFile file(m_filename);
if (!file.open(QIODevice::ReadOnly)) { if (!file.open(QIODevice::ReadOnly)) {
@ -172,14 +166,6 @@ void DatabaseOpenWidget::activateKeyFile()
m_ui->checkKeyFile->setChecked(true); 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() void DatabaseOpenWidget::browseKeyFile()
{ {
QString filters = QString("%1 (*);;%2 (*.key)").arg(tr("All files"), tr("Key files")); 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: private Q_SLOTS:
void activatePassword(); void activatePassword();
void activateKeyFile(); void activateKeyFile();
void setOkButtonEnabled();
void browseKeyFile(); void browseKeyFile();
protected: protected:

View File

@ -51,6 +51,7 @@ void DatabaseRepairWidget::openDatabase()
if (!key.load(keyFilename, &errorMsg)) { if (!key.load(keyFilename, &errorMsg)) {
MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg)); MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg));
Q_EMIT editFinished(false); Q_EMIT editFinished(false);
return;
} }
masterKey.addKey(key); masterKey.addKey(key);
} }

View File

@ -132,7 +132,7 @@ void TestKeePass2Writer::testRepair()
{ {
QString brokenDbFilename = QString(KEEPASSX_TEST_DATA_DIR).append("/bug392.kdbx"); QString brokenDbFilename = QString(KEEPASSX_TEST_DATA_DIR).append("/bug392.kdbx");
// master password = test // master password = test
// entry username: testuser\x10 // entry username: testuser\x10\x20AC
// entry password: testpw // entry password: testpw
CompositeKey key; CompositeKey key;
key.addKey(PasswordKey("test")); key.addKey(PasswordKey("test"));
@ -152,7 +152,7 @@ void TestKeePass2Writer::testRepair()
QVERIFY(dbRepaired); QVERIFY(dbRepaired);
QCOMPARE(dbRepaired->rootGroup()->entries().size(), 1); QCOMPARE(dbRepaired->rootGroup()->entries().size(), 1);
QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->username(), QString("testuser")); QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->username(), QString("testuser").append(QChar(0x20AC)));
QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->password(), QString("testpw")); QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->password(), QString("testpw"));
} }

View File

@ -67,6 +67,18 @@ QDateTime TestKeePass2XmlReader::genDT(int year, int month, int day, int hour, i
return QDateTime(date, time, Qt::UTC); 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() void TestKeePass2XmlReader::initTestCase()
{ {
QVERIFY(Crypto::init()); QVERIFY(Crypto::init());
@ -413,10 +425,35 @@ void TestKeePass2XmlReader::testInvalidXmlChars()
{ {
QScopedPointer<Database> dbWrite(new Database()); 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* entry = new Entry();
entry->setUuid(Uuid::random()); entry->setUuid(Uuid::random());
entry->setNotes(QString("a %1 b %2 c %3").arg(QChar(0x02)).arg(QChar(0xD800)).arg(QChar(0xFFFE)));
entry->setGroup(dbWrite->rootGroup()); 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; QBuffer buffer;
buffer.open(QIODevice::ReadWrite); buffer.open(QIODevice::ReadWrite);
@ -434,8 +471,19 @@ void TestKeePass2XmlReader::testInvalidXmlChars()
QVERIFY(!reader.hasError()); QVERIFY(!reader.hasError());
QVERIFY(!dbRead.isNull()); QVERIFY(!dbRead.isNull());
QCOMPARE(dbRead->rootGroup()->entries().size(), 1); QCOMPARE(dbRead->rootGroup()->entries().size(), 1);
// check that the invalid codepoints have been stripped Entry* entryRead = dbRead->rootGroup()->entries().at(0);
QCOMPARE(dbRead->rootGroup()->entries().first()->notes(), QString("a b c ")); 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::cleanupTestCase() void TestKeePass2XmlReader::cleanupTestCase()

View File

@ -47,6 +47,7 @@ private Q_SLOTS:
private: private:
static QDateTime genDT(int year, int month, int day, int hour, int min, int second); static QDateTime genDT(int year, int month, int day, int hour, int min, int second);
static QByteArray strToBytes(const QString& str);
Database* m_db; Database* m_db;
}; };

Binary file not shown.