mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Merge branch 'release/2.8.6'
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -133,5 +133,5 @@ fun Context.closeDatabase() {
|
||||
cancelAll()
|
||||
}
|
||||
// Clear data
|
||||
Database.getInstance().closeAndClear(applicationContext.filesDir)
|
||||
Database.getInstance().closeAndClear(UriUtil.getBinaryDir(this))
|
||||
}
|
||||
@@ -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 {
|
||||
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"
|
||||
}.resolveActivity(packageManager) != null
|
||||
}, PackageManager.MATCH_DEFAULT_ONLY).isNotEmpty()
|
||||
}
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
|
||||
fun createDocument(activity: FragmentActivity,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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ává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ání 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 <strong>open source</strong> a <strong>bey reklam</strong>.
|
||||
\nJe poskytován jak je, pod licencí <strong>GPLv3</strong>, 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>
|
||||
2
app/src/main/res/values-eo/strings.xml
Normal file
2
app/src/main/res/values-eo/strings.xml
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -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">به منظور <strong>نگاه آزادی ما</strong> ، <strong>نقش های فیکسی</strong> ، <strong>خدمات مضاعف</strong> و <strong> همیشه فعال باشد</strong> ، ما در <strong>مسابق</strong> حساب می </strong>.</string>
|
||||
<string name="html_about_licence">KeePassDX © ٪1 $d Kunzisoft است <strong>منا منبع باز</strong> و <strong>با تبلیغات</strong>.
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft است <strong>منا منبع باز</strong> و <strong>با تبلیغات</strong>.
|
||||
\nاین است که ارائه شده است، تحت <strong>GPLv3</strong>، بدون هیچ گونه گارانتی.</string>
|
||||
<string name="digits">رقم</string>
|
||||
<string name="default_checkbox">استفاده به عنوان پایگاه داده پیش فرض</string>
|
||||
|
||||
@@ -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 <strong>otvorenog koda</strong> i <strong>ne sadrži oglase</strong>.
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft je softver <strong>otvorenog koda</strong> i <strong>ne sadrži oglase</strong>.
|
||||
\nNudi se kakav je, pod <strong>GPLv3</strong> 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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 <strong>código aberto</strong> e <strong>sem publicidade</strong>.
|
||||
\nÉ fornecido como está, sob <strong>licença GPLv3</strong>, sem qualquer garantia.</string>
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft é <strong>open source</strong> e <strong>sem publicidade</strong>.
|
||||
\nÉ fornecido como está, sob a <strong>licença GPLv3</strong>, 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>
|
||||
475
app/src/main/res/values-pt/strings.xml
Normal file
475
app/src/main/res/values-pt/strings.xml
Normal 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 <strong>novos recursos</strong> e a <strong>corrigir erros </strong> de acordo com as suas observações.</string>
|
||||
<string name="html_text_dev_feature_contibute"><strong>Contribuindo </strong>,</string>
|
||||
<string name="html_text_dev_feature_buy_pro">Ao comprar a versão <strong>pro</strong>,</string>
|
||||
<string name="html_text_dev_feature">Esse recurso está <strong>em desenvolvimento</strong> e exige que sua <strong>contribuição</strong> 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 <strong>contribuição.</strong></string>
|
||||
<string name="html_text_feature_generosity">Este <strong>estilo visual</strong> está disponível graças à sua generosidade.</string>
|
||||
<string name="html_text_buy_pro">Ao comprar a versão pro, terá acesso a este <strong>recurso visual</strong> e ajudará especialmente a <strong>realizar projetos comunitários.</strong></string>
|
||||
<string name="html_text_ad_free">Ao contrário de muitas apps de gestão de palavras-passe, esta app é <strong>livre de anúncios</strong>, é <strong>software livre copyleft</strong> 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 é <strong>open source</strong> e <strong>sem publicidade</strong>.
|
||||
\nÉ fornecido como está, sob a <strong>licença GPLv3</strong>, 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 <strong>manter a liberdade</strong>, <strong>solucionar bugs</strong>, <strong>adicionar funções</strong> e <strong>para sermos sempre ativoa</strong>, contamos com sua <strong>contribuição</strong>.</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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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()
|
||||
|
||||
7
fastlane/metadata/android/en-US/changelogs/42.txt
Normal file
7
fastlane/metadata/android/en-US/changelogs/42.txt
Normal 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
|
||||
7
fastlane/metadata/android/fr-FR/changelogs/42.txt
Normal file
7
fastlane/metadata/android/fr-FR/changelogs/42.txt
Normal 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
|
||||
Reference in New Issue
Block a user