Compare commits

...

45 Commits

Author SHA1 Message Date
J-Jamet
f49485e161 Merge branch 'release/2.10.4' 2021-06-15 12:57:28 +02:00
J-Jamet
f3f268742f Hot fix to increase the opening speed of database #1028 2021-06-15 12:52:16 +02:00
J-Jamet
8b867f78fe Merge tag '2.10.3' into develop
2.10.3
2021-06-14 10:14:05 +02:00
J-Jamet
d6a43fd8e5 Merge branch 'release/2.10.3' 2021-06-14 10:13:56 +02:00
J-Jamet
9887b8142d Fix service starting #1025 2021-06-13 17:57:30 +02:00
J-Jamet
4d92d6dc2b Update CHANGELOG 2021-06-13 17:15:14 +02:00
J-Jamet
d8cd84ed9e Remove special chars 2021-06-13 17:09:43 +02:00
J-Jamet
6bc740e881 Merge branch 'djibux-master' into develop 2021-06-13 16:53:46 +02:00
J-Jamet
db348cc368 Merge branch 'translations' into develop 2021-06-13 16:51:56 +02:00
J-Jamet
6ebf59d7ff Merge branch 'develop' of https://hosted.weblate.org/git/keepass-dx/strings into translations 2021-06-13 16:51:21 +02:00
J-Jamet
d35e31d128 Fix biometric prompt #1018 2021-06-12 12:25:04 +02:00
J-Jamet
b9b6d3d2cb Fix database opened without notification (Database is now closed when screen is killed in background #1025) 2021-06-12 11:39:41 +02:00
J-Jamet
728b111ac9 Upgrade to 2.10.3 2021-06-12 10:31:18 +02:00
Reza Almanda
9e5ce589ae Translated using Weblate (Indonesian)
Currently translated at 74.8% (395 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/
2021-06-11 03:36:00 +02:00
djib
f486150a0f Fix a typo 2021-06-09 20:58:08 +02:00
djib
075ee815f0 Improve French translation mostly for Magikeyboard 2021-06-09 20:54:19 +02:00
djib
d321283b13 Improve Magikeyboard options descriptions 2021-06-09 20:42:16 +02:00
solokot
8be382fa7e Translated using Weblate (Russian)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2021-06-09 12:33:30 +02:00
VfBFan
13002f96f1 Translated using Weblate (German)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2021-06-06 17:34:13 +02:00
J-Jamet
008ded4a5c Merge tag '2.10.2' into develop
2.10.2
2021-06-02 10:37:27 +02:00
J-Jamet
d476574d05 Merge branch 'release/2.10.2' 2021-06-02 10:37:21 +02:00
Yudong
371b3813d4 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/zh_Hans/
2021-06-02 10:34:27 +02:00
J-Jamet
fe08d034bb Merge branch 'iArchitSharma-patch-1' into develop 2021-05-31 16:16:10 +02:00
J-Jamet
18f4714410 Merge branch 'develop' of https://hosted.weblate.org/git/keepass-dx/strings into translations 2021-05-31 16:14:24 +02:00
J-Jamet
1b6c416893 Fix autotype #997 2021-05-31 16:10:31 +02:00
Archit Sharma
6153a28b4b fixed and added some hindi translation 2021-05-31 20:47:20 +07:00
J-Jamet
9574cf16fb Fix custom fields iteration 2021-05-31 15:32:35 +02:00
J-Jamet
d309a67416 Capture exception when restart service 2021-05-31 14:48:59 +02:00
J-Jamet
fb865af088 Capture placeholder exception 2021-05-31 14:45:19 +02:00
Yudong
c1e7039357 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/zh_Hans/
2021-05-29 17:34:07 +02:00
C. Rüdinger
0fd3b37641 Translated using Weblate (German)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2021-05-28 12:34:14 +02:00
VfBFan
cea91f7b2f Translated using Weblate (German)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2021-05-26 10:34:21 +02:00
Yngvar Skjaldulfsson
3959896832 Translated using Weblate (Spanish)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/
2021-05-21 15:41:22 +02:00
Joan Jaume Oliver
d55dccdeb1 Translated using Weblate (Spanish)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/
2021-05-21 07:19:58 +02:00
Yngvar Skjaldulfsson
c46c286b51 Translated using Weblate (Spanish)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/
2021-05-21 07:19:57 +02:00
zer0-x
aa15d261f3 Translated using Weblate (Arabic)
Currently translated at 65.3% (345 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ar/
2021-05-17 12:32:27 +02:00
Paco Chan
00a32463c7 Translated using Weblate (Spanish)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/
2021-05-17 12:32:26 +02:00
Sebastian
dd60ff8b74 Translated using Weblate (Danish)
Currently translated at 100.0% (528 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/da/
2021-05-17 12:32:26 +02:00
Paco Chan
4588611cbf Translated using Weblate (Catalan)
Currently translated at 47.5% (251 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ca/
2021-05-17 12:32:25 +02:00
J-Jamet
1460c1364a Fix search fields references #987 2021-05-11 12:05:09 +02:00
J-Jamet
37f38fe988 Fix fields references #987 2021-05-11 11:49:25 +02:00
J-Jamet
cf025b9135 Update version and CHANGELOG 2021-05-11 11:47:20 +02:00
ssantos
283ff7a280 Translated using Weblate (Portuguese)
Currently translated at 85.9% (454 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt/
2021-05-11 11:34:49 +02:00
Reza Almanda
e668f016b4 Translated using Weblate (Indonesian)
Currently translated at 72.1% (381 of 528 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/
2021-05-11 11:34:49 +02:00
J-Jamet
256c2c955a Merge tag '2.10.1' into develop
2.10.1
2021-05-10 07:24:57 +02:00
41 changed files with 342 additions and 214 deletions

View File

@@ -1,3 +1,15 @@
KeePassDX(2.10.4)
* Hot fix to increase the opening speed of database #1028
KeePassDX(2.10.3)
* Improve Magikeyboard options description #1022 #1023 (Thx @djibux)
* Fix database opened without notification (database is now closed when screen is killed in background #1025)
* Fix biometric prompt #1018
KeePassDX(2.10.2)
* Fix search fields references #987
* Fix Auto-Types with same key #997
KeePassDX(2.10.1) KeePassDX(2.10.1)
* Fix parcelable with custom data #986 * Fix parcelable with custom data #986

View File

@@ -11,8 +11,8 @@ android {
applicationId "com.kunzisoft.keepass" applicationId "com.kunzisoft.keepass"
minSdkVersion 15 minSdkVersion 15
targetSdkVersion 30 targetSdkVersion 30
versionCode = 78 versionCode = 82
versionName = "2.10.1" versionName = "2.10.4"
multiDexEnabled true multiDexEnabled true
testApplicationId = "com.kunzisoft.keepass.tests" testApplicationId = "com.kunzisoft.keepass.tests"

View File

@@ -462,6 +462,11 @@ open class PasswordActivity : SpecialModeActivity(), AdvancedUnlockFragment.Buil
override fun onPause() { override fun onPause() {
mProgressDatabaseTaskProvider?.unregisterProgressTask() mProgressDatabaseTaskProvider?.unregisterProgressTask()
// To prevent biometric prompt to appearing outside of the app
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
advancedUnlockFragment?.disconnect(hideViews = false, closePrompt = true)
}
// Reinit locking activity UI variable // Reinit locking activity UI variable
LockingActivity.LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK = null LockingActivity.LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK = null
mAllowAutoOpenBiometricPrompt = true mAllowAutoOpenBiometricPrompt = true
@@ -708,7 +713,7 @@ open class PasswordActivity : SpecialModeActivity(), AdvancedUnlockFragment.Buil
when (resultCode) { when (resultCode) {
LockingActivity.RESULT_EXIT_LOCK -> { LockingActivity.RESULT_EXIT_LOCK -> {
clearCredentialsViews() clearCredentialsViews()
Database.getInstance().clearAndClose(UriUtil.getBinaryDir(this)) Database.getInstance().clearAndClose(this)
} }
Activity.RESULT_CANCELED -> { Activity.RESULT_CANCELED -> {
clearCredentialsViews() clearCredentialsViews()

View File

@@ -22,7 +22,6 @@ package com.kunzisoft.keepass.app
import androidx.multidex.MultiDexApplication import androidx.multidex.MultiDexApplication
import com.kunzisoft.keepass.activities.stylish.Stylish import com.kunzisoft.keepass.activities.stylish.Stylish
import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.utils.UriUtil
class App : MultiDexApplication() { class App : MultiDexApplication() {
@@ -34,7 +33,7 @@ class App : MultiDexApplication() {
} }
override fun onTerminate() { override fun onTerminate() {
Database.getInstance().clearAndClose(UriUtil.getBinaryDir(this)) Database.getInstance().clearAndClose(this)
super.onTerminate() super.onTerminate()
} }
} }

View File

@@ -26,7 +26,6 @@ import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction
import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.model.MainCredential import com.kunzisoft.keepass.model.MainCredential
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.utils.UriUtil
class CreateDatabaseRunnable(context: Context, class CreateDatabaseRunnable(context: Context,
private val mDatabase: Database, private val mDatabase: Database,
@@ -44,7 +43,7 @@ class CreateDatabaseRunnable(context: Context,
createData(mDatabaseUri, databaseName, rootName) createData(mDatabaseUri, databaseName, rootName)
} }
} catch (e: Exception) { } catch (e: Exception) {
mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) mDatabase.clearAndClose(context)
setError(e) setError(e)
} }

View File

@@ -25,8 +25,8 @@ import com.kunzisoft.keepass.app.database.CipherDatabaseAction
import com.kunzisoft.keepass.app.database.CipherDatabaseEntity import com.kunzisoft.keepass.app.database.CipherDatabaseEntity
import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction
import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.binary.LoadedKey
import com.kunzisoft.keepass.database.element.binary.BinaryData import com.kunzisoft.keepass.database.element.binary.BinaryData
import com.kunzisoft.keepass.database.element.binary.LoadedKey
import com.kunzisoft.keepass.database.exception.LoadDatabaseException import com.kunzisoft.keepass.database.exception.LoadDatabaseException
import com.kunzisoft.keepass.model.MainCredential import com.kunzisoft.keepass.model.MainCredential
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
@@ -47,7 +47,7 @@ class LoadDatabaseRunnable(private val context: Context,
override fun onStartRun() { override fun onStartRun() {
// Clear before we load // Clear before we load
mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) mDatabase.clearAndClose(context)
} }
override fun onActionRun() { override fun onActionRun() {
@@ -85,7 +85,7 @@ class LoadDatabaseRunnable(private val context: Context,
// Register the current time to init the lock timer // Register the current time to init the lock timer
PreferencesUtil.saveCurrentTime(context) PreferencesUtil.saveCurrentTime(context)
} else { } else {
mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) mDatabase.clearAndClose(context)
} }
} }

View File

@@ -23,6 +23,7 @@ import android.content.*
import android.content.Context.BIND_ABOVE_CLIENT import android.content.Context.BIND_ABOVE_CLIENT
import android.content.Context.BIND_NOT_FOREGROUND import android.content.Context.BIND_NOT_FOREGROUND
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.IBinder import android.os.IBinder
import android.util.Log import android.util.Log
@@ -255,7 +256,6 @@ class ProgressDatabaseTaskProvider(private val activity: FragmentActivity) {
private fun start(bundle: Bundle? = null, actionTask: String) { private fun start(bundle: Bundle? = null, actionTask: String) {
try { try {
activity.stopService(intentDatabaseTask)
if (bundle != null) if (bundle != null)
intentDatabaseTask.putExtras(bundle) intentDatabaseTask.putExtras(bundle)
intentDatabaseTask.action = actionTask intentDatabaseTask.action = actionTask
@@ -286,6 +286,11 @@ class ProgressDatabaseTaskProvider(private val activity: FragmentActivity) {
readOnly: Boolean, readOnly: Boolean,
cipherEntity: CipherDatabaseEntity?, cipherEntity: CipherDatabaseEntity?,
fixDuplicateUuid: Boolean) { fixDuplicateUuid: Boolean) {
try {
activity.stopService(intentDatabaseTask)
} catch (e: Exception) {
Log.e(TAG, "Unable to stop the service", e)
}
start(Bundle().apply { start(Bundle().apply {
putParcelable(DatabaseTaskNotificationService.DATABASE_URI_KEY, databaseUri) putParcelable(DatabaseTaskNotificationService.DATABASE_URI_KEY, databaseUri)
putParcelable(DatabaseTaskNotificationService.MAIN_CREDENTIAL_KEY, mainCredential) putParcelable(DatabaseTaskNotificationService.MAIN_CREDENTIAL_KEY, mainCredential)

View File

@@ -21,8 +21,8 @@ package com.kunzisoft.keepass.database.action
import android.content.Context import android.content.Context
import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.binary.LoadedKey
import com.kunzisoft.keepass.database.element.binary.BinaryData import com.kunzisoft.keepass.database.element.binary.BinaryData
import com.kunzisoft.keepass.database.element.binary.LoadedKey
import com.kunzisoft.keepass.database.exception.LoadDatabaseException import com.kunzisoft.keepass.database.exception.LoadDatabaseException
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.tasks.ActionRunnable
@@ -62,7 +62,7 @@ class ReloadDatabaseRunnable(private val context: Context,
PreferencesUtil.saveCurrentTime(context) PreferencesUtil.saveCurrentTime(context)
} else { } else {
tempCipherKey = null tempCipherKey = null
mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) mDatabase.clearAndClose(context)
} }
} }

View File

@@ -45,8 +45,8 @@ class EntryCursorKDBX : EntryCursorUUID<EntryKDBX>() {
entry.expires entry.expires
)) ))
for (element in entry.customFields.entries) { entry.doForEachDecodedCustomField { key, value ->
extraFieldCursor.addExtraField(entryId, element.key, element.value) extraFieldCursor.addExtraField(entryId, key, value)
} }
entryId++ entryId++

View File

@@ -42,7 +42,7 @@ class ExtraFieldCursor : MatrixCursor(arrayOf(
} }
fun populateExtraFieldInEntry(pwEntry: EntryKDBX) { fun populateExtraFieldInEntry(pwEntry: EntryKDBX) {
pwEntry.putExtraField(getString(getColumnIndex(COLUMN_LABEL)), pwEntry.putField(getString(getColumnIndex(COLUMN_LABEL)),
ProtectedString(getInt(getColumnIndex(COLUMN_PROTECTION)) > 0, ProtectedString(getInt(getColumnIndex(COLUMN_PROTECTION)) > 0,
getString(getColumnIndex(COLUMN_VALUE)))) getString(getColumnIndex(COLUMN_VALUE))))
} }

View File

@@ -20,6 +20,7 @@
package com.kunzisoft.keepass.database.element package com.kunzisoft.keepass.database.element
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context
import android.content.res.Resources import android.content.res.Resources
import android.net.Uri import android.net.Uri
import android.util.Log import android.util.Log
@@ -668,8 +669,8 @@ class Database {
} }
} }
fun clearAndClose(filesDirectory: File? = null) { fun clearAndClose(context: Context? = null) {
clear(filesDirectory) clear(context?.let { UriUtil.getBinaryDir(context) })
this.mDatabaseKDB = null this.mDatabaseKDB = null
this.mDatabaseKDBX = null this.mDatabaseKDBX = null
this.fileUri = null this.fileUri = null

View File

@@ -283,8 +283,8 @@ class Entry : Node, EntryVersionedInterface<Group> {
fun getExtraFields(): List<Field> { fun getExtraFields(): List<Field> {
val extraFields = ArrayList<Field>() val extraFields = ArrayList<Field>()
entryKDBX?.let { entryKDBX?.let {
for (field in it.customFields) { it.doForEachDecodedCustomField { key, value ->
extraFields.add(Field(field.key, field.value)) extraFields.add(Field(key, value))
} }
} }
return extraFields return extraFields
@@ -294,7 +294,7 @@ class Entry : Node, EntryVersionedInterface<Group> {
* Update or add an extra field to the list (standard or custom) * Update or add an extra field to the list (standard or custom)
*/ */
fun putExtraField(field: Field) { fun putExtraField(field: Field) {
entryKDBX?.putExtraField(field.name, field.protectedValue) entryKDBX?.putField(field.name, field.protectedValue)
} }
private fun addExtraFields(fields: List<Field>) { private fun addExtraFields(fields: List<Field>) {
@@ -310,7 +310,7 @@ class Entry : Node, EntryVersionedInterface<Group> {
fun getOtpElement(): OtpElement? { fun getOtpElement(): OtpElement? {
entryKDBX?.let { entryKDBX?.let {
return OtpEntryFields.parseFields { key -> return OtpEntryFields.parseFields { key ->
it.customFields[key]?.toString() it.getField(key)?.toString()
} }
} }
return null return null

View File

@@ -332,9 +332,40 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
return this.iconsManager.getIcon(iconUuid) return this.iconsManager.getIcon(iconUuid)
} }
/** /*
* To perform a search in entry custom data * Search methods
*/ */
fun getEntryByTitle(title: String, recursionLevel: Int): EntryKDBX? {
return this.entryIndexes.values.find { entry ->
entry.decodeTitleKey(recursionLevel).equals(title, true)
}
}
fun getEntryByUsername(username: String, recursionLevel: Int): EntryKDBX? {
return this.entryIndexes.values.find { entry ->
entry.decodeUsernameKey(recursionLevel).equals(username, true)
}
}
fun getEntryByURL(url: String, recursionLevel: Int): EntryKDBX? {
return this.entryIndexes.values.find { entry ->
entry.decodeUrlKey(recursionLevel).equals(url, true)
}
}
fun getEntryByPassword(password: String, recursionLevel: Int): EntryKDBX? {
return this.entryIndexes.values.find { entry ->
entry.decodePasswordKey(recursionLevel).equals(password, true)
}
}
fun getEntryByNotes(notes: String, recursionLevel: Int): EntryKDBX? {
return this.entryIndexes.values.find { entry ->
entry.decodeNotesKey(recursionLevel).equals(notes, true)
}
}
fun getEntryByCustomData(customDataValue: String): EntryKDBX? { fun getEntryByCustomData(customDataValue: String): EntryKDBX? {
return entryIndexes.values.find { entry -> return entryIndexes.values.find { entry ->
entry.customData.containsItemWithValue(customDataValue) entry.customData.containsItemWithValue(customDataValue)

View File

@@ -271,26 +271,6 @@ abstract class DatabaseVersioned<
return this.entryIndexes[id] return this.entryIndexes[id]
} }
fun getEntryByTitle(title: String): Entry? {
return this.entryIndexes.values.find { entry -> entry.title.equals(title, true) }
}
fun getEntryByUsername(username: String): Entry? {
return this.entryIndexes.values.find { entry -> entry.username.equals(username, true) }
}
fun getEntryByURL(url: String): Entry? {
return this.entryIndexes.values.find { entry -> entry.url.equals(url, true) }
}
fun getEntryByPassword(password: String): Entry? {
return this.entryIndexes.values.find { entry -> entry.password.equals(password, true) }
}
fun getEntryByNotes(notes: String): Entry? {
return this.entryIndexes.values.find { entry -> entry.notes.equals(notes, true) }
}
fun addEntryIndex(entry: Entry) { fun addEntryIndex(entry: Entry) {
val entryId = entry.nodeId val entryId = entry.nodeId
if (entryIndexes.containsKey(entryId)) { if (entryIndexes.containsKey(entryId)) {

View File

@@ -21,8 +21,6 @@ package com.kunzisoft.keepass.database.element.entry
import android.os.Parcel import android.os.Parcel
import android.os.Parcelable import android.os.Parcelable
import com.kunzisoft.keepass.utils.ParcelableUtil
import com.kunzisoft.keepass.utils.UnsignedInt import com.kunzisoft.keepass.utils.UnsignedInt
class AutoType : Parcelable { class AutoType : Parcelable {
@@ -30,7 +28,7 @@ class AutoType : Parcelable {
var enabled = true var enabled = true
var obfuscationOptions = OBF_OPT_NONE var obfuscationOptions = OBF_OPT_NONE
var defaultSequence = "" var defaultSequence = ""
private var windowSeqPairs = LinkedHashMap<String, String>() private var windowSeqPairs = ArrayList<AutoTypeItem>()
constructor() constructor()
@@ -38,16 +36,15 @@ class AutoType : Parcelable {
this.enabled = autoType.enabled this.enabled = autoType.enabled
this.obfuscationOptions = autoType.obfuscationOptions this.obfuscationOptions = autoType.obfuscationOptions
this.defaultSequence = autoType.defaultSequence this.defaultSequence = autoType.defaultSequence
for ((key, value) in autoType.windowSeqPairs) { this.windowSeqPairs.clear()
this.windowSeqPairs[key] = value this.windowSeqPairs.addAll(autoType.windowSeqPairs)
}
} }
constructor(parcel: Parcel) { constructor(parcel: Parcel) {
this.enabled = parcel.readByte().toInt() != 0 this.enabled = parcel.readByte().toInt() != 0
this.obfuscationOptions = UnsignedInt(parcel.readInt()) this.obfuscationOptions = UnsignedInt(parcel.readInt())
this.defaultSequence = parcel.readString() ?: defaultSequence this.defaultSequence = parcel.readString() ?: defaultSequence
this.windowSeqPairs = ParcelableUtil.readStringParcelableMap(parcel) parcel.readTypedList(this.windowSeqPairs, AutoTypeItem.CREATOR)
} }
override fun describeContents(): Int { override fun describeContents(): Int {
@@ -58,15 +55,43 @@ class AutoType : Parcelable {
dest.writeByte((if (enabled) 1 else 0).toByte()) dest.writeByte((if (enabled) 1 else 0).toByte())
dest.writeInt(obfuscationOptions.toKotlinInt()) dest.writeInt(obfuscationOptions.toKotlinInt())
dest.writeString(defaultSequence) dest.writeString(defaultSequence)
ParcelableUtil.writeStringParcelableMap(dest, windowSeqPairs) dest.writeTypedList(windowSeqPairs)
} }
fun put(key: String, value: String) { fun add(key: String, value: String) {
windowSeqPairs[key] = value windowSeqPairs.add(AutoTypeItem(key, value))
} }
fun entrySet(): Set<MutableMap.MutableEntry<String, String>> { fun doForEachAutoTypeItem(action: (key: String, value: String) -> Unit) {
return windowSeqPairs.entries windowSeqPairs.forEach {
action.invoke(it.key, it.value)
}
}
private data class AutoTypeItem(var key: String, var value: String): Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString() ?: "",
parcel.readString() ?: "") {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(key)
parcel.writeString(value)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<AutoTypeItem> {
override fun createFromParcel(parcel: Parcel): AutoTypeItem {
return AutoTypeItem(parcel)
}
override fun newArray(size: Int): Array<AutoTypeItem?> {
return arrayOfNulls(size)
}
}
} }
companion object { companion object {

View File

@@ -238,7 +238,7 @@ class EntryKDBX : EntryVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
size += getAttachmentsSize(attachmentPool) size += getAttachmentsSize(attachmentPool)
size += autoType.defaultSequence.length.toLong() size += autoType.defaultSequence.length.toLong()
for ((key, value) in autoType.entrySet()) { autoType.doForEachAutoTypeItem { key, value ->
size += key.length.toLong() size += key.length.toLong()
size += value.length.toLong() size += value.length.toLong()
} }
@@ -265,25 +265,32 @@ class EntryKDBX : EntryVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
|| key == STR_NOTES) || key == STR_NOTES)
} }
var customFields = LinkedHashMap<String, ProtectedString>() fun doForEachDecodedCustomField(action: (key: String, value: ProtectedString) -> Unit) {
get() { val iterator = fields.entries.iterator()
field.clear() while (iterator.hasNext()) {
for ((key, value) in fields) { val mapEntry = iterator.next()
if (!isStandardField(key)) { if (!isStandardField(mapEntry.key)) {
field[key] = ProtectedString(value.isProtected, decodeRefKey(mDecodeRef, key, 0)) action.invoke(mapEntry.key,
} ProtectedString(mapEntry.value.isProtected,
decodeRefKey(mDecodeRef, mapEntry.key, 0)
)
)
} }
return field
} }
}
fun getField(key: String): ProtectedString? {
return fields[key]
}
fun putField(label: String, value: ProtectedString) {
fields[label] = value
}
fun removeAllFields() { fun removeAllFields() {
fields.clear() fields.clear()
} }
fun putExtraField(label: String, value: ProtectedString) {
fields[label] = value
}
/** /**
* It's a list because history labels can be defined multiple times * It's a list because history labels can be defined multiple times
*/ */

View File

@@ -19,16 +19,17 @@
*/ */
package com.kunzisoft.keepass.database.element.entry package com.kunzisoft.keepass.database.element.entry
import android.util.Log
import com.kunzisoft.keepass.database.element.database.DatabaseKDBX import com.kunzisoft.keepass.database.element.database.DatabaseKDBX
import com.kunzisoft.keepass.database.element.node.NodeIdUUID import com.kunzisoft.keepass.database.element.node.NodeIdUUID
import com.kunzisoft.keepass.utils.UuidUtil import com.kunzisoft.keepass.utils.UuidUtil
import java.util.* import java.util.concurrent.ConcurrentHashMap
class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) { class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
// Key : <WantedField>@<SearchIn>:<Text> // Key : <WantedField>@<SearchIn>:<Text>
// Value : content // Value : content
private var refsCache: MutableMap<String, String?> = HashMap() private var refsCache = ConcurrentHashMap<String, String?>()
fun clear() { fun clear() {
refsCache.clear() refsCache.clear()
@@ -53,52 +54,56 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
&& numberInlineRef <= MAX_INLINE_REF) { && numberInlineRef <= MAX_INLINE_REF) {
numberInlineRef++ numberInlineRef++
textValue = fillReferencesUsingCache(textValue) try {
val start = textValue.indexOf(STR_REF_START, offset, true)
if (start < 0) {
break
}
val end = textValue.indexOf(STR_REF_END, offset, true)
if (end <= start) {
break
}
val reference = textValue.substring(start + STR_REF_START.length, end)
val fullReference = "$STR_REF_START$reference$STR_REF_END"
if (!refsCache.containsKey(fullReference)) {
val result = findReferenceTarget(reference)
val entryFound = result.entry
val newRecursionLevel = recursionLevel + 1
val data: String? = when (result.wanted) {
'T' -> entryFound?.decodeTitleKey(newRecursionLevel)
'U' -> entryFound?.decodeUsernameKey(newRecursionLevel)
'A' -> entryFound?.decodeUrlKey(newRecursionLevel)
'P' -> entryFound?.decodePasswordKey(newRecursionLevel)
'N' -> entryFound?.decodeNotesKey(newRecursionLevel)
'I' -> UuidUtil.toHexString(entryFound?.nodeId?.id)
else -> null
}
refsCache[fullReference] = data
textValue = fillReferencesUsingCache(textValue) textValue = fillReferencesUsingCache(textValue)
}
offset = end val start = textValue.indexOf(STR_REF_START, offset, true)
if (start < 0) {
break
}
val end = textValue.indexOf(STR_REF_END, offset, true)
if (end <= start) {
break
}
val reference = textValue.substring(start + STR_REF_START.length, end)
val fullReference = "$STR_REF_START$reference$STR_REF_END"
if (!refsCache.containsKey(fullReference)) {
val newRecursionLevel = recursionLevel + 1
val result = findReferenceTarget(reference, newRecursionLevel)
val entryFound = result.entry
val data: String? = when (result.wanted) {
'T' -> entryFound?.decodeTitleKey(newRecursionLevel)
'U' -> entryFound?.decodeUsernameKey(newRecursionLevel)
'A' -> entryFound?.decodeUrlKey(newRecursionLevel)
'P' -> entryFound?.decodePasswordKey(newRecursionLevel)
'N' -> entryFound?.decodeNotesKey(newRecursionLevel)
'I' -> UuidUtil.toHexString(entryFound?.nodeId?.id)
else -> null
}
refsCache[fullReference] = data
textValue = fillReferencesUsingCache(textValue)
}
offset = end
} catch (e: Exception) {
Log.e(TAG, "Error when fill placeholders by reference", e)
}
} }
return textValue return textValue
} }
private fun fillReferencesUsingCache(text: String): String { private fun fillReferencesUsingCache(text: String): String {
var newText = text var newText = text
for ((key, value) in refsCache) { refsCache.keys.forEach { key ->
// Replace by key if value not found // Replace by key if value not found
newText = newText.replace(key, value ?: key, true) newText = newText.replace(key, refsCache[key] ?: key, true)
} }
return newText return newText
} }
private fun findReferenceTarget(reference: String): TargetResult { private fun findReferenceTarget(reference: String, recursionLevel: Int): TargetResult {
val targetResult = TargetResult(null, 'J') val targetResult = TargetResult(null, 'J')
@@ -116,11 +121,11 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
val searchIn = Character.toUpperCase(reference[2]) val searchIn = Character.toUpperCase(reference[2])
val searchQuery = reference.substring(4) val searchQuery = reference.substring(4)
targetResult.entry = when (searchIn) { targetResult.entry = when (searchIn) {
'T' -> mDatabase.getEntryByTitle(searchQuery) 'T' -> mDatabase.getEntryByTitle(searchQuery, recursionLevel)
'U' -> mDatabase.getEntryByUsername(searchQuery) 'U' -> mDatabase.getEntryByUsername(searchQuery, recursionLevel)
'A' -> mDatabase.getEntryByURL(searchQuery) 'A' -> mDatabase.getEntryByURL(searchQuery, recursionLevel)
'P' -> mDatabase.getEntryByPassword(searchQuery) 'P' -> mDatabase.getEntryByPassword(searchQuery, recursionLevel)
'N' -> mDatabase.getEntryByNotes(searchQuery) 'N' -> mDatabase.getEntryByNotes(searchQuery, recursionLevel)
'I' -> { 'I' -> {
UuidUtil.fromHexString(searchQuery)?.let { uuid -> UuidUtil.fromHexString(searchQuery)?.let { uuid ->
mDatabase.getEntryById(NodeIdUUID(uuid)) mDatabase.getEntryById(NodeIdUUID(uuid))
@@ -139,5 +144,7 @@ class FieldReferencesEngine(private val mDatabase: DatabaseKDBX) {
private const val MAX_INLINE_REF = 10 private const val MAX_INLINE_REF = 10
private const val STR_REF_START = "{REF:" private const val STR_REF_START = "{REF:"
private const val STR_REF_END = "}" private const val STR_REF_END = "}"
private val TAG = FieldReferencesEngine::class.java.name
} }
} }

View File

@@ -807,7 +807,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
return KdbContext.Entry return KdbContext.Entry
} else if (ctx == KdbContext.EntryString && name.equals(DatabaseKDBXXML.ElemString, ignoreCase = true)) { } else if (ctx == KdbContext.EntryString && name.equals(DatabaseKDBXXML.ElemString, ignoreCase = true)) {
if (ctxStringName != null && ctxStringValue != null) if (ctxStringName != null && ctxStringValue != null)
ctxEntry?.putExtraField(ctxStringName!!, ctxStringValue!!) ctxEntry?.putField(ctxStringName!!, ctxStringValue!!)
ctxStringName = null ctxStringName = null
ctxStringValue = null ctxStringValue = null
@@ -824,7 +824,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
return KdbContext.Entry return KdbContext.Entry
} else if (ctx == KdbContext.EntryAutoTypeItem && name.equals(DatabaseKDBXXML.ElemAutoTypeItem, ignoreCase = true)) { } else if (ctx == KdbContext.EntryAutoTypeItem && name.equals(DatabaseKDBXXML.ElemAutoTypeItem, ignoreCase = true)) {
if (ctxATName != null && ctxATSeq != null) if (ctxATName != null && ctxATSeq != null)
ctxEntry?.autoType?.put(ctxATName!!, ctxATSeq!!) ctxEntry?.autoType?.add(ctxATName!!, ctxATSeq!!)
ctxATName = null ctxATName = null
ctxATSeq = null ctxATSeq = null

View File

@@ -530,7 +530,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
writeString(DatabaseKDBXXML.ElemAutoTypeDefaultSeq, autoType.defaultSequence, true) writeString(DatabaseKDBXXML.ElemAutoTypeDefaultSeq, autoType.defaultSequence, true)
} }
for ((key, value) in autoType.entrySet()) { autoType.doForEachAutoTypeItem { key, value ->
xml.startTag(null, DatabaseKDBXXML.ElemAutoTypeItem) xml.startTag(null, DatabaseKDBXXML.ElemAutoTypeItem)
xml.startTag(null, DatabaseKDBXXML.ElemWindow) xml.startTag(null, DatabaseKDBXXML.ElemWindow)

View File

@@ -19,7 +19,9 @@
*/ */
package com.kunzisoft.keepass.services package com.kunzisoft.keepass.services
import android.app.ActivityManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.* import android.os.*
@@ -44,10 +46,7 @@ import com.kunzisoft.keepass.model.SnapFileDatabaseInfo
import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
import com.kunzisoft.keepass.timeout.TimeoutHelper import com.kunzisoft.keepass.timeout.TimeoutHelper
import com.kunzisoft.keepass.utils.DATABASE_START_TASK_ACTION import com.kunzisoft.keepass.utils.*
import com.kunzisoft.keepass.utils.DATABASE_STOP_TASK_ACTION
import com.kunzisoft.keepass.utils.LOCK_ACTION
import com.kunzisoft.keepass.utils.closeDatabase
import com.kunzisoft.keepass.viewmodels.FileDatabaseInfo import com.kunzisoft.keepass.viewmodels.FileDatabaseInfo
import kotlinx.coroutines.* import kotlinx.coroutines.*
import java.util.* import java.util.*
@@ -280,8 +279,10 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
stopSelf() stopSelf()
} else { } else {
// Restart the service to open lock notification // Restart the service to open lock notification
startService(Intent(applicationContext, try {
DatabaseTaskNotificationService::class.java)) startService(Intent(applicationContext,
DatabaseTaskNotificationService::class.java))
} catch (e: IllegalStateException) {}
} }
} }
} }
@@ -838,6 +839,12 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
} }
} }
override fun onDestroy() {
super.onDestroy()
if (mDatabase.loaded)
actionOnLock()
}
companion object { companion object {
private val TAG = DatabaseTaskNotificationService::class.java.name private val TAG = DatabaseTaskNotificationService::class.java.name

View File

@@ -138,5 +138,5 @@ fun Context.closeDatabase() {
cancelAll() cancelAll()
} }
// Clear data // Clear data
Database.getInstance().clearAndClose(UriUtil.getBinaryDir(this)) Database.getInstance().clearAndClose(this)
} }

View File

@@ -17,7 +17,7 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>. along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
--><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> --><resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="homepage">الصفحة الرئيسية</string> <string name="homepage">الصفحة الرئيسة</string>
<string name="accept">قبول</string> <string name="accept">قبول</string>
<string name="add_group">إضافة مجموعة</string> <string name="add_group">إضافة مجموعة</string>
<string name="encryption">التعمية</string> <string name="encryption">التعمية</string>
@@ -106,8 +106,8 @@
<string name="education_entry_new_field_title">إضافة حقول مخصصة</string> <string name="education_entry_new_field_title">إضافة حقول مخصصة</string>
<string name="education_field_copy_title">نسخ حقل</string> <string name="education_field_copy_title">نسخ حقل</string>
<string name="education_lock_title">تأمين قاعدة البيانات</string> <string name="education_lock_title">تأمين قاعدة البيانات</string>
<string name="feedback">الأصداء</string> <string name="feedback">التغذية الراجعة</string>
<string name="about_description">تنفيذ أندرويد لمدير كلمات السر «كي‌باس»</string> <string name="about_description">التنفيذ لمُدير كلمات المرور «كي‌ باس» على نظام أندرويد</string>
<string name="add_entry">إضافة مدخلة</string> <string name="add_entry">إضافة مدخلة</string>
<string name="edit_entry">تحرير مدخلة</string> <string name="edit_entry">تحرير مدخلة</string>
<string name="key_derivation_function">وظيفة اشتقاق المفتاح</string> <string name="key_derivation_function">وظيفة اشتقاق المفتاح</string>

View File

@@ -25,7 +25,7 @@
<string name="add_entry">Afegeix entrada</string> <string name="add_entry">Afegeix entrada</string>
<string name="add_group">Afegeix grup</string> <string name="add_group">Afegeix grup</string>
<string name="encryption_algorithm">Algoritme de xifrat</string> <string name="encryption_algorithm">Algoritme de xifrat</string>
<string name="app_timeout">Temps d\'espera de l\'aplicació</string> <string name="app_timeout">Temps d\'espera esgotat</string>
<string name="app_timeout_summary">Temps d\'inactivitat abans de blocar la base de dades</string> <string name="app_timeout_summary">Temps d\'inactivitat abans de blocar la base de dades</string>
<string name="application">Aplicació</string> <string name="application">Aplicació</string>
<string name="menu_app_settings">Configuració de l\'aplicació</string> <string name="menu_app_settings">Configuració de l\'aplicació</string>
@@ -289,4 +289,6 @@
<string name="error_otp_type">L\'OTP existent no està reconegut per aquest formulari, la seva validació ja no pot generar correctament el token.</string> <string name="error_otp_type">L\'OTP existent no està reconegut per aquest formulari, la seva validació ja no pot generar correctament el token.</string>
<string name="error_create_database_file">No s\'ha pogut crear una base de dades amb aquesta contrasenya i arxiu de clau.</string> <string name="error_create_database_file">No s\'ha pogut crear una base de dades amb aquesta contrasenya i arxiu de clau.</string>
<string name="error_autofill_enable_service">No s\'ha pogut habilitar el servei d\'autocompletat.</string> <string name="error_autofill_enable_service">No s\'ha pogut habilitar el servei d\'autocompletat.</string>
<string name="content_description_node_children">Nodes fill</string>
<string name="key_derivation_function">Funció de derivació de clau</string>
</resources> </resources>

View File

@@ -223,7 +223,7 @@
<string name="application_appearance">Brugerflade</string> <string name="application_appearance">Brugerflade</string>
<string name="other">Øvrige</string> <string name="other">Øvrige</string>
<string name="keyboard">Tastatur</string> <string name="keyboard">Tastatur</string>
<string name="magic_keyboard_title">Magikeyboard</string> <string name="magic_keyboard_title">Magi keyboard</string>
<string name="magic_keyboard_explanation_summary">Aktiver et brugerdefineret tastatur, der udfylder adgangskoder og alle identitetsfelter</string> <string name="magic_keyboard_explanation_summary">Aktiver et brugerdefineret tastatur, der udfylder adgangskoder og alle identitetsfelter</string>
<string name="allow_no_password_title">Tillad ingen hovednøgle</string> <string name="allow_no_password_title">Tillad ingen hovednøgle</string>
<string name="allow_no_password_summary">Tillader at trykke på knappen \"Åbn\", hvis der ikke er valgt nogen legitimationsoplysninger</string> <string name="allow_no_password_summary">Tillader at trykke på knappen \"Åbn\", hvis der ikke er valgt nogen legitimationsoplysninger</string>
@@ -283,8 +283,8 @@
<string name="style_choose_summary">Tema, der bruges i programmet</string> <string name="style_choose_summary">Tema, der bruges i programmet</string>
<string name="icon_pack_choose_title">Ikonpakke</string> <string name="icon_pack_choose_title">Ikonpakke</string>
<string name="icon_pack_choose_summary">Ikonpakke, der anvendes</string> <string name="icon_pack_choose_summary">Ikonpakke, der anvendes</string>
<string name="keyboard_name">Magikeyboard</string> <string name="keyboard_name">Magi keyboard</string>
<string name="keyboard_label">Magikeyboard (KeePassDX)</string> <string name="keyboard_label">Magi keyboard (KeePassDX)</string>
<string name="keyboard_setting_label">Magikeyboard indstillinger</string> <string name="keyboard_setting_label">Magikeyboard indstillinger</string>
<string name="keyboard_entry_category">Post</string> <string name="keyboard_entry_category">Post</string>
<string name="keyboard_entry_timeout_title">Udløbstid</string> <string name="keyboard_entry_timeout_title">Udløbstid</string>
@@ -300,7 +300,7 @@
<string name="keyboard_keys_category">Taster</string> <string name="keyboard_keys_category">Taster</string>
<string name="keyboard_key_vibrate_title">Vibrerende tastetryk</string> <string name="keyboard_key_vibrate_title">Vibrerende tastetryk</string>
<string name="keyboard_key_sound_title">Hørbare tastetryk</string> <string name="keyboard_key_sound_title">Hørbare tastetryk</string>
<string name="build_label">Build %1$s</string> <string name="build_label">Byg %1$s</string>
<string name="keyboard_entry_timeout_summary">Tidsudløb for at rydde indtastning</string> <string name="keyboard_entry_timeout_summary">Tidsudløb for at rydde indtastning</string>
<string name="entry_notes">Noter</string> <string name="entry_notes">Noter</string>
<string name="selection_mode">Valgstilstand</string> <string name="selection_mode">Valgstilstand</string>
@@ -426,7 +426,7 @@
<string name="hide_broken_locations_title">Skjule brudte databaselinks</string> <string name="hide_broken_locations_title">Skjule brudte databaselinks</string>
<string name="hide_broken_locations_summary">Skjul brudte links på listen over seneste databaser</string> <string name="hide_broken_locations_summary">Skjul brudte links på listen over seneste databaser</string>
<string name="warning_database_read_only">Giv fil skriveadgang for at gemme databasændringer</string> <string name="warning_database_read_only">Giv fil skriveadgang for at gemme databasændringer</string>
<string name="education_setup_OTP_summary">Opsætning af engangs-adgangskode-styring (HOTP / TOTP) for at generere et token anmodet af tofaktor-autentisering (2FA).</string> <string name="education_setup_OTP_summary">Sæt op engangs-adgangskode-styring (HOTP / TOTP) for at generere et token anmodet af tofaktor-autentisering (2FA).</string>
<string name="education_setup_OTP_title">Opsætning af OTP</string> <string name="education_setup_OTP_title">Opsætning af OTP</string>
<string name="error_create_database">Databasefilen kunne ikke oprettes.</string> <string name="error_create_database">Databasefilen kunne ikke oprettes.</string>
<string name="entry_add_attachment">Tilføj vedhæng</string> <string name="entry_add_attachment">Tilføj vedhæng</string>
@@ -537,7 +537,7 @@
<string name="error_start_database_action">Der opstod en fejl under udførelsen af en handling på databasen.</string> <string name="error_start_database_action">Der opstod en fejl under udførelsen af en handling på databasen.</string>
<string name="error_remove_file">Der opstod en fejl med at fjerne fildata.</string> <string name="error_remove_file">Der opstod en fejl med at fjerne fildata.</string>
<string name="error_otp_type">Den existerende OTP type kunne ikke genkendes, den kan være tiden er udløbet for at lave dette token.</string> <string name="error_otp_type">Den existerende OTP type kunne ikke genkendes, den kan være tiden er udløbet for at lave dette token.</string>
<string name="education_advanced_unlock_summary">Sammenkæd din adgangskode, med din scannede biometriske oplysninger eller enheds legitimationsoplysninger for, hurtigt at låse din database op.</string> <string name="education_advanced_unlock_summary">Sammenkæd din adgangskode, med din scannede biometriske oplysninger eller enheds legitimationsoplysninger for hurtigt oplåsning af din database.</string>
<string name="enter">Enter</string> <string name="enter">Enter</string>
<string name="temp_advanced_unlock_timeout_summary">Varigheden af avanceret oplåsning, før indholdet slettes</string> <string name="temp_advanced_unlock_timeout_summary">Varigheden af avanceret oplåsning, før indholdet slettes</string>
<string name="device_credential_unlock_enable_summary">Giver dig mulighed for at bruge dine enhedsoplysninger for at åbne databasen</string> <string name="device_credential_unlock_enable_summary">Giver dig mulighed for at bruge dine enhedsoplysninger for at åbne databasen</string>
@@ -561,4 +561,6 @@
<string name="export_app_properties_title">Eksporter app-egenskaber</string> <string name="export_app_properties_title">Eksporter app-egenskaber</string>
<string name="import_app_properties_summary">Vælg en fil for at importere app-egenskaber</string> <string name="import_app_properties_summary">Vælg en fil for at importere app-egenskaber</string>
<string name="import_app_properties_title">Importer appegenskaber</string> <string name="import_app_properties_title">Importer appegenskaber</string>
<string name="error_move_group_here">Du kan flytte en gruppe her.</string>
<string name="error_word_reserved">Dette ord er reseveret og kan ikke bruges.</string>
</resources> </resources>

View File

@@ -71,7 +71,7 @@
<string name="error_invalid_db">Datenbank nicht lesbar.</string> <string name="error_invalid_db">Datenbank nicht lesbar.</string>
<string name="error_invalid_path">Sicherstellen, dass der Pfad korrekt ist.</string> <string name="error_invalid_path">Sicherstellen, dass der Pfad korrekt ist.</string>
<string name="error_no_name">Namen eingeben.</string> <string name="error_no_name">Namen eingeben.</string>
<string name="error_nokeyfile">Schlüsseldatei wählen.</string> <string name="error_nokeyfile">Schlüsseldatei auswählen.</string>
<string name="error_out_of_memory">Zu wenig Speicherplatz, um die ganze Datenbank zu laden.</string> <string name="error_out_of_memory">Zu wenig Speicherplatz, um die ganze Datenbank zu laden.</string>
<string name="error_pass_gen_type">Mindestens eine Art der Passwortgenerierung muss ausgewählt sein.</string> <string name="error_pass_gen_type">Mindestens eine Art der Passwortgenerierung muss ausgewählt sein.</string>
<string name="error_pass_match">Die Passwörter stimmen nicht überein.</string> <string name="error_pass_match">Die Passwörter stimmen nicht überein.</string>
@@ -283,7 +283,7 @@
<string name="enable_read_only_title">Schreibgeschützt</string> <string name="enable_read_only_title">Schreibgeschützt</string>
<string name="education_read_only_title">Schreibschutz der Datenbank aktivieren</string> <string name="education_read_only_title">Schreibschutz der Datenbank aktivieren</string>
<string name="enable_read_only_summary">Datenbank standardmäßig schreibgeschützt öffnen</string> <string name="enable_read_only_summary">Datenbank standardmäßig schreibgeschützt öffnen</string>
<string name="education_read_only_summary">Den Öffnungsmodus für die Sitzung ändern. <string name="education_read_only_summary">Den Modus bei Eröffnung der Sitzung ändern.
\n \n
\n„Schreibgeschützt“ verhindert unbeabsichtigte Änderungen an der Datenbank. \n„Schreibgeschützt“ verhindert unbeabsichtigte Änderungen an der Datenbank.
\nMit „Änderbar“ können Sie alle Elemente nach Belieben hinzufügen, löschen oder ändern.</string> \nMit „Änderbar“ können Sie alle Elemente nach Belieben hinzufügen, löschen oder ändern.</string>
@@ -454,7 +454,7 @@
<string name="keyboard_search_share_title">Gemeinsame Infos durchsuchen</string> <string name="keyboard_search_share_title">Gemeinsame Infos durchsuchen</string>
<string name="autofill_block_restart">Starten Sie die Anwendung, die das Formular enthält, neu, um die Sperrung zu aktivieren.</string> <string name="autofill_block_restart">Starten Sie die Anwendung, die das Formular enthält, neu, um die Sperrung zu aktivieren.</string>
<string name="autofill_block">Automatisches Ausfüllen sperren</string> <string name="autofill_block">Automatisches Ausfüllen sperren</string>
<string name="autofill_web_domain_blocklist_summary">Liste der Domains, auf denen ein automatisches Ausfüllen unterlassen wird</string> <string name="autofill_web_domain_blocklist_summary">Liste der Domains, auf denen ein automatisches Ausfüllen verhindert wird</string>
<string name="autofill_web_domain_blocklist_title">Liste gesperrter Web-Domains</string> <string name="autofill_web_domain_blocklist_title">Liste gesperrter Web-Domains</string>
<string name="autofill_application_id_blocklist_summary">Liste der Apps, in denen ein automatisches Ausfüllen verhindert wird</string> <string name="autofill_application_id_blocklist_summary">Liste der Apps, in denen ein automatisches Ausfüllen verhindert wird</string>
<string name="autofill_application_id_blocklist_title">Liste gesperrter Anwendungen</string> <string name="autofill_application_id_blocklist_title">Liste gesperrter Anwendungen</string>

View File

@@ -26,7 +26,7 @@
<string name="add_entry">Añadir entrada</string> <string name="add_entry">Añadir entrada</string>
<string name="add_group">Añadir grupo</string> <string name="add_group">Añadir grupo</string>
<string name="encryption_algorithm">Algoritmo de cifrado</string> <string name="encryption_algorithm">Algoritmo de cifrado</string>
<string name="app_timeout">Tiempo de espera de la aplicación excedido</string> <string name="app_timeout">Tiempo de espera excedido</string>
<string name="app_timeout_summary">Inactividad antes del bloqueo de aplicación</string> <string name="app_timeout_summary">Inactividad antes del bloqueo de aplicación</string>
<string name="application">Aplicación</string> <string name="application">Aplicación</string>
<string name="menu_app_settings">Configuración de la aplicación</string> <string name="menu_app_settings">Configuración de la aplicación</string>
@@ -436,7 +436,7 @@
<string name="database_opened">Base de datos abierta</string> <string name="database_opened">Base de datos abierta</string>
<string name="education_add_attachment_title">Adjuntar</string> <string name="education_add_attachment_title">Adjuntar</string>
<string name="education_add_attachment_summary">Cargue un archivo adjunto a la entrada para guardar datos externos importantes.</string> <string name="education_add_attachment_summary">Cargue un archivo adjunto a la entrada para guardar datos externos importantes.</string>
<string name="hide_expired_entries_summary">Las entradas caducadas no se muestran</string> <string name="hide_expired_entries_summary">Las entradas caducadas no se están mostrando</string>
<string name="warning_remove_unlinked_attachment">La eliminación de datos no vinculados puede disminuir el tamaño de su base de datos, pero también puede eliminar los datos usados por los complementos de KeePass.</string> <string name="warning_remove_unlinked_attachment">La eliminación de datos no vinculados puede disminuir el tamaño de su base de datos, pero también puede eliminar los datos usados por los complementos de KeePass.</string>
<string name="warning_file_too_big">Se supone que una base de datos KeePass contiene solo pequeños archivos de utilidad (como archivos de clave PGP). <string name="warning_file_too_big">Se supone que una base de datos KeePass contiene solo pequeños archivos de utilidad (como archivos de clave PGP).
\n \n
@@ -492,7 +492,7 @@
<string name="hide_expired_entries_title">Ocultar las entradas expiradas</string> <string name="hide_expired_entries_title">Ocultar las entradas expiradas</string>
<string name="keyboard_search_share_title">Buscar información compartida</string> <string name="keyboard_search_share_title">Buscar información compartida</string>
<string name="upload_attachment">Subir %1$s</string> <string name="upload_attachment">Subir %1$s</string>
<string name="education_setup_OTP_summary">Configurar la gestión de contraseñas de una sola vez (HOTP / TOTP) para generar un token solicitado para la autenticación de dos factores (2FA).</string> <string name="education_setup_OTP_summary">Configurar la gestión de contraseñas de un solo uso (HOTP / TOTP) para generar un token solicitado para la autenticación de dos factores (2FA).</string>
<string name="education_setup_OTP_title">Establecer la contaseña de un solo uso</string> <string name="education_setup_OTP_title">Establecer la contaseña de un solo uso</string>
<string name="education_advanced_unlock_summary">Vincule su contraseña con su credencial biométrica o del dispositivo escaneada para desbloquear rápidamente su base de datos.</string> <string name="education_advanced_unlock_summary">Vincule su contraseña con su credencial biométrica o del dispositivo escaneada para desbloquear rápidamente su base de datos.</string>
<string name="education_advanced_unlock_title">Desbloqueo avanzado de la base de datos</string> <string name="education_advanced_unlock_title">Desbloqueo avanzado de la base de datos</string>
@@ -542,6 +542,26 @@
<string name="menu_reload_database">Recargar la base de datos</string> <string name="menu_reload_database">Recargar la base de datos</string>
<string name="error_otp_type">El tipo de OTP existente no es reconocido por este formulario, su validación ya no puede generar correctamente el token.</string> <string name="error_otp_type">El tipo de OTP existente no es reconocido por este formulario, su validación ya no puede generar correctamente el token.</string>
<string name="download_canceled">¡Cancelado!</string> <string name="download_canceled">¡Cancelado!</string>
<string name="error_duplicate_file">Los datos de archivo ya existen.</string> <string name="error_duplicate_file">Los datos del archivo ya existen.</string>
<string name="error_upload_file">Ha habido un error al subir el archivo de datos.</string> <string name="error_upload_file">Error al subir datos del archivo.</string>
<string name="description_app_properties">Propiedades de KeePassDX para gestionar la configuración de la aplicación</string>
<string name="content_description_otp_information">Información de contraseña de un solo uso</string>
<string name="icon_section_custom">Personalizado</string>
<string name="icon_section_standard">Estándar</string>
<string name="style_brightness_summary">Seleccionar temas oscuros o claros</string>
<string name="style_brightness_title">Brillo del tema</string>
<string name="properties">Propiedades</string>
<string name="error_import_app_properties">Error al importar las propiedades de la aplicación</string>
<string name="error_export_app_properties">Error al exportar las propiedades de la aplicación</string>
<string name="success_export_app_properties">Propiedades de la aplicación exportadas</string>
<string name="success_import_app_properties">Propiedades de la aplicación importadas</string>
<string name="export_app_properties_summary">Cree un archivo para exportar las propiedades de la aplicación</string>
<string name="export_app_properties_title">Exportar propiedades de la aplicación</string>
<string name="import_app_properties_summary">Seleccione un archivo para importar las propiedades de la aplicación</string>
<string name="import_app_properties_title">Importar propiedades de la aplicación</string>
<string name="error_start_database_action">Ocurrió un error al realizar una acción en la base de datos.</string>
<string name="error_remove_file">Ocurrió un error al eliminar los datos del archivo.</string>
<string name="error_file_to_big">El archivo que está tratando de cargar es demasiado grande.</string>
<string name="error_move_group_here">No puede mover un grupo aquí.</string>
<string name="error_word_reserved">Esta palabra está reservada y no se puede usar.</string>
</resources> </resources>

View File

@@ -73,9 +73,9 @@
<string name="error_out_of_memory">Mémoire insuffisante pour charger lintégralité de votre base de données.</string> <string name="error_out_of_memory">Mémoire insuffisante pour charger lintégralité de votre base de données.</string>
<string name="error_pass_gen_type">Au moins un type de génération de mots de passe doit être sélectionné.</string> <string name="error_pass_gen_type">Au moins un type de génération de mots de passe doit être sélectionné.</string>
<string name="error_pass_match">Les mots de passe ne correspondent pas.</string> <string name="error_pass_match">Les mots de passe ne correspondent pas.</string>
<string name="error_rounds_too_large">« Tours de transformation » trop grand. Définition à 2147483648.</string> <string name="error_rounds_too_large">\"Tours de transformation\" trop grand. Définition à 2147483648.</string>
<string name="error_string_key">Chaque chaîne doit avoir un nom de champ.</string> <string name="error_string_key">Chaque chaîne doit avoir un nom de champ.</string>
<string name="error_wrong_length">Veuillez saisir un entier positif dans le champ « Longueur ».</string> <string name="error_wrong_length">Veuillez saisir un entier positif dans le champ \"Longueur\".</string>
<string name="error_autofill_enable_service">Impossible dactiver le service de remplissage automatique.</string> <string name="error_autofill_enable_service">Impossible dactiver le service de remplissage automatique.</string>
<string name="field_name">Nom du champ</string> <string name="field_name">Nom du champ</string>
<string name="field_value">Valeur du champ</string> <string name="field_value">Valeur du champ</string>
@@ -120,7 +120,7 @@
<string name="no_url_handler">Installer un navigateur Web pour ouvrir cette URL.</string> <string name="no_url_handler">Installer un navigateur Web pour ouvrir cette URL.</string>
<string name="select_database_file">Ouvrir une base de données existante</string> <string name="select_database_file">Ouvrir une base de données existante</string>
<string name="omit_backup_search_title">Ne pas rechercher dans les entrées sauvegardées</string> <string name="omit_backup_search_title">Ne pas rechercher dans les entrées sauvegardées</string>
<string name="omit_backup_search_summary">Omet les groupes « Sauvegarde » et « Corbeille » des résultats de recherche</string> <string name="omit_backup_search_summary">Omet les groupes \"Sauvegarde\" et \"Corbeille\" des résultats de recherche</string>
<string name="progress_create">Création dune nouvelle base de données…</string> <string name="progress_create">Création dune nouvelle base de données…</string>
<string name="progress_title">Traitement en cours…</string> <string name="progress_title">Traitement en cours…</string>
<string name="protection">Protection</string> <string name="protection">Protection</string>
@@ -157,8 +157,8 @@
<string name="uppercase">Majuscules</string> <string name="uppercase">Majuscules</string>
<string name="warning">Alerte</string> <string name="warning">Alerte</string>
<string name="warning_password_encoding">Éviter les caractères en dehors du format de codage de caractères du fichier de base de données (les caractères non reconnus sont convertis en une même lettre).</string> <string name="warning_password_encoding">Éviter les caractères en dehors du format de codage de caractères du fichier de base de données (les caractères non reconnus sont convertis en une même lettre).</string>
<string name="warning_empty_password">Continuer sans protection de déverrouillage par mot de passe\?</string> <string name="warning_empty_password">Continuer sans protection de déverrouillage par mot de passe \?</string>
<string name="warning_no_encryption_key">Continuer sans clé de chiffrement\?</string> <string name="warning_no_encryption_key">Continuer sans clé de chiffrement \?</string>
<string name="version_label">Version %1$s</string> <string name="version_label">Version %1$s</string>
<string name="configure_biometric">Aucune information didentification biométrique ou de périphérique nest enregistrée.</string> <string name="configure_biometric">Aucune information didentification biométrique ou de périphérique nest enregistrée.</string>
<string name="encrypted_value_stored">Mot de passe chiffré stocké</string> <string name="encrypted_value_stored">Mot de passe chiffré stocké</string>
@@ -195,7 +195,7 @@
<string name="assign_master_key">Affecter une clé principale</string> <string name="assign_master_key">Affecter une clé principale</string>
<string name="create_keepass_file">Créer une nouvelle base de données</string> <string name="create_keepass_file">Créer une nouvelle base de données</string>
<string name="recycle_bin_title">Utilisation de la corbeille</string> <string name="recycle_bin_title">Utilisation de la corbeille</string>
<string name="recycle_bin_summary">Déplace les groupes et les entrées dans le groupe « Corbeille » avant leur suppression</string> <string name="recycle_bin_summary">Déplace les groupes et les entrées dans le groupe \"Corbeille\" avant leur suppression</string>
<string name="monospace_font_fields_enable_title">Fonte de caractères des champs</string> <string name="monospace_font_fields_enable_title">Fonte de caractères des champs</string>
<string name="monospace_font_fields_enable_summary">Change la fonte utilisée dans les champs pour une meilleure visibilité des caractères</string> <string name="monospace_font_fields_enable_summary">Change la fonte utilisée dans les champs pour une meilleure visibilité des caractères</string>
<string name="allow_copy_password_title">Faire confiance au presse-papier</string> <string name="allow_copy_password_title">Faire confiance au presse-papier</string>
@@ -280,7 +280,7 @@
<string name="menu_paste">Coller</string> <string name="menu_paste">Coller</string>
<string name="menu_cancel">Annuler</string> <string name="menu_cancel">Annuler</string>
<string name="allow_no_password_title">Autoriser labsence de clé principale</string> <string name="allow_no_password_title">Autoriser labsence de clé principale</string>
<string name="allow_no_password_summary">Autorise lappui du bouton « Ouvrir » si aucun identifiant nest sélectionné</string> <string name="allow_no_password_summary">Autorise lappui du bouton \"Ouvrir\" si aucun identifiant nest sélectionné</string>
<string name="menu_file_selection_read_only">Protéger en écriture</string> <string name="menu_file_selection_read_only">Protéger en écriture</string>
<string name="menu_open_file_read_and_write">Modifiable</string> <string name="menu_open_file_read_and_write">Modifiable</string>
<string name="enable_read_only_title">Protégé en écriture</string> <string name="enable_read_only_title">Protégé en écriture</string>
@@ -288,8 +288,8 @@
<string name="education_read_only_title">Protégez en écriture votre base de données</string> <string name="education_read_only_title">Protégez en écriture votre base de données</string>
<string name="education_read_only_summary">Changez le mode douverture pour la session. <string name="education_read_only_summary">Changez le mode douverture pour la session.
\n \n
\n« Protégé en écriture » empêche les modifications involontaires de la base de données. \n\"Protégé en écriture\" empêche les modifications involontaires de la base de données.
\n« Modifiable » vous permet dajouter, de supprimer ou de modifier tous les éléments comme vous le souhaitez.</string> \n\"Modifiable\" vous permet dajouter, de supprimer ou de modifier tous les éléments comme vous le souhaitez.</string>
<string name="edit_entry">Modifier lentrée</string> <string name="edit_entry">Modifier lentrée</string>
<string name="error_load_database">Impossible de charger votre base de données.</string> <string name="error_load_database">Impossible de charger votre base de données.</string>
<string name="error_load_database_KDF_memory">Impossible de charger la clé. Veuillez essayer de diminuer lutilisation mémoire de la fonction de dérivation de clé.</string> <string name="error_load_database_KDF_memory">Impossible de charger la clé. Veuillez essayer de diminuer lutilisation mémoire de la fonction de dérivation de clé.</string>
@@ -301,7 +301,7 @@
<string name="keyboard_setting_label">Paramètres Magiclavier</string> <string name="keyboard_setting_label">Paramètres Magiclavier</string>
<string name="keyboard_entry_category">Entrée</string> <string name="keyboard_entry_category">Entrée</string>
<string name="keyboard_entry_timeout_title">Délai dexpiration</string> <string name="keyboard_entry_timeout_title">Délai dexpiration</string>
<string name="keyboard_entry_timeout_summary">Délai dexpiration pour effacer lentrée au clavier</string> <string name="keyboard_entry_timeout_summary">Délai dexpiration pour effacer lentrée disponible dans le clavier</string>
<string name="keyboard_notification_entry_title">Informations de notification</string> <string name="keyboard_notification_entry_title">Informations de notification</string>
<string name="keyboard_notification_entry_summary">Affiche une notification lorsquune entrée est disponible</string> <string name="keyboard_notification_entry_summary">Affiche une notification lorsquune entrée est disponible</string>
<string name="keyboard_notification_entry_content_title_text">Entrée</string> <string name="keyboard_notification_entry_content_title_text">Entrée</string>
@@ -312,22 +312,22 @@
<string name="keyboard_appearance_category">Apparence</string> <string name="keyboard_appearance_category">Apparence</string>
<string name="keyboard_theme_title">Thème du clavier</string> <string name="keyboard_theme_title">Thème du clavier</string>
<string name="keyboard_keys_category">Touches</string> <string name="keyboard_keys_category">Touches</string>
<string name="keyboard_key_vibrate_title">Touches vibrantes</string> <string name="keyboard_key_vibrate_title">Vibration des touches</string>
<string name="keyboard_key_sound_title">Appui clavier audible</string> <string name="keyboard_key_sound_title">Son de pression des touches</string>
<string name="keyboard_change">Changement de clavier</string> <string name="keyboard_change">Changement de clavier</string>
<string name="keyboard_previous_database_credentials_title">Écran des identifications de la base de données</string> <string name="keyboard_previous_database_credentials_title">Écran d\'authentification de la base de données</string>
<string name="keyboard_previous_database_credentials_summary">Revenir automatiquement au clavier précédent sur lécran des identifications de la base de données</string> <string name="keyboard_previous_database_credentials_summary">Revenir automatiquement au clavier précédent sur lécran d\'authentification de la base de données</string>
<string name="keyboard_previous_fill_in_title">Action de touche automatique</string> <string name="keyboard_previous_fill_in_title">Action de touche automatique</string>
<string name="keyboard_previous_fill_in_summary">Revenir automatiquement au clavier précédent après avoir exécuté « Action de touche automatique »</string> <string name="keyboard_previous_fill_in_summary">Revenir automatiquement au clavier précédent après avoir exécuté \"Action de touche automatique\"</string>
<string name="selection_mode">Mode sélection</string> <string name="selection_mode">Mode sélection</string>
<string name="do_not_kill_app">Veuillez ne pas tuer lapplication…</string> <string name="do_not_kill_app">Veuillez ne pas tuer lapplication…</string>
<string name="lock_database_back_root_title">Appuyer sur « Retour » pour verrouiller</string> <string name="lock_database_back_root_title">Appuyer sur \"Retour\" pour verrouiller</string>
<string name="lock_database_back_root_summary">Verrouille la base de données lorsque lutilisateur clique sur le bouton retour de lécran racine</string> <string name="lock_database_back_root_summary">Verrouille la base de données lorsque lutilisateur clique sur le bouton retour de lécran racine</string>
<string name="clear_clipboard_notification_title">Suppression à la fermeture</string> <string name="clear_clipboard_notification_title">Suppression à la fermeture</string>
<string name="clear_clipboard_notification_summary">Verrouille la base de données lorsque la durée du presse-papier expire ou que la notification est fermée après avoir commencé à lutiliser</string> <string name="clear_clipboard_notification_summary">Verrouille la base de données lorsque la durée du presse-papier expire ou que la notification est fermée après avoir commencé à lutiliser</string>
<string name="recycle_bin">Corbeille</string> <string name="recycle_bin">Corbeille</string>
<string name="keyboard_selection_entry_title">Sélection de lentrée</string> <string name="keyboard_selection_entry_title">Sélection de lentrée</string>
<string name="keyboard_selection_entry_summary">Affiche les champs de saisie dans le Magiclavier lors de laffichage dune entrée</string> <string name="keyboard_selection_entry_summary">Lors de la sélection d\'une entrée dans KeePassDX, rendre cette entrée disponible dans le Magiclavier</string>
<string name="delete_entered_password_title">Supprimer le mot de passe</string> <string name="delete_entered_password_title">Supprimer le mot de passe</string>
<string name="delete_entered_password_summary">Supprime le mot de passe saisi après une tentative de connexion à une base de données</string> <string name="delete_entered_password_summary">Supprime le mot de passe saisi après une tentative de connexion à une base de données</string>
<string name="content_description_open_file">Ouvrir le fichier</string> <string name="content_description_open_file">Ouvrir le fichier</string>
@@ -382,7 +382,7 @@
<string name="menu_security_settings">Paramètres de sécurité</string> <string name="menu_security_settings">Paramètres de sécurité</string>
<string name="menu_master_key_settings">Paramètres de la clé maîtresse</string> <string name="menu_master_key_settings">Paramètres de la clé maîtresse</string>
<string name="contains_duplicate_uuid">La base de données contient des doublons dUUID.</string> <string name="contains_duplicate_uuid">La base de données contient des doublons dUUID.</string>
<string name="contains_duplicate_uuid_procedure">Résoudre le problème en générant de nouveaux UUID pour les doublons et continuer\?</string> <string name="contains_duplicate_uuid_procedure">Résoudre le problème en générant de nouveaux UUID pour les doublons et continuer \?</string>
<string name="database_opened">Base de données ouverte</string> <string name="database_opened">Base de données ouverte</string>
<string name="clipboard_explanation_summary">Copier les champs dune entrée à laide du presse-papier de votre appareil</string> <string name="clipboard_explanation_summary">Copier les champs dune entrée à laide du presse-papier de votre appareil</string>
<string name="advanced_unlock_explanation_summary">Utiliser le déverrouillage avancé pour ouvrir plus facilement une base de données</string> <string name="advanced_unlock_explanation_summary">Utiliser le déverrouillage avancé pour ouvrir plus facilement une base de données</string>
@@ -408,21 +408,21 @@
<string name="menu_save_database">Enregistrer la base de données</string> <string name="menu_save_database">Enregistrer la base de données</string>
<string name="menu_empty_recycle_bin">Vider la corbeille</string> <string name="menu_empty_recycle_bin">Vider la corbeille</string>
<string name="command_execution">Exécution de la commande…</string> <string name="command_execution">Exécution de la commande…</string>
<string name="warning_permanently_delete_nodes">Supprimer définitivement les nœuds sélectionnés\?</string> <string name="warning_permanently_delete_nodes">Supprimer définitivement les nœuds sélectionnés \?</string>
<string name="keystore_not_accessible">Le magasin de clés nest pas correctement initialisé.</string> <string name="keystore_not_accessible">Le magasin de clés nest pas correctement initialisé.</string>
<string name="recycle_bin_group_title">Groupe de la corbeille</string> <string name="recycle_bin_group_title">Groupe de la corbeille</string>
<string name="enable_auto_save_database_title">Enregistrement automatique de la base de données</string> <string name="enable_auto_save_database_title">Enregistrement automatique de la base de données</string>
<string name="enable_auto_save_database_summary">Enregistre la base de données après chaque action importante (en mode « Modifiable »)</string> <string name="enable_auto_save_database_summary">Enregistre la base de données après chaque action importante (en mode \"Modifiable\")</string>
<string name="entry_attachments">Attachements</string> <string name="entry_attachments">Attachements</string>
<string name="menu_restore_entry_history">Restaurer lhistorique</string> <string name="menu_restore_entry_history">Restaurer lhistorique</string>
<string name="menu_delete_entry_history">Effacer lhistorique</string> <string name="menu_delete_entry_history">Effacer lhistorique</string>
<string name="keyboard_auto_go_action_title">Action de touche automatique</string> <string name="keyboard_auto_go_action_title">Action de touche automatique</string>
<string name="keyboard_auto_go_action_summary">Action de la touche « Go » après avoir appuyé sur une touche « Champ »</string> <string name="keyboard_auto_go_action_summary">Effectuer l\'action de la touche \"Go\" automatiquement après avoir appuyé sur une touche \"Champ\" du clavier</string>
<string name="download_attachment">Téléchargement %1$s</string> <string name="download_attachment">Téléchargement %1$s</string>
<string name="download_initialization">Initialisation…</string> <string name="download_initialization">Initialisation…</string>
<string name="download_progression">En cours : %1$d%%</string> <string name="download_progression">En cours : %1$d%%</string>
<string name="download_finalization">Finalisation…</string> <string name="download_finalization">Finalisation…</string>
<string name="download_complete">Terminé!</string> <string name="download_complete">Terminé !</string>
<string name="hide_expired_entries_title">Masquer les entrées expirées</string> <string name="hide_expired_entries_title">Masquer les entrées expirées</string>
<string name="hide_expired_entries_summary">Les entrées expirées ne sont pas affichées</string> <string name="hide_expired_entries_summary">Les entrées expirées ne sont pas affichées</string>
<string name="contact">Contact</string> <string name="contact">Contact</string>
@@ -444,7 +444,7 @@
<string name="error_create_database">Impossible de créer le fichier de base de données.</string> <string name="error_create_database">Impossible de créer le fichier de base de données.</string>
<string name="entry_add_attachment">Ajouter une pièce jointe</string> <string name="entry_add_attachment">Ajouter une pièce jointe</string>
<string name="discard">Abandonner</string> <string name="discard">Abandonner</string>
<string name="discard_changes">Abandonner les modifications\?</string> <string name="discard_changes">Abandonner les modifications \?</string>
<string name="validate">Valider</string> <string name="validate">Valider</string>
<string name="autofill_auto_search_summary">Suggérer automatiquement des résultats de recherche à partir du domaine Web ou de lidentifiant de lapplication</string> <string name="autofill_auto_search_summary">Suggérer automatiquement des résultats de recherche à partir du domaine Web ou de lidentifiant de lapplication</string>
<string name="autofill_auto_search_title">Recherche automatique</string> <string name="autofill_auto_search_title">Recherche automatique</string>
@@ -459,7 +459,7 @@
<string name="autofill_web_domain_blocklist_title">Liste de blocage de domaine Web</string> <string name="autofill_web_domain_blocklist_title">Liste de blocage de domaine Web</string>
<string name="autofill_application_id_blocklist_summary">Liste de blocage qui empêche le remplissage automatique des applications</string> <string name="autofill_application_id_blocklist_summary">Liste de blocage qui empêche le remplissage automatique des applications</string>
<string name="autofill_application_id_blocklist_title">Liste de blocage dapplication</string> <string name="autofill_application_id_blocklist_title">Liste de blocage dapplication</string>
<string name="keyboard_search_share_summary">Recherche automatiquement les informations partagées pour remplir le clavier</string> <string name="keyboard_search_share_summary">Lorsqu\'une adresse web est partagée avec KeePassDX, filtrer automatiquement les entrées contenant le domaine</string>
<string name="keyboard_search_share_title">Rechercher les informations partagées</string> <string name="keyboard_search_share_title">Rechercher les informations partagées</string>
<string name="filter">Filtre</string> <string name="filter">Filtre</string>
<string name="subdomain_search_summary">Recherche des domaines Web avec des contraintes de sous-domaines</string> <string name="subdomain_search_summary">Recherche des domaines Web avec des contraintes de sous-domaines</string>
@@ -469,7 +469,7 @@
<string name="upload_attachment">Téléverser %1$s</string> <string name="upload_attachment">Téléverser %1$s</string>
<string name="education_add_attachment_summary">Téléverse une pièce-jointe à votre entrée pour enregistrer dimportantes données externes.</string> <string name="education_add_attachment_summary">Téléverse une pièce-jointe à votre entrée pour enregistrer dimportantes données externes.</string>
<string name="education_add_attachment_title">Ajouter une pièce-jointe</string> <string name="education_add_attachment_title">Ajouter une pièce-jointe</string>
<string name="warning_sure_add_file">Ajouter quand même le fichier\?</string> <string name="warning_sure_add_file">Ajouter quand même le fichier \?</string>
<string name="warning_replace_file">Téléverser ce fichier va remplacer celui en place.</string> <string name="warning_replace_file">Téléverser ce fichier va remplacer celui en place.</string>
<string name="warning_file_too_big">Une base de données KeePass est seulement censée contenir de petits fichiers utilitaires (tels que les fichiers clé PGP). <string name="warning_file_too_big">Une base de données KeePass est seulement censée contenir de petits fichiers utilitaires (tels que les fichiers clé PGP).
\n \n
@@ -493,7 +493,7 @@
<string name="autofill_close_database_title">Fermer la base de données</string> <string name="autofill_close_database_title">Fermer la base de données</string>
<string name="keyboard_previous_lock_summary">Revient automatiquement au clavier précédent après le verrouillage de la base de données</string> <string name="keyboard_previous_lock_summary">Revient automatiquement au clavier précédent après le verrouillage de la base de données</string>
<string name="keyboard_previous_lock_title">Verrouiller la base de données</string> <string name="keyboard_previous_lock_title">Verrouiller la base de données</string>
<string name="keyboard_save_search_info_summary">Essayer denregistrer les informations partagées lors de la sélection manuelle dune entrée</string> <string name="keyboard_save_search_info_summary">Essayer denregistrer l\'association entre une adresse web partagée à KeePassDX et l\'entrée sélectionnée manuellement</string>
<string name="keyboard_save_search_info_title">Enregistrer les infos partagées</string> <string name="keyboard_save_search_info_title">Enregistrer les infos partagées</string>
<string name="notification">Notification</string> <string name="notification">Notification</string>
<string name="biometric_security_update_required">Mise à jour de sécurité biométrique requise.</string> <string name="biometric_security_update_required">Mise à jour de sécurité biométrique requise.</string>
@@ -536,7 +536,7 @@
<string name="error_rebuild_list">Impossible de reconstruire correctement la liste.</string> <string name="error_rebuild_list">Impossible de reconstruire correctement la liste.</string>
<string name="error_database_uri_null">L\'URI de la base de données ne peut pas être récupéré.</string> <string name="error_database_uri_null">L\'URI de la base de données ne peut pas être récupéré.</string>
<string name="autofill_inline_suggestions_keyboard">Suggestions de remplissage automatique ajoutées.</string> <string name="autofill_inline_suggestions_keyboard">Suggestions de remplissage automatique ajoutées.</string>
<string name="autofill_inline_suggestions_summary">Tente d\'afficher des suggestions de remplissage automatique directement à partir d\'un clavier compatible</string> <string name="autofill_inline_suggestions_summary">Tente d\'afficher des suggestions de remplissage automatique dans la barre de suggestions des claviers compatibles</string>
<string name="autofill_inline_suggestions_title">Suggestions en ligne</string> <string name="autofill_inline_suggestions_title">Suggestions en ligne</string>
<string name="warning_database_info_changed_options">Écraser les modifications externes en sauvegardant la base de données ou recharger-la avec les dernières modifications.</string> <string name="warning_database_info_changed_options">Écraser les modifications externes en sauvegardant la base de données ou recharger-la avec les dernières modifications.</string>
<string name="warning_database_revoked">Accès au dossier révoqué par le gestionnaire de fichiers, fermer la base de données et la rouvrir à partir de son emplacement.</string> <string name="warning_database_revoked">Accès au dossier révoqué par le gestionnaire de fichiers, fermer la base de données et la rouvrir à partir de son emplacement.</string>
@@ -547,7 +547,7 @@
<string name="unit_kibibyte">Kibioctets</string> <string name="unit_kibibyte">Kibioctets</string>
<string name="unit_byte">Octets</string> <string name="unit_byte">Octets</string>
<string name="error_otp_type">Le type OTP existant n\'est pas reconnu par ce formulaire, sa validation peut ne plus générer correctement le jeton.</string> <string name="error_otp_type">Le type OTP existant n\'est pas reconnu par ce formulaire, sa validation peut ne plus générer correctement le jeton.</string>
<string name="download_canceled">Annulé!</string> <string name="download_canceled">Annulé !</string>
<string name="icon_section_custom">Customisé</string> <string name="icon_section_custom">Customisé</string>
<string name="icon_section_standard">Standard</string> <string name="icon_section_standard">Standard</string>
<string name="style_brightness_summary">Sélectionnez des thèmes clairs ou foncés</string> <string name="style_brightness_summary">Sélectionnez des thèmes clairs ou foncés</string>

View File

@@ -18,7 +18,7 @@
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>. along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources>
<string name="feedback">प्रतिक्रिय</string> <string name="feedback">प्प्रतिपुष्टि</string>
<string name="homepage">होमपेज</string> <string name="homepage">होमपेज</string>
<string name="about_description">एंड्रॉयड पर आधारित KeePass पासवर्ड मैनेजर</string> <string name="about_description">एंड्रॉयड पर आधारित KeePass पासवर्ड मैनेजर</string>
<string name="accept">स्वीकार</string> <string name="accept">स्वीकार</string>
@@ -35,7 +35,7 @@
<string name="extended_ASCII">विस्तारित ASCII</string> <string name="extended_ASCII">विस्तारित ASCII</string>
<string name="allow">अनुमति दें</string> <string name="allow">अनुमति दें</string>
<string name="clipboard_cleared">क्लिपबोर्ड साफ कर दिया</string> <string name="clipboard_cleared">क्लिपबोर्ड साफ कर दिया</string>
<string name="clipboard_error_title">क्लिपबोर्ड त्रुटि</string> <string name="clipboard_error_title">क्लिपबोर्ड एरर</string>
<string name="clipboard_error">सैमसंग के कुछ एंड्रॉइड फोन क्लिपबोर्ड का उपयोग नहीं करने देंगे।</string> <string name="clipboard_error">सैमसंग के कुछ एंड्रॉइड फोन क्लिपबोर्ड का उपयोग नहीं करने देंगे।</string>
<string name="clipboard_error_clear">क्लिपबोर्ड को साफ़ नहीं किया जा सका</string> <string name="clipboard_error_clear">क्लिपबोर्ड को साफ़ नहीं किया जा सका</string>
<string name="clipboard_timeout">क्लिपबोर्ड टाइमआउट</string> <string name="clipboard_timeout">क्लिपबोर्ड टाइमआउट</string>
@@ -104,7 +104,7 @@
<string name="otp_counter">काउंटर</string> <string name="otp_counter">काउंटर</string>
<string name="otp_digits">अंक</string> <string name="otp_digits">अंक</string>
<string name="otp_algorithm">एल्गोरिथ्म</string> <string name="otp_algorithm">एल्गोरिथ्म</string>
<string name="entry_otp">OTP</string> <string name="entry_otp">ओटीप</string>
<string name="error_invalid_OTP">अमान्य ओटीपी गुप्त।</string> <string name="error_invalid_OTP">अमान्य ओटीपी गुप्त।</string>
<string name="error_disallow_no_credentials">कम से कम एक क्रेडेंशियल सेट किया जाना चाहिए।</string> <string name="error_disallow_no_credentials">कम से कम एक क्रेडेंशियल सेट किया जाना चाहिए।</string>
</resources> </resources>

View File

@@ -160,7 +160,7 @@
<string name="extended_ASCII">ASCII Diperluas</string> <string name="extended_ASCII">ASCII Diperluas</string>
<string name="brackets">Tanda Kurung</string> <string name="brackets">Tanda Kurung</string>
<string name="application">Aplikasi</string> <string name="application">Aplikasi</string>
<string name="app_timeout">Batas Waktu Aplikasi</string> <string name="app_timeout">Waktu habis</string>
<string name="key_derivation_function">Fungsi Derivasi Kunci</string> <string name="key_derivation_function">Fungsi Derivasi Kunci</string>
<string name="encryption_algorithm">Algoritma Enkripsi</string> <string name="encryption_algorithm">Algoritma Enkripsi</string>
<string name="encryption">Enkripsi</string> <string name="encryption">Enkripsi</string>
@@ -384,4 +384,18 @@
<string name="error_upload_file">Timbul galat saat mengunggah data berkas.</string> <string name="error_upload_file">Timbul galat saat mengunggah data berkas.</string>
<string name="error_file_to_big">File yang Anda unggah terlalu besar.</string> <string name="error_file_to_big">File yang Anda unggah terlalu besar.</string>
<string name="content_description_otp_information">Info sandi satu kali</string> <string name="content_description_otp_information">Info sandi satu kali</string>
<string name="education_select_database_title">Buka basisdata yang sudah ada</string>
<string name="enable_auto_save_database_title">Simpan otomatis basisdata</string>
<string name="education_new_node_title">Tambah item ke basisdata anda</string>
<string name="education_entry_edit_title">Sunting entri</string>
<string name="education_create_database_title">Buat berkas basisdata anda</string>
<string name="delete_entered_password_title">Hapus kata sandi</string>
<string name="education_sort_title">Pengurutan item</string>
<string name="html_text_dev_feature_thanks">Terima kasih banyak atas kontribusinya.</string>
<string name="html_text_dev_feature_contibute">Dengan <strong>berkontribusi</strong>,</string>
<string name="education_lock_title">Kunci basisdata</string>
<string name="education_unlock_title">Buka basisdata anda</string>
<string name="education_field_copy_title">Salin bidang</string>
<string name="education_setup_OTP_title">Atur OTP</string>
<string name="education_donation_title">Partisipasi</string>
</resources> </resources>

View File

@@ -177,7 +177,7 @@
<string name="field_name">Nome do campo</string> <string name="field_name">Nome do campo</string>
<string name="error_autofill_enable_service">Não pôde ser ativado o serviço de preenchimento automático.</string> <string name="error_autofill_enable_service">Não pôde ser ativado o serviço de preenchimento automático.</string>
<string name="error_wrong_length">Digite um número inteiro positivo no campo \"Tamanho\".</string> <string name="error_wrong_length">Digite um número inteiro positivo no campo \"Tamanho\".</string>
<string name="error_string_key">Um nome do campo é necessário para cada string.</string> <string name="error_string_key">Um nome do campo é necessário para cada cadeia.</string>
<string name="error_rounds_too_large">\"Número de rodadas\" é muito grande. Modificado para 2147483648.</string> <string name="error_rounds_too_large">\"Número de rodadas\" é muito grande. Modificado para 2147483648.</string>
<string name="error_pass_match">As palavras-passe não coincidem.</string> <string name="error_pass_match">As palavras-passe não coincidem.</string>
<string name="error_pass_gen_type">Pelo menos um tipo de geração de palavra-chave deve ser selecionado.</string> <string name="error_pass_gen_type">Pelo menos um tipo de geração de palavra-chave deve ser selecionado.</string>
@@ -255,7 +255,7 @@
<string name="auto_focus_search_summary">Solicitar uma pesquisa quando abrir a base de dados</string> <string name="auto_focus_search_summary">Solicitar uma pesquisa quando abrir a base de dados</string>
<string name="auto_focus_search_title">Pesquisa rápida</string> <string name="auto_focus_search_title">Pesquisa rápida</string>
<string name="omit_backup_search_summary">Omite os grupos \"Backup\" e \"Cesto da reciclagem\" dos resultados da busca</string> <string name="omit_backup_search_summary">Omite os grupos \"Backup\" e \"Cesto da reciclagem\" dos resultados da busca</string>
<string name="omit_backup_search_title">Não procurar por entradas no backup ou na lixeira</string> <string name="omit_backup_search_title">Não procurar por entradas no backup ou no lixo</string>
<string name="about">Sobre</string> <string name="about">Sobre</string>
<string name="hide_password_summary">Mascarar palavras-passe (***) por predefinição</string> <string name="hide_password_summary">Mascarar palavras-passe (***) por predefinição</string>
<string name="hide_password_title">Esconder palavras-passe</string> <string name="hide_password_title">Esconder palavras-passe</string>
@@ -452,7 +452,7 @@
<string name="add_group">Adicionar grupo</string> <string name="add_group">Adicionar grupo</string>
<string name="add_entry">Adicionar entrada</string> <string name="add_entry">Adicionar entrada</string>
<string name="accept">Aceitar</string> <string name="accept">Aceitar</string>
<string name="device_credential">Credencial do dispositivo</string> <string name="device_credential">Credencial do aparelho</string>
<string name="advanced_unlock_prompt_not_initialized">Incapaz de inicializar o desbloqueio antecipado.</string> <string name="advanced_unlock_prompt_not_initialized">Incapaz de inicializar o desbloqueio antecipado.</string>
<string name="advanced_unlock_scanning_error">Erro de desbloqueio avançado: %1$s</string> <string name="advanced_unlock_scanning_error">Erro de desbloqueio avançado: %1$s</string>
<string name="advanced_unlock_not_recognized">Não conseguia reconhecer impressão de desbloqueio avançado</string> <string name="advanced_unlock_not_recognized">Não conseguia reconhecer impressão de desbloqueio avançado</string>

View File

@@ -36,7 +36,7 @@
<string name="clipboard_error_clear">Не удалось очистить буфер обмена</string> <string name="clipboard_error_clear">Не удалось очистить буфер обмена</string>
<string name="clipboard_timeout">Задержка очистки буфера обмена</string> <string name="clipboard_timeout">Задержка очистки буфера обмена</string>
<string name="clipboard_timeout_summary">Продолжительность хранения в буфере обмена (если поддерживается устройством)</string> <string name="clipboard_timeout_summary">Продолжительность хранения в буфере обмена (если поддерживается устройством)</string>
<string name="select_to_copy">Выберите %1$s для копирования в буфер обмена</string> <string name="select_to_copy">Нажатие скопирует «%1$s» в буфер</string>
<string name="retrieving_db_key">Получение ключа базы…</string> <string name="retrieving_db_key">Получение ключа базы…</string>
<string name="database">База</string> <string name="database">База</string>
<string name="decrypting_db">Расшифровка базы…</string> <string name="decrypting_db">Расшифровка базы…</string>
@@ -58,7 +58,7 @@
<string name="save">Сохранить</string> <string name="save">Сохранить</string>
<string name="entry_title">Название</string> <string name="entry_title">Название</string>
<string name="entry_url">Ссылка</string> <string name="entry_url">Ссылка</string>
<string name="entry_user_name">Имя пользователя</string> <string name="entry_user_name">Пользователь</string>
<string name="error_arc4">Потоковый шифр Arcfour не поддерживается.</string> <string name="error_arc4">Потоковый шифр Arcfour не поддерживается.</string>
<string name="error_can_not_handle_uri">Невозможно обработать указанный URI в KeePassDX.</string> <string name="error_can_not_handle_uri">Невозможно обработать указанный URI в KeePassDX.</string>
<string name="error_file_not_create">Невозможно создать файл</string> <string name="error_file_not_create">Невозможно создать файл</string>

View File

@@ -27,7 +27,7 @@
<string name="app_timeout">延时</string> <string name="app_timeout">延时</string>
<string name="app_timeout_summary">在锁定数据库前处于非活动状态的时长</string> <string name="app_timeout_summary">在锁定数据库前处于非活动状态的时长</string>
<string name="application">应用</string> <string name="application">应用</string>
<string name="menu_app_settings">程序设置</string> <string name="menu_app_settings">应用设置</string>
<string name="brackets">括号</string> <string name="brackets">括号</string>
<string name="file_manager_install_description">需要一款接受意图操作 ACTION_CREATE_DOCUMENT 和 ACTION_OPEN_DOCUMENT 的文件管理器来创建、打开和保存数据库文件。</string> <string name="file_manager_install_description">需要一款接受意图操作 ACTION_CREATE_DOCUMENT 和 ACTION_OPEN_DOCUMENT 的文件管理器来创建、打开和保存数据库文件。</string>
<string name="clipboard_cleared">剪贴板已清空</string> <string name="clipboard_cleared">剪贴板已清空</string>
@@ -46,14 +46,14 @@
<string name="entry_cancel">取消</string> <string name="entry_cancel">取消</string>
<string name="entry_notes">备注</string> <string name="entry_notes">备注</string>
<string name="entry_confpassword">确认密码</string> <string name="entry_confpassword">确认密码</string>
<string name="entry_created">建时间</string> <string name="entry_created">建时间</string>
<string name="entry_expires">过期时间</string> <string name="entry_expires">过期时间</string>
<string name="entry_keyfile">密钥文件</string> <string name="entry_keyfile">密钥文件</string>
<string name="entry_modified">修改时间</string> <string name="entry_modified">修改时间</string>
<string name="entry_password">密码</string> <string name="entry_password">密码</string>
<string name="save">保存</string> <string name="save">保存</string>
<string name="entry_title">名称</string> <string name="entry_title">名称</string>
<string name="entry_url">链接</string> <string name="entry_url">网址</string>
<string name="entry_user_name">用户名</string> <string name="entry_user_name">用户名</string>
<string name="error_arc4">不支持Arcfour流式加密。</string> <string name="error_arc4">不支持Arcfour流式加密。</string>
<string name="error_can_not_handle_uri">无法在KeePassDX中处理此URI。</string> <string name="error_can_not_handle_uri">无法在KeePassDX中处理此URI。</string>
@@ -96,11 +96,11 @@
<string name="menu_lock">锁定数据库</string> <string name="menu_lock">锁定数据库</string>
<string name="menu_open">打开</string> <string name="menu_open">打开</string>
<string name="menu_search">搜索</string> <string name="menu_search">搜索</string>
<string name="menu_url">打开链接</string> <string name="menu_url">打开网址</string>
<string name="minus">减号</string> <string name="minus">减号</string>
<string name="never">从不</string> <string name="never">从不</string>
<string name="no_results">没有搜索结果</string> <string name="no_results">没有搜索结果</string>
<string name="no_url_handler">需要安装网络浏览器才能打开这个URL</string> <string name="no_url_handler">需要安装网络浏览器才能打开这个网址</string>
<string name="progress_create">正在新建数据库…</string> <string name="progress_create">正在新建数据库…</string>
<string name="progress_title">正在处理…</string> <string name="progress_title">正在处理…</string>
<string name="content_description_remove_from_list">移除</string> <string name="content_description_remove_from_list">移除</string>
@@ -128,14 +128,14 @@
<string name="extended_ASCII">ASCII拓展区字符</string> <string name="extended_ASCII">ASCII拓展区字符</string>
<string name="allow">允许</string> <string name="allow">允许</string>
<string name="clipboard_error_title">剪切板错误</string> <string name="clipboard_error_title">剪切板错误</string>
<string name="clipboard_error">些设备不允许程序使用剪板。</string> <string name="clipboard_error">些设备不允许应用程序使用剪板。</string>
<string name="clipboard_error_clear">无法清空剪切板</string> <string name="clipboard_error_clear">无法清空剪切板</string>
<string name="style_choose_title">主题</string> <string name="style_choose_title">主题</string>
<string name="icon_pack_choose_title">图标包</string> <string name="icon_pack_choose_title">图标包</string>
<string name="icon_pack_choose_summary">程序中使用的图标包</string> <string name="icon_pack_choose_summary">程序中使用的图标包</string>
<string name="edit_entry">编辑条目</string> <string name="edit_entry">编辑条目</string>
<string name="key_derivation_function">密钥推导函数</string> <string name="key_derivation_function">密钥推导函数</string>
<string name="entry_not_found">找不到条目。</string> <string name="entry_not_found">找不到条目数据</string>
<string name="error_load_database">无法加载数据库。</string> <string name="error_load_database">无法加载数据库。</string>
<string name="error_load_database_KDF_memory">无法加载密钥。尝试降低KDF的“内存使用”值。</string> <string name="error_load_database_KDF_memory">无法加载密钥。尝试降低KDF的“内存使用”值。</string>
<string name="error_autofill_enable_service">无法启用自动填充服务。</string> <string name="error_autofill_enable_service">无法启用自动填充服务。</string>
@@ -153,10 +153,10 @@
<string name="menu_file_selection_read_only">只读</string> <string name="menu_file_selection_read_only">只读</string>
<string name="menu_open_file_read_and_write">可修改</string> <string name="menu_open_file_read_and_write">可修改</string>
<string name="omit_backup_search_title">搜索时忽略备份条目</string> <string name="omit_backup_search_title">搜索时忽略备份条目</string>
<string name="omit_backup_search_summary">搜索忽略“备份”“回收站”群组</string> <string name="omit_backup_search_summary">搜索结果中忽略“备份”“回收站”群组</string>
<string name="protection">保护</string> <string name="protection">保护</string>
<string name="read_only">只读</string> <string name="read_only">只读</string>
<string name="read_only_warning">KeePassDX需要写入权限以修改数据</string> <string name="read_only_warning">根据您的文件管理器KeePassDX 可能不允许在您的存储中写入数据。</string>
<string name="show_recent_files_title">最近文件历史</string> <string name="show_recent_files_title">最近文件历史</string>
<string name="show_recent_files_summary">记住最近使用的文件名</string> <string name="show_recent_files_summary">记住最近使用的文件名</string>
<string name="encryption_explanation">加密所有数据时采用的算法。</string> <string name="encryption_explanation">加密所有数据时采用的算法。</string>
@@ -178,8 +178,8 @@
<string name="menu_appearance_settings">外观</string> <string name="menu_appearance_settings">外观</string>
<string name="general">常规</string> <string name="general">常规</string>
<string name="autofill">自动填充</string> <string name="autofill">自动填充</string>
<string name="autofill_service_name">使用KeePassDX自动填充</string> <string name="autofill_service_name">KeePassDX 自动填充</string>
<string name="autofill_sign_in_prompt">使用KeePassDX密码登录</string> <string name="autofill_sign_in_prompt">使用 KeePassDX 登录</string>
<string name="clipboard">剪贴板</string> <string name="clipboard">剪贴板</string>
<string name="clipboard_notifications_title">剪贴板通知</string> <string name="clipboard_notifications_title">剪贴板通知</string>
<string name="lock">锁定</string> <string name="lock">锁定</string>
@@ -317,7 +317,7 @@
<string name="keyboard_selection_entry_title">条目选择</string> <string name="keyboard_selection_entry_title">条目选择</string>
<string name="keyboard_selection_entry_summary">在查看条目时,在专用键盘中显示输入字段</string> <string name="keyboard_selection_entry_summary">在查看条目时,在专用键盘中显示输入字段</string>
<string name="delete_entered_password_title">删除密码</string> <string name="delete_entered_password_title">删除密码</string>
<string name="delete_entered_password_summary">在连接数据库尝试后删除输入的密码</string> <string name="delete_entered_password_summary">尝试连接数据库后删除输入的密码</string>
<string name="content_description_open_file">打开文件</string> <string name="content_description_open_file">打开文件</string>
<string name="content_description_node_children">子节点</string> <string name="content_description_node_children">子节点</string>
<string name="content_description_add_node">增加节点</string> <string name="content_description_add_node">增加节点</string>
@@ -334,7 +334,7 @@
<string name="content_description_remove_field">删除字段</string> <string name="content_description_remove_field">删除字段</string>
<string name="entry_UUID">UUID</string> <string name="entry_UUID">UUID</string>
<string name="error_move_entry_here">无法移动条目到此处。</string> <string name="error_move_entry_here">无法移动条目到此处。</string>
<string name="error_copy_entry_here">无法复制条目到此处</string> <string name="error_copy_entry_here">您不能在此处复制条目。</string>
<string name="list_groups_show_number_entries_title">显示条目数量</string> <string name="list_groups_show_number_entries_title">显示条目数量</string>
<string name="list_groups_show_number_entries_summary">显示群组中的条目数</string> <string name="list_groups_show_number_entries_summary">显示群组中的条目数</string>
<string name="content_description_background">背景</string> <string name="content_description_background">背景</string>
@@ -350,17 +350,17 @@
<string name="master_key">主密钥</string> <string name="master_key">主密钥</string>
<string name="security">安全</string> <string name="security">安全</string>
<string name="entry_history">历史</string> <string name="entry_history">历史</string>
<string name="entry_setup_otp">设置一次性密码</string> <string name="entry_setup_otp">设置 OTP</string>
<string name="otp_type">一次性密码类型</string> <string name="otp_type">OTP 类型</string>
<string name="otp_secret">密钥</string> <string name="otp_secret">密钥</string>
<string name="otp_period">时长(秒)</string> <string name="otp_period">时长(秒)</string>
<string name="otp_counter">计数器</string> <string name="otp_counter">计数器</string>
<string name="otp_digits">数字位数</string> <string name="otp_digits">数字位数</string>
<string name="otp_algorithm">算法</string> <string name="otp_algorithm">算法</string>
<string name="entry_otp">一次性密码</string> <string name="entry_otp">OTP</string>
<string name="error_invalid_OTP">错误的一次性密码密钥。</string> <string name="error_invalid_OTP">错误的一次性密码密钥。</string>
<string name="error_disallow_no_credentials">至少需要设置一个凭据。</string> <string name="error_disallow_no_credentials">至少需要设置一个凭据。</string>
<string name="error_copy_group_here">这里不能复制组。</string> <string name="error_copy_group_here">您无法在此处复制组。</string>
<string name="error_otp_secret_key">密钥必须是BASE32格式。</string> <string name="error_otp_secret_key">密钥必须是BASE32格式。</string>
<string name="error_otp_counter">计数器必须在%1$d和%2$d之间。</string> <string name="error_otp_counter">计数器必须在%1$d和%2$d之间。</string>
<string name="error_otp_period">时长必须在%1$d秒到%2$d秒之间。</string> <string name="error_otp_period">时长必须在%1$d秒到%2$d秒之间。</string>
@@ -369,11 +369,11 @@
<string name="creating_database">新建数据库…</string> <string name="creating_database">新建数据库…</string>
<string name="menu_security_settings">安全设置</string> <string name="menu_security_settings">安全设置</string>
<string name="menu_master_key_settings">主密钥设置</string> <string name="menu_master_key_settings">主密钥设置</string>
<string name="contains_duplicate_uuid">数据库包含重复UUID。</string> <string name="contains_duplicate_uuid">数据库包含重复UUID。</string>
<string name="contains_duplicate_uuid_procedure">通过为重复项生成新的UUID以解决问题</string> <string name="contains_duplicate_uuid_procedure">通过为重复项生成新的 UUID 以解决问题?</string>
<string name="database_opened">数据库开启</string> <string name="database_opened">数据库开启</string>
<string name="clipboard_explanation_summary">使用设备的剪贴板来复制输入字段</string> <string name="clipboard_explanation_summary">使用设备的剪贴板来复制输入字段</string>
<string name="advanced_unlock_explanation_summary">使用高级解锁轻松打开数据库</string> <string name="advanced_unlock_explanation_summary">使用高级解锁以便快速解锁数据库</string>
<string name="database_data_compression_title">数据压缩</string> <string name="database_data_compression_title">数据压缩</string>
<string name="database_data_compression_summary">数据压缩减少了数据库的大小</string> <string name="database_data_compression_summary">数据压缩减少了数据库的大小</string>
<string name="max_history_items_title">最大数量</string> <string name="max_history_items_title">最大数量</string>
@@ -432,7 +432,7 @@
<string name="entry_add_attachment">添加附件</string> <string name="entry_add_attachment">添加附件</string>
<string name="discard_changes">放弃更改?</string> <string name="discard_changes">放弃更改?</string>
<string name="validate">验证</string> <string name="validate">验证</string>
<string name="autofill_auto_search_summary">自动推荐从网站域名或应用程序搜索结果</string> <string name="autofill_auto_search_summary">自动建议匹配的网址域名或应用程序 ID 的搜索结果</string>
<string name="autofill_auto_search_title">自动搜索</string> <string name="autofill_auto_search_title">自动搜索</string>
<string name="lock_database_show_button_summary">在用户界面中显示锁定数据库按钮</string> <string name="lock_database_show_button_summary">在用户界面中显示锁定数据库按钮</string>
<string name="lock_database_show_button_title">显示锁定数据库按钮</string> <string name="lock_database_show_button_title">显示锁定数据库按钮</string>
@@ -444,11 +444,11 @@
<string name="autofill_block_restart">重新启动包含该表单的应用程序以激活拦截。</string> <string name="autofill_block_restart">重新启动包含该表单的应用程序以激活拦截。</string>
<string name="autofill_block">阻止自动填充</string> <string name="autofill_block">阻止自动填充</string>
<string name="autofill_web_domain_blocklist_summary">禁止在下列域名中自动填充凭证</string> <string name="autofill_web_domain_blocklist_summary">禁止在下列域名中自动填充凭证</string>
<string name="autofill_web_domain_blocklist_title">Web域名黑名单</string> <string name="autofill_web_domain_blocklist_title">网址域名黑名单</string>
<string name="autofill_application_id_blocklist_summary">禁止应用程序自动填充的黑名单</string> <string name="autofill_application_id_blocklist_summary">禁止应用程序自动填充的黑名单</string>
<string name="autofill_application_id_blocklist_title">应用拦截列表</string> <string name="autofill_application_id_blocklist_title">应用拦截列表</string>
<string name="filter">过滤器</string> <string name="filter">过滤器</string>
<string name="subdomain_search_summary">搜索带有子域约束的web域</string> <string name="subdomain_search_summary">搜索带有子域约束的网址域名</string>
<string name="subdomain_search_title">子域搜索</string> <string name="subdomain_search_title">子域搜索</string>
<string name="error_string_type">文本和请求的条目不匹配.</string> <string name="error_string_type">文本和请求的条目不匹配.</string>
<string name="content_description_add_item">添加条目</string> <string name="content_description_add_item">添加条目</string>
@@ -508,8 +508,8 @@
<string name="advanced_unlock_prompt_extract_credential_title">用高级解锁识别打开数据库</string> <string name="advanced_unlock_prompt_extract_credential_title">用高级解锁识别打开数据库</string>
<string name="advanced_unlock_prompt_store_credential_message">警告:即使您使用高级解锁识别,您仍然需要记住您的主密码。</string> <string name="advanced_unlock_prompt_store_credential_message">警告:即使您使用高级解锁识别,您仍然需要记住您的主密码。</string>
<string name="advanced_unlock_prompt_store_credential_title">高级解锁识别</string> <string name="advanced_unlock_prompt_store_credential_title">高级解锁识别</string>
<string name="open_advanced_unlock_prompt_store_credential">打开高级解锁提示来存储凭证</string> <string name="open_advanced_unlock_prompt_store_credential">点击以打开高级解锁提示来存储凭证</string>
<string name="open_advanced_unlock_prompt_unlock_database">打开高级解锁提示来解锁数据库</string> <string name="open_advanced_unlock_prompt_unlock_database">点击以使用高级识别解锁</string>
<string name="menu_keystore_remove_key">删除高级解锁密钥</string> <string name="menu_keystore_remove_key">删除高级解锁密钥</string>
<string name="enter">输入</string> <string name="enter">输入</string>
<string name="backspace">退格键</string> <string name="backspace">退格键</string>
@@ -550,15 +550,15 @@
<string name="error_remove_file">删除文件数据时发生了一个错误。</string> <string name="error_remove_file">删除文件数据时发生了一个错误。</string>
<string name="error_duplicate_file">文件数据已存在。</string> <string name="error_duplicate_file">文件数据已存在。</string>
<string name="properties">属性</string> <string name="properties">属性</string>
<string name="error_export_app_properties">应用属性导出期间出错</string> <string name="error_export_app_properties">导出应用配置时出错</string>
<string name="success_export_app_properties">已导出应用属性</string> <string name="success_export_app_properties">已导出应用配置</string>
<string name="error_import_app_properties">导入应用属性期间出错</string> <string name="error_import_app_properties">导入应用配置时出错</string>
<string name="success_import_app_properties">已导入应用属性</string> <string name="success_import_app_properties">已导入应用配置</string>
<string name="description_app_properties">管理应用设置的 KeePassDX 属性</string> <string name="description_app_properties">管理应用设置的 KeePassDX 配置</string>
<string name="export_app_properties_summary">创建一个文件导出应用属性</string> <string name="export_app_properties_summary">创建一个文件导出应用配置</string>
<string name="export_app_properties_title">导出应用属性</string> <string name="export_app_properties_title">导出配置</string>
<string name="import_app_properties_summary">选择一个文件导入应用属性</string> <string name="import_app_properties_summary">选择一个文件导入应用配置</string>
<string name="import_app_properties_title">导入应用属性</string> <string name="import_app_properties_title">导入配置</string>
<string name="error_start_database_action">对数据库执行操作时发生了一个错误。</string> <string name="error_start_database_action">对数据库执行操作时发生了一个错误。</string>
<string name="error_move_group_here">你不能把一个组移动到此处。</string> <string name="error_move_group_here">你不能把一个组移动到此处。</string>
<string name="error_word_reserved">这个单词是保留的,不能使用。</string> <string name="error_word_reserved">这个单词是保留的,不能使用。</string>

View File

@@ -413,13 +413,13 @@
<string name="keyboard_setting_label">Magikeyboard settings</string> <string name="keyboard_setting_label">Magikeyboard settings</string>
<string name="keyboard_entry_category">Entry</string> <string name="keyboard_entry_category">Entry</string>
<string name="keyboard_selection_entry_title">Entry selection</string> <string name="keyboard_selection_entry_title">Entry selection</string>
<string name="keyboard_selection_entry_summary">Show input fields in Magikeyboard when viewing an entry</string> <string name="keyboard_selection_entry_summary">When viewing an entry in KeePassDX, populate Magikeyboard with that entry</string>
<string name="keyboard_notification_entry_title">Notification info</string> <string name="keyboard_notification_entry_title">Notification info</string>
<string name="keyboard_notification_entry_summary">Show a notification when an entry is available</string> <string name="keyboard_notification_entry_summary">Show a notification when an entry is available</string>
<string name="keyboard_search_share_title">Search shared info</string> <string name="keyboard_search_share_title">Search shared info</string>
<string name="keyboard_search_share_summary">Automatically search for shared information to populate the keyboard</string> <string name="keyboard_search_share_summary">When sharing a URL to KeePassDX, filter the entries using that URL domain</string>
<string name="keyboard_save_search_info_title">Save shared info</string> <string name="keyboard_save_search_info_title">Save shared info</string>
<string name="keyboard_save_search_info_summary">Try to save shared information when making a manual entry selection</string> <string name="keyboard_save_search_info_summary">After sharing a URL to KeePassDX, when an entry is selected, try to remember that entry for further uses</string>
<string name="keyboard_notification_entry_clear_close_title">Clear at closing</string> <string name="keyboard_notification_entry_clear_close_title">Clear at closing</string>
<string name="keyboard_notification_entry_clear_close_summary">Close the database when closing the notification</string> <string name="keyboard_notification_entry_clear_close_summary">Close the database when closing the notification</string>
<string name="keyboard_entry_timeout_title">Timeout</string> <string name="keyboard_entry_timeout_title">Timeout</string>

View File

@@ -1 +1 @@
* * Fix parcelable with custom data #986

View File

@@ -0,0 +1,2 @@
* Fix search fields references #987
* Fix Auto-Types with same key #997

View File

@@ -0,0 +1,3 @@
* Improve Magikeyboard options description #1022 #1023 (Thx @djibux)
* Fix database opened without notification (database is now closed when screen is killed in background #1025)
* Fix biometric prompt #1018

View File

@@ -0,0 +1 @@
* Hot fix to increase the opening speed of database #1028

View File

@@ -1 +1 @@
* * Correction des parcelable avec données customisées #986

View File

@@ -0,0 +1,2 @@
* Correction de la recherche des références de champs #987
* Correction des Auto-Types avec la même clé #997

View File

@@ -0,0 +1,3 @@
* Amélioration de la description des options de Magikeyboard #1022 #1023 (Thx @djibux)
* Correction de l'ouverture de la base de données sans notification (la base est maintenant fermée lorsque l'écran est tuée en arrière-plan #1025)
* Correction de l'invite biométrique #1018

View File

@@ -0,0 +1 @@
* Correction pour augmenter la vitesse d'ouverture de la base de données #1028