Compare commits

..

56 Commits
2.8.5 ... 2.8.6

Author SHA1 Message Date
J-Jamet
c5cbba5971 Merge branch 'release/2.8.6' 2020-09-25 22:18:16 +02:00
J-Jamet
aea5493180 Small change when write inner random stream id 2020-09-25 21:40:58 +02:00
J-Jamet
431832e50e Downgrade constaintLayout to fix extra field 2020-09-25 21:00:04 +02:00
J-Jamet
daf239c93c Fix autolink #720 2020-09-25 20:41:24 +02:00
J-Jamet
2c669deae5 Add writeByte method in LittleEndianDataOutputStream 2020-09-25 19:34:02 +02:00
J-Jamet
81969de76e Write UInt size 2020-09-25 19:23:05 +02:00
J-Jamet
5a29e7a83e Replace strong tag 2020-09-25 18:57:45 +02:00
J-Jamet
9ed5aef40f Fix strings 2020-09-25 18:56:32 +02:00
J-Jamet
9e025b4329 Merge branch 'master' of https://hosted.weblate.org/projects/keepass-dx/strings into translations 2020-09-25 18:47:51 +02:00
J-Jamet
543da4fe24 Fix write custom data #651 2020-09-25 18:31:30 +02:00
J-Jamet
e82e50a57a Refactor VariantDictionary serializer 2020-09-25 18:16:23 +02:00
Martin
288d62d666 Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-25 17:40:58 +02:00
zeritti
8ed224eeab Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-25 17:40:58 +02:00
J-Jamet
22bafff943 Update CHANGELOG 2020-09-25 16:30:11 +02:00
J-Jamet
02403cf566 Fix dialog background #717 2020-09-25 16:28:48 +02:00
J-Jamet
eabbc6f037 Refactor binary write in header 2020-09-24 19:01:21 +02:00
J-Jamet
27e60edaf4 Fix check create button visibility 2020-09-24 18:43:43 +02:00
J-Jamet
f7d0b64dea Small changes 2020-09-24 18:07:58 +02:00
J-Jamet
b874484101 Refactor binary protection 2020-09-24 17:51:05 +02:00
Martin
0ee72db2e9 Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-24 17:00:09 +02:00
zeritti
4f07bac9ec Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-24 17:00:09 +02:00
Martin
80abaf70f2 Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-24 16:59:24 +02:00
zeritti
d6acbc2fb1 Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-24 16:59:24 +02:00
J-Jamet
caf93c019a Add Looper in Handler 2020-09-24 14:28:12 +02:00
J-Jamet
7044efa7c3 Upgrade compilation version 2020-09-24 12:17:55 +02:00
J-Jamet
5b4d8f971f Fix string 2020-09-24 12:12:27 +02:00
J-Jamet
75e8feb9b8 Change yes -> ok, no -> cancel 2020-09-24 12:10:44 +02:00
J-Jamet
5d59419a06 Fix autofill domain with Android 11 #702 2020-09-24 11:48:42 +02:00
J-Jamet
ff2e47bf70 Change version to 2.8.6 2020-09-24 09:25:31 +02:00
ssantos
4721ed7c15 Translated using Weblate (Portuguese)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt/
2020-09-23 18:41:05 +02:00
Zidan Pragata
d9da328088 Translated using Weblate (Indonesian)
Currently translated at 44.3% (204 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/
2020-09-23 18:40:58 +02:00
Milo Ivir
2ee506ac06 Translated using Weblate (Croatian)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/hr/
2020-09-23 18:40:58 +02:00
ssantos
16c4e4dc5b Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt_PT/
2020-09-23 18:40:57 +02:00
J-Jamet
28b8fb1b97 Update CHANGELOG 2020-09-23 17:16:30 +02:00
J-Jamet
c8bae9fba6 Fix binaries unique Ids #713 2020-09-23 17:15:45 +02:00
J-Jamet
920764ad33 Fix binaries unique Ids #713 2020-09-23 17:07:15 +02:00
J-Jamet
a45d114527 Add toString() for BinaryPool 2020-09-23 16:47:10 +02:00
J-Jamet
62cca09045 Change length binary method 2020-09-23 16:46:31 +02:00
J-Jamet
ea126b90e2 Revert "Revert "Early return in readHeaderField" #713"
This reverts commit 777a20182e.
2020-09-23 13:13:22 +02:00
J-Jamet
777a20182e Revert "Early return in readHeaderField" #713
This reverts commit f2150e3d85.
2020-09-23 12:21:06 +02:00
J-Jamet
df62a9d32b Binary dir as no backup 2020-09-23 11:35:20 +02:00
ssantos
47e211bf3c Added translation using Weblate (Portuguese) 2020-09-22 17:31:10 +02:00
ian Vatega
650ca3844e Added translation using Weblate (Esperanto) 2020-09-22 12:56:17 +02:00
J-Jamet
8de49fa027 Fix renaming custom field #709 2020-09-21 11:31:14 +02:00
J-Jamet
35b7633f4d Fix autofill recognition #712 and update version to 2.9 2020-09-21 10:56:09 +02:00
Oğuz Ersen
2c96a80280 Translated using Weblate (Turkish)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/tr/
2020-09-20 12:39:55 +02:00
Eric
c7000c8ac6 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/zh_Hans/
2020-09-20 12:39:55 +02:00
ihor_ck
1dca2b4387 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/uk/
2020-09-20 12:39:54 +02:00
solokot
ccbe9ad21e Translated using Weblate (Russian)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2020-09-20 12:39:54 +02:00
Stephan Paternotte
1fe6f11ef4 Translated using Weblate (Dutch)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/nl/
2020-09-20 12:39:54 +02:00
HARADA Hiroyuki
9d4ab60fc4 Translated using Weblate (Japanese)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/
2020-09-20 12:39:53 +02:00
zeritti
ea8c5ad6e1 Translated using Weblate (Czech)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2020-09-20 12:39:53 +02:00
Nikita Epifanov
63a0f5f91c Translated using Weblate (Russian)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2020-09-18 22:01:50 +02:00
J-Jamet
e8bacbdb6f Merge tag '2.8.5' into develop
2.8.5
2020-09-18 16:13:36 +02:00
HARADA Hiroyuki
ae0afb7b53 Translated using Weblate (Japanese)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/
2020-09-18 15:38:56 +02:00
HARADA Hiroyuki
84e7fe5b60 Translated using Weblate (Japanese)
Currently translated at 100.0% (460 of 460 strings)

Translation: KeePass DX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/
2020-09-18 15:08:01 +02:00
55 changed files with 896 additions and 198 deletions

View File

@@ -1,3 +1,12 @@
KeePassDX(2.8.6)
* Fix Autofill recognition #712
* Keep value after renaming custom field #709
* Prevent random binary bug #713
* Fix dialog background #717
* Better domain recognition for autofill #702
* Write custom data #651
* Fix autolink #720
KeePassDX(2.8.5)
* Fix Base 64 #708

View File

@@ -4,15 +4,15 @@ apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 29
buildToolsVersion '29.0.3'
compileSdkVersion 30
buildToolsVersion '30.0.2'
defaultConfig {
applicationId "com.kunzisoft.keepass"
minSdkVersion 14
targetSdkVersion 29
versionCode = 41
versionName = "2.8.5"
targetSdkVersion 30
versionCode = 42
versionName = "2.8.6"
multiDexEnabled true
testApplicationId = "com.kunzisoft.keepass.tests"
@@ -98,13 +98,14 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.cardview:cardview:1.0.0'
// WARNING: Bug with extra field
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.documentfile:documentfile:1.0.1'
implementation 'androidx.biometric:biometric:1.0.1'
// Lifecycle - LiveData - ViewModel - Coroutines
implementation "androidx.core:core-ktx:1.3.1"
implementation 'androidx.fragment:fragment-ktx:1.2.5'
// To upgrade with style
// WARNING: To upgrade with style, bug in edit text
implementation 'com.google.android.material:material:1.0.0'
// Database
implementation "androidx.room:room-runtime:$room_version"

View File

@@ -25,6 +25,7 @@ import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.Menu
import android.view.MenuItem
@@ -422,7 +423,7 @@ class EntryActivity : LockingActivity() {
}
// Show education views
Handler().post { performedNextEducation(EntryActivityEducation(this), menu) }
Handler(Looper.getMainLooper()).post { performedNextEducation(EntryActivityEducation(this), menu) }
return true
}

View File

@@ -26,6 +26,7 @@ import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.Menu
import android.view.MenuItem
@@ -63,6 +64,7 @@ import com.kunzisoft.keepass.tasks.AttachmentFileBinderManager
import com.kunzisoft.keepass.timeout.TimeoutHelper
import com.kunzisoft.keepass.utils.MenuUtil
import com.kunzisoft.keepass.utils.UriUtil
import com.kunzisoft.keepass.utils.closeDatabase
import com.kunzisoft.keepass.view.asError
import com.kunzisoft.keepass.view.showActionError
import com.kunzisoft.keepass.view.updateLockPaddingLeft
@@ -416,7 +418,7 @@ class EntryEditActivity : LockingActivity(),
private fun buildNewAttachment(attachmentToUploadUri: Uri, fileName: String) {
val compression = mDatabase?.compressionForNewEntry() ?: false
mDatabase?.buildNewBinary(applicationContext.filesDir, false, compression)?.let { binaryAttachment ->
mDatabase?.buildNewBinary(UriUtil.getBinaryDir(this), compression)?.let { binaryAttachment ->
val entryAttachment = Attachment(fileName, binaryAttachment)
// Ask to replace the current attachment
if ((mDatabase?.allowMultipleAttachments != true && entryEditFragment?.containsAttachment() == true) ||
@@ -525,7 +527,7 @@ class EntryEditActivity : LockingActivity(),
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
entryEditActivityEducation?.let {
Handler().post { performedNextEducation(it) }
Handler(Looper.getMainLooper()).post { performedNextEducation(it) }
}
return super.onPrepareOptionsMenu(menu)
}
@@ -662,7 +664,7 @@ class EntryEditActivity : LockingActivity(),
}
entryEditActivityEducation?.let {
Handler().post { performedNextEducation(it) }
Handler(Looper.getMainLooper()).post { performedNextEducation(it) }
}
}

View File

@@ -413,7 +413,7 @@ class EntryEditFragment: StylishFragment() {
}
/**
* Update an extra field or create a new one if doesn't exists
* Update an extra field or create a new one if doesn't exists, the old value is lost
*/
fun putExtraField(extraField: Field) {
extraFieldsContainerView.visibility = View.VISIBLE
@@ -434,13 +434,24 @@ class EntryEditFragment: StylishFragment() {
}
}
/**
* Update an extra field and keep the old value
*/
fun replaceExtraField(oldExtraField: Field, newExtraField: Field) {
extraFieldsContainerView.visibility = View.VISIBLE
val index = mExtraFieldsList.indexOf(oldExtraField)
val oldValueEditText: EditText = extraFieldsListView.getChildAt(index)
.findViewWithTag("FIELD_VALUE_TAG")
val oldValue = oldValueEditText.text.toString()
val newExtraFieldWithOldValue = Field(newExtraField).apply {
this.protectedValue.stringValue = oldValue
}
mExtraFieldsList.removeAt(index)
mExtraFieldsList.add(index, newExtraField)
mExtraFieldsList.add(index, newExtraFieldWithOldValue)
extraFieldsListView.removeViewAt(index)
extraFieldsListView.addView(buildViewFromField(newExtraField), index)
val newView = buildViewFromField(newExtraFieldWithOldValue)
extraFieldsListView.addView(newView, index)
newView?.requestFocus()
}
fun removeExtraField(oldExtraField: Field) {

View File

@@ -28,6 +28,7 @@ import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.Menu
import android.view.MenuItem
@@ -209,7 +210,6 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
/**
* Create a new file by calling the content provider
*/
@SuppressLint("InlinedApi")
private fun createNewFile() {
createDocument(this, getString(R.string.database_file_name_default) +
getString(R.string.database_file_extension_default), "application/x-keepass")
@@ -412,7 +412,7 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
MenuUtil.defaultMenuInflater(menuInflater, menu)
}
Handler().post { performedNextEducation(FileDatabaseSelectActivityEducation(this)) }
Handler(Looper.getMainLooper()).post { performedNextEducation(FileDatabaseSelectActivityEducation(this)) }
return true
}

View File

@@ -28,6 +28,7 @@ import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.Menu
import android.view.MenuItem
@@ -776,7 +777,7 @@ class GroupActivity : LockingActivity(),
super.onCreateOptionsMenu(menu)
// Launch education screen
Handler().post { performedNextEducation(GroupActivityEducation(this), menu) }
Handler(Looper.getMainLooper()).post { performedNextEducation(GroupActivityEducation(this), menu) }
return true
}

View File

@@ -27,6 +27,7 @@ import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
@@ -67,6 +68,7 @@ import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.utils.BACK_PREVIOUS_KEYBOARD_ACTION
import com.kunzisoft.keepass.utils.MenuUtil
import com.kunzisoft.keepass.utils.UriUtil
import com.kunzisoft.keepass.utils.closeDatabase
import com.kunzisoft.keepass.view.AdvancedUnlockInfoView
import com.kunzisoft.keepass.view.KeyFileSelectionView
import com.kunzisoft.keepass.view.asError
@@ -662,7 +664,7 @@ open class PasswordActivity : SpecialModeActivity() {
if (!performedEductionInProgress) {
performedEductionInProgress = true
// Show education views
Handler().post { performedNextEducation(PasswordActivityEducation(this), menu) }
Handler(Looper.getMainLooper()).post { performedNextEducation(PasswordActivityEducation(this), menu) }
}
}
@@ -763,7 +765,7 @@ open class PasswordActivity : SpecialModeActivity() {
when (resultCode) {
LockingActivity.RESULT_EXIT_LOCK -> {
clearCredentialsViews()
Database.getInstance().closeAndClear(applicationContext.filesDir)
Database.getInstance().closeAndClear(UriUtil.getBinaryDir(this))
}
Activity.RESULT_CANCELED -> {
clearCredentialsViews()

View File

@@ -69,10 +69,10 @@ class DeleteNodesDialogFragment : DialogFragment() {
val builder = AlertDialog.Builder(activity)
builder.setMessage(getString(R.string.warning_permanently_delete_nodes))
builder.setPositiveButton(android.R.string.yes) { _, _ ->
builder.setPositiveButton(android.R.string.ok) { _, _ ->
mListener?.permanentlyDeleteNodes(mNodesToDelete)
}
builder.setNegativeButton(android.R.string.no) { _, _ -> dismiss() }
builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() }
// Create the AlertDialog object and return it
return builder.create()
}

View File

@@ -60,12 +60,12 @@ class FileTooBigDialogFragment : DialogFragment() {
append("\n\n")
append(getString(R.string.warning_sure_add_file))
})
builder.setPositiveButton(android.R.string.yes) { _, _ ->
builder.setPositiveButton(android.R.string.ok) { _, _ ->
mActionChooseListener?.onValidateUploadFileTooBig(
arguments?.getParcelable(KEY_FILE_URI),
arguments?.getString(KEY_FILE_NAME))
}
builder.setNegativeButton(android.R.string.no) { _, _ ->
builder.setNegativeButton(android.R.string.cancel) { _, _ ->
dismiss()
}
// Create the AlertDialog object and return it

View File

@@ -61,12 +61,12 @@ class ReplaceFileDialogFragment : DialogFragment() {
append("\n\n")
append(getString(R.string.warning_sure_add_file))
})
builder.setPositiveButton(android.R.string.yes) { _, _ ->
builder.setPositiveButton(android.R.string.ok) { _, _ ->
mActionChooseListener?.onValidateReplaceFile(
arguments?.getParcelable(KEY_FILE_URI),
arguments?.getParcelable(KEY_ENTRY_ATTACHMENT))
}
builder.setNegativeButton(android.R.string.no) { _, _ ->
builder.setNegativeButton(android.R.string.cancel) { _, _ ->
dismiss()
}
// Create the AlertDialog object and return it

View File

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

View File

@@ -68,9 +68,11 @@ internal class StructureParser(private val structure: AssistStructure) {
private fun parseViewNode(node: AssistStructure.ViewNode): Boolean {
// Get the domain of a web app
node.webDomain?.let {
result?.domain = it
Log.d(TAG, "Autofill domain: $it")
node.webDomain?.let { webDomain ->
if (webDomain.isNotEmpty()) {
result?.domain = webDomain
Log.d(TAG, "Autofill domain: $webDomain")
}
}
// Only parse visible nodes
@@ -100,19 +102,14 @@ internal class StructureParser(private val structure: AssistStructure) {
val autofillId = node.autofillId
node.autofillHints?.forEach {
when {
it.equals(View.AUTOFILL_HINT_USERNAME, true)
|| it.equals(View.AUTOFILL_HINT_EMAIL_ADDRESS, true)
|| it.equals("email", true)
|| it.equals(View.AUTOFILL_HINT_PHONE, true)
|| it.contains("OrUsername", true)
|| it.contains("OrEmailAddress", true)
|| it.contains("OrEmail", true)
|| it.contains("OrPhone", true)-> {
it.contains(View.AUTOFILL_HINT_USERNAME, true)
|| it.contains(View.AUTOFILL_HINT_EMAIL_ADDRESS, true)
|| it.contains("email", true)
|| it.contains(View.AUTOFILL_HINT_PHONE, true)-> {
result?.usernameId = autofillId
Log.d(TAG, "Autofill username hint")
}
it.equals(View.AUTOFILL_HINT_PASSWORD, true)
|| it.contains("password", true) -> {
it.contains(View.AUTOFILL_HINT_PASSWORD, true) -> {
result?.passwordId = autofillId
Log.d(TAG, "Autofill password hint")
// Username not needed in this case

View File

@@ -19,17 +19,23 @@
*/
package com.kunzisoft.keepass.crypto.keyDerivation
import com.kunzisoft.keepass.stream.LittleEndianDataInputStream
import com.kunzisoft.keepass.stream.LittleEndianDataOutputStream
import com.kunzisoft.keepass.stream.bytes16ToUuid
import com.kunzisoft.keepass.stream.uuidTo16Bytes
import com.kunzisoft.keepass.utils.VariantDictionary
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.*
class KdfParameters(val uuid: UUID) : VariantDictionary() {
class KdfParameters: VariantDictionary {
val uuid: UUID
constructor(uuid: UUID): super() {
this.uuid = uuid
}
constructor(uuid: UUID, d: VariantDictionary): super(d) {
this.uuid = uuid
}
fun setParamUUID() {
setByteArray(PARAM_UUID, uuidTo16Bytes(uuid))
@@ -41,25 +47,17 @@ class KdfParameters(val uuid: UUID) : VariantDictionary() {
@Throws(IOException::class)
fun deserialize(data: ByteArray): KdfParameters? {
val inputStream = LittleEndianDataInputStream(ByteArrayInputStream(data))
val dictionary = deserialize(inputStream)
val dictionary = VariantDictionary.deserialize(data)
val uuidBytes = dictionary.getByteArray(PARAM_UUID) ?: return null
val uuid = bytes16ToUuid(uuidBytes)
val kdfParameters = KdfParameters(uuid)
kdfParameters.copyTo(dictionary)
return kdfParameters
return KdfParameters(uuid, dictionary)
}
@Throws(IOException::class)
fun serialize(kdfParameters: KdfParameters): ByteArray {
val byteArrayOutputStream = ByteArrayOutputStream()
val outputStream = LittleEndianDataOutputStream(byteArrayOutputStream)
serialize(kdfParameters, outputStream)
return byteArrayOutputStream.toByteArray()
return VariantDictionary.serialize(kdfParameters)
}
}

View File

@@ -25,6 +25,8 @@ import android.util.Log
import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction
import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.utils.UriUtil
import com.kunzisoft.keepass.utils.closeDatabase
class CreateDatabaseRunnable(context: Context,
private val mDatabase: Database,
@@ -45,7 +47,7 @@ class CreateDatabaseRunnable(context: Context,
createData(mDatabaseUri, databaseName, rootName)
}
} catch (e: Exception) {
mDatabase.closeAndClear(context.applicationContext.filesDir)
mDatabase.closeAndClear(UriUtil.getBinaryDir(context))
setError(e)
}

View File

@@ -30,6 +30,8 @@ import com.kunzisoft.keepass.database.exception.LoadDatabaseException
import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.tasks.ActionRunnable
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
import com.kunzisoft.keepass.utils.UriUtil
import com.kunzisoft.keepass.utils.closeDatabase
class LoadDatabaseRunnable(private val context: Context,
private val mDatabase: Database,
@@ -45,7 +47,7 @@ class LoadDatabaseRunnable(private val context: Context,
override fun onStartRun() {
// Clear before we load
mDatabase.closeAndClear(context.applicationContext.filesDir)
mDatabase.closeAndClear(UriUtil.getBinaryDir(context))
}
override fun onActionRun() {
@@ -53,7 +55,7 @@ class LoadDatabaseRunnable(private val context: Context,
mDatabase.loadData(mUri, mPass, mKey,
mReadonly,
context.contentResolver,
context.applicationContext.filesDir,
UriUtil.getBinaryDir(context),
mFixDuplicateUUID,
progressTaskUpdater)
}
@@ -81,7 +83,7 @@ class LoadDatabaseRunnable(private val context: Context,
// Register the current time to init the lock timer
PreferencesUtil.saveCurrentTime(context)
} else {
mDatabase.closeAndClear(context.applicationContext.filesDir)
mDatabase.closeAndClear(UriUtil.getBinaryDir(context))
}
}

View File

@@ -453,10 +453,10 @@ class Database {
}
fun buildNewBinary(cacheDirectory: File,
enableProtection: Boolean = false,
compressed: Boolean = false): BinaryAttachment? {
compressed: Boolean = false,
protected: Boolean = false): BinaryAttachment? {
return mDatabaseKDB?.buildNewBinary(cacheDirectory)
?: mDatabaseKDBX?.buildNewBinary(cacheDirectory, enableProtection, compressed)
?: mDatabaseKDBX?.buildNewBinary(cacheDirectory, compressed, protected)
}
fun removeAttachmentIfNotUsed(attachment: Attachment) {

View File

@@ -28,17 +28,15 @@ import java.util.zip.GZIPOutputStream
class BinaryAttachment : Parcelable {
private var dataFile: File? = null
var isCompressed: Boolean = false
private set
var isProtected: Boolean = false
private set
var isCorrupted: Boolean = false
private var dataFile: File? = null
fun length(): Long {
if (dataFile != null)
return dataFile!!.length()
return 0
return dataFile?.length() ?: 0
}
/**
@@ -46,26 +44,25 @@ class BinaryAttachment : Parcelable {
*/
constructor()
constructor(dataFile: File, enableProtection: Boolean = false, compressed: Boolean = false) {
this.isCompressed = compressed
this.isProtected = enableProtection
constructor(dataFile: File, compressed: Boolean = false, protected: Boolean = false) {
this.dataFile = dataFile
this.isCompressed = compressed
this.isProtected = protected
}
private constructor(parcel: Parcel) {
val compressedByte = parcel.readByte().toInt()
isCompressed = compressedByte != 0
isProtected = parcel.readByte().toInt() != 0
isCorrupted = parcel.readByte().toInt() != 0
parcel.readString()?.let {
dataFile = File(it)
}
isCompressed = parcel.readByte().toInt() != 0
isProtected = parcel.readByte().toInt() != 0
isCorrupted = parcel.readByte().toInt() != 0
}
@Throws(IOException::class)
fun getInputDataStream(): InputStream {
return when {
dataFile != null -> FileInputStream(dataFile!!)
length() > 0 -> FileInputStream(dataFile!!)
else -> ByteArrayInputStream(ByteArray(0))
}
}
@@ -185,10 +182,10 @@ class BinaryAttachment : Parcelable {
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(dataFile?.absolutePath)
dest.writeByte((if (isCompressed) 1 else 0).toByte())
dest.writeByte((if (isProtected) 1 else 0).toByte())
dest.writeByte((if (isCorrupted) 1 else 0).toByte())
dest.writeString(dataFile?.absolutePath)
}
companion object {

View File

@@ -137,6 +137,17 @@ class BinaryPool {
pool.clear()
}
override fun toString(): String {
val stringBuffer = StringBuffer()
for ((key, value) in pool) {
if (stringBuffer.isNotEmpty())
stringBuffer.append(", {$key:$value}")
else
stringBuffer.append("{$key:$value}")
}
return stringBuffer.toString()
}
/**
* Utility data class to order binaries
*/

View File

@@ -44,6 +44,8 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
private var kdfListV3: MutableList<KdfEngine> = ArrayList()
private var binaryIncrement = 0
override val version: String
get() = "KeePass 1"
@@ -264,8 +266,9 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
}
fun buildNewBinary(cacheDirectory: File): BinaryAttachment {
// Generate an unique new file with timestamp
val fileInCache = File(cacheDirectory, System.currentTimeMillis().toString())
// Generate an unique new file
val fileInCache = File(cacheDirectory, binaryIncrement.toString())
binaryIncrement++
return BinaryAttachment(fileInCache)
}

View File

@@ -107,6 +107,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
val customData = HashMap<String, String>()
var binaryPool = BinaryPool()
private var binaryIncrement = 0 // Unique id (don't use current time because CPU too fast)
var localizedAppName = "KeePassDX"
@@ -557,12 +558,13 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
}
fun buildNewBinary(cacheDirectory: File,
protection: Boolean,
compression: Boolean,
protection: Boolean,
binaryPoolId: Int? = null): BinaryAttachment {
// New file with current time
val fileInCache = File(cacheDirectory, System.currentTimeMillis().toString())
val binaryAttachment = BinaryAttachment(fileInCache, protection, compression)
val fileInCache = File(cacheDirectory, binaryIncrement.toString())
binaryIncrement++
val binaryAttachment = BinaryAttachment(fileInCache, compression, protection)
// add attachment to pool
binaryPool.put(binaryPoolId, binaryAttachment)
return binaryAttachment

View File

@@ -61,8 +61,7 @@ class EntryKDBX : EntryVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
super.icon = value
}
var iconCustom = IconImageCustom.UNKNOWN_ICON
private var customData = LinkedHashMap<String, String>()
// TODO Private
var customData = LinkedHashMap<String, String>()
var fields = LinkedHashMap<String, ProtectedString>()
var binaries = LinkedHashMap<String, Int>() // Map<Label, PoolId>
var foregroundColor = ""

View File

@@ -33,6 +33,7 @@ import com.kunzisoft.keepass.database.exception.VersionDatabaseException
import com.kunzisoft.keepass.stream.*
import com.kunzisoft.keepass.utils.UnsignedInt
import com.kunzisoft.keepass.utils.UnsignedLong
import com.kunzisoft.keepass.utils.VariantDictionary
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.io.InputStream
@@ -221,10 +222,8 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
PwDbHeaderV4Fields.KdfParameters -> databaseV4.kdfParameters = KdfParameters.deserialize(fieldData)
PwDbHeaderV4Fields.PublicCustomData -> {
databaseV4.publicCustomData = KdfParameters.deserialize(fieldData)!! // TODO verify
throw IOException("Invalid header type: $fieldID")
}
PwDbHeaderV4Fields.PublicCustomData -> databaseV4.publicCustomData = VariantDictionary.deserialize(fieldData)
else -> throw IOException("Invalid header type: $fieldID")
}

View File

@@ -253,10 +253,10 @@ class DatabaseInputKDBX(cacheDirectory: File,
}
DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary -> {
// Read in a file
val protectedFlag = dataInputStream.readBytes(1)[0].toInt() != 0
val protectedFlag = dataInputStream.read().toByte() == DatabaseHeaderKDBX.KdbxBinaryFlags.Protected
val byteLength = size - 1
// No compression at this level
val protectedBinary = mDatabase.buildNewBinary(cacheDirectory, protectedFlag, false)
val protectedBinary = mDatabase.buildNewBinary(cacheDirectory, false, protectedFlag)
protectedBinary.getOutputDataStream().use { outputStream ->
dataInputStream.readBytes(byteLength, DatabaseKDBX.BUFFER_SIZE_BYTES) { buffer ->
outputStream.write(buffer)
@@ -954,7 +954,13 @@ class DatabaseInputKDBX(cacheDirectory: File,
xpp.next() // Consume end tag
val id = Integer.parseInt(ref)
// A ref is not necessarily an index in Database V3.1
mDatabase.binaryPool[id]
var binaryRetrieve = mDatabase.binaryPool[id]
// Create empty binary if not retrieved in pool
if (binaryRetrieve == null) {
binaryRetrieve = mDatabase.buildNewBinary(cacheDirectory,
compression = false, protection = true, binaryPoolId = id)
}
return binaryRetrieve
}
key != null -> {
createBinary(key.toIntOrNull(), xpp)
@@ -969,7 +975,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
@Throws(IOException::class, XmlPullParserException::class)
private fun createBinary(binaryId: Int?, xpp: XmlPullParser): BinaryAttachment? {
var compressed = false
var protected = false
var protected = true
if (xpp.attributeCount > 0) {
val compress = xpp.getAttributeValue(null, DatabaseKDBXXML.AttrCompressed)
@@ -988,7 +994,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
return null
// Build the new binary and compress
val binaryAttachment = mDatabase.buildNewBinary(cacheDirectory, protected, compressed, binaryId)
val binaryAttachment = mDatabase.buildNewBinary(cacheDirectory, compressed, protected, binaryId)
try {
binaryAttachment.getOutputDataStream().use { outputStream ->
outputStream.write(Base64.decode(base64, BASE_64_FLAG))

View File

@@ -24,6 +24,7 @@ import com.kunzisoft.keepass.database.element.database.DatabaseKDBX.Companion.BU
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX
import com.kunzisoft.keepass.stream.LittleEndianDataOutputStream
import com.kunzisoft.keepass.stream.readBytes
import com.kunzisoft.keepass.utils.UnsignedInt
import java.io.IOException
import java.io.OutputStream
import kotlin.experimental.or
@@ -36,32 +37,32 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX,
@Throws(IOException::class)
fun output() {
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomStreamID.toInt())
dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomStreamID)
dataOutputStream.writeInt(4)
if (header.innerRandomStream == null)
throw IOException("Can't write innerRandomStream")
dataOutputStream.writeInt(header.innerRandomStream!!.id.toKotlinInt())
dataOutputStream.writeUInt(header.innerRandomStream!!.id)
val streamKeySize = header.innerRandomStreamKey.size
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomstreamKey.toInt())
dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomstreamKey)
dataOutputStream.writeInt(streamKeySize)
dataOutputStream.write(header.innerRandomStreamKey)
database.binaryPool.doForEachOrderedBinary { _, keyBinary ->
val protectedBinary = keyBinary.binary
// Force decompression to add binary in header
protectedBinary.decompress()
// Write type binary
dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary)
// Write size
dataOutputStream.writeUInt(UnsignedInt.fromKotlinLong(protectedBinary.length() + 1))
// Write protected flag
var flag = DatabaseHeaderKDBX.KdbxBinaryFlags.None
if (protectedBinary.isProtected) {
flag = flag or DatabaseHeaderKDBX.KdbxBinaryFlags.Protected
}
dataOutputStream.writeByte(flag)
// Force decompression to add binary in header
protectedBinary.decompress()
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.Binary.toInt())
dataOutputStream.writeInt(protectedBinary.length().toInt() + 1)
dataOutputStream.write(flag.toInt())
// if was compressed in cache, uncompress it
protectedBinary.getInputDataStream().use { inputStream ->
inputStream.readBytes(BUFFER_SIZE_BYTES) { buffer ->
dataOutputStream.write(buffer)
@@ -69,7 +70,7 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX,
}
}
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.EndOfHeader.toInt())
dataOutputStream.writeByte(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.EndOfHeader)
dataOutputStream.writeInt(0)
}
}

View File

@@ -359,6 +359,9 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
writeFields(entry.fields)
writeEntryBinaries(entry.binaries)
if (entry.containsCustomData()) {
writeCustomData(entry.customData)
}
writeAutoType(entry.autoType)
if (!isHistory) {

View File

@@ -33,6 +33,11 @@ class Field : Parcelable {
this.protectedValue = value
}
constructor(fieldToCopy: Field) {
this.name = fieldToCopy.name
this.protectedValue = fieldToCopy.protectedValue
}
constructor(parcel: Parcel) {
this.name = parcel.readString() ?: name
this.protectedValue = parcel.readParcelable(ProtectedString::class.java.classLoader) ?: protectedValue

View File

@@ -237,7 +237,7 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
AlertDialog.Builder(context)
.setMessage(resources.getString(R.string.biometric_delete_all_key_warning))
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(resources.getString(android.R.string.yes)
.setPositiveButton(resources.getString(android.R.string.ok)
) { _, _ ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
BiometricUnlockDatabaseHelper.deleteEntryKeyInKeystoreForBiometric(
@@ -260,7 +260,7 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
}
CipherDatabaseAction.getInstance(context.applicationContext).deleteAll()
}
.setNegativeButton(resources.getString(android.R.string.no))
.setNegativeButton(resources.getString(android.R.string.cancel))
{ _, _ -> }.show()
}
false

View File

@@ -60,6 +60,11 @@ class LittleEndianDataOutputStream(private val baseStream: OutputStream) : Outpu
baseStream.write(oneByte)
}
@Throws(IOException::class)
fun writeByte(byte: Byte) {
baseStream.write(byte.toInt())
}
@Throws(IOException::class)
fun writeLong(value: Long) {
baseStream.write(longTo8Bytes(value))

View File

@@ -133,5 +133,5 @@ fun Context.closeDatabase() {
cancelAll()
}
// Clear data
Database.getInstance().closeAndClear(applicationContext.filesDir)
Database.getInstance().closeAndClear(UriUtil.getBinaryDir(this))
}

View File

@@ -19,6 +19,7 @@
*/
package com.kunzisoft.keepass.utils
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
@@ -37,12 +38,18 @@ fun getUnusedCreateFileRequestCode(): Int {
return newCreateFileRequestCode
}
@SuppressLint("InlinedApi")
fun allowCreateDocumentByStorageAccessFramework(packageManager: PackageManager): Boolean {
return Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/x-keepass"
}.resolveActivity(packageManager) != null
return when {
// To check if a custom file manager can manage the ACTION_CREATE_DOCUMENT
Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT -> {
packageManager.queryIntentActivities(Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/x-keepass"
}, PackageManager.MATCH_DEFAULT_ONLY).isNotEmpty()
}
else -> true
}
}
fun createDocument(activity: FragmentActivity,

View File

@@ -146,4 +146,12 @@ object UriUtil {
gotoUrl(context, context.getString(resId))
}
fun getBinaryDir(context: Context): File {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
context.applicationContext.noBackupFilesDir
} else {
context.applicationContext.filesDir
}
}
}

View File

@@ -19,16 +19,24 @@
*/
package com.kunzisoft.keepass.utils
import com.kunzisoft.keepass.stream.LittleEndianDataInputStream
import com.kunzisoft.keepass.stream.LittleEndianDataOutputStream
import com.kunzisoft.keepass.stream.bytes4ToUInt
import com.kunzisoft.keepass.stream.bytes64ToLong
import com.kunzisoft.keepass.crypto.keyDerivation.KdfParameters
import com.kunzisoft.keepass.stream.*
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.nio.charset.Charset
import java.util.*
open class VariantDictionary {
constructor()
constructor(d: VariantDictionary) {
for ((key, value) in d.dict) {
dict[key] = value
}
}
private val dict: MutableMap<String, VdType> = HashMap()
private fun getValue(name: String): Any? {
@@ -95,12 +103,6 @@ open class VariantDictionary {
return getValue(name) as ByteArray?
}
fun copyTo(d: VariantDictionary) {
for ((key, value) in d.dict) {
dict[key] = value
}
}
fun size(): Int {
return dict.size
}
@@ -111,6 +113,20 @@ open class VariantDictionary {
private const val VdmInfo = 0x00FF
private val UTF8Charset = Charset.forName("UTF-8")
@Throws(IOException::class)
fun deserialize(data: ByteArray): VariantDictionary {
val inputStream = LittleEndianDataInputStream(ByteArrayInputStream(data))
return deserialize(inputStream)
}
@Throws(IOException::class)
fun serialize(kdfParameters: KdfParameters): ByteArray {
val byteArrayOutputStream = ByteArrayOutputStream()
val outputStream = LittleEndianDataOutputStream(byteArrayOutputStream)
serialize(kdfParameters, outputStream)
return byteArrayOutputStream.toByteArray()
}
@Throws(IOException::class)
fun deserialize(inputStream: LittleEndianDataInputStream): VariantDictionary {
val dictionary = VariantDictionary()

View File

@@ -96,11 +96,11 @@ class EntryContentsView @JvmOverloads constructor(context: Context,
urlFieldView = findViewById(R.id.entry_url_field)
urlFieldView.setLabel(R.string.entry_url)
urlFieldView.setValueAutoLink(true)
urlFieldView.setLinkAll()
notesFieldView = findViewById(R.id.entry_notes_field)
notesFieldView.setLabel(R.string.entry_notes)
notesFieldView.setValueAutoLink(true)
notesFieldView.setAutoLink()
extraFieldsContainerView = findViewById(R.id.extra_fields_container)
extraFieldsListView = findViewById(R.id.extra_fields_list)
@@ -304,7 +304,7 @@ class EntryContentsView @JvmOverloads constructor(context: Context,
entryCustomField?.apply {
setLabel(title)
setValue(value.toString(), value.isProtected)
setValueAutoLink(true)
setAutoLink()
activateCopyButton(allowCopy)
assignCopyButtonClickListener(onCopyButtonClickListener)
applyFontVisibility(fontInVisibility)

View File

@@ -30,6 +30,7 @@ import android.widget.TextView
import androidx.annotation.StringRes
import androidx.core.text.util.LinkifyCompat
import com.kunzisoft.keepass.R
import java.util.regex.Pattern
class EntryField @JvmOverloads constructor(context: Context,
attrs: AttributeSet? = null,
@@ -100,19 +101,27 @@ class EntryField @JvmOverloads constructor(context: Context,
setTextIsSelectable(true)
}
applyHiddenStyle(isProtected && !showButtonView.isSelected)
if (valueView.autoLinkMask == Linkify.ALL) {
try {
LinkifyCompat.addLinks(this, Linkify.ALL)
} catch (e: Exception) {}
if (valueView.autoLinkMask == LINKIFY_MASKS) {
linkify()
}
}
}
fun setValueAutoLink(autoLink: Boolean) {
valueView.autoLinkMask = if (autoLink && !isProtected) Linkify.ALL else 0
fun setAutoLink() {
if (!isProtected) linkify()
changeProtectedValueParameters()
}
private fun linkify() {
valueView.autoLinkMask = LINKIFY_MASKS
LinkifyCompat.addLinks(valueView, LINKIFY_MASKS)
}
fun setLinkAll() {
valueView.autoLinkMask = LINKIFY_ALL
LinkifyCompat.addLinks(valueView, LINKIFY_ALL)
}
fun activateCopyButton(enable: Boolean) {
// Reverse because isActivated show custom color and allow click
copyButtonView.isActivated = !enable
@@ -122,4 +131,8 @@ class EntryField @JvmOverloads constructor(context: Context,
copyButtonView.setOnClickListener(onClickActionListener)
copyButtonView.visibility = if (onClickActionListener == null) GONE else VISIBLE
}
companion object {
private const val LINKIFY_MASKS = Linkify.WEB_URLS or Linkify.EMAIL_ADDRESSES
private const val LINKIFY_ALL = Linkify.ALL
}
}

View File

@@ -25,7 +25,7 @@
<string name="add_group">Přidat skupinu</string>
<string name="encryption_algorithm">Šifrovací algoritmus</string>
<string name="app_timeout">Časový limit aplikace</string>
<string name="app_timeout_summary">Doba nečinnosti než se aplikace zamkne</string>
<string name="app_timeout_summary">Doba nečinnosti, po které se aplikace zamkne</string>
<string name="application">Aplikace</string>
<string name="menu_app_settings">Nastavení aplikace</string>
<string name="brackets">Závorky</string>
@@ -37,9 +37,9 @@
<string name="clipboard_timeout">Časový limit schránky</string>
<string name="clipboard_timeout_summary">Doba uchování ve schránce</string>
<string name="select_to_copy">Vyberte zkopírovat %1$s do schránky</string>
<string name="retrieving_db_key">Vytváření klíče databáze…</string>
<string name="retrieving_db_key">Načítání klíče databáze…</string>
<string name="database">Databáze</string>
<string name="decrypting_db">Rozšifrování obsahu databáze…</string>
<string name="decrypting_db">Dešifrování obsahu databáze…</string>
<string name="default_checkbox">Použít jako výchozí databázi</string>
<string name="digits">Číslice</string>
<string name="select_database_file">Otevřít existující databázi</string>
@@ -61,12 +61,12 @@
<string name="error_can_not_handle_uri">KeePassDX nemůže zpracovat toto URI.</string>
<string name="error_file_not_create">Soubor se nedaří vytvořit</string>
<string name="error_invalid_db">Databázi nelze číst.</string>
<string name="error_invalid_path">Neplatná cesta.</string>
<string name="error_no_name">Vložte jméno.</string>
<string name="error_invalid_path">Ujistěte se, že cesta je správná.</string>
<string name="error_no_name">Zadejte jméno.</string>
<string name="error_nokeyfile">Vyberte soubor s klíčem.</string>
<string name="error_out_of_memory">Nedostatek paměti k otevření databáze.</string>
<string name="error_out_of_memory">Nedostatek paměti k načtení celé databáze.</string>
<string name="error_pass_gen_type">Je třeba zvolit alespoň jeden způsob vytváření hesla.</string>
<string name="error_pass_match">Zadá hesla se neshodují.</string>
<string name="error_pass_match">Zadaná hesla se neshodují.</string>
<string name="error_rounds_too_large">Příliš vysoký „Počet průchodů“. Nastavuji na 2147483648.</string>
<string name="error_string_key">Je třeba, aby každý řetězec měl název kolonky.</string>
<string name="error_wrong_length">Do nastavení „Délka“ zadejte celé kladné číslo.</string>
@@ -341,11 +341,11 @@
<string name="keyboard_selection_entry_summary">Při prohlížení záznamu ukázat na Magikeyboard pole položek</string>
<string name="delete_entered_password_title">Smazat heslo</string>
<string name="delete_entered_password_summary">Smaže heslo zadané po pokusu o připojení k databázi</string>
<string name="content_description_open_file">Otevři soubor</string>
<string name="content_description_open_file">Otevřít soubor</string>
<string name="content_description_node_children">Potomci uzlu</string>
<string name="content_description_add_node">Přidej uzel</string>
<string name="content_description_add_entry">Přidej záznam</string>
<string name="content_description_add_group">Přidej skupinu</string>
<string name="content_description_add_group">Přidat skupinu</string>
<string name="content_description_file_information">Informace o souboru</string>
<string name="content_description_password_checkbox">Checkbox hesla</string>
<string name="content_description_keyfile_checkbox">Checkbox souboru s klíčem</string>
@@ -354,7 +354,7 @@
<string name="entry_password_generator">Generátor hesel</string>
<string name="content_description_password_length">Délka hesla</string>
<string name="entry_add_field">Přidej pole</string>
<string name="content_description_remove_field">Odebrat pole</string>
<string name="content_description_remove_field">Odeber pole</string>
<string name="entry_UUID">UUID</string>
<string name="error_move_entry_here">Sem záznam přesunout nelze.</string>
<string name="error_copy_entry_here">Sem záznam zkopírovat nelze.</string>
@@ -402,7 +402,7 @@
<string name="clipboard_explanation_summary">Kopírujte pole záznamů pomocí schránky Vašeho zařízení</string>
<string name="advanced_unlock_explanation_summary">K snadnějšímu otevření databáze použijte pokročilé odemknutí</string>
<string name="database_data_compression_title">Komprese dat</string>
<string name="database_data_compression_summary">Komprese dat snižuje velikost databáze.</string>
<string name="database_data_compression_summary">Komprese dat snižuje velikost databáze</string>
<string name="max_history_items_title">Maximální počet</string>
<string name="max_history_items_summary">Omezit počet položek v historii záznamu</string>
<string name="max_history_size_title">Maximální velikost</string>
@@ -453,7 +453,7 @@
<string name="show_recent_files_title">Ukázat nedávné soubory</string>
<string name="show_recent_files_summary">Ukázat umístění nedávných databází</string>
<string name="hide_broken_locations_title">Skrýt špatné odkazy na databáze</string>
<string name="hide_broken_locations_summary">Skrýt špatné odkazy v seznamu nedávných databází</string>
<string name="hide_broken_locations_summary">Skrýt nesprávné odkazy v seznamu nedávných databází</string>
<string name="warning_database_read_only">Udělit právo zápisu pro uložení změn v databázi</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft je &lt;strong&gt;open source&lt;/strong&gt; a &lt;strong&gt;bey reklam&lt;/strong&gt;.
\nJe poskytován jak je, pod licencí &lt;strong&gt;GPLv3&lt;/strong&gt;, bez jakékoli záruky.</string>
@@ -490,4 +490,20 @@
<string name="keyboard_previous_database_credentials_summary">Automaticky přepnout zpět na předchozí klávesnici na obrazovce ověřovacích údajů databáze</string>
<string name="keyboard_previous_database_credentials_title">Obrazovka ověřovacích údajů databáze</string>
<string name="keyboard_change">Přepnout klávesnici</string>
<string name="upload_attachment">Nahrát %1$s</string>
<string name="content_description_credentials_information">Info o údajích</string>
<string name="warning_file_too_big">Databáze KeePassu předpokládá uchovávat jen malé pomocné sobory (např. PGP soubory).
\n
\nVaše databáze by se mohla značně zvětšit a tímto nahráním tak ztratit na výkonnosti.</string>
<string name="warning_replace_file">Nahráním tohoto souboru nahradíte existující soubor.</string>
<string name="warning_sure_add_file">I přesto přidat soubor\?</string>
<string name="warning_remove_unlinked_attachment">Odstranění dat bez propojení patrně sníží velikost Vaší databáze, ale může též dojít k smazání dat používaných pluginy KeePassu.</string>
<string name="warning_sure_remove_data">I přesto odstranit tato data\?</string>
<string name="warning_empty_keyfile">Nedoporučuje se přidat prázdný soubor klíčů.</string>
<string name="warning_empty_keyfile_explanation">Obsah souboru klíčů by se neměl nikdy změnit, v nejlepším případě by měl obsahovat náhodně generovaná data.</string>
<string name="data">Data</string>
<string name="database_data_remove_unlinked_attachments_title">Odstranit data bez propojení</string>
<string name="database_data_remove_unlinked_attachments_summary">Odstraní přílohy obsažené v databázi, ale nikoli přílohy propojené se záznamem</string>
<string name="education_add_attachment_title">Přidat přílohu</string>
<string name="education_add_attachment_summary">Nahrát přílohu k záznamu pro uložení důležitých externích dat.</string>
</resources>

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@@ -4,7 +4,7 @@
<string name="database_history">تاریخچه</string>
<string name="credential_before_click_biometric_button">رمز ورود را وارد کنید و سپس روی دکمه \"بیومتریک\" کلیک کنید.</string>
<string name="no_credentials_stored">این پایگاه داده هنوز اطلاعات کاربری ذخیره نشده است.</string>
<string name="biometric_scanning_error">خطای بیومتریک:٪ 1 $ s</string>
<string name="biometric_scanning_error">خطای بیومتریک:%1$s</string>
<string name="biometric_not_recognized">بایومتریک قابل تشخیص نیست</string>
<string name="biometric_invalid_key">"کلید بیومتریک را نمی توان خواند. لطفاً آن را حذف کرده و روش شناخت بیومتریک را تکرار کنید."</string>
<string name="encrypted_value_stored">رمز رمزگذاری شده ذخیره شده است</string>
@@ -16,8 +16,8 @@
<string name="open_biometric_prompt_unlock_database">برای باز کردن قفل پایگاه داده ، دستور بیومتریک را باز کنید</string>
<string name="keystore_not_accessible">فروشگاه اصلی به درستی تنظیم نشده است.</string>
<string name="configure_biometric">بیومتریک پشتیبانی می شود ، اما تنظیم نشده است.</string>
<string name="build_label">٪ 1 $ s را بسازید</string>
<string name="version_label">نسخه٪ 1 $ s</string>
<string name="build_label">%1$s را بسازید</string>
<string name="version_label">نسخه %1$s</string>
<string name="warning_permanently_delete_nodes">گره های انتخاب شده برای همیشه حذف شوند؟</string>
<string name="warning_no_encryption_key">بدون کلید رمزگذاری ادامه می دهید؟</string>
<string name="warning_empty_password">بدون محافظت در مورد باز کردن قفل رمز عبور ادامه می دهید؟</string>
@@ -199,7 +199,7 @@
<string name="entry_cancel">لغو</string>
<string name="entry_accessed">دیده</string>
<string name="html_about_contribution">به منظور &lt;strong&gt;نگاه آزادی ما&lt;/strong&gt; ، &lt;strong&gt;نقش های فیکسی&lt;/strong&gt; ، &lt;strong&gt;خدمات مضاعف&lt;/strong&gt; و &lt;strong&gt; همیشه فعال باشد&lt;/strong&gt; ، ما در &lt;strong&gt;مسابق&lt;/strong&gt; حساب می &lt;/strong&gt;.</string>
<string name="html_about_licence">KeePassDX © ٪1 $d Kunzisoft است &lt;strong&gt;منا منبع باز&lt;/strong&gt; و &lt;strong&gt;با تبلیغات&lt;/strong&gt;.
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft است &lt;strong&gt;منا منبع باز&lt;/strong&gt; و &lt;strong&gt;با تبلیغات&lt;/strong&gt;.
\nاین است که ارائه شده است، تحت &lt;strong&gt;GPLv3&lt;/strong&gt;، بدون هیچ گونه گارانتی.</string>
<string name="digits">رقم</string>
<string name="default_checkbox">استفاده به عنوان پایگاه داده پیش فرض</string>

View File

@@ -49,7 +49,7 @@
<string name="content_description_password_length">Duljina lozinke</string>
<string name="entry_add_field">Dodaj polje</string>
<string name="content_description_remove_field">Ukloni polje</string>
<string name="content_description_update_from_list">Ažuriraj</string>
<string name="content_description_update_from_list">Aktualiziraj</string>
<string name="content_description_remove_from_list">Ukloni</string>
<string name="content_description_keyboard_close_fields">Zatvori polja</string>
<string name="select_to_copy">Kopiraj %1$s u međuspremnik</string>
@@ -206,7 +206,7 @@
<string name="path">Putanja</string>
<string name="assign_master_key">Zadaj glavni ključ</string>
<string name="database_data_compression_title">Komprimiranje podataka</string>
<string name="database_data_compression_summary">Komprimiranje podataka smanjuje veličinu baze podataka.</string>
<string name="database_data_compression_summary">Komprimiranje podataka smanjuje veličinu baze podataka</string>
<string name="max_history_items_title">Maksimalni broj</string>
<string name="max_history_size_title">Maksimalna veličina</string>
<string name="settings_database_recommend_changing_master_key_title">Preporuči obnavljanje</string>
@@ -341,7 +341,7 @@
<string name="auto_focus_search_title">Brza pretraga</string>
<string name="error_create_database">Nije moguće stvoriti datoteku baze podataka.</string>
<string name="error_rounds_too_large">Previše „transformacijskih prolaza”. Postavlja se na 2147483648.</string>
<string name="html_about_licence">KeePassDX © %1$d. Kunzisoft je softver &lt;strong&gt;otvorenog koda&lt;/strong&gt; i &lt;strong&gt;ne sadrži oglase&lt;/strong&gt;.
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft je softver &lt;strong&gt;otvorenog koda&lt;/strong&gt; i &lt;strong&gt;ne sadrži oglase&lt;/strong&gt;.
\nNudi se kakav je, pod &lt;strong&gt;GPLv3&lt;/strong&gt; licencom, bez jamstva.</string>
<string name="entry_add_attachment">Dodaj privitak</string>
<string name="discard">Odbaci</string>
@@ -481,4 +481,12 @@
<string name="education_add_attachment_title">Dodaj privitak</string>
<string name="warning_sure_add_file">Svejedno dodati datoteku\?</string>
<string name="warning_replace_file">Prijenosom ove datoteke zamijenit će se postojeća.</string>
<string name="warning_empty_keyfile_explanation">Sadržaj datoteke ključeva nikada se ne bi trebao mijenjati, a u najboljem slučaju, trebao bi sadržavati nasumice generirane podatke.</string>
<string name="warning_empty_keyfile">Ne preporučuje se dodavanje prazne datoteke ključeva.</string>
<string name="warning_remove_unlinked_attachment">Uklanjanje nepovezanih podataka može smanjiti veličinu baze podataka, ali može i izbrisati podatke koji se koriste za KeePass dodatke.</string>
<string name="database_data_remove_unlinked_attachments_summary">Uklanja priložene datoteke u bazi podataka, koje nisu povezane s nekim unosom</string>
<string name="database_data_remove_unlinked_attachments_title">Ukloni nepovezane podatke</string>
<string name="data">Podaci</string>
<string name="warning_sure_remove_data">Svejedno ukloniti ove podatke\?</string>
<string name="content_description_credentials_information">Podaci podataka prijave</string>
</resources>

View File

@@ -145,7 +145,7 @@
<string name="discard_changes">Batalkan perubahan\?</string>
<string name="validate">Mengesahkan</string>
<string name="content_description_entry_icon">Ikon Entri</string>
<string name="content_description_keyfile_checkbox">Kotak Centang Berkas Kunci</string>
<string name="content_description_keyfile_checkbox">Kotak Centang File Kunci</string>
<string name="content_description_password_checkbox">Kotak Centang Kata Sandi</string>
<string name="content_description_file_information">Info File</string>
<string name="content_description_add_item">Tambahkan Item</string>
@@ -158,7 +158,7 @@
<string name="clipboard_error">Beberapa perangkat tidak mengizinkan aplikasi menggunakan papan klip.</string>
<string name="clipboard_error_title">Kesalahan Papan Klip</string>
<string name="allow">Ijinkan</string>
<string name="extended_ASCII">ASCII Diperpanjang</string>
<string name="extended_ASCII">ASCII Diperluas</string>
<string name="brackets">Tanda Kurung</string>
<string name="application">Aplikasi</string>
<string name="app_timeout">Batas Waktu Aplikasi</string>
@@ -183,4 +183,26 @@
<string name="create_keepass_file">Buat basisdata baru</string>
<string name="select_database_file">Buka basisdata yang sudah ada</string>
<string name="no_url_handler">Pasang browser web untuk membuka URL ini.</string>
<string name="memory_usage">Penggunaan memori</string>
<string name="rounds">Putaran transformasi</string>
<string name="encryption_explanation">Algoritma enkripsi basisdata digunakan untuk semua data.</string>
<string name="root">Root</string>
<string name="hide_broken_locations_summary">Sembunyikan tautan yang rusak dalam daftar basisdata terbaru</string>
<string name="hide_broken_locations_title">Sembunyikan tautan basisdata yang rusak</string>
<string name="show_recent_files_summary">Tampilkan lokasi dari basisdata terbaru</string>
<string name="show_recent_files_title">Tampilkan file sebelumnya</string>
<string name="remember_keyfile_locations_summary">Melacak di mana file kunci disimpan</string>
<string name="remember_keyfile_locations_title">Ingat lokasi file kunci</string>
<string name="remember_database_locations_summary">Melacak di mana database disimpan</string>
<string name="remember_database_locations_title">Ingat lokasi basisdata</string>
<string name="selection_mode">Mode seleksi</string>
<string name="contains_duplicate_uuid_procedure">Selesaikan masalah dengan menghasilkan UUID baru, lanjutkan\?</string>
<string name="contains_duplicate_uuid">Basisdata berisi UUIDs duplikat.</string>
<string name="read_only_warning">Tergantung pada manajer file Anda, KeePassDX mungkin tidak diizinkan untuk menulis di penyimpanan Anda.</string>
<string name="read_only">Terlindung dari penulisan</string>
<string name="protection">Perlindungan</string>
<string name="progress_title">Sedang bekerja…</string>
<string name="progress_create">Membuat basisdata baru…</string>
<string name="subdomain_search_summary">Cari Domain Web dengan Kendala Subdomain</string>
<string name="subdomain_search_title">Pencarian Subdomain</string>
</resources>

View File

@@ -114,7 +114,7 @@
<string name="saving_database">データベースを保存しています…</string>
<string name="space">スペース</string>
<string name="search_label">検索</string>
<string name="sort_db">自然順</string>
<string name="sort_db">並べ替えなし</string>
<string name="special">特殊文字</string>
<string name="search">検索</string>
<string name="encryption_twofish">Twofish</string>
@@ -176,7 +176,7 @@
<string name="read_only">書き込み禁止</string>
<string name="read_only_warning">ファイル マネージャーによっては、KeePassDX によるストレージへの書き込みを許可していない場合があります。</string>
<string name="encryption_explanation">すべてのデータで使用するデータベース暗号化アルゴリズムです。</string>
<string name="sort_menu">替え</string>
<string name="sort_menu">替え</string>
<string name="sort_ascending">昇順 ↓</string>
<string name="sort_recycle_bin_bottom">ゴミ箱を一番下にする</string>
<string name="sort_title">タイトル</string>
@@ -304,7 +304,7 @@
\nグループ≒フォルダはデータベース内のエントリーを整理します。</string>
<string name="education_search_title">エントリーを検索</string>
<string name="education_unlock_title">データベースのロックを解除</string>
<string name="education_sort_title">項目の並替え</string>
<string name="education_sort_title">項目の並替え</string>
<string name="education_new_node_title">データベースに項目を追加</string>
<string name="assign_master_key">マスターキーを設定</string>
<string name="education_select_database_summary">これまで使ってきたデータベース ファイルを、ファイルブラウザから開いて引き続き使用します。</string>
@@ -473,7 +473,7 @@
<string name="max_history_size_title">最大サイズ</string>
<string name="max_history_items_summary">エントリーあたりの履歴項目の数を制限します</string>
<string name="max_history_items_title">最大値</string>
<string name="database_data_compression_summary">データ圧縮によりデータベースのサイズが縮小されます</string>
<string name="database_data_compression_summary">データ圧縮によりデータベースのサイズが縮小されます</string>
<string name="database_data_compression_title">データ圧縮</string>
<string name="file_name">ファイル名</string>
<string name="unavailable_feature_hardware">対応するハードウェアが見つかりませんでした。</string>
@@ -497,4 +497,12 @@
<string name="education_add_attachment_summary">エントリーに添付ファイルをアップロードして、重要な外部データを保存します。</string>
<string name="education_add_attachment_title">添付ファイルを追加</string>
<string name="warning_sure_add_file">それでもファイルを追加しますか?</string>
<string name="warning_empty_keyfile_explanation">キーファイルの内容は決して変更してはいけません。また万全を期すにはランダムに生成されたデータを含んでいるべきです。</string>
<string name="data">データ</string>
<string name="warning_empty_keyfile">空のキーファイルを追加することは推奨されません。</string>
<string name="warning_remove_unlinked_attachment">リンクされていないデータを削除すると、データベースのサイズが小さくなるかもしれませんが、KeePass プラグインで使用されているデータも削除されるかもしれません。</string>
<string name="content_description_credentials_information">認証情報について</string>
<string name="database_data_remove_unlinked_attachments_summary">データベースに含まれているが、エントリーにリンクされていない添付ファイルを削除します</string>
<string name="database_data_remove_unlinked_attachments_title">リンクされていないデータを削除</string>
<string name="warning_sure_remove_data">それでもこのデータを削除しますか?</string>
</resources>

View File

@@ -315,8 +315,8 @@
<string name="kdf_Argon2">Argon2</string>
<string name="style_choose_title">App-thema</string>
<string name="style_choose_summary">Thema gebruikt in de app</string>
<string name="icon_pack_choose_title">Icoonverzameling</string>
<string name="icon_pack_choose_summary">Iconenverzameling gebruikt in de app</string>
<string name="icon_pack_choose_title">Pictogrammenverzameling</string>
<string name="icon_pack_choose_summary">Pictogrammenverzameling in gebruik</string>
<string name="build_label">Build %1$s</string>
<string name="keyboard_name">Magikeyboard</string>
<string name="keyboard_label">Magikeyboard (KeePassDX)</string>
@@ -353,10 +353,10 @@
<string name="content_description_add_entry">Item toevoegen</string>
<string name="content_description_add_group">Groep toevoegen</string>
<string name="content_description_file_information">Bestandsinformatie</string>
<string name="content_description_password_checkbox">Wachtwoordcheckbox</string>
<string name="content_description_keyfile_checkbox">Sleutelbestandcheckbox</string>
<string name="content_description_password_checkbox">Wachtwoord-selectie</string>
<string name="content_description_keyfile_checkbox">Sleutelbestand-selectie</string>
<string name="content_description_repeat_toggle_password_visibility">Weergave van het wachtwoord wisselen</string>
<string name="content_description_entry_icon">Item-icoon</string>
<string name="content_description_entry_icon">Item-pictogram</string>
<string name="entry_password_generator">Wachtwoordgenerator</string>
<string name="content_description_password_length">Wachtwoordlengte</string>
<string name="entry_add_field">Veld toevoegen</string>
@@ -408,7 +408,7 @@
<string name="clipboard_explanation_summary">Kopieer invoervelden met behulp van het klembord van uw apparaat</string>
<string name="advanced_unlock_explanation_summary">Geavanceerde ontgrendeling gebruiken om een database gemakkelijker te openen</string>
<string name="database_data_compression_title">Gegevenscompressie</string>
<string name="database_data_compression_summary">Gegevenscompressie verkleint de omvang van de database.</string>
<string name="database_data_compression_summary">Gegevenscompressie verkleint de omvang van de database</string>
<string name="max_history_items_title">Maximum aantal</string>
<string name="max_history_items_summary">Beperk het aantal geschiedenisitems per item</string>
<string name="max_history_size_title">Maximum</string>
@@ -499,4 +499,12 @@
\n
\nDe database kan erg groot worden en de prestaties kunnen verminderen bij deze upload.</string>
<string name="warning_replace_file">Als je dit bestand uploadt, wordt het bestaande vervangen.</string>
<string name="content_description_credentials_information">Inloggegevens</string>
<string name="warning_remove_unlinked_attachment">Het verwijderen van niet-gekoppelde gegevens kan de omvang van uw database verkleinen, maar kan ook gegevens verwijderen die voor KeePass-plug-ins worden gebruikt.</string>
<string name="warning_sure_remove_data">Deze gegevens toch verwijderen\?</string>
<string name="warning_empty_keyfile">Het is niet raadzaam om een leeg sleutelbestand toe te voegen.</string>
<string name="warning_empty_keyfile_explanation">De inhoud van het sleutelbestand mag nooit worden gewijzigd en moet in het beste geval willekeurig gegenereerde gegevens bevatten.</string>
<string name="data">Gegevens</string>
<string name="database_data_remove_unlinked_attachments_title">Niet-gekoppelde gegevens verwijderen</string>
<string name="database_data_remove_unlinked_attachments_summary">Verwijdert bijlagen die in de database staan, maar niet aan een item zijn gekoppeld</string>
</resources>

View File

@@ -42,8 +42,8 @@
<string name="decrypting_db">A desencriptar o conteúdo da base de dados…</string>
<string name="default_checkbox">Utilizar como base de dados predefinida</string>
<string name="digits">Dígitos</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft é de &lt;strong&gt;código aberto&lt;/strong&gt; e &lt;strong&gt;sem publicidade&lt;/strong&gt;.
\nÉ fornecido como está, sob &lt;strong&gt;licença GPLv3&lt;/strong&gt;, sem qualquer garantia.</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft é &lt;strong&gt;open source&lt;/strong&gt; e &lt;strong&gt;sem publicidade&lt;/strong&gt;.
\nÉ fornecido como está, sob a &lt;strong&gt;licença GPLv3&lt;/strong&gt;, sem qualquer garantia.</string>
<string name="select_database_file">Abrir uma base de dados existente</string>
<string name="entry_accessed">Acedido</string>
<string name="entry_cancel">Cancelar</string>
@@ -62,7 +62,7 @@
<string name="error_arc4">A cifra de fluxo Arcfour não é suportada.</string>
<string name="error_can_not_handle_uri">Não pôde tratar esta URI no KeePassDX.</string>
<string name="error_file_not_create">Não foi possível criar o ficheiro</string>
<string name="error_invalid_db">Não foi possível ler a base de dados.</string>
<string name="error_invalid_db">Não foi possível ler o banco de dados.</string>
<string name="error_invalid_path">Certifique-se que o caminho é válido.</string>
<string name="error_no_name">Introduza um nome.</string>
<string name="error_nokeyfile">Selecione um ficheiro chave.</string>
@@ -190,7 +190,7 @@
<string name="warning_empty_password">Continuar sem proteção de desbloqueio por palavra-passe\?</string>
<string name="warning_no_encryption_key">Continuar sem a chave de criptografia\?</string>
<string name="build_label">Compilação %1$s</string>
<string name="configure_biometric">Prompt biométrico suportado, mas não configurado.</string>
<string name="configure_biometric">O escaneamento biométrico é suportado, mas não configurado.</string>
<string name="encrypted_value_stored">Palavra-passe encriptada armazenada</string>
<string name="biometric_not_recognized">Biométrico não reconhecido</string>
<string name="biometric_scanning_error">Problema do biométrico: %1$s</string>
@@ -214,12 +214,12 @@
<string name="list_password_generator_options_title">Caracteres da palavra-passe</string>
<string name="list_password_generator_options_summary">Definir os caracteres permitodos para o gerador de palavra-passe</string>
<string name="clipboard_notifications_title">Notificações da área de transferência</string>
<string name="clipboard_notifications_summary">Ative notificações da área de transferência para campos copiáveis quando estiver a visualizar uma entrada</string>
<string name="clipboard_notifications_summary">Mostrar notificações de área de transferência para copiar campos ao visualizar uma entrada</string>
<string name="lock">Bloquear</string>
<string name="lock_database_screen_off_title">Bloqueio de ecrã</string>
<string name="lock_database_screen_off_summary">Bloqueie a base de dados quando o ecrã estiver desligado</string>
<string name="unavailable_feature_text">Não foi possível iniciar esse recurso.</string>
<string name="unavailable_feature_version">Sua versão do Android %1$s não corresponde a versão mínima %2$s necessária.</string>
<string name="unavailable_feature_version">O aparelho está a executar Android %1$s, mas precisa de %2$s ou posterior.</string>
<string name="unavailable_feature_hardware">Não foi possível encontrar o hardware correspondente.</string>
<string name="file_name">Nome do ficheiro</string>
<string name="path">Caminho</string>
@@ -252,7 +252,7 @@
\nGrupos (~pastas) organizam as suas entradas na sua base de dados.</string>
<string name="education_search_title">Pesquise suas entradas</string>
<string name="education_search_summary">Entre com título, nome de utilizador ou outros campos para recuperar facilmente as suas palavras-passe.</string>
<string name="education_biometric_title">Desbloquear a base de dados por biométrico</string>
<string name="education_biometric_title">Desbloqueio da base de dados por biométricos</string>
<string name="education_biometric_summary">Ligue a sua palavra-passe e o seu biométrico gravado para rapidamente desbloquear a sua base de dados.</string>
<string name="education_entry_edit_title">Modifique a entrada</string>
<string name="education_entry_edit_summary">Edite a sua entrada com campos personalizados. Os conjuntos de dados podem ser referenciados entre campos de entradas diferentes.</string>
@@ -296,7 +296,7 @@
<string name="clipboard_warning">Se a limpeza da área de transferência falhar, limpe seu histórico manualmente.</string>
<string name="allow_copy_password_warning">Aviso: A área de transferência é compartilhada por todas as apps. Se dados sensíveis forem copiados, outros programas podem recuperá-lo.</string>
<string name="allow_no_password_title">Não permitir chave mestra</string>
<string name="allow_no_password_summary">Ativar o botão \"Abrir\" se nenhuma credencial for selecionada</string>
<string name="allow_no_password_summary">Permite tocar no botão \"Abrir\" se nenhumas credenciais estiverem selecionadas</string>
<string name="enable_education_screens_title">Dicas educacionais</string>
<string name="enable_education_screens_summary">Destacar elementos para aprender como a app funciona</string>
<string name="enable_read_only_title">Apenas leitura</string>
@@ -342,7 +342,7 @@
<string name="content_description_add_node">Inserir nó</string>
<string name="content_description_add_entry">Adicionar entrada</string>
<string name="content_description_add_group">Adicionar grupo</string>
<string name="content_description_file_information">Informações do ficheiro</string>
<string name="content_description_file_information">Informações sobre ficheiro</string>
<string name="content_description_password_checkbox">Caixa de seleção da palavra-passe</string>
<string name="content_description_keyfile_checkbox">Caixa de seleção keyfile</string>
<string name="content_description_repeat_toggle_password_visibility">Repetir alternar a visibilidade da palavra-passe</string>
@@ -357,7 +357,7 @@
<string name="list_groups_show_number_entries_title">Mostrar número de entradas</string>
<string name="list_groups_show_number_entries_summary">Mostrar o número de entradas dentro de um grupo</string>
<string name="database_custom_color_title">Cor personalizada da base de dados</string>
<string name="database_data_compression_summary">A compressão dos dados reduz o tamanho da base de dados.</string>
<string name="database_data_compression_summary">A compressão de dados reduz o tamanho da base de dados</string>
<string name="biometric_unlock_enable_summary">Permite que escaneie o seu biométrico para abrir a base de dados</string>
<string name="advanced_unlock_explanation_summary">Usar desbloqueamento avançado para abrir a base de dados mais facilmente</string>
<string name="database_opened">Base de dados aberta</string>
@@ -398,15 +398,15 @@
<string name="keyboard_auto_go_action_summary">Ação da tecla \"Go\" após pressionar a tecla \"Field\"</string>
<string name="otp_type">Tipo do OTP</string>
<string name="entry_add_attachment">Adicionar anexo</string>
<string name="education_setup_OTP_title">Instalar OTP</string>
<string name="education_setup_OTP_title">Configurar OTP</string>
<string name="compression">Compressão</string>
<string name="validate">Validação</string>
<string name="remember_keyfile_locations_summary">Lembrar o local dos ficheiros-chave das bases de dados</string>
<string name="remember_keyfile_locations_summary">Mantém o controle sobre onde os ficheiros de chaves são armazenados</string>
<string name="entry_history">Histórico</string>
<string name="error_otp_period">O período deve estar entre %1$d e %2$d segundos.</string>
<string name="master_key">Chave Mestre</string>
<string name="settings_database_recommend_changing_master_key_summary">Recomendar mudança da chave mestre (em dias)</string>
<string name="remember_database_locations_title">Gravar o local das bases de dados</string>
<string name="remember_database_locations_title">Lembrar locais das bases de dados</string>
<string name="download_initialization">A inicializar…</string>
<string name="menu_security_settings">Configurações de segurança</string>
<string name="disable">Desativar</string>
@@ -420,7 +420,7 @@
<string name="entry_attachments">Anexos</string>
<string name="compression_gzip">Gzip</string>
<string name="discard">Descartar</string>
<string name="remember_database_locations_summary">Lembrar o local das bases de dados</string>
<string name="remember_database_locations_summary">Mantém o controle sobre onde os bancos de dados são armazenados</string>
<string name="auto_focus_search_summary">Solicitar uma pesquisa quando abrir a base de dados</string>
<string name="show_recent_files_summary">Lembrar nomes recentes de ficheiros</string>
<string name="download_finalization">A finalizar…</string>
@@ -475,7 +475,7 @@
<string name="enable_auto_save_database_title">Gravar a base de dados automaticamente</string>
<string name="keyboard_auto_go_action_title">Ação de chave automática</string>
<string name="hide_expired_entries_title">Ocultar entradas expiradas</string>
<string name="hide_expired_entries_summary">As entradas expiradas foram ocultadas</string>
<string name="hide_expired_entries_summary">As entradas expiradas não são mostradas</string>
<string name="menu_master_key_settings">Configurações da chave-mestre</string>
<string name="entry_setup_otp">Configurar OTP</string>
<string name="keyboard_search_share_title">Procurar informação compartilhada</string>
@@ -484,11 +484,27 @@
<string name="contains_duplicate_uuid_procedure">Consertar o problema gerando novas UUIDs para duplicatas para continuar\?</string>
<string name="settings_database_force_changing_master_key_next_time_title">Forçar renovação na próxima vez</string>
<string name="menu_advanced_unlock_settings">Desbloqueio avançado</string>
<string name="education_setup_OTP_summary">Configure a gestão de palavras-passe descartáveis (HOTP / TOTP) para gerar um token solicitado para a autenticação de dois fatores (2FA).</string>
<string name="remember_keyfile_locations_title">Gravar o local dos ficheiros-chave</string>
<string name="education_setup_OTP_summary">Configurar a gestão de palavra-passe única (HOTP / TOTP) para gerar um token solicitado para autenticação de dois fatores (2FA).</string>
<string name="remember_keyfile_locations_title">Lembrar locais de ficheiros-chave</string>
<string name="biometric_delete_all_key_warning">Apagar todas as chaves de criptografia relacionadas ao reconhecimento biométrico\?</string>
<string name="download_progression">Em progresso: %1$d%%</string>
<string name="biometric_auto_open_prompt_title">Abrir automaticamente o prompt de biomẽtrico</string>
<string name="biometric_auto_open_prompt_title">Abrir automaticamente o escaneamento de biomẽtrico</string>
<string name="advanced_unlock">Desbloqueio avançado</string>
<string name="settings_database_recommend_changing_master_key_title">Renovação recomendada</string>
<string name="upload_attachment">Enviar %1$s</string>
<string name="education_add_attachment_summary">Envie um anexo à sua entrada para gravar dados externos importantes.</string>
<string name="education_add_attachment_title">Adicionar anexo</string>
<string name="database_data_remove_unlinked_attachments_summary">Remove anexos contidos na base de dados, mas não ligados a uma entrada</string>
<string name="database_data_remove_unlinked_attachments_title">Remover dados não ligados</string>
<string name="data">Dados</string>
<string name="warning_empty_keyfile_explanation">O conteúdo do ficheiro-chave nunca deve ser alterado e, no melhor dos casos, deve conter dados gerados aleatoriamente.</string>
<string name="warning_empty_keyfile">Não é recomendável adicionar um ficheiro de chave vazio.</string>
<string name="warning_sure_remove_data">Remover esses dados mesmo assim\?</string>
<string name="warning_remove_unlinked_attachment">Remover dados não ligados pode diminuir o tamanho da sua base de dados, mas também pode apagar dados utilizados para os plugins do KeePass.</string>
<string name="warning_sure_add_file">Adicionar o ficheiro mesmo assim\?</string>
<string name="warning_replace_file">Enviar deste ficheiro substituirá o existente.</string>
<string name="warning_file_too_big">Uma base de dados KeePass deve conter apenas pequenos ficheiros utilitários (tais como ficheiros chave PGP).
\n
\nA sua base de dados pode se tornar muito grande e reduzir o desempenho com este envio.</string>
<string name="content_description_credentials_information">Informações sobre credenciais</string>
</resources>

View File

@@ -0,0 +1,475 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="enable_read_only_summary">Abrir a base de dados somente leitura por defeito</string>
<string name="enable_read_only_title">Apenas leitura</string>
<string name="menu_open_file_read_and_write">Pode ser modificado</string>
<string name="menu_file_selection_read_only">Protegido contra escrita</string>
<string name="enable_education_screens_summary">Destacar elementos para aprender como a app funciona</string>
<string name="enable_education_screens_title">Dicas educacionais</string>
<string name="allow_no_password_title">Não permitir chave mestra</string>
<string name="allow_copy_password_warning">Aviso: A área de transferência é compartilhada por todas as apps. Se dados sensíveis forem copiados, outros programas podem recuperá-lo.</string>
<string name="clipboard_warning">Se a limpeza da área de transferência falhar, limpe seu histórico manualmente.</string>
<string name="menu_cancel">Cancelar</string>
<string name="menu_paste">Colar</string>
<string name="menu_move">Mover</string>
<string name="menu_copy">Copiar</string>
<string name="error_move_folder_in_itself">Não pode mover um grupo para si mesmo.</string>
<string name="clipboard_cleared">Área de transferência limpa</string>
<string name="about_description">Uma implementação do gestor de palavras-chave KeePass para Android</string>
<string name="icon_pack_choose_summary">Pacote de ícones usado na app</string>
<string name="icon_pack_choose_title">Pacote de ícones</string>
<string name="style_choose_summary">Tema usado na app</string>
<string name="style_choose_title">Tema da app</string>
<string name="kdf_Argon2">Argon2</string>
<string name="kdf_AES">AES</string>
<string name="encryption_chacha20">ChaCha20</string>
<string name="encryption_twofish">Twofish</string>
<string name="encryption_rijndael">Rijndael (AES)</string>
<string name="contribute">Contribuir</string>
<string name="download">Descarregar</string>
<string name="html_text_dev_feature_upgrade">Lembre-se de manter o sua app atualizada, instalando novas versões.</string>
<string name="html_text_dev_feature_work_hard">Estamos trabalhando duro para lançar esse recurso o mais rápido possível.</string>
<string name="html_text_dev_feature_thanks">Obrigado por sua contribuição.</string>
<string name="html_text_dev_feature_encourage">está a incentivar os programadores a criar &lt;strong&gt;novos recursos&lt;/strong&gt; e a &lt;strong&gt;corrigir erros &lt;/strong&gt; de acordo com as suas observações.</string>
<string name="html_text_dev_feature_contibute">&lt;strong&gt;Contribuindo &lt;/strong&gt;,</string>
<string name="html_text_dev_feature_buy_pro">Ao comprar a versão &lt;strong&gt;pro&lt;/strong&gt;,</string>
<string name="html_text_dev_feature">Esse recurso está &lt;strong&gt;em desenvolvimento&lt;/strong&gt; e exige que sua &lt;strong&gt;contribuição&lt;/strong&gt; para que esteja disponível em breve.</string>
<string name="html_text_donation">Para manter a nossa liberdade e estarmos sempre ativos, nós contamos com a sua &lt;strong&gt;contribuição.&lt;/strong&gt;</string>
<string name="html_text_feature_generosity">Este &lt;strong&gt;estilo visual&lt;/strong&gt; está disponível graças à sua generosidade.</string>
<string name="html_text_buy_pro">Ao comprar a versão pro, terá acesso a este &lt;strong&gt;recurso visual&lt;/strong&gt; e ajudará especialmente a &lt;strong&gt;realizar projetos comunitários.&lt;/strong&gt;</string>
<string name="html_text_ad_free">Ao contrário de muitas apps de gestão de palavras-passe, esta app é &lt;strong&gt;livre de anúncios&lt;/strong&gt;, é &lt;strong&gt;software livre copyleft&lt;/strong&gt; e não coleta dados pessoais nos servidores dela, mesmo na sua versão gratuita.</string>
<string name="education_donation_summary">Ajude a aumentar a estabilidade, segurança e na adição de mais recursos.</string>
<string name="education_donation_title">Participar</string>
<string name="education_sort_summary">Escolha como entradas e grupos são ordenadas.</string>
<string name="education_sort_title">Ordenação de itens</string>
<string name="education_lock_summary">Bloqueie a sua base de dados rapidamente, pode parametrizar a app para bloqueá-lo depois de um tempo, e quando o ecrã se apaga.</string>
<string name="education_lock_title">Bloqueie a base de dados</string>
<string name="education_field_copy_summary">Campos copiados podem ser colados em qualquer lugar.
\n
\nUse a forma de preenchimento de formulário que preferir.</string>
<string name="education_field_copy_title">Copiar um campo</string>
<string name="education_unlock_summary">Entre com a palavra-passe e/ou com o caminho para o ficheiro-chave da base de dados.
\n
\nGuarde uma cópia do seu ficheiro do banco num lugar mais seguro depois de cada alteração.</string>
<string name="education_unlock_title">Desbloqueie a sua base de dados</string>
<string name="education_entry_new_field_summary">Registe um campo adicional, acrescente um valor e proteja-o opcionalmente.</string>
<string name="education_entry_new_field_title">Adicione campos customizados</string>
<string name="education_generate_password_summary">Gere uma palavra-passe forte para associar a sua entrada, defina-a facilmente de acordo com os critérios do formulário e não se esqueça de torná-la segura.</string>
<string name="education_generate_password_title">Crie uma palavra-passe forte</string>
<string name="education_entry_edit_summary">Edite a sua entrada com campos personalizados. Os conjuntos de dados podem ser referenciados entre campos de entradas diferentes.</string>
<string name="education_entry_edit_title">Modifique a entrada</string>
<string name="education_search_summary">Entre com título, nome de utilizador ou outros campos para recuperar facilmente as suas palavras-passe.</string>
<string name="education_search_title">Pesquise suas entradas</string>
<string name="education_new_node_summary">Entradas ajudam a gerir as suas identidades digitais.
\n
\nGrupos (~pastas) organizam as suas entradas na sua base de dados.</string>
<string name="education_new_node_title">Adicione itens ao seu banco</string>
<string name="education_select_database_summary">Abra a sua base de dados de mais cedo pelo seu navegador de ficheiros.</string>
<string name="education_select_database_title">Abra uma base de dados existente</string>
<string name="education_create_database_summary">Crie o seu primeiro ficheiro de gestão de palavras-passe.</string>
<string name="education_create_database_title">Crie um ficheiro de base de dados</string>
<string name="reset_education_screens_text">Dicas educacionais redefinidas</string>
<string name="reset_education_screens_summary">Exibir todas as informações educacionais novamente</string>
<string name="reset_education_screens_title">Reiniciar dicas educacionais</string>
<string name="magic_keyboard_title">Magikeyboard</string>
<string name="keyboard">Teclado</string>
<string name="other">Outros</string>
<string name="application_appearance">App</string>
<string name="text_appearance">Texto</string>
<string name="database_version_title">Versão da base de dados</string>
<string name="database_description_title">Descrição da base de dados</string>
<string name="database_name_title">Nome da base de dados</string>
<string name="allow_copy_password_summary">Permite copiar a palavra-passe e campos protegidos à área de transferência</string>
<string name="allow_copy_password_title">Confiança da área de transferência</string>
<string name="monospace_font_fields_enable_summary">Muda a fonte usada nos campos para melhor visibilidade dos caracteres</string>
<string name="monospace_font_fields_enable_title">Fonte do Campo</string>
<string name="recycle_bin_summary">Move grupos e entradas para o \"Cesto da reciclagem\" antes de apagar</string>
<string name="recycle_bin_title">Usar cesto da reciclagem</string>
<string name="create_keepass_file">Criar base de dados</string>
<string name="assign_master_key">Defina uma chave mestre</string>
<string name="path">Caminho</string>
<string name="file_name">Nome do ficheiro</string>
<string name="unavailable_feature_hardware">Não foi possível encontrar o hardware correspondente.</string>
<string name="unavailable_feature_text">Não foi possível iniciar esse recurso.</string>
<string name="lock_database_screen_off_summary">Bloqueie a base de dados quando o ecrã estiver desligado</string>
<string name="lock_database_screen_off_title">Bloqueio de ecrã</string>
<string name="lock">Bloquear</string>
<string name="clipboard_notifications_title">Notificações da área de transferência</string>
<string name="list_password_generator_options_summary">Definir os caracteres permitodos para o gerador de palavra-passe</string>
<string name="list_password_generator_options_title">Caracteres da palavra-passe</string>
<string name="password_size_summary">Define o tamanho predefinido para palavras-passe geradas</string>
<string name="password_size_title">Tamanho da palavra-chave gerada</string>
<string name="set_autofill_service_title">Definir como serviço de preenchimento automático predefinido</string>
<string name="autofill_sign_in_prompt">Entrar com KeePassDX</string>
<string name="autofill_service_name">Serviço de Preenchimento Automático do KeePassDX</string>
<string name="autofill">Preenchimento automático</string>
<string name="general">Geral</string>
<string name="encrypted_value_stored">Palavra-passe encriptada armazenada</string>
<string name="version_label">Versão %1$s</string>
<string name="warning_no_encryption_key">Continuar sem a chave de criptografia\?</string>
<string name="warning_empty_password">Continuar sem proteção de desbloqueio por palavra-passe\?</string>
<string name="warning_password_encoding">Evite caracteres fora do formato de codificação do ficheiro do banco (todos os caracteres não reconhecidos são convertidos para a mesma letra).</string>
<string name="warning">Aviso</string>
<string name="uppercase">Maiúsculas</string>
<string name="unsupported_db_version">Versão da base de dados não suportada.</string>
<string name="underline">Sublinhado</string>
<string name="search_results">Resultados da pesquisa</string>
<string name="search">Título/descrição da entrada</string>
<string name="special">Especiais</string>
<string name="sort_last_access_time">Último acesso</string>
<string name="sort_last_modify_time">Última modificação</string>
<string name="sort_creation_time">Data de criação</string>
<string name="sort_username">Nome de utilizador</string>
<string name="sort_title">Título</string>
<string name="sort_db">Ordenação natural</string>
<string name="sort_recycle_bin_bottom">Cesto da reciclagem no fundo</string>
<string name="sort_groups_before">Grupos primeiro</string>
<string name="sort_ascending">Ascendente</string>
<string name="sort_menu">Ordenar</string>
<string name="search_label">Pesquisar</string>
<string name="space">Espaço</string>
<string name="saving_database">A gravar a base de dados…</string>
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
<string name="parallelism">Paralelismo</string>
<string name="memory_usage_explanation">Quantidade de memória (em bytes) a ser usada pela função de derivação de chave.</string>
<string name="memory_usage">Uso de memória</string>
<string name="rounds_explanation">Rodadas adicionais de criptografia adicionam mais proteção contra ataques de força bruta, mas podem tornar o processo de carregar e gravar mais lentos.</string>
<string name="rounds">Rodadas de criptografia</string>
<string name="kdf_explanation">Para gerar uma chave para o algoritmo de encriptação, a chave mestre comprimida (SHA-256) é transformada usando uma função de derivação de chave (com um salt aleatório).</string>
<string name="encryption_explanation">Algoritmo de encriptação usado para todos os dados.</string>
<string name="root">Raiz</string>
<string name="read_only_warning">KeePassDX precisa de permissões de escrita para poder mudar qualquer coisa no seu banco.</string>
<string name="read_only">Apenas leitura</string>
<string name="protection">Proteção</string>
<string name="progress_title">Em funcionamento…</string>
<string name="progress_create">A criar nova base de dados…</string>
<string name="select_database_file">Abrir uma base de dados existente</string>
<string name="no_url_handler">Instale um navegador para abrir esta URL.</string>
<string name="no_results">A pesquisa não obteve resultados</string>
<string name="never">Nunca</string>
<string name="minus">Menos</string>
<string name="menu_url">Ir para o URL</string>
<string name="menu_showpass">Mostrar palavra-chave</string>
<string name="menu_search">Pesquisar</string>
<string name="menu_open">Abrir</string>
<string name="menu_lock">Trancar base de dados</string>
<string name="menu_hide_password">Ocultar palavra-chave</string>
<string name="menu_edit">Editar</string>
<string name="menu_donate">Doar</string>
<string name="menu_delete">Eliminar</string>
<string name="menu_form_filling_settings">Preenchimento de formulário</string>
<string name="menu_app_settings">Configurações do app</string>
<string name="settings">Configurações</string>
<string name="copy_field">Cópia de %1$s</string>
<string name="lowercase">Minúsculas</string>
<string name="loading_database">A carregar base de dados…</string>
<string name="list_size_summary">Tamanho do texto na lista de grupos</string>
<string name="list_size_title">Tamanho da lista de grupos</string>
<string name="length">Comprimento</string>
<string name="keyfile_is_empty">O ficheiro-chave está vazio.</string>
<string name="invalid_db_sig">Não pôde reconhecer formato da base de dados.</string>
<string name="invalid_algorithm">Algoritmo errado.</string>
<string name="password">Palavra-chave</string>
<string name="hint_pass">Palavra-passe</string>
<string name="hint_length">Comprimento</string>
<string name="hint_keyfile">Ficheiro-chave</string>
<string name="hint_group_name">Nome do grupo</string>
<string name="hint_generated_password">Palavra-chave gerada</string>
<string name="hint_conf_pass">Confirmar a palavra-passe</string>
<string name="generate_password">Gerar palavra-chave</string>
<string name="file_browser">Gestor de ficheiros</string>
<string name="file_not_found_content">Ficheiro não encontrado. Tente reabrí-lo de seu provedor de conteúdo.</string>
<string name="field_value">Valor 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_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_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_gen_type">Pelo menos um tipo de geração de palavra-chave deve ser selecionado.</string>
<string name="hide_expired_entries_summary">As entradas expiradas não são mostradas</string>
<string name="download_complete">Completo!</string>
<string name="upload_attachment">Enviar %1$s</string>
<string name="education_setup_OTP_summary">Configurar a gestão de palavra-passe única (HOTP / TOTP) para gerar um token solicitado para autenticação de dois fatores (2FA).</string>
<string name="education_setup_OTP_title">Configurar OTP</string>
<string name="education_add_attachment_summary">Envie um anexo à sua entrada para gravar dados externos importantes.</string>
<string name="education_add_attachment_title">Adicionar anexo</string>
<string name="education_biometric_title">Desbloqueio da base de dados por biométricos</string>
<string name="allow_no_password_summary">Permite tocar no botão \"Abrir\" se nenhumas credenciais estiverem selecionadas</string>
<string name="database_data_remove_unlinked_attachments_summary">Remove anexos contidos na base de dados, mas não ligados a uma entrada</string>
<string name="database_data_remove_unlinked_attachments_title">Remover dados não ligados</string>
<string name="database_data_compression_summary">A compressão de dados reduz o tamanho da base de dados</string>
<string name="data">Dados</string>
<string name="unavailable_feature_version">O aparelho está a executar Android %1$s, mas precisa de %2$s ou posterior.</string>
<string name="clipboard_notifications_summary">Mostrar notificações de área de transferência para copiar campos ao visualizar uma entrada</string>
<string name="configure_biometric">O escaneamento biométrico é suportado, mas não configurado.</string>
<string name="biometric_auto_open_prompt_title">Abrir automaticamente o escaneamento de biomẽtrico</string>
<string name="warning_empty_keyfile_explanation">O conteúdo do ficheiro-chave nunca deve ser alterado e, no melhor dos casos, deve conter dados gerados aleatoriamente.</string>
<string name="warning_empty_keyfile">Não é recomendável adicionar um ficheiro de chave vazio.</string>
<string name="warning_sure_remove_data">Remover esses dados mesmo assim\?</string>
<string name="warning_remove_unlinked_attachment">Remover dados não ligados pode diminuir o tamanho da sua base de dados, mas também pode apagar dados utilizados para os plugins do KeePass.</string>
<string name="warning_sure_add_file">Adicionar o ficheiro mesmo assim\?</string>
<string name="warning_replace_file">Enviar deste ficheiro substituirá o existente.</string>
<string name="warning_file_too_big">Uma base de dados KeePass deve conter apenas pequenos ficheiros utilitários (tais como ficheiros chave PGP).
\n
\nA sua base de dados pode se tornar muito grande e reduzir o desempenho com este envio.</string>
<string name="remember_keyfile_locations_summary">Mantém o controle sobre onde os ficheiros de chaves são armazenados</string>
<string name="remember_keyfile_locations_title">Lembrar locais de ficheiros-chave</string>
<string name="remember_database_locations_summary">Mantém o controle sobre onde os bancos de dados são armazenados</string>
<string name="remember_database_locations_title">Lembrar locais das bases de dados</string>
<string name="menu_advanced_unlock_settings">Desbloqueio avançado</string>
<string name="error_invalid_db">Não foi possível ler o banco de dados.</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft é &lt;strong&gt;open source&lt;/strong&gt; e &lt;strong&gt;sem publicidade&lt;/strong&gt;.
\nÉ fornecido como está, sob a &lt;strong&gt;licença GPLv3&lt;/strong&gt;, sem qualquer garantia.</string>
<string name="content_description_file_information">Informações sobre ficheiro</string>
<string name="content_description_credentials_information">Informações sobre credenciais</string>
<string name="keyboard_previous_fill_in_summary">Voltar automaticamente para o teclado anterior depois de executar a ação da tecla automática</string>
<string name="keyboard_previous_fill_in_title">Ação de tecla automática</string>
<string name="keyboard_previous_database_credentials_summary">Voltar automaticamente para o teclado anterior no ecrã de credenciais da base de dados</string>
<string name="keyboard_previous_database_credentials_title">Ecrã de credenciais da base de dados</string>
<string name="keyboard_change">Mudar de teclado</string>
<string name="autofill_block_restart">Reinicie a app que contém o formulário para ativar o bloqueio.</string>
<string name="autofill_block">Bloquear preenchimento automático</string>
<string name="autofill_web_domain_blocklist_summary">Lista de bloqueio que impede o preenchimento automático de domínios da web</string>
<string name="autofill_web_domain_blocklist_title">Lista de bloqueio de domínio da web</string>
<string name="autofill_application_id_blocklist_summary">Lista de bloqueio que impede o preenchimento automático de apps</string>
<string name="autofill_application_id_blocklist_title">Lista de bloqueio de aplicações</string>
<string name="filter">Filtro</string>
<string name="subdomain_search_summary">Pesquisar domínios da web com restrições de subdomínios</string>
<string name="subdomain_search_title">Pesquisa de subdomínios</string>
<string name="error_string_type">Este texto não corresponde ao item solicitado.</string>
<string name="content_description_add_item">Adicionar item</string>
<string name="keyboard_search_share_summary">Procurar automaticamente pela informação compartilhada para popular o teclado</string>
<string name="keyboard_search_share_title">Procurar informação compartilhada</string>
<string name="autofill_auto_search_summary">Sugerir resultados de pesquisa automaticamente do domínio da web ou do ID da aplicação</string>
<string name="autofill_auto_search_title">Pesquisa automática</string>
<string name="lock_database_show_button_summary">Mostrar o botão de bloqueio na interface do utilizador</string>
<string name="lock_database_show_button_title">Mostrar botão de bloqueio</string>
<string name="autofill_preference_title">Configurações de preenchimento automático</string>
<string name="warning_database_link_revoked">Acesso ao ficheiro revogado pelo gestor de ficheiros</string>
<string name="error_label_exists">Este rótulo já existe.</string>
<string name="error_create_database">Incapaz de criar o ficheiro de base de dados.</string>
<string name="entry_add_attachment">Adicionar anexo</string>
<string name="entry_add_field">Adicionar campo</string>
<string name="entry_password_generator">Gerador de palavras-passe</string>
<string name="discard">Descartar</string>
<string name="discard_changes">Descartar alterações\?</string>
<string name="validate">Validação</string>
<string name="warning_database_read_only">Conceder acesso de gravação de ficheiro para gravar alterações na base de dados</string>
<string name="hide_broken_locations_summary">Esconder ligações quebradas na lista de bases de dados recentes</string>
<string name="hide_broken_locations_title">Esconder ligações quebradas de bases de dados</string>
<string name="show_recent_files_summary">Lembrar nomes recentes de ficheiros</string>
<string name="show_recent_files_title">Histórico de ficheiros recentes</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="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="about">Sobre</string>
<string name="hide_password_summary">Mascarar palavras-passe (***) por predefinição</string>
<string name="hide_password_title">Esconder palavras-passe</string>
<string name="html_about_contribution">Para &lt;strong&gt;manter a liberdade&lt;/strong&gt;, &lt;strong&gt;solucionar bugs&lt;/strong&gt;, &lt;strong&gt;adicionar funções&lt;/strong&gt; e &lt;strong&gt;para sermos sempre ativoa&lt;/strong&gt;, contamos com sua &lt;strong&gt;contribuição&lt;/strong&gt;.</string>
<string name="homepage">Página inicial</string>
<string name="feedback">Comentários</string>
<string name="contribution">Contribuição</string>
<string name="contact">Contato</string>
<string name="hide_expired_entries_title">Ocultar entradas expiradas</string>
<string name="download_finalization">A finalizar…</string>
<string name="download_progression">Em progresso: %1$d%%</string>
<string name="download_initialization">A inicializar…</string>
<string name="download_attachment">Descarregar %1$s</string>
<string name="keyboard_auto_go_action_summary">Ação da tecla \"Go\" após pressionar a tecla \"Field\"</string>
<string name="keyboard_auto_go_action_title">Ação de chave automática</string>
<string name="menu_delete_entry_history">Apagar histórico</string>
<string name="menu_restore_entry_history">Restaurar histórico</string>
<string name="entry_attachments">Anexos</string>
<string name="enable_auto_save_database_summary">Gravar a base de dados automaticamente depois de uma ação importante (somente no modo \"Modificável\")</string>
<string name="enable_auto_save_database_title">Gravar a base de dados automaticamente</string>
<string name="recycle_bin_group_title">Grupo de cesto da reciclagem</string>
<string name="credential_before_click_biometric_button">Digite sua palavra-passe e depois clique no botão de \"Biométrico\".</string>
<string name="keystore_not_accessible">A chave não foi propriamente inicializada.</string>
<string name="warning_permanently_delete_nodes">Apagar permanentemente os nós selecionados\?</string>
<string name="command_execution">A executar o comando…</string>
<string name="menu_empty_recycle_bin">Esvaziar cesto da reciclagem</string>
<string name="menu_save_database">Gravar base de dados</string>
<string name="error_save_database">Não foi possível gravar a base de dados.</string>
<string name="education_biometric_summary">Ligue a sua palavra-passe e o seu biométrico gravado para rapidamente desbloquear a sua base de dados.</string>
<string name="device_keyboard_setting_title">Configurações do teclado do aparelho</string>
<string name="magic_keyboard_explanation_summary">Ative um teclado customizado, populando suas palavras-passe e todos os campos de identidade</string>
<string name="compression_gzip">Gzip</string>
<string name="compression_none">Nenhum</string>
<string name="compression">Compressão</string>
<string name="database_custom_color_title">Cor personalizada da base de dados</string>
<string name="database_default_username_title">Nome de utilizador predefinido</string>
<string name="settings_database_force_changing_master_key_next_time_summary">Forçar mudança da chave-mestre na próxima vez (uma vez)</string>
<string name="settings_database_force_changing_master_key_next_time_title">Forçar renovação na próxima vez</string>
<string name="settings_database_force_changing_master_key_summary">Forçar mudança de chave-mestre (em dias)</string>
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
<string name="settings_database_recommend_changing_master_key_summary">Recomendar mudança da chave mestre (em dias)</string>
<string name="settings_database_recommend_changing_master_key_title">Renovação recomendada</string>
<string name="max_history_size_summary">Limitar o tamanho do histórico (em bytes) por entrada</string>
<string name="max_history_size_title">Tamanho máximo</string>
<string name="max_history_items_summary">Limitar a quantidade de itens do histórico por entrada</string>
<string name="max_history_items_title">Número máximo</string>
<string name="database_data_compression_title">Compressão dos dados</string>
<string name="advanced_unlock_explanation_summary">Usar desbloqueamento avançado para abrir a base de dados mais facilmente</string>
<string name="clipboard_explanation_summary">Copiar campos de entrada usando a área de transferência do seu aparelho</string>
<string name="database_opened">Base de dados aberta</string>
<string name="autofill_explanation_summary">Ativar o serviço para preencher formulários em outras aplicações</string>
<string name="database_history">Histórico</string>
<string name="contains_duplicate_uuid_procedure">Consertar o problema gerando novas UUIDs para duplicatas para continuar\?</string>
<string name="contains_duplicate_uuid">A base de dados contém UUIDs duplicados.</string>
<string name="menu_master_key_settings">Configurações da chave-mestre</string>
<string name="menu_security_settings">Configurações de segurança</string>
<string name="creating_database">A criar a base de dados…</string>
<string name="invalid_db_same_uuid">%1$s com o mesmo UUID %2$s já existe.</string>
<string name="invalid_credentials">Não foi possível ler as credenciais.</string>
<string name="error_otp_digits">O token deve conter de %1$d até %2$d dígitos.</string>
<string name="error_otp_period">O período deve estar entre %1$d e %2$d segundos.</string>
<string name="error_otp_counter">O contador deve estar entre %1$d e %2$d.</string>
<string name="error_otp_secret_key">A chave secreta deve estar em formato Base32.</string>
<string name="error_copy_group_here">Mão pode copiar um grupo aqui.</string>
<string name="error_disallow_no_credentials">Ao menos uma credencial deve ser definida.</string>
<string name="error_invalid_OTP">Segredo OTP inválido.</string>
<string name="entry_otp">OTP</string>
<string name="otp_algorithm">Algorítimo</string>
<string name="otp_digits">Dígitos</string>
<string name="otp_counter">Contador</string>
<string name="otp_period">Período (segundos)</string>
<string name="otp_secret">Segredo</string>
<string name="otp_type">Tipo do OTP</string>
<string name="entry_setup_otp">Configurar OTP</string>
<string name="entry_history">Histórico</string>
<string name="security">Segurança</string>
<string name="master_key">Chave Mestre</string>
<string name="disable">Desativar</string>
<string name="enable">Ativar</string>
<string name="biometric_delete_all_key_warning">Apagar todas as chaves de criptografia relacionadas ao reconhecimento biométrico\?</string>
<string name="biometric_delete_all_key_summary">Apague todas as chaves de encriptação relacionadas ao reconhecimento de biométrico</string>
<string name="biometric_delete_all_key_title">Apague chaves de encriptação</string>
<string name="biometric_auto_open_prompt_summary">Pedir pelo biométrico automaticamente se a base de dados estiver configurada para usá-la</string>
<string name="biometric_unlock_enable_summary">Permite que escaneie o seu biométrico para abrir a base de dados</string>
<string name="biometric_unlock_enable_title">Desbloqueio por biométrico</string>
<string name="advanced_unlock">Desbloqueio avançado</string>
<string name="biometric">Biométrico</string>
<string name="menu_appearance_settings">Aparência</string>
<string name="no_credentials_stored">Ainda não há nenhuma palavra-chave armazenada nesta base de dados.</string>
<string name="biometric_scanning_error">Problema do biométrico: %1$s</string>
<string name="biometric_not_recognized">Biométrico não reconhecido</string>
<string name="biometric_invalid_key">Não pôde ler a chave biométrica. Por favor, apague-a e repita o procedimento de reconhecimento biométrico.</string>
<string name="biometric_prompt_extract_credential_message">Extrair credenciais da base de dados com biométrico</string>
<string name="biometric_prompt_extract_credential_title">Abrir base de dados com biométrico</string>
<string name="biometric_prompt_store_credential_message">Aviso: apesar de usar o reconhecimento biométrico, ainda precisará de se lembrar da sua palavra-passe.</string>
<string name="biometric_prompt_store_credential_title">Gravar reconhecimento biométrico</string>
<string name="open_biometric_prompt_store_credential">Use o biométrico para armazenar esta palavra-chave</string>
<string name="open_biometric_prompt_unlock_database">Escaneamento do biométrico para abrir a base de dados</string>
<string name="menu_biometric_remove_key">Apagar o biométrico gravado</string>
<string name="menu_database_settings">Definições da base de dados</string>
<string name="menu_change_key_settings">Alterar chave mestre</string>
<string name="error_create_database_file">Impossível de criar uma base de dados com essa palavra-passe e ficheiro-chave.</string>
<string name="content_description_keyboard_close_fields">Fechar campos</string>
<string name="content_description_remove_from_list">Remover</string>
<string name="content_description_update_from_list">Atualizar</string>
<string name="content_description_background">Plano de fundo</string>
<string name="file_manager_install_description">Um gestor de ficheiros que aceita a ação intencional ACTION_CREATE_DOCUMENT e ACTION_OPEN_DOCUMENT é necessário para criar, abrir e gravar ficheiros de base de dados.</string>
<string name="list_groups_show_number_entries_summary">Mostrar o número de entradas dentro de um grupo</string>
<string name="list_groups_show_number_entries_title">Mostrar número de entradas</string>
<string name="error_copy_entry_here">Não pode copiar uma entrada aqui.</string>
<string name="error_move_entry_here">Não pode mover uma entrada para cá.</string>
<string name="entry_UUID">UUID</string>
<string name="content_description_remove_field">Remover campo</string>
<string name="content_description_password_length">Comprimento da palavra-passe</string>
<string name="content_description_entry_icon">Ícone da entrada</string>
<string name="content_description_repeat_toggle_password_visibility">Repetir alternar a visibilidade da palavra-passe</string>
<string name="content_description_keyfile_checkbox">Caixa de seleção keyfile</string>
<string name="content_description_password_checkbox">Caixa de seleção da palavra-passe</string>
<string name="content_description_add_group">Adicionar grupo</string>
<string name="content_description_add_entry">Adicionar entrada</string>
<string name="content_description_add_node">Inserir nó</string>
<string name="content_description_node_children">Crianças do nó</string>
<string name="content_description_open_file">Abrir ficheiro</string>
<string name="delete_entered_password_summary">Apaga a palavra-passe inserida após uma tentativa de conexão</string>
<string name="delete_entered_password_title">Deletar palavra-passe</string>
<string name="keyboard_selection_entry_summary">Mostrar campos de entrada no Magikeyboard quando estiver visualizando uma Entrada</string>
<string name="keyboard_selection_entry_title">Seleção de entrada</string>
<string name="recycle_bin">Cesto da reciclagem</string>
<string name="clear_clipboard_notification_summary">Bloquear a base de dados quando a duração da área de transferência expirar ou quando a notificação for fechada depois de começar a utilizá-la</string>
<string name="clear_clipboard_notification_title">Limpar ao fechar</string>
<string name="lock_database_back_root_summary">Tranca a base de dados quando o utilizador pressiona o botão voltar no ecrã inicial</string>
<string name="lock_database_back_root_title">Pressione \'Voltar\' para bloquear</string>
<string name="do_not_kill_app">Não mate a app…</string>
<string name="selection_mode">Modo de seleção</string>
<string name="entry_notes">Notas</string>
<string name="keyboard_key_sound_title">Som ao pressionar teclas</string>
<string name="keyboard_key_vibrate_title">Pressão de chaves vibratórias</string>
<string name="keyboard_keys_category">Teclas</string>
<string name="keyboard_theme_title">Tema do teclado</string>
<string name="keyboard_appearance_category">Aparência</string>
<string name="keyboard_notification_entry_clear_close_summary">Fecha a base de dados ao dispensar a notificação</string>
<string name="keyboard_notification_entry_clear_close_title">Limpar ao fechar</string>
<string name="keyboard_notification_entry_content_text">%1$s</string>
<string name="keyboard_notification_entry_content_title">%1$s disponível no Magikeyboard</string>
<string name="keyboard_notification_entry_content_title_text">Entrada</string>
<string name="keyboard_notification_entry_summary">Mostrar uma notificação quando uma entrada estiver disponível</string>
<string name="keyboard_notification_entry_title">Informação de notificação</string>
<string name="keyboard_entry_timeout_summary">Tempo limite para limpar a entrada do teclado</string>
<string name="keyboard_entry_timeout_title">Tempo limite</string>
<string name="keyboard_entry_category">Entrada</string>
<string name="keyboard_setting_label">Configurações do Magikeyboard</string>
<string name="keyboard_label">Magikeyboard (KeePassDX)</string>
<string name="keyboard_name">Magikeyboard</string>
<string name="build_label">Compilação %1$s</string>
<string name="retrieving_db_key">A criar a chave da base de dados…</string>
<string name="clipboard">Área de transferência</string>
<string name="list_entries_show_username_summary">Mostrar nomes de utilizador em listas de entrada</string>
<string name="list_entries_show_username_title">Mostrar nomes de utilizador</string>
<string name="error_load_database_KDF_memory">Não foi possível carregar a chave. Tente descarregar o \"Uso de Memória\" do KDF.</string>
<string name="error_load_database">Não foi possível abrir a sua base de dados.</string>
<string name="edit_entry">Editar entrada</string>
<string name="education_read_only_summary">Altere o modo de abertura para a sessão.
\n
\n\"Somente leitura\" evita que faça alterações não intencionais na base de dados.
\n\"Gravação\" permite-o adicionar, apagar ou modificar todos os elementos.</string>
<string name="education_read_only_title">Proteja seu banco de modificações</string>
<string name="error_out_of_memory">Falta de memória para carregar toda a base de dados.</string>
<string name="error_nokeyfile">Selecione um ficheiro chave.</string>
<string name="error_no_name">Introduza um nome.</string>
<string name="error_invalid_path">Certifique-se que o caminho é válido.</string>
<string name="error_file_not_create">Não foi possível criar o ficheiro</string>
<string name="error_can_not_handle_uri">Não pôde tratar esta URI no KeePassDX.</string>
<string name="error_arc4">A cifra de fluxo Arcfour não é suportada.</string>
<string name="entry_user_name">Nome de utilizador</string>
<string name="entry_url">URL</string>
<string name="entry_title">Nome</string>
<string name="entry_save">Guardar</string>
<string name="entry_password">Palavra-passe</string>
<string name="entry_not_found">Não foi possível encontrar os dados da entrada.</string>
<string name="entry_modified">Modificado</string>
<string name="entry_keyfile">Ficheiro chave</string>
<string name="entry_expires">Expira</string>
<string name="entry_created">Criado</string>
<string name="entry_confpassword">Confirmar palavra-passe</string>
<string name="entry_cancel">Cancelar</string>
<string name="entry_accessed">Acedido</string>
<string name="digits">Dígitos</string>
<string name="default_checkbox">Utilizar como base de dados predefinida</string>
<string name="decrypting_db">A desencriptar o conteúdo da base de dados…</string>
<string name="database">Base de dados</string>
<string name="select_to_copy">Selecione para copiar %1$s para a área de transferência</string>
<string name="clipboard_timeout_summary">Duração do armazenamento na área de transferência (se for suportado pelo seu aparelho)</string>
<string name="clipboard_timeout">Tempo de espera da área de transferência</string>
<string name="clipboard_error_clear">Não foi possível limpar a área de transferência</string>
<string name="clipboard_error">Alguns aparelhos não deixam as apps usarem a área de transferência.</string>
<string name="clipboard_error_title">Erro na área de transferência</string>
<string name="allow">Permitir</string>
<string name="extended_ASCII">ASCII Estendido</string>
<string name="brackets">Parênteses</string>
<string name="application">App</string>
<string name="app_timeout_summary">Inatividade antes de bloquear a base de dados</string>
<string name="app_timeout">Tempo de espera da app</string>
<string name="key_derivation_function">Função de derivação de chave</string>
<string name="encryption_algorithm">Algoritmo de encriptação</string>
<string name="encryption">Encriptação</string>
<string name="add_group">Adicionar grupo</string>
<string name="add_entry">Adicionar entrada</string>
<string name="accept">Aceitar</string>
</resources>

View File

@@ -404,7 +404,7 @@
<string name="clipboard_explanation_summary">Копирование полей ввода с помощью буфера обмена устройства</string>
<string name="advanced_unlock_explanation_summary">Использовать дополнительную разблокировку для более лёгкого открытия базы данных</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_summary">Ограничение числа элементов истории каждой записи</string>
<string name="max_history_size_title">Максимальный размер</string>
@@ -497,4 +497,12 @@
\nЕсли добавить этот файл, база станет очень большой и снизится производительность.</string>
<string name="warning_replace_file">Добавление этого файла заменит существующий.</string>
<string name="warning_sure_add_file">Добавить файл в любом случае\?</string>
<string name="database_data_remove_unlinked_attachments_summary">Удаляет вложения, содержащиеся в базе данных, но не связанные с записью</string>
<string name="database_data_remove_unlinked_attachments_title">Удалить несвязанные данные</string>
<string name="data">Данные</string>
<string name="warning_empty_keyfile_explanation">Содержимое ключевого файла никогда не должно изменяться и в лучшем случае должно содержать случайно сгенерированные данные.</string>
<string name="warning_empty_keyfile">Не рекомендуется добавлять пустой ключевой файл.</string>
<string name="warning_sure_remove_data">Всё равно удалить эти данные\?</string>
<string name="warning_remove_unlinked_attachment">Удаление несвязанных данных может уменьшить размер вашей базы данных, но также может удалить данные, используемые для плагинов KeePass.</string>
<string name="content_description_credentials_information">Информация об учётных данных</string>
</resources>

View File

@@ -388,7 +388,7 @@
<string name="clipboard_explanation_summary">Cihazınızın panosunu kullanarak giriş alanlarını kopyala</string>
<string name="advanced_unlock_explanation_summary">Veritabanını daha kolay açmak için gelişmiş kilit açma özelliğini kullan</string>
<string name="database_data_compression_title">Veri sıkıştırma</string>
<string name="database_data_compression_summary">Veri sıkıştırma veritabanı boyutunu azaltır.</string>
<string name="database_data_compression_summary">Veri sıkıştırma veri tabanı boyutunu azaltır</string>
<string name="max_history_items_title">Azami sayı</string>
<string name="max_history_items_summary">Girdi başına geçmiş ögelerinin sayısını sınırla</string>
<string name="max_history_size_title">Azami boyut</string>
@@ -481,4 +481,12 @@
<string name="warning_file_too_big">Bir KeePass veri tabanının sadece küçük yardımcı dosyaları (PGP anahtar dosyaları gibi) içermesi beklenmektedir.
\n
\nVeri tabanınız bu yüklemeyle çok büyük hale gelebilir ve performansı düşürebilir.</string>
<string name="content_description_credentials_information">Kimlik bilgileri</string>
<string name="warning_remove_unlinked_attachment">Bağlantısız verileri kaldırmak veri tabanınızın boyutunu azaltabilir, ancak KeePass eklentileri için kullanılan verileri de silebilir.</string>
<string name="warning_sure_remove_data">Bu veriler yine de kaldırılsın mı\?</string>
<string name="warning_empty_keyfile">Boş bir anahtar dosyası eklemeniz önerilmez.</string>
<string name="warning_empty_keyfile_explanation">Anahtar dosyanın içeriği hiçbir zaman değiştirilmemeli ve en iyi durumda rastgele oluşturulmuş veriler içermelidir.</string>
<string name="data">Veri</string>
<string name="database_data_remove_unlinked_attachments_title">Bağlantısız verileri kaldır</string>
<string name="database_data_remove_unlinked_attachments_summary">Veri tabanında bulunan ancak bir girdiye bağlı olmayan ekleri kaldırır</string>
</resources>

View File

@@ -27,7 +27,7 @@
<string name="app_timeout">Час очікування застосунку</string>
<string name="app_timeout_summary">Час очікування до блокування бази даних</string>
<string name="application">Застосунок</string>
<string name="menu_app_settings">Налаштування застосунку</string>
<string name="menu_app_settings">Параметри застосунку</string>
<string name="brackets">Дужки</string>
<string name="file_manager_install_description">Для створення, відкриття та збереження файлів баз даних потрібен файловий менеджер, який приймає дії Intent ACTION_CREATE_DOCUMENT та ACTION_OPEN_DOCUMENT.</string>
<string name="clipboard_cleared">Буфер обміну очищено</string>
@@ -65,7 +65,7 @@
<string name="error_out_of_memory">Бракує пам\'яті для завантаження всієї вашої бази даних.</string>
<string name="error_pass_gen_type">Необхідно вибрати принаймні один тип створення пароля.</string>
<string name="error_pass_match">Паролі не збігаються.</string>
<string name="error_rounds_too_large">Забагато циклів. Установлено 2147483648.</string>
<string name="error_rounds_too_large">Забагато циклів. Встановлено 2147483648.</string>
<string name="error_wrong_length">Введіть додатне ціле число до поля \"Довжина\".</string>
<string name="file_browser">Файловий менеджер</string>
<string name="generate_password">Згенерувати пароль</string>
@@ -87,8 +87,8 @@
<string name="hide_password_summary">Типово приховувати паролі за (***)</string>
<string name="about">Про KeePassDX</string>
<string name="menu_change_key_settings">Змінити головний ключ</string>
<string name="settings">Налаштування</string>
<string name="menu_database_settings">Налаштування бази даних</string>
<string name="settings">Параметри</string>
<string name="menu_database_settings">Параметри бази даних</string>
<string name="menu_delete">Видалити</string>
<string name="menu_donate">Допомогти</string>
<string name="menu_edit">Змінити</string>
@@ -166,7 +166,7 @@
<string name="enable">Увімкнути</string>
<string name="clear_clipboard_notification_title">Очищати під час закриття</string>
<string name="allow_copy_password_summary">Дозволити копіювання пароля та захищених полів до буфера обміну</string>
<string name="content_description_file_information">Інформація про файл</string>
<string name="content_description_file_information">Відомості про файл</string>
<string name="content_description_add_entry">Додати запис</string>
<string name="content_description_background">Тло</string>
<string name="clipboard_error_clear">Не вдалося очистити буфер обміну</string>
@@ -207,7 +207,7 @@
<string name="menu_biometric_remove_key">Видалити збережений біометричний ключ</string>
<string name="content_description_keyfile_checkbox">Поле файла ключа</string>
<string name="menu_master_key_settings">Налаштування головного ключа</string>
<string name="menu_security_settings">Налаштування безпеки</string>
<string name="menu_security_settings">Параметри безпеки</string>
<string name="menu_advanced_unlock_settings">Розширені параметри розблокування</string>
<string name="menu_form_filling_settings">Заповнення форм</string>
<string name="copy_field">Скопійовано %1$s</string>
@@ -329,14 +329,14 @@
<string name="education_new_node_summary">Створюйте записи для керування вашими обліковими записами.
\n
\nСтворюйте групи (~теки) для впорядкування записів у вашій базі даних.</string>
<string name="device_keyboard_setting_title">Налаштування клавіатури пристрою</string>
<string name="device_keyboard_setting_title">Параметри клавіатури пристрою</string>
<string name="education_new_node_title">Додавайте елементи до вашої бази даних</string>
<string name="education_select_database_title">Відкрийте наявну базу даних</string>
<string name="education_select_database_summary">Відкрийте файл раніше створеної бази даних з файлового менеджера, щоб продовжити користуватися ним.</string>
<string name="education_create_database_summary">Створіть ваш перший файл керування паролями.</string>
<string name="education_create_database_title">Створити файл бази даних</string>
<string name="reset_education_screens_text">Скинути навчальні підказки</string>
<string name="reset_education_screens_summary">Показати всю навчальну інформацію знову</string>
<string name="reset_education_screens_summary">Показати всі навчальні підказки знову</string>
<string name="reset_education_screens_title">Скидання навчальних підказок</string>
<string name="enable_education_screens_summary">Виділяти елементи, щоб дізнатися, як працює застосунок</string>
<string name="enable_education_screens_title">Навчальні підказки</string>
@@ -392,7 +392,7 @@
<string name="recycle_bin_group_title">Група кошик</string>
<string name="recycle_bin_summary">Переміщати групи та записи до групи \"Кошик\" перед видаленням</string>
<string name="recycle_bin_title">Використання кошика</string>
<string name="database_data_compression_summary">Стиснення даних зменшує розмір бази даних.</string>
<string name="database_data_compression_summary">Стиснення даних зменшує розмір бази даних</string>
<string name="database_data_compression_title">Стиснення даних</string>
<string name="assign_master_key">Призначити головний ключ</string>
<string name="path">Шлях</string>
@@ -471,8 +471,8 @@
<string name="parallelism">Паралельність</string>
<string name="memory_usage">Використання пам\'яті</string>
<string name="encryption_explanation">Алгоритм шифрування бази даних, застосований для всіх даних.</string>
<string name="keyboard_search_share_summary">Автоматичний пошук загальнодоступної інформації для заповнення клавіатури</string>
<string name="keyboard_search_share_title">Пошук доступної інформації</string>
<string name="keyboard_search_share_summary">Автоматично шукати загальнодоступні дані для заповнення клавіатури</string>
<string name="keyboard_search_share_title">Пошук доступних даних</string>
<string name="autofill_block_restart">Перезапустіть застосунок, який містить форму, для застосування блокування.</string>
<string name="autofill_block">Блокування автозаповнення</string>
<string name="autofill_web_domain_blocklist_summary">Вебдомени для яких вимкнено автозаповнення</string>
@@ -497,4 +497,12 @@
<string name="education_add_attachment_title">Додати вкладення</string>
<string name="warning_sure_add_file">Все одно додати файл\?</string>
<string name="warning_replace_file">Завантаження цього файлу замінить наявний.</string>
<string name="content_description_credentials_information">Відомості про облікові дані</string>
<string name="warning_remove_unlinked_attachment">Вилучення непов’язаних даних може зменшити розмір вашої бази даних, але може також видалити дані, що використовуються для плагінів KeePass.</string>
<string name="warning_sure_remove_data">Все одно вилучити ці дані\?</string>
<string name="warning_empty_keyfile">Не рекомендовано додавати порожній файл ключа.</string>
<string name="warning_empty_keyfile_explanation">Вміст файлу ключів ніколи не слід змінювати, а в кращому випадку повинен містити випадково згенеровані дані.</string>
<string name="data">Дані</string>
<string name="database_data_remove_unlinked_attachments_title">Вилучити незв\'язані дані</string>
<string name="database_data_remove_unlinked_attachments_summary">Вилучає вкладення, що містяться в базі даних, але не пов’язані із записом</string>
</resources>

View File

@@ -406,7 +406,7 @@
<string name="clipboard_explanation_summary">使用设备的剪贴板来复制输入字段</string>
<string name="advanced_unlock_explanation_summary">使用高级解锁轻松打开数据库</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_summary">限制每个条目的历史记录条数</string>
<string name="max_history_size_title">最大大小</string>
@@ -497,4 +497,12 @@
<string name="warning_file_too_big">KeePass数据库应该只包含小的实用程序文件(例如PGP密钥文件)。
\n
\n上传大文件会使增大数据库体积并降低性能。</string>
<string name="content_description_credentials_information">凭证信息</string>
<string name="warning_remove_unlinked_attachment">删除未链接的数据可能会减少数据库的大小但也可能会删除用于KeePass插件的数据。</string>
<string name="warning_sure_remove_data">无论如何要删除这些数据\?</string>
<string name="warning_empty_keyfile">不推荐添加一个空的密钥文件。</string>
<string name="warning_empty_keyfile_explanation">密钥文件的内容应该永不更改,在最好的情况下,应该包含随机生成的数据。</string>
<string name="data">数据</string>
<string name="database_data_remove_unlinked_attachments_title">删除未链接的数据</string>
<string name="database_data_remove_unlinked_attachments_summary">删除包含于数据库中但未连接到一个条目的附件</string>
</resources>

View File

@@ -64,7 +64,6 @@
<style name="KeepassDXStyle.Black.Dialog" parent="Theme.AppCompat.Dialog.Alert">
<item name="colorAccent">@color/orange_dark</item>
<item name="android:textColorPrimary">@color/green_dark</item>
<item name="android:background">@color/darker</item>
<item name="background">@color/darker</item>
</style>
<!-- CardView -->

View File

@@ -61,7 +61,6 @@
<style name="KeepassDXStyle.Dark.Dialog" parent="KeepassDXStyle.Night.Dialog">
<item name="colorAccent">#fefefe</item>
<item name="android:textColorPrimary">@color/cyan_lighter</item>
<item name="android:background">@color/darker</item>
<item name="background">@color/darker</item>
</style>
<!-- CardView -->

View File

@@ -69,7 +69,6 @@
<style name="KeepassDXStyle.Purple.Dialog" parent="KeepassDXStyle.Light.Dialog">
<item name="colorAccent">@color/red</item>
<item name="android:textColorPrimary">@color/purple_light</item>
<item name="android:background">@color/background_purple</item>
<item name="background">@color/background_purple</item>
</style>
<!-- CardView -->

View File

@@ -257,13 +257,11 @@
<style name="KeepassDXStyle.Light.Dialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/orange</item>
<item name="android:textColorPrimary">@color/green</item>
<item name="android:background">@color/background_light</item>
<item name="background">@color/background_light</item>
</style>
<style name="KeepassDXStyle.Night.Dialog" parent="Theme.AppCompat.Dialog.Alert">
<item name="colorAccent">@color/orange</item>
<item name="android:textColorPrimary">@color/green</item>
<item name="android:background">@color/background_night</item>
<item name="background">@color/background_night</item>
</style>
<style name="KeepassDXStyle.Light.DateTime.Dialog" parent="Theme.AppCompat.Light.Dialog.Alert">

View File

@@ -1,6 +1,6 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.4.0'
ext.kotlin_version = '1.4.10'
repositories {
jcenter()
google()

View File

@@ -0,0 +1,7 @@
* Fix Autofill recognition #712
* Keep value after renaming custom field #709
* Prevent random binary bug #713
* Fix dialog background #717
* Better domain recognition for autofill #702
* Write custom data #651
* Fix autolink #720

View File

@@ -0,0 +1,7 @@
* Correction de la reconnaissance de remplissage automatique #712
* La valeur du champ customisé est gardée après son renommage #709
* Prévention du bug des binaires aléatoires #713
* Correction du fond des dialogues #717
* Meilleure reconnaissance du domaine pour l'autofill #702
* Ecriture des données customisées #651
* Correction de l'autolink #720