mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fea4da2a33 | ||
|
|
055c933f4b | ||
|
|
9bcb867748 | ||
|
|
26e3c03f5f | ||
|
|
c195c3b2d1 | ||
|
|
f9e0aacfeb | ||
|
|
37fef66647 | ||
|
|
9f99b67563 | ||
|
|
fe902648ad | ||
|
|
13b933cd0b | ||
|
|
1d3b1d1d80 | ||
|
|
67a612af3a | ||
|
|
a891683806 | ||
|
|
440a72fc42 | ||
|
|
696d2e5197 | ||
|
|
2b17d56fc7 | ||
|
|
a410ef5d9f | ||
|
|
fe94769541 | ||
|
|
c63ae9c00c | ||
|
|
d5ece8d007 | ||
|
|
692a971dc0 | ||
|
|
05b8370cc0 | ||
|
|
b6111b35a2 | ||
|
|
4d72687628 | ||
|
|
8f125983ce | ||
|
|
4279825caa | ||
|
|
77ae3a4623 | ||
|
|
4c222dbc54 | ||
|
|
4e0f93ee8a | ||
|
|
e99f3e6627 | ||
|
|
f73877c34a | ||
|
|
abd3f12cae | ||
|
|
00117f5b7b | ||
|
|
d7d728f93e | ||
|
|
dc9217c4ec | ||
|
|
95acb13b93 | ||
|
|
234cc00d9f | ||
|
|
d6ba164799 | ||
|
|
910aa03dc8 | ||
|
|
a3e4a4c873 | ||
|
|
2d7c843447 | ||
|
|
e342b45473 | ||
|
|
f354bccd58 | ||
|
|
98073134db | ||
|
|
360666b00b | ||
|
|
ce4c807870 | ||
|
|
f2783bdac8 | ||
|
|
875ed16c3b | ||
|
|
383ba56d1f | ||
|
|
45eb54e624 | ||
|
|
5aff4e2ed6 | ||
|
|
e73e47dd94 | ||
|
|
1c8ac5efbc | ||
|
|
90fa5e1ecd | ||
|
|
348994917b | ||
|
|
60dbea1027 |
@@ -1,3 +1,11 @@
|
||||
KeePassDX(2.8)
|
||||
* Fix TOTP period (> 60s)
|
||||
* Fix searching in recycle bin
|
||||
* Settings to back to the previous keyboard during database credentials and after form filling
|
||||
* Improve action tasks
|
||||
* Improve recognition to reset app timeout
|
||||
* Fix minor issues
|
||||
|
||||
KeePassDX(2.7)
|
||||
* Add blocklists for autofill
|
||||
* Add autofill compatibility mode (usefull for Browser not compatible)
|
||||
|
||||
@@ -11,8 +11,8 @@ android {
|
||||
applicationId "com.kunzisoft.keepass"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 29
|
||||
versionCode = 35
|
||||
versionName = "2.7"
|
||||
versionCode = 36
|
||||
versionName = "2.8"
|
||||
multiDexEnabled true
|
||||
|
||||
testApplicationId = "com.kunzisoft.keepass.tests"
|
||||
@@ -102,6 +102,9 @@ dependencies {
|
||||
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||
implementation 'androidx.biometric:biometric:1.0.1'
|
||||
implementation 'androidx.core:core-ktx:1.2.0'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3'
|
||||
// TODO #538 implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
|
||||
// To upgrade with style
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
// Database
|
||||
|
||||
@@ -6,23 +6,23 @@ import junit.framework.TestCase
|
||||
class UnsignedIntTest: TestCase() {
|
||||
|
||||
fun testUInt() {
|
||||
val standardInt = UnsignedInt(15).toInt()
|
||||
val standardInt = UnsignedInt(15).toKotlinInt()
|
||||
assertEquals(15, standardInt)
|
||||
val unsignedInt = UnsignedInt(-1).toLong()
|
||||
val unsignedInt = UnsignedInt(-1).toKotlinLong()
|
||||
assertEquals(4294967295L, unsignedInt)
|
||||
}
|
||||
|
||||
fun testMaxValue() {
|
||||
val maxValue = UnsignedInt.MAX_VALUE.toLong()
|
||||
val maxValue = UnsignedInt.MAX_VALUE.toKotlinLong()
|
||||
assertEquals(4294967295L, maxValue)
|
||||
val longValue = UnsignedInt.fromLong(4294967295L).toLong()
|
||||
val longValue = UnsignedInt.fromKotlinLong(4294967295L).toKotlinLong()
|
||||
assertEquals(longValue, maxValue)
|
||||
}
|
||||
|
||||
fun testLong() {
|
||||
val longValue = UnsignedInt.fromLong(50L).toInt()
|
||||
val longValue = UnsignedInt.fromKotlinLong(50L).toKotlinInt()
|
||||
assertEquals(50, longValue)
|
||||
val uIntLongValue = UnsignedInt.fromLong(4294967290).toLong()
|
||||
val uIntLongValue = UnsignedInt.fromKotlinLong(4294967290).toKotlinLong()
|
||||
assertEquals(4294967290, uIntLongValue)
|
||||
}
|
||||
}
|
||||
@@ -35,11 +35,11 @@ class ValuesTest : TestCase() {
|
||||
}
|
||||
|
||||
fun testReadWriteLongMax() {
|
||||
testReadWriteLong(java.lang.Byte.MAX_VALUE)
|
||||
testReadWriteLong(Byte.MAX_VALUE)
|
||||
}
|
||||
|
||||
fun testReadWriteLongMin() {
|
||||
testReadWriteLong(java.lang.Byte.MIN_VALUE)
|
||||
testReadWriteLong(Byte.MIN_VALUE)
|
||||
}
|
||||
|
||||
fun testReadWriteLongRnd() {
|
||||
@@ -62,11 +62,11 @@ class ValuesTest : TestCase() {
|
||||
}
|
||||
|
||||
fun testReadWriteIntMin() {
|
||||
testReadWriteInt(java.lang.Byte.MIN_VALUE)
|
||||
testReadWriteInt(Byte.MIN_VALUE)
|
||||
}
|
||||
|
||||
fun testReadWriteIntMax() {
|
||||
testReadWriteInt(java.lang.Byte.MAX_VALUE)
|
||||
testReadWriteInt(Byte.MAX_VALUE)
|
||||
}
|
||||
|
||||
private fun testReadWriteInt(value: Byte) {
|
||||
@@ -103,11 +103,11 @@ class ValuesTest : TestCase() {
|
||||
}
|
||||
|
||||
fun testReadWriteShortMin() {
|
||||
testReadWriteShort(java.lang.Byte.MIN_VALUE)
|
||||
testReadWriteShort(Byte.MIN_VALUE)
|
||||
}
|
||||
|
||||
fun testReadWriteShortMax() {
|
||||
testReadWriteShort(java.lang.Byte.MAX_VALUE)
|
||||
testReadWriteShort(Byte.MAX_VALUE)
|
||||
}
|
||||
|
||||
private fun testReadWriteShort(value: Byte) {
|
||||
@@ -125,15 +125,15 @@ class ValuesTest : TestCase() {
|
||||
}
|
||||
|
||||
fun testReadWriteByteMin() {
|
||||
testReadWriteByte(java.lang.Byte.MIN_VALUE)
|
||||
testReadWriteByte(Byte.MIN_VALUE)
|
||||
}
|
||||
|
||||
fun testReadWriteByteMax() {
|
||||
testReadWriteShort(java.lang.Byte.MAX_VALUE)
|
||||
testReadWriteShort(Byte.MAX_VALUE)
|
||||
}
|
||||
|
||||
private fun testReadWriteByte(value: Byte) {
|
||||
val dest: Byte = UnsignedInt(UnsignedInt.fromByte(value)).toByte()
|
||||
val dest: Byte = UnsignedInt(UnsignedInt.fromKotlinByte(value)).toKotlinByte()
|
||||
assert(value == dest)
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ class EntryActivity : LockingActivity() {
|
||||
private var mAttachmentsToDownload: HashMap<Int, EntryAttachment> = HashMap()
|
||||
|
||||
private var clipboardHelper: ClipboardHelper? = null
|
||||
private var firstLaunchOfActivity: Boolean = false
|
||||
private var mFirstLaunchOfActivity: Boolean = false
|
||||
|
||||
private var iconColor: Int = 0
|
||||
|
||||
@@ -130,9 +130,12 @@ class EntryActivity : LockingActivity() {
|
||||
lockAndExit()
|
||||
}
|
||||
|
||||
// Focus view to reinitialize timeout
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(coordinatorLayout)
|
||||
|
||||
// Init the clipboard helper
|
||||
clipboardHelper = ClipboardHelper(this)
|
||||
firstLaunchOfActivity = true
|
||||
mFirstLaunchOfActivity = savedInstanceState?.getBoolean(KEY_FIRST_LAUNCH_ACTIVITY) ?: true
|
||||
|
||||
// Init attachment service binder manager
|
||||
mAttachmentFileBinderManager = AttachmentFileBinderManager(this)
|
||||
@@ -196,7 +199,7 @@ class EntryActivity : LockingActivity() {
|
||||
val entryInfo = entry.getEntryInfo(Database.getInstance())
|
||||
|
||||
// Manage entry copy to start notification if allowed
|
||||
if (firstLaunchOfActivity) {
|
||||
if (mFirstLaunchOfActivity) {
|
||||
// Manage entry to launch copying notification if allowed
|
||||
ClipboardEntryNotificationService.launchNotificationIfAllowed(this, entryInfo)
|
||||
// Manage entry to populate Magikeyboard and launch keyboard notification if allowed
|
||||
@@ -215,7 +218,7 @@ class EntryActivity : LockingActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
firstLaunchOfActivity = false
|
||||
mFirstLaunchOfActivity = false
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
@@ -542,6 +545,11 @@ class EntryActivity : LockingActivity() {
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
|
||||
outState.putBoolean(KEY_FIRST_LAUNCH_ACTIVITY, mFirstLaunchOfActivity)
|
||||
}
|
||||
|
||||
override fun finish() {
|
||||
// Transit data in previous Activity after an update
|
||||
@@ -555,6 +563,8 @@ class EntryActivity : LockingActivity() {
|
||||
companion object {
|
||||
private val TAG = EntryActivity::class.java.name
|
||||
|
||||
private const val KEY_FIRST_LAUNCH_ACTIVITY = "KEY_FIRST_LAUNCH_ACTIVITY"
|
||||
|
||||
const val KEY_ENTRY = "KEY_ENTRY"
|
||||
const val KEY_ENTRY_HISTORY_POSITION = "KEY_ENTRY_HISTORY_POSITION"
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class EntryEditActivity : LockingActivity(),
|
||||
private var scrollView: NestedScrollView? = null
|
||||
private var entryEditContentsView: EntryEditContentsView? = null
|
||||
private var entryEditAddToolBar: ActionMenuView? = null
|
||||
private var saveView: View? = null
|
||||
private var validateButton: View? = null
|
||||
private var lockView: View? = null
|
||||
|
||||
// Education
|
||||
@@ -121,7 +121,7 @@ class EntryEditActivity : LockingActivity(),
|
||||
}
|
||||
|
||||
// Focus view to reinitialize timeout
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(entryEditContentsView)
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(coordinatorLayout)
|
||||
|
||||
stopService(Intent(this, ClipboardEntryNotificationService::class.java))
|
||||
stopService(Intent(this, KeyboardEntryNotificationService::class.java))
|
||||
@@ -237,8 +237,8 @@ class EntryEditActivity : LockingActivity(),
|
||||
}
|
||||
|
||||
// Save button
|
||||
saveView = findViewById(R.id.entry_edit_validate)
|
||||
saveView?.setOnClickListener { saveEntry() }
|
||||
validateButton = findViewById(R.id.entry_edit_validate)
|
||||
validateButton?.setOnClickListener { saveEntry() }
|
||||
|
||||
// Verify the education views
|
||||
entryEditActivityEducation = EntryEditActivityEducation(this)
|
||||
|
||||
@@ -65,7 +65,6 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
|
||||
// Views
|
||||
private var coordinatorLayout: CoordinatorLayout? = null
|
||||
private var fileManagerExplanationButton: View? = null
|
||||
private var databaseButtonsContainerView: View? = null
|
||||
private var createDatabaseButtonView: View? = null
|
||||
private var openDatabaseButtonView: View? = null
|
||||
|
||||
@@ -97,8 +96,6 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
|
||||
UriUtil.gotoUrl(this, R.string.file_manager_explanation_url)
|
||||
}
|
||||
|
||||
databaseButtonsContainerView = findViewById(R.id.database_buttons_container)
|
||||
|
||||
// Create database button
|
||||
createDatabaseButtonView = findViewById(R.id.create_database_button)
|
||||
createDatabaseButtonView?.setOnClickListener { createNewFile() }
|
||||
@@ -271,8 +268,8 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
|
||||
|
||||
// Show open and create button or special mode
|
||||
if (mSelectionMode) {
|
||||
// Disable buttons if in selection mode or request for autofill
|
||||
databaseButtonsContainerView?.visibility = View.GONE
|
||||
// Disable create button if in selection mode or request for autofill
|
||||
createDatabaseButtonView?.visibility = View.GONE
|
||||
} else {
|
||||
if (allowCreateDocumentByStorageAccessFramework(packageManager)) {
|
||||
// There is an activity which can handle this intent.
|
||||
@@ -281,7 +278,6 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
|
||||
// No Activity found that can handle this intent.
|
||||
createDatabaseButtonView?.visibility = View.GONE
|
||||
}
|
||||
databaseButtonsContainerView?.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
val database = Database.getInstance()
|
||||
@@ -403,11 +399,12 @@ class FileDatabaseSelectActivity : SpecialModeActivity(),
|
||||
|
||||
private fun performedNextEducation(fileDatabaseSelectActivityEducation: FileDatabaseSelectActivityEducation) {
|
||||
// If no recent files
|
||||
val createDatabaseEducationPerformed = createDatabaseButtonView != null && createDatabaseButtonView!!.visibility == View.VISIBLE
|
||||
val createDatabaseEducationPerformed =
|
||||
createDatabaseButtonView != null && createDatabaseButtonView!!.visibility == View.VISIBLE
|
||||
&& mAdapterDatabaseHistory != null
|
||||
&& mAdapterDatabaseHistory!!.itemCount > 0
|
||||
&& fileDatabaseSelectActivityEducation.checkAndPerformedCreateDatabaseEducation(
|
||||
createDatabaseButtonView!!,
|
||||
createDatabaseButtonView!!,
|
||||
{
|
||||
createNewFile()
|
||||
},
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.RequiresApi
|
||||
@@ -75,7 +76,10 @@ import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Compa
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
import com.kunzisoft.keepass.utils.MenuUtil
|
||||
import com.kunzisoft.keepass.view.*
|
||||
import com.kunzisoft.keepass.view.AddNodeButtonView
|
||||
import com.kunzisoft.keepass.view.ToolbarAction
|
||||
import com.kunzisoft.keepass.view.asError
|
||||
import com.kunzisoft.keepass.view.showActionError
|
||||
|
||||
class GroupActivity : LockingActivity(),
|
||||
GroupEditDialogFragment.EditGroupListener,
|
||||
@@ -87,6 +91,7 @@ class GroupActivity : LockingActivity(),
|
||||
SortDialogFragment.SortSelectionListener {
|
||||
|
||||
// Views
|
||||
private var rootContainerView: ViewGroup? = null
|
||||
private var coordinatorLayout: CoordinatorLayout? = null
|
||||
private var lockView: View? = null
|
||||
private var toolbar: Toolbar? = null
|
||||
@@ -127,6 +132,7 @@ class GroupActivity : LockingActivity(),
|
||||
setContentView(layoutInflater.inflate(R.layout.activity_group, null))
|
||||
|
||||
// Initialize views
|
||||
rootContainerView = findViewById(R.id.activity_group_container_view)
|
||||
coordinatorLayout = findViewById(R.id.group_coordinator)
|
||||
iconView = findViewById(R.id.group_icon)
|
||||
numberChildrenView = findViewById(R.id.group_numbers)
|
||||
@@ -150,7 +156,7 @@ class GroupActivity : LockingActivity(),
|
||||
taTextColor.recycle()
|
||||
|
||||
// Focus view to reinitialize timeout
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(addNodeButtonView)
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(rootContainerView)
|
||||
|
||||
// Retrieve elements after an orientation change
|
||||
if (savedInstanceState != null) {
|
||||
@@ -389,7 +395,8 @@ class GroupActivity : LockingActivity(),
|
||||
// If it's a search
|
||||
if (Intent.ACTION_SEARCH == intent.action) {
|
||||
val searchString = intent.getStringExtra(SearchManager.QUERY)?.trim { it <= ' ' } ?: ""
|
||||
return mDatabase?.createVirtualGroupFromSearch(searchString)
|
||||
return mDatabase?.createVirtualGroupFromSearch(searchString,
|
||||
PreferencesUtil.omitBackup(this))
|
||||
}
|
||||
// else a real group
|
||||
else {
|
||||
|
||||
@@ -64,9 +64,7 @@ import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Compa
|
||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.MASTER_PASSWORD_KEY
|
||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.READ_ONLY_KEY
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.utils.FileDatabaseInfo
|
||||
import com.kunzisoft.keepass.utils.MenuUtil
|
||||
import com.kunzisoft.keepass.utils.UriUtil
|
||||
import com.kunzisoft.keepass.utils.*
|
||||
import com.kunzisoft.keepass.view.AdvancedUnlockInfoView
|
||||
import com.kunzisoft.keepass.view.KeyFileSelectionView
|
||||
import com.kunzisoft.keepass.view.asError
|
||||
@@ -355,6 +353,11 @@ open class PasswordActivity : SpecialModeActivity() {
|
||||
|
||||
mProgressDialogThread?.registerProgressTask()
|
||||
|
||||
// Back to previous keyboard is setting activated
|
||||
if (PreferencesUtil.isKeyboardPreviousDatabaseCredentialsEnable(this)) {
|
||||
sendBroadcast(Intent(BACK_PREVIOUS_KEYBOARD_ACTION))
|
||||
}
|
||||
|
||||
// Don't allow auto open prompt if lock become when UI visible
|
||||
mAllowAutoOpenBiometricPrompt = if (LockingActivity.LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK == true)
|
||||
false
|
||||
|
||||
@@ -89,9 +89,9 @@ class SetOTPDialogFragment : DialogFragment() {
|
||||
}
|
||||
|
||||
private var mSecretWellFormed = false
|
||||
private var mCounterWellFormed = true
|
||||
private var mPeriodWellFormed = true
|
||||
private var mDigitsWellFormed = true
|
||||
private var mCounterWellFormed = false
|
||||
private var mPeriodWellFormed = false
|
||||
private var mDigitsWellFormed = false
|
||||
|
||||
override fun onAttach(context: Context) {
|
||||
super.onAttach(context)
|
||||
@@ -365,14 +365,26 @@ class SetOTPDialogFragment : DialogFragment() {
|
||||
private fun upgradeParameters() {
|
||||
otpAlgorithmSpinner?.setSelection(TokenCalculator.HashAlgorithm.values()
|
||||
.indexOf(mOtpElement.algorithm))
|
||||
|
||||
val secret = mOtpElement.getBase32Secret()
|
||||
otpSecretTextView?.apply {
|
||||
setText(mOtpElement.getBase32Secret())
|
||||
setText(secret)
|
||||
// Cursor at end
|
||||
setSelection(this.text.length)
|
||||
}
|
||||
otpCounterTextView?.setText(mOtpElement.counter.toString())
|
||||
otpPeriodTextView?.setText(mOtpElement.period.toString())
|
||||
otpDigitsTextView?.setText(mOtpElement.digits.toString())
|
||||
mSecretWellFormed = OtpElement.isValidBase32(secret)
|
||||
|
||||
val counter = mOtpElement.counter
|
||||
otpCounterTextView?.setText(counter.toString())
|
||||
mCounterWellFormed = OtpElement.isValidCounter(counter)
|
||||
|
||||
val period = mOtpElement.period
|
||||
otpPeriodTextView?.setText(period.toString())
|
||||
mPeriodWellFormed = OtpElement.isValidPeriod(period)
|
||||
|
||||
val digits = mOtpElement.digits
|
||||
otpDigitsTextView?.setText(digits.toString())
|
||||
mDigitsWellFormed = OtpElement.isValidDigits(digits)
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
|
||||
@@ -89,13 +89,13 @@ class OpenFileHelper {
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
private fun openActivityWithActionOpenDocument() {
|
||||
val intentOpenDocument = Intent(APP_ACTION_OPEN_DOCUMENT).apply {
|
||||
val intentOpenDocument = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
|
||||
addCategory(Intent.CATEGORY_OPENABLE)
|
||||
type = "*/*"
|
||||
flags = Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_PREFIX_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
||||
}
|
||||
if (fragment != null)
|
||||
fragment?.startActivityForResult(intentOpenDocument, OPEN_DOC)
|
||||
@@ -108,10 +108,10 @@ class OpenFileHelper {
|
||||
val intentGetContent = Intent(Intent.ACTION_GET_CONTENT).apply {
|
||||
addCategory(Intent.CATEGORY_OPENABLE)
|
||||
type = "*/*"
|
||||
flags = Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_PREFIX_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_READ_URI_PERMISSION or
|
||||
Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
||||
}
|
||||
if (fragment != null)
|
||||
fragment?.startActivityForResult(intentGetContent, GET_CONTENT)
|
||||
@@ -226,12 +226,6 @@ class OpenFileHelper {
|
||||
|
||||
private const val TAG = "OpenFileHelper"
|
||||
|
||||
private var APP_ACTION_OPEN_DOCUMENT: String = try {
|
||||
Intent::class.java.getField("ACTION_OPEN_DOCUMENT").get(null) as String
|
||||
} catch (e: Exception) {
|
||||
"android.intent.action.OPEN_DOCUMENT"
|
||||
}
|
||||
|
||||
const val OPEN_INTENTS_FILE_BROWSE = "org.openintents.action.PICK_FILE"
|
||||
|
||||
private const val GET_CONTENT = 25745
|
||||
|
||||
@@ -19,9 +19,10 @@
|
||||
*/
|
||||
package com.kunzisoft.keepass.activities.lock
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.kunzisoft.keepass.activities.helpers.ReadOnlyHelper
|
||||
@@ -71,6 +72,7 @@ abstract class LockingActivity : SpecialModeActivity() {
|
||||
LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK = LOCKING_ACTIVITY_UI_VISIBLE
|
||||
// Add onActivityForResult response
|
||||
setResult(RESULT_EXIT_LOCK)
|
||||
closeOptionsMenu()
|
||||
finish()
|
||||
}
|
||||
registerLockReceiver(mLockReceiver)
|
||||
@@ -151,11 +153,21 @@ abstract class LockingActivity : SpecialModeActivity() {
|
||||
/**
|
||||
* To reset the app timeout when a view is focused or changed
|
||||
*/
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
protected fun resetAppTimeoutWhenViewFocusedOrChanged(vararg views: View?) {
|
||||
views.forEach {
|
||||
it?.setOnTouchListener { _, event ->
|
||||
when (event.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
// Log.d(TAG, "View touched, try to reset app timeout")
|
||||
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(this)
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
it?.setOnFocusChangeListener { _, hasFocus ->
|
||||
if (hasFocus) {
|
||||
Log.d(TAG, "View focused, reset app timeout")
|
||||
// Log.d(TAG, "View focused, try to reset app timeout")
|
||||
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(this)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,8 @@ class SearchEntryCursorAdapter(private val context: Context,
|
||||
|
||||
private val cursorInflater: LayoutInflater? = context.getSystemService(
|
||||
Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater?
|
||||
private var displayUsername: Boolean = false
|
||||
private var mDisplayUsername: Boolean = false
|
||||
private var mOmitBackup: Boolean = true
|
||||
private val iconColor: Int
|
||||
|
||||
init {
|
||||
@@ -59,7 +60,8 @@ class SearchEntryCursorAdapter(private val context: Context,
|
||||
}
|
||||
|
||||
fun reInit(context: Context) {
|
||||
this.displayUsername = PreferencesUtil.showUsernamesListEntries(context)
|
||||
this.mDisplayUsername = PreferencesUtil.showUsernamesListEntries(context)
|
||||
this.mOmitBackup = PreferencesUtil.omitBackup(context)
|
||||
}
|
||||
|
||||
override fun newView(context: Context, cursor: Cursor, parent: ViewGroup): View {
|
||||
@@ -93,7 +95,7 @@ class SearchEntryCursorAdapter(private val context: Context,
|
||||
// Assign subtitle
|
||||
viewHolder.textViewSubTitle?.apply {
|
||||
val entryUsername = currentEntry.username
|
||||
text = if (displayUsername && entryUsername.isNotEmpty()) {
|
||||
text = if (mDisplayUsername && entryUsername.isNotEmpty()) {
|
||||
String.format("(%s)", entryUsername)
|
||||
} else {
|
||||
""
|
||||
@@ -129,7 +131,9 @@ class SearchEntryCursorAdapter(private val context: Context,
|
||||
if (database.type == DatabaseKDBX.TYPE)
|
||||
cursorKDBX = EntryCursorKDBX()
|
||||
|
||||
val searchGroup = database.createVirtualGroupFromSearch(query, SearchHelper.MAX_SEARCH_ENTRY)
|
||||
val searchGroup = database.createVirtualGroupFromSearch(query,
|
||||
mOmitBackup,
|
||||
SearchHelper.MAX_SEARCH_ENTRY)
|
||||
if (searchGroup != null) {
|
||||
// Search in hide entries but not meta-stream
|
||||
for (entry in searchGroup.getFilteredChildEntries(Group.ChildFilter.getDefaults(context))) {
|
||||
|
||||
@@ -52,12 +52,19 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
|
||||
private var biometricUnlockDatabaseHelper: BiometricUnlockDatabaseHelper? = null
|
||||
private var biometricMode: Mode = Mode.UNAVAILABLE
|
||||
|
||||
/**
|
||||
* Manage setting to auto open biometric prompt
|
||||
*/
|
||||
private var biometricPromptAutoOpenPreference = PreferencesUtil.isBiometricPromptAutoOpenEnable(context)
|
||||
var isBiometricPromptAutoOpenEnable: Boolean = true
|
||||
get() {
|
||||
return field && biometricPromptAutoOpenPreference
|
||||
}
|
||||
|
||||
// Variable to check if the prompt can be open (if the right activity is currently shown)
|
||||
// checkBiometricAvailability() allows open biometric prompt and onDestroy() removes the authorization
|
||||
private var allowOpenBiometricPrompt = false
|
||||
|
||||
private var cipherDatabaseAction = CipherDatabaseAction.getInstance(context.applicationContext)
|
||||
|
||||
init {
|
||||
@@ -77,6 +84,7 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
|
||||
// biometric not supported (by API level or hardware) so keep option hidden
|
||||
// or manually disable
|
||||
val biometricCanAuthenticate = BiometricManager.from(context).canAuthenticate()
|
||||
allowOpenBiometricPrompt = true
|
||||
|
||||
if (!PreferencesUtil.isBiometricUnlockEnable(context)
|
||||
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE
|
||||
@@ -210,7 +218,8 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
|
||||
cryptoObject: BiometricPrompt.CryptoObject,
|
||||
promptInfo: BiometricPrompt.PromptInfo) {
|
||||
context.runOnUiThread {
|
||||
biometricPrompt?.authenticate(promptInfo, cryptoObject)
|
||||
if (allowOpenBiometricPrompt)
|
||||
biometricPrompt?.authenticate(promptInfo, cryptoObject)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,6 +286,7 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
|
||||
|
||||
fun destroy() {
|
||||
// Close the biometric prompt
|
||||
allowOpenBiometricPrompt = false
|
||||
biometricUnlockDatabaseHelper?.closeBiometricPrompt()
|
||||
// Restore the checked listener
|
||||
checkboxPasswordView?.setOnCheckedChangeListener(onCheckedPasswordChangeListener)
|
||||
|
||||
@@ -20,12 +20,10 @@
|
||||
package com.kunzisoft.keepass.crypto.finalkey
|
||||
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
import java.security.InvalidKeyException
|
||||
import java.security.MessageDigest
|
||||
import java.security.NoSuchAlgorithmException
|
||||
import javax.crypto.Cipher
|
||||
import javax.crypto.NoSuchPaddingException
|
||||
import javax.crypto.ShortBufferException
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
|
||||
|
||||
@@ -61,10 +61,10 @@ class Argon2Kdf internal constructor() : KdfEngine() {
|
||||
UnsignedInt(it)
|
||||
}
|
||||
val memory = kdfParameters.getUInt64(PARAM_MEMORY)?.div(MEMORY_BLOCK_SIZE)?.let {
|
||||
UnsignedInt.fromLong(it)
|
||||
UnsignedInt.fromKotlinLong(it)
|
||||
}
|
||||
val iterations = kdfParameters.getUInt64(PARAM_ITERATIONS)?.let {
|
||||
UnsignedInt.fromLong(it)
|
||||
UnsignedInt.fromKotlinLong(it)
|
||||
}
|
||||
val version = kdfParameters.getUInt32(PARAM_VERSION)?.let {
|
||||
UnsignedInt(it)
|
||||
@@ -124,16 +124,16 @@ class Argon2Kdf internal constructor() : KdfEngine() {
|
||||
|
||||
override fun getParallelism(kdfParameters: KdfParameters): Long {
|
||||
return kdfParameters.getUInt32(PARAM_PARALLELISM)?.let {
|
||||
UnsignedInt(it).toLong()
|
||||
UnsignedInt(it).toKotlinLong()
|
||||
} ?: defaultParallelism
|
||||
}
|
||||
|
||||
override fun setParallelism(kdfParameters: KdfParameters, parallelism: Long) {
|
||||
kdfParameters.setUInt32(PARAM_PARALLELISM, UnsignedInt.fromLong(parallelism))
|
||||
kdfParameters.setUInt32(PARAM_PARALLELISM, UnsignedInt.fromKotlinLong(parallelism))
|
||||
}
|
||||
|
||||
override val defaultParallelism: Long
|
||||
get() = DEFAULT_PARALLELISM.toLong()
|
||||
get() = DEFAULT_PARALLELISM.toKotlinLong()
|
||||
|
||||
override val minParallelism: Long
|
||||
get() = MIN_PARALLELISM
|
||||
@@ -173,13 +173,13 @@ class Argon2Kdf internal constructor() : KdfEngine() {
|
||||
private val MAX_VERSION = UnsignedInt(0x13)
|
||||
|
||||
private const val MIN_SALT = 8
|
||||
private val MAX_SALT = UnsignedInt.MAX_VALUE.toLong()
|
||||
private val MAX_SALT = UnsignedInt.MAX_VALUE.toKotlinLong()
|
||||
|
||||
private const val MIN_ITERATIONS: Long = 1L
|
||||
private const val MAX_ITERATIONS = 4294967295L
|
||||
|
||||
private const val MIN_MEMORY = (1024 * 8).toLong()
|
||||
private val MAX_MEMORY = UnsignedInt.MAX_VALUE.toLong()
|
||||
private val MAX_MEMORY = UnsignedInt.MAX_VALUE.toKotlinLong()
|
||||
private const val MEMORY_BLOCK_SIZE: Long = 1024L
|
||||
|
||||
private const val MIN_PARALLELISM: Long = 1L
|
||||
|
||||
@@ -34,12 +34,12 @@ public class Argon2Native {
|
||||
return nTransformMasterKey(
|
||||
password,
|
||||
salt,
|
||||
parallelism.toInt(),
|
||||
memory.toInt(),
|
||||
iterations.toInt(),
|
||||
parallelism.toKotlinInt(),
|
||||
memory.toKotlinInt(),
|
||||
iterations.toKotlinInt(),
|
||||
secretKey,
|
||||
associatedData,
|
||||
version.toInt());
|
||||
version.toKotlinInt());
|
||||
}
|
||||
|
||||
private static native byte[] nTransformMasterKey(byte[] password, byte[] salt, int parallelism,
|
||||
|
||||
@@ -52,7 +52,7 @@ abstract class KdfEngine : ObjectNameResource, Serializable {
|
||||
get() = 1
|
||||
|
||||
open val maxKeyRounds: Long
|
||||
get() = UnsignedInt.MAX_VALUE.toLong()
|
||||
get() = UnsignedInt.MAX_VALUE.toKotlinLong()
|
||||
|
||||
/*
|
||||
* MEMORY
|
||||
@@ -73,7 +73,7 @@ abstract class KdfEngine : ObjectNameResource, Serializable {
|
||||
get() = 1
|
||||
|
||||
open val maxMemoryUsage: Long
|
||||
get() = UnsignedInt.MAX_VALUE.toLong()
|
||||
get() = UnsignedInt.MAX_VALUE.toKotlinLong()
|
||||
|
||||
/*
|
||||
* PARALLELISM
|
||||
@@ -94,7 +94,7 @@ abstract class KdfEngine : ObjectNameResource, Serializable {
|
||||
get() = 1L
|
||||
|
||||
open val maxParallelism: Long
|
||||
get() = UnsignedInt.MAX_VALUE.toLong()
|
||||
get() = UnsignedInt.MAX_VALUE.toKotlinLong()
|
||||
|
||||
companion object {
|
||||
const val UNKNOWN_VALUE: Long = -1L
|
||||
|
||||
@@ -27,7 +27,6 @@ import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction
|
||||
import com.kunzisoft.keepass.database.element.Database
|
||||
import com.kunzisoft.keepass.database.exception.DuplicateUuidDatabaseException
|
||||
import com.kunzisoft.keepass.database.exception.LoadDatabaseException
|
||||
import com.kunzisoft.keepass.notifications.DatabaseOpenNotificationService
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
|
||||
@@ -39,7 +38,6 @@ class LoadDatabaseRunnable(private val context: Context,
|
||||
private val mKey: Uri?,
|
||||
private val mReadonly: Boolean,
|
||||
private val mCipherEntity: CipherDatabaseEntity?,
|
||||
private val mOmitBackup: Boolean,
|
||||
private val mFixDuplicateUUID: Boolean,
|
||||
private val progressTaskUpdater: ProgressTaskUpdater?,
|
||||
private val mDuplicateUuidAction: ((Result) -> Unit)?)
|
||||
@@ -58,7 +56,6 @@ class LoadDatabaseRunnable(private val context: Context,
|
||||
mReadonly,
|
||||
context.contentResolver,
|
||||
cacheDirectory,
|
||||
mOmitBackup,
|
||||
mFixDuplicateUUID,
|
||||
progressTaskUpdater)
|
||||
}
|
||||
@@ -88,9 +85,6 @@ class LoadDatabaseRunnable(private val context: Context,
|
||||
|
||||
// Register the current time to init the lock timer
|
||||
PreferencesUtil.saveCurrentTime(context)
|
||||
|
||||
// Start the opening notification
|
||||
DatabaseOpenNotificationService.start(context)
|
||||
} else {
|
||||
mDatabase.closeAndClear(cacheDirectory)
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.IBinder
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import com.kunzisoft.keepass.activities.lock.LockingActivity
|
||||
import com.kunzisoft.keepass.app.database.CipherDatabaseEntity
|
||||
import com.kunzisoft.keepass.crypto.keyDerivation.KdfEngine
|
||||
import com.kunzisoft.keepass.database.element.Entry
|
||||
@@ -37,7 +36,6 @@ import com.kunzisoft.keepass.database.element.node.Node
|
||||
import com.kunzisoft.keepass.database.element.node.NodeId
|
||||
import com.kunzisoft.keepass.database.element.node.Type
|
||||
import com.kunzisoft.keepass.database.element.security.EncryptionAlgorithm
|
||||
import com.kunzisoft.keepass.notifications.DatabaseOpenNotificationService
|
||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService
|
||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_ASSIGN_PASSWORD_TASK
|
||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_COPY_NODES_TASK
|
||||
@@ -68,7 +66,6 @@ import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Compa
|
||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskDialogFragment.Companion.PROGRESS_TASK_DIALOG_TAG
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
import com.kunzisoft.keepass.utils.DATABASE_START_TASK_ACTION
|
||||
import com.kunzisoft.keepass.utils.DATABASE_STOP_TASK_ACTION
|
||||
import java.util.*
|
||||
@@ -90,9 +87,6 @@ class ProgressDialogThread(private val activity: FragmentActivity) {
|
||||
|
||||
private val actionTaskListener = object: DatabaseTaskNotificationService.ActionTaskListener {
|
||||
override fun onStartAction(titleId: Int?, messageId: Int?, warningId: Int?) {
|
||||
TimeoutHelper.temporarilyDisableTimeout()
|
||||
// Stop the opening notification
|
||||
DatabaseOpenNotificationService.stop(activity)
|
||||
startDialog(titleId, messageId, warningId)
|
||||
}
|
||||
|
||||
@@ -102,21 +96,8 @@ class ProgressDialogThread(private val activity: FragmentActivity) {
|
||||
|
||||
override fun onStopAction(actionTask: String, result: ActionRunnable.Result) {
|
||||
onActionFinish?.invoke(actionTask, result)
|
||||
|
||||
// Remove the progress task
|
||||
stopDialog()
|
||||
TimeoutHelper.releaseTemporarilyDisableTimeout()
|
||||
|
||||
val inTime = if (activity is LockingActivity) {
|
||||
TimeoutHelper.checkTimeAndLockIfTimeout(activity)
|
||||
} else {
|
||||
TimeoutHelper.checkTime(activity)
|
||||
}
|
||||
// Start the opening notification if in time
|
||||
// (databaseOpenService is open manually in Action Open Task)
|
||||
if (actionTask != ACTION_DATABASE_LOAD_TASK && inTime) {
|
||||
DatabaseOpenNotificationService.start(activity)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ import com.kunzisoft.keepass.database.file.output.DatabaseOutputKDBX
|
||||
import com.kunzisoft.keepass.database.search.SearchHelper
|
||||
import com.kunzisoft.keepass.database.search.SearchParameters
|
||||
import com.kunzisoft.keepass.icons.IconDrawableFactory
|
||||
import com.kunzisoft.keepass.model.SearchInfo
|
||||
import com.kunzisoft.keepass.stream.readBytes4ToUInt
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
|
||||
import com.kunzisoft.keepass.utils.SingletonHolder
|
||||
@@ -316,7 +315,6 @@ class Database {
|
||||
readOnly: Boolean,
|
||||
contentResolver: ContentResolver,
|
||||
cacheDirectory: File,
|
||||
omitBackup: Boolean,
|
||||
fixDuplicateUUID: Boolean,
|
||||
progressTaskUpdater: ProgressTaskUpdater?) {
|
||||
|
||||
@@ -378,7 +376,7 @@ class Database {
|
||||
else -> throw SignatureDatabaseException()
|
||||
}
|
||||
|
||||
this.mSearchHelper = SearchHelper(omitBackup)
|
||||
this.mSearchHelper = SearchHelper()
|
||||
loaded = true
|
||||
|
||||
} catch (e: LoadDatabaseException) {
|
||||
@@ -393,20 +391,24 @@ class Database {
|
||||
}
|
||||
}
|
||||
|
||||
fun isGroupSearchable(group: Group, isOmitBackup: Boolean): Boolean {
|
||||
return mDatabaseKDB?.isGroupSearchable(group.groupKDB, isOmitBackup) ?:
|
||||
mDatabaseKDBX?.isGroupSearchable(group.groupKDBX, isOmitBackup) ?:
|
||||
fun isGroupSearchable(group: Group, omitBackup: Boolean): Boolean {
|
||||
return mDatabaseKDB?.isGroupSearchable(group.groupKDB, omitBackup) ?:
|
||||
mDatabaseKDBX?.isGroupSearchable(group.groupKDBX, omitBackup) ?:
|
||||
false
|
||||
}
|
||||
|
||||
fun createVirtualGroupFromSearch(searchQuery: String,
|
||||
omitBackup: Boolean,
|
||||
max: Int = Integer.MAX_VALUE): Group? {
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchQuery, SearchParameters(), max)
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this,
|
||||
searchQuery, SearchParameters(), omitBackup, max)
|
||||
}
|
||||
|
||||
fun createVirtualGroupFromSearchInfo(searchInfoString: String,
|
||||
omitBackup: Boolean,
|
||||
max: Int = Integer.MAX_VALUE): Group? {
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfoString, SearchParameters().apply {
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this,
|
||||
searchInfoString, SearchParameters().apply {
|
||||
searchInTitles = false
|
||||
searchInUserNames = false
|
||||
searchInPasswords = false
|
||||
@@ -416,7 +418,7 @@ class Database {
|
||||
searchInUUIDs = false
|
||||
searchInTags = false
|
||||
ignoreCase = true
|
||||
}, max)
|
||||
}, omitBackup, max)
|
||||
}
|
||||
|
||||
@Throws(DatabaseOutputException::class)
|
||||
|
||||
@@ -58,7 +58,7 @@ class AutoType : Parcelable {
|
||||
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
dest.writeByte((if (enabled) 1 else 0).toByte())
|
||||
dest.writeInt(obfuscationOptions.toInt())
|
||||
dest.writeInt(obfuscationOptions.toKotlinInt())
|
||||
dest.writeString(defaultSequence)
|
||||
ParcelableUtil.writeStringParcelableMap(dest, windowSeqPairs)
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ class EntryKDBX : EntryVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
super.writeToParcel(dest, flags)
|
||||
dest.writeParcelable(iconCustom, flags)
|
||||
dest.writeLong(usageCount.toLong())
|
||||
dest.writeLong(usageCount.toKotlinLong())
|
||||
dest.writeParcelable(locationChanged, flags)
|
||||
ParcelableUtil.writeStringParcelableMap(dest, customData)
|
||||
ParcelableUtil.writeStringParcelableMap(dest, flags, fields)
|
||||
@@ -334,7 +334,7 @@ class EntryKDBX : EntryVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
|
||||
override fun touch(modified: Boolean, touchParents: Boolean) {
|
||||
super.touch(modified, touchParents)
|
||||
// TODO unsigned long
|
||||
usageCount = UnsignedLong(usageCount.toLong() + 1)
|
||||
usageCount = UnsignedLong(usageCount.toKotlinLong() + 1)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -102,7 +102,7 @@ class GroupKDBX : GroupVersioned<UUID, UUID, GroupKDBX, EntryKDBX>, NodeKDBXInte
|
||||
override fun writeToParcel(dest: Parcel, flags: Int) {
|
||||
super.writeToParcel(dest, flags)
|
||||
dest.writeParcelable(iconCustom, flags)
|
||||
dest.writeLong(usageCount.toLong())
|
||||
dest.writeLong(usageCount.toKotlinLong())
|
||||
dest.writeParcelable(locationChanged, flags)
|
||||
// TODO ParcelableUtil.writeStringParcelableMap(dest, customData);
|
||||
dest.writeString(notes)
|
||||
|
||||
@@ -97,11 +97,11 @@ class DatabaseHeaderKDB : DatabaseHeader() {
|
||||
const val BUF_SIZE = 124
|
||||
|
||||
fun matchesHeader(sig1: UnsignedInt, sig2: UnsignedInt): Boolean {
|
||||
return sig1.toInt() == PWM_DBSIG_1.toInt() && sig2.toInt() == DBSIG_2.toInt()
|
||||
return sig1.toKotlinInt() == PWM_DBSIG_1.toKotlinInt() && sig2.toKotlinInt() == DBSIG_2.toKotlinInt()
|
||||
}
|
||||
|
||||
fun compatibleHeaders(one: UnsignedInt, two: UnsignedInt): Boolean {
|
||||
return one.toInt() and -0x100 == two.toInt() and -0x100
|
||||
return one.toKotlinInt() and -0x100 == two.toKotlinInt() and -0x100
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -176,10 +176,10 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
|
||||
private fun readHeaderField(dis: LittleEndianDataInputStream): Boolean {
|
||||
val fieldID = dis.read().toByte()
|
||||
|
||||
val fieldSize: Int = if (version.toLong() < FILE_VERSION_32_4.toLong()) {
|
||||
val fieldSize: Int = if (version.toKotlinLong() < FILE_VERSION_32_4.toKotlinLong()) {
|
||||
dis.readUShort()
|
||||
} else {
|
||||
dis.readUInt().toInt()
|
||||
dis.readUInt().toKotlinInt()
|
||||
}
|
||||
|
||||
var fieldData: ByteArray? = null
|
||||
@@ -202,20 +202,20 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
|
||||
|
||||
PwDbHeaderV4Fields.MasterSeed -> masterSeed = fieldData
|
||||
|
||||
PwDbHeaderV4Fields.TransformSeed -> if (version.toLong() < FILE_VERSION_32_4.toLong())
|
||||
PwDbHeaderV4Fields.TransformSeed -> if (version.toKotlinLong() < FILE_VERSION_32_4.toKotlinLong())
|
||||
transformSeed = fieldData
|
||||
|
||||
PwDbHeaderV4Fields.TransformRounds -> if (version.toLong() < FILE_VERSION_32_4.toLong())
|
||||
PwDbHeaderV4Fields.TransformRounds -> if (version.toKotlinLong() < FILE_VERSION_32_4.toKotlinLong())
|
||||
setTransformRound(fieldData)
|
||||
|
||||
PwDbHeaderV4Fields.EncryptionIV -> encryptionIV = fieldData
|
||||
|
||||
PwDbHeaderV4Fields.InnerRandomstreamKey -> if (version.toLong() < FILE_VERSION_32_4.toLong())
|
||||
PwDbHeaderV4Fields.InnerRandomstreamKey -> if (version.toKotlinLong() < FILE_VERSION_32_4.toKotlinLong())
|
||||
innerRandomStreamKey = fieldData
|
||||
|
||||
PwDbHeaderV4Fields.StreamStartBytes -> streamStartBytes = fieldData
|
||||
|
||||
PwDbHeaderV4Fields.InnerRandomStreamID -> if (version.toLong() < FILE_VERSION_32_4.toLong())
|
||||
PwDbHeaderV4Fields.InnerRandomStreamID -> if (version.toKotlinLong() < FILE_VERSION_32_4.toKotlinLong())
|
||||
setRandomStreamID(fieldData)
|
||||
|
||||
PwDbHeaderV4Fields.KdfParameters -> databaseV4.kdfParameters = KdfParameters.deserialize(fieldData)
|
||||
@@ -261,7 +261,7 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
|
||||
}
|
||||
|
||||
val flag = bytes4ToUInt(pbFlags)
|
||||
if (flag.toLong() < 0 || flag.toLong() >= CompressionAlgorithm.values().size) {
|
||||
if (flag.toKotlinLong() < 0 || flag.toKotlinLong() >= CompressionAlgorithm.values().size) {
|
||||
throw IOException("Unrecognized compression flag.")
|
||||
}
|
||||
|
||||
@@ -277,7 +277,7 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
|
||||
}
|
||||
|
||||
val id = bytes4ToUInt(streamID)
|
||||
if (id.toInt() < 0 || id.toInt() >= CrsAlgorithm.values().size) {
|
||||
if (id.toKotlinInt() < 0 || id.toKotlinInt() >= CrsAlgorithm.values().size) {
|
||||
throw IOException("Invalid stream id.")
|
||||
}
|
||||
|
||||
@@ -292,8 +292,8 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
|
||||
* @return true if it's a supported version
|
||||
*/
|
||||
private fun validVersion(version: UnsignedInt): Boolean {
|
||||
return version.toInt() and FILE_VERSION_CRITICAL_MASK.toInt() <=
|
||||
FILE_VERSION_32_4.toInt() and FILE_VERSION_CRITICAL_MASK.toInt()
|
||||
return version.toKotlinInt() and FILE_VERSION_CRITICAL_MASK.toKotlinInt() <=
|
||||
FILE_VERSION_32_4.toKotlinInt() and FILE_VERSION_CRITICAL_MASK.toKotlinInt()
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -306,7 +306,7 @@ class DatabaseHeaderKDBX(private val databaseV4: DatabaseKDBX) : DatabaseHeader(
|
||||
val FILE_VERSION_32_4 = UnsignedInt(0x00040000)
|
||||
|
||||
fun getCompressionFromFlag(flag: UnsignedInt): CompressionAlgorithm? {
|
||||
return when (flag.toInt()) {
|
||||
return when (flag.toKotlinInt()) {
|
||||
0 -> CompressionAlgorithm.None
|
||||
1 -> CompressionAlgorithm.GZip
|
||||
else -> null
|
||||
|
||||
@@ -90,16 +90,16 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
|
||||
// Select algorithm
|
||||
when {
|
||||
header.flags.toInt() and DatabaseHeaderKDB.FLAG_RIJNDAEL.toInt() != 0 -> {
|
||||
header.flags.toKotlinInt() and DatabaseHeaderKDB.FLAG_RIJNDAEL.toKotlinInt() != 0 -> {
|
||||
mDatabaseToOpen.encryptionAlgorithm = EncryptionAlgorithm.AESRijndael
|
||||
}
|
||||
header.flags.toInt() and DatabaseHeaderKDB.FLAG_TWOFISH.toInt() != 0 -> {
|
||||
header.flags.toKotlinInt() and DatabaseHeaderKDB.FLAG_TWOFISH.toKotlinInt() != 0 -> {
|
||||
mDatabaseToOpen.encryptionAlgorithm = EncryptionAlgorithm.Twofish
|
||||
}
|
||||
else -> throw InvalidAlgorithmDatabaseException()
|
||||
}
|
||||
|
||||
mDatabaseToOpen.numberKeyEncryptionRounds = header.numKeyEncRounds.toLong()
|
||||
mDatabaseToOpen.numberKeyEncryptionRounds = header.numKeyEncRounds.toKotlinLong()
|
||||
|
||||
// Generate transformedMasterKey from masterKey
|
||||
mDatabaseToOpen.makeFinalKey(
|
||||
@@ -160,11 +160,11 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
var newEntry: EntryKDB? = null
|
||||
var currentGroupNumber = 0
|
||||
var currentEntryNumber = 0
|
||||
while (currentGroupNumber < header.numGroups.toLong()
|
||||
|| currentEntryNumber < header.numEntries.toLong()) {
|
||||
while (currentGroupNumber < header.numGroups.toKotlinLong()
|
||||
|| currentEntryNumber < header.numEntries.toKotlinLong()) {
|
||||
|
||||
val fieldType = cipherInputStream.readBytes2ToUShort()
|
||||
val fieldSize = cipherInputStream.readBytes4ToUInt().toInt()
|
||||
val fieldSize = cipherInputStream.readBytes4ToUInt().toKotlinInt()
|
||||
|
||||
when (fieldType) {
|
||||
0x0000 -> {
|
||||
@@ -175,7 +175,7 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
when (fieldSize) {
|
||||
4 -> {
|
||||
newGroup = mDatabaseToOpen.createGroup().apply {
|
||||
setGroupId(cipherInputStream.readBytes4ToUInt().toInt())
|
||||
setGroupId(cipherInputStream.readBytes4ToUInt().toKotlinInt())
|
||||
}
|
||||
}
|
||||
16 -> {
|
||||
@@ -194,7 +194,7 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
} ?:
|
||||
newEntry?.let { entry ->
|
||||
val groupKDB = mDatabaseToOpen.createGroup()
|
||||
groupKDB.nodeId = NodeIdInt(cipherInputStream.readBytes4ToUInt().toInt())
|
||||
groupKDB.nodeId = NodeIdInt(cipherInputStream.readBytes4ToUInt().toKotlinInt())
|
||||
entry.parent = groupKDB
|
||||
}
|
||||
}
|
||||
@@ -203,7 +203,7 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
group.creationTime = cipherInputStream.readBytes5ToDate()
|
||||
} ?:
|
||||
newEntry?.let { entry ->
|
||||
var iconId = cipherInputStream.readBytes4ToUInt().toInt()
|
||||
var iconId = cipherInputStream.readBytes4ToUInt().toKotlinInt()
|
||||
// Clean up after bug that set icon ids to -1
|
||||
if (iconId == -1) {
|
||||
iconId = 0
|
||||
@@ -237,7 +237,7 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
}
|
||||
0x0007 -> {
|
||||
newGroup?.let { group ->
|
||||
group.icon = mDatabaseToOpen.iconFactory.getIcon(cipherInputStream.readBytes4ToUInt().toInt())
|
||||
group.icon = mDatabaseToOpen.iconFactory.getIcon(cipherInputStream.readBytes4ToUInt().toKotlinInt())
|
||||
} ?:
|
||||
newEntry?.let { entry ->
|
||||
entry.password = cipherInputStream.readBytesToString(fieldSize,false)
|
||||
@@ -253,7 +253,7 @@ class DatabaseInputKDB(cacheDirectory: File,
|
||||
}
|
||||
0x0009 -> {
|
||||
newGroup?.let { group ->
|
||||
group.groupFlags = cipherInputStream.readBytes4ToUInt().toInt()
|
||||
group.groupFlags = cipherInputStream.readBytes4ToUInt().toKotlinInt()
|
||||
} ?:
|
||||
newEntry?.let { entry ->
|
||||
entry.creationTime = cipherInputStream.readBytes5ToDate()
|
||||
|
||||
@@ -132,7 +132,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
|
||||
}
|
||||
|
||||
val isPlain: InputStream
|
||||
if (mDatabase.kdbxVersion.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (mDatabase.kdbxVersion.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
|
||||
val decrypted = attachCipherStream(databaseInputStream, cipher)
|
||||
val dataDecrypted = LittleEndianDataInputStream(decrypted)
|
||||
@@ -180,7 +180,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
|
||||
else -> isPlain
|
||||
}
|
||||
|
||||
if (mDatabase.kdbxVersion.toLong() >= DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (mDatabase.kdbxVersion.toKotlinLong() >= DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
loadInnerHeader(inputStreamXml, header)
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
|
||||
header: DatabaseHeaderKDBX): Boolean {
|
||||
val fieldId = dataInputStream.read().toByte()
|
||||
|
||||
val size = dataInputStream.readUInt().toInt()
|
||||
val size = dataInputStream.readUInt().toKotlinInt()
|
||||
if (size < 0) throw IOException("Corrupted file")
|
||||
|
||||
var data = ByteArray(0)
|
||||
@@ -492,7 +492,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemNotes, ignoreCase = true)) {
|
||||
ctxGroup?.notes = readString(xpp)
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemIcon, ignoreCase = true)) {
|
||||
ctxGroup?.icon = mDatabase.iconFactory.getIcon(readUInt(xpp, UnsignedInt(0)).toInt())
|
||||
ctxGroup?.icon = mDatabase.iconFactory.getIcon(readUInt(xpp, UnsignedInt(0)).toKotlinInt())
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemCustomIconID, ignoreCase = true)) {
|
||||
ctxGroup?.iconCustom = mDatabase.iconFactory.getIcon(readUuid(xpp))
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemTimes, ignoreCase = true)) {
|
||||
@@ -546,7 +546,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
|
||||
KdbContext.Entry -> if (name.equals(DatabaseKDBXXML.ElemUuid, ignoreCase = true)) {
|
||||
ctxEntry?.nodeId = NodeIdUUID(readUuid(xpp))
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemIcon, ignoreCase = true)) {
|
||||
ctxEntry?.icon = mDatabase.iconFactory.getIcon(readUInt(xpp, UnsignedInt(0)).toInt())
|
||||
ctxEntry?.icon = mDatabase.iconFactory.getIcon(readUInt(xpp, UnsignedInt(0)).toKotlinInt())
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemCustomIconID, ignoreCase = true)) {
|
||||
ctxEntry?.iconCustom = mDatabase.iconFactory.getIcon(readUuid(xpp))
|
||||
} else if (name.equals(DatabaseKDBXXML.ElemFgColor, ignoreCase = true)) {
|
||||
@@ -819,7 +819,7 @@ class DatabaseInputKDBX(cacheDirectory: File,
|
||||
val sDate = readString(xpp)
|
||||
var utcDate: Date? = null
|
||||
|
||||
if (mDatabase.kdbxVersion.toLong() >= DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (mDatabase.kdbxVersion.toKotlinLong() >= DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
var buf = Base64.decode(sDate, BASE_64_FLAG)
|
||||
if (buf.size != 8) {
|
||||
val buf8 = ByteArray(8)
|
||||
|
||||
@@ -90,7 +90,7 @@ constructor(private val databaseKDBX: DatabaseKDBX,
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.CompressionFlags, uIntTo4Bytes(DatabaseHeaderKDBX.getFlagFromCompression(databaseKDBX.compressionAlgorithm)))
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.MasterSeed, header.masterSeed)
|
||||
|
||||
if (header.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.TransformSeed, header.transformSeed)
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.TransformRounds, longTo8Bytes(databaseKDBX.numberKeyEncryptionRounds))
|
||||
} else {
|
||||
@@ -101,7 +101,7 @@ constructor(private val databaseKDBX: DatabaseKDBX,
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.EncryptionIV, header.encryptionIV)
|
||||
}
|
||||
|
||||
if (header.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.InnerRandomstreamKey, header.innerRandomStreamKey)
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.StreamStartBytes, header.streamStartBytes)
|
||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.InnerRandomStreamID, uIntTo4Bytes(header.innerRandomStream!!.id))
|
||||
@@ -136,7 +136,7 @@ constructor(private val databaseKDBX: DatabaseKDBX,
|
||||
|
||||
@Throws(IOException::class)
|
||||
private fun writeHeaderFieldSize(size: Int) {
|
||||
if (header.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
los.writeUShort(size)
|
||||
} else {
|
||||
los.writeInt(size)
|
||||
|
||||
@@ -40,7 +40,7 @@ class DatabaseInnerHeaderOutputKDBX(private val database: DatabaseKDBX,
|
||||
dataOutputStream.writeInt(4)
|
||||
if (header.innerRandomStream == null)
|
||||
throw IOException("Can't write innerRandomStream")
|
||||
dataOutputStream.writeInt(header.innerRandomStream!!.id.toInt())
|
||||
dataOutputStream.writeInt(header.innerRandomStream!!.id.toKotlinInt())
|
||||
|
||||
val streamKeySize = header.innerRandomStreamKey.size
|
||||
dataOutputStream.write(DatabaseHeaderKDBX.PwDbInnerHeaderV4Fields.InnerRandomstreamKey.toInt())
|
||||
|
||||
@@ -118,10 +118,10 @@ class DatabaseOutputKDB(private val mDatabaseKDB: DatabaseKDB,
|
||||
|
||||
when {
|
||||
mDatabaseKDB.encryptionAlgorithm === EncryptionAlgorithm.AESRijndael -> {
|
||||
header.flags = UnsignedInt(header.flags.toInt() or DatabaseHeaderKDB.FLAG_RIJNDAEL.toInt())
|
||||
header.flags = UnsignedInt(header.flags.toKotlinInt() or DatabaseHeaderKDB.FLAG_RIJNDAEL.toKotlinInt())
|
||||
}
|
||||
mDatabaseKDB.encryptionAlgorithm === EncryptionAlgorithm.Twofish -> {
|
||||
header.flags = UnsignedInt(header.flags.toInt() or DatabaseHeaderKDB.FLAG_TWOFISH.toInt())
|
||||
header.flags = UnsignedInt(header.flags.toKotlinInt() or DatabaseHeaderKDB.FLAG_TWOFISH.toKotlinInt())
|
||||
}
|
||||
else -> throw DatabaseOutputException("Unsupported algorithm.")
|
||||
}
|
||||
@@ -129,7 +129,7 @@ class DatabaseOutputKDB(private val mDatabaseKDB: DatabaseKDB,
|
||||
header.version = DatabaseHeaderKDB.DBVER_DW
|
||||
header.numGroups = UnsignedInt(mDatabaseKDB.numberOfGroups())
|
||||
header.numEntries = UnsignedInt(mDatabaseKDB.numberOfEntries())
|
||||
header.numKeyEncRounds = UnsignedInt.fromLong(mDatabaseKDB.numberKeyEncryptionRounds)
|
||||
header.numKeyEncRounds = UnsignedInt.fromKotlinLong(mDatabaseKDB.numberKeyEncryptionRounds)
|
||||
|
||||
setIVs(header)
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
header = outputHeader(mOS)
|
||||
|
||||
val osPlain: OutputStream
|
||||
osPlain = if (header!!.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
osPlain = if (header!!.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
val cos = attachStreamEncryptor(header!!, mOS)
|
||||
cos.write(header!!.streamStartBytes)
|
||||
|
||||
@@ -105,7 +105,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
else -> osPlain
|
||||
}
|
||||
|
||||
if (header!!.version.toLong() >= DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header!!.version.toKotlinLong() >= DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
val ihOut = DatabaseInnerHeaderOutputKDBX(mDatabaseKDBX, header!!, osXml)
|
||||
ihOut.output()
|
||||
}
|
||||
@@ -209,7 +209,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
writeObject(DatabaseKDBXXML.ElemDbDescChanged, mDatabaseKDBX.descriptionChanged.date)
|
||||
writeObject(DatabaseKDBXXML.ElemDbDefaultUser, mDatabaseKDBX.defaultUserName, true)
|
||||
writeObject(DatabaseKDBXXML.ElemDbDefaultUserChanged, mDatabaseKDBX.defaultUserNameChanged.date)
|
||||
writeObject(DatabaseKDBXXML.ElemDbMntncHistoryDays, mDatabaseKDBX.maintenanceHistoryDays.toLong())
|
||||
writeObject(DatabaseKDBXXML.ElemDbMntncHistoryDays, mDatabaseKDBX.maintenanceHistoryDays.toKotlinLong())
|
||||
writeObject(DatabaseKDBXXML.ElemDbColor, mDatabaseKDBX.color)
|
||||
writeObject(DatabaseKDBXXML.ElemDbKeyChanged, mDatabaseKDBX.keyLastChanged.date)
|
||||
writeObject(DatabaseKDBXXML.ElemDbKeyChangeRec, mDatabaseKDBX.keyChangeRecDays)
|
||||
@@ -230,7 +230,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
writeUuid(DatabaseKDBXXML.ElemLastTopVisibleGroup, mDatabaseKDBX.lastTopVisibleGroupUUID)
|
||||
|
||||
// Seem to work properly if always in meta
|
||||
if (header!!.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong())
|
||||
if (header!!.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong())
|
||||
writeMetaBinaries()
|
||||
|
||||
writeCustomData(mDatabaseKDBX.customData)
|
||||
@@ -274,7 +274,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
Log.e(TAG, "Unable to retrieve header", unknownKDF)
|
||||
}
|
||||
|
||||
if (header.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
header.innerRandomStream = CrsAlgorithm.Salsa20
|
||||
header.innerRandomStreamKey = ByteArray(32)
|
||||
} else {
|
||||
@@ -288,7 +288,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
throw DatabaseOutputException("Invalid random cipher")
|
||||
}
|
||||
|
||||
if (header.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
random.nextBytes(header.streamStartBytes)
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
|
||||
@Throws(IllegalArgumentException::class, IllegalStateException::class, IOException::class)
|
||||
private fun writeObject(name: String, value: Date) {
|
||||
if (header!!.version.toLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toLong()) {
|
||||
if (header!!.version.toKotlinLong() < DatabaseHeaderKDBX.FILE_VERSION_32_4.toKotlinLong()) {
|
||||
writeObject(name, DatabaseKDBXXML.DateFormatter.format(value))
|
||||
} else {
|
||||
val dt = DateTime(value)
|
||||
@@ -489,7 +489,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
xml.startTag(null, DatabaseKDBXXML.ElemAutoType)
|
||||
|
||||
writeObject(DatabaseKDBXXML.ElemAutoTypeEnabled, autoType.enabled)
|
||||
writeObject(DatabaseKDBXXML.ElemAutoTypeObfuscation, autoType.obfuscationOptions.toLong())
|
||||
writeObject(DatabaseKDBXXML.ElemAutoTypeObfuscation, autoType.obfuscationOptions.toKotlinLong())
|
||||
|
||||
if (autoType.defaultSequence.isNotEmpty()) {
|
||||
writeObject(DatabaseKDBXXML.ElemAutoTypeDefaultSeq, autoType.defaultSequence, true)
|
||||
@@ -629,7 +629,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX,
|
||||
writeObject(DatabaseKDBXXML.ElemLastAccessTime, node.lastAccessTime.date)
|
||||
writeObject(DatabaseKDBXXML.ElemExpiryTime, node.expiryTime.date)
|
||||
writeObject(DatabaseKDBXXML.ElemExpires, node.expires)
|
||||
writeObject(DatabaseKDBXXML.ElemUsageCount, node.usageCount.toLong())
|
||||
writeObject(DatabaseKDBXXML.ElemUsageCount, node.usageCount.toKotlinLong())
|
||||
writeObject(DatabaseKDBXXML.ElemLocationChanged, node.locationChanged.date)
|
||||
|
||||
xml.endTag(null, DatabaseKDBXXML.ElemTimes)
|
||||
|
||||
@@ -104,7 +104,7 @@ class EntryOutputKDB
|
||||
val binaryData = mEntry.binaryData
|
||||
val binaryDataLength = binaryData?.length() ?: 0L
|
||||
// Write data length
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt.fromLong(binaryDataLength)))
|
||||
mOutputStream.write(uIntTo4Bytes(UnsignedInt.fromKotlinLong(binaryDataLength)))
|
||||
// Write data
|
||||
if (binaryDataLength > 0) {
|
||||
binaryData?.getInputDataStream().use { inputStream ->
|
||||
|
||||
@@ -32,7 +32,7 @@ import com.kunzisoft.keepass.model.getSearchString
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
|
||||
class SearchHelper(private val isOmitBackup: Boolean) {
|
||||
class SearchHelper {
|
||||
|
||||
companion object {
|
||||
const val MAX_SEARCH_ENTRY = 6
|
||||
@@ -54,6 +54,7 @@ class SearchHelper(private val isOmitBackup: Boolean) {
|
||||
// If search provide results
|
||||
database.createVirtualGroupFromSearchInfo(
|
||||
searchInfo.getSearchString(context),
|
||||
PreferencesUtil.omitBackup(context),
|
||||
MAX_SEARCH_ENTRY
|
||||
)?.let { searchGroup ->
|
||||
if (searchGroup.getNumberOfChildEntries() > 0) {
|
||||
@@ -77,6 +78,7 @@ class SearchHelper(private val isOmitBackup: Boolean) {
|
||||
fun createVirtualGroupWithSearchResult(database: Database,
|
||||
searchQuery: String,
|
||||
searchParameters: SearchParameters,
|
||||
omitBackup: Boolean,
|
||||
max: Int): Group? {
|
||||
|
||||
val searchGroup = database.createGroup()
|
||||
@@ -101,7 +103,7 @@ class SearchHelper(private val isOmitBackup: Boolean) {
|
||||
override fun operate(node: Group): Boolean {
|
||||
return when {
|
||||
incrementEntry >= max -> false
|
||||
database.isGroupSearchable(node, isOmitBackup) -> true
|
||||
database.isGroupSearchable(node, omitBackup) -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +65,9 @@ class MagikIME : InputMethodService(), KeyboardView.OnKeyboardActionListener {
|
||||
removeEntryInfo()
|
||||
assignKeyboardView()
|
||||
}
|
||||
lockReceiver?.backToPreviousKeyboardAction = {
|
||||
switchToPreviousKeyboard()
|
||||
}
|
||||
|
||||
registerLockReceiver(lockReceiver, true)
|
||||
}
|
||||
@@ -262,8 +265,12 @@ class MagikIME : InputMethodService(), KeyboardView.OnKeyboardActionListener {
|
||||
}
|
||||
|
||||
private fun actionGoAutomatically() {
|
||||
if (PreferencesUtil.isAutoGoActionEnable(this))
|
||||
if (PreferencesUtil.isAutoGoActionEnable(this)) {
|
||||
currentInputConnection.performEditorAction(EditorInfo.IME_ACTION_GO)
|
||||
if (PreferencesUtil.isKeyboardPreviousFillInEnable(this)) {
|
||||
switchToPreviousKeyboard()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPress(primaryCode: Int) {
|
||||
|
||||
@@ -153,9 +153,6 @@ class ClipboardEntryNotificationService : LockNotificationService() {
|
||||
val nextField = nextFields[0]
|
||||
builder.setContentText(getString(R.string.select_to_copy, nextField.label))
|
||||
builder.setContentIntent(getCopyPendingIntent(nextField, nextFields))
|
||||
// Else tell to swipe for a clean
|
||||
} else {
|
||||
builder.setContentText(getString(R.string.clipboard_swipe_clean))
|
||||
}
|
||||
|
||||
val cleanIntent = Intent(this, ClipboardEntryNotificationService::class.java)
|
||||
|
||||
@@ -21,34 +21,41 @@ package com.kunzisoft.keepass.notifications
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.*
|
||||
import android.os.Binder
|
||||
import android.os.Bundle
|
||||
import android.os.IBinder
|
||||
import com.kunzisoft.keepass.R
|
||||
import com.kunzisoft.keepass.app.database.CipherDatabaseEntity
|
||||
import com.kunzisoft.keepass.database.action.*
|
||||
import com.kunzisoft.keepass.database.action.history.DeleteEntryHistoryDatabaseRunnable
|
||||
import com.kunzisoft.keepass.database.action.history.RestoreEntryHistoryDatabaseRunnable
|
||||
import com.kunzisoft.keepass.database.action.node.*
|
||||
import com.kunzisoft.keepass.database.element.*
|
||||
import com.kunzisoft.keepass.database.element.Database
|
||||
import com.kunzisoft.keepass.database.element.Entry
|
||||
import com.kunzisoft.keepass.database.element.Group
|
||||
import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm
|
||||
import com.kunzisoft.keepass.database.element.node.Node
|
||||
import com.kunzisoft.keepass.database.element.node.NodeId
|
||||
import com.kunzisoft.keepass.database.element.node.Type
|
||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||
import com.kunzisoft.keepass.tasks.ProgressTaskUpdater
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
import com.kunzisoft.keepass.utils.DATABASE_START_TASK_ACTION
|
||||
import com.kunzisoft.keepass.utils.DATABASE_STOP_TASK_ACTION
|
||||
import kotlinx.coroutines.*
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
class DatabaseTaskNotificationService : NotificationService(), ProgressTaskUpdater {
|
||||
|
||||
override val notificationId: Int = 575
|
||||
|
||||
private var actionRunnableAsyncTask: ActionRunnableAsyncTask? = null
|
||||
private val mainScope = CoroutineScope(Dispatchers.Main)
|
||||
|
||||
private var mActionTaskBinder = ActionTaskBinder()
|
||||
private var mActionTaskListeners = LinkedList<ActionTaskListener>()
|
||||
private var mAllowFinishAction = AtomicBoolean()
|
||||
|
||||
private var mTitleId: Int? = null
|
||||
private var mMessageId: Int? = null
|
||||
@@ -60,10 +67,14 @@ class DatabaseTaskNotificationService : NotificationService(), ProgressTaskUpdat
|
||||
|
||||
fun addActionTaskListener(actionTaskListener: ActionTaskListener) {
|
||||
mActionTaskListeners.add(actionTaskListener)
|
||||
mAllowFinishAction.set(true)
|
||||
}
|
||||
|
||||
fun removeActionTaskListener(actionTaskListener: ActionTaskListener) {
|
||||
mActionTaskListeners.remove(actionTaskListener)
|
||||
if (mActionTaskListeners.size == 0) {
|
||||
mAllowFinishAction.set(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,34 +166,79 @@ class DatabaseTaskNotificationService : NotificationService(), ProgressTaskUpdat
|
||||
newNotification(intent.getIntExtra(DATABASE_TASK_TITLE_KEY, titleId))
|
||||
|
||||
// Build and launch the action
|
||||
actionRunnableAsyncTask = ActionRunnableAsyncTask(this,
|
||||
{
|
||||
sendBroadcast(Intent(DATABASE_START_TASK_ACTION).apply {
|
||||
putExtra(DATABASE_TASK_TITLE_KEY, titleId)
|
||||
putExtra(DATABASE_TASK_MESSAGE_KEY, messageId)
|
||||
putExtra(DATABASE_TASK_WARNING_KEY, warningId)
|
||||
})
|
||||
mainScope.launch {
|
||||
executeAction(this@DatabaseTaskNotificationService,
|
||||
{
|
||||
sendBroadcast(Intent(DATABASE_START_TASK_ACTION).apply {
|
||||
putExtra(DATABASE_TASK_TITLE_KEY, titleId)
|
||||
putExtra(DATABASE_TASK_MESSAGE_KEY, messageId)
|
||||
putExtra(DATABASE_TASK_WARNING_KEY, warningId)
|
||||
})
|
||||
|
||||
mActionTaskListeners.forEach { actionTaskListener ->
|
||||
actionTaskListener.onStartAction(titleId, messageId, warningId)
|
||||
}
|
||||
mActionTaskListeners.forEach { actionTaskListener ->
|
||||
actionTaskListener.onStartAction(titleId, messageId, warningId)
|
||||
}
|
||||
|
||||
}, { result ->
|
||||
mActionTaskListeners.forEach { actionTaskListener ->
|
||||
actionTaskListener.onStopAction(intentAction!!, result)
|
||||
}
|
||||
},
|
||||
{
|
||||
actionRunnableNotNull
|
||||
},
|
||||
{ result ->
|
||||
mActionTaskListeners.forEach { actionTaskListener ->
|
||||
actionTaskListener.onStopAction(intentAction!!, result)
|
||||
}
|
||||
|
||||
sendBroadcast(Intent(DATABASE_STOP_TASK_ACTION))
|
||||
sendBroadcast(Intent(DATABASE_STOP_TASK_ACTION))
|
||||
|
||||
stopSelf()
|
||||
}
|
||||
)
|
||||
actionRunnableAsyncTask?.execute({ actionRunnableNotNull })
|
||||
stopSelf()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return START_REDELIVER_INTENT
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute action with a coroutine
|
||||
*/
|
||||
private suspend fun executeAction(progressTaskUpdater: ProgressTaskUpdater,
|
||||
onPreExecute: () -> Unit,
|
||||
onExecute: (ProgressTaskUpdater?) -> ActionRunnable?,
|
||||
onPostExecute: (result: ActionRunnable.Result) -> Unit) {
|
||||
mAllowFinishAction.set(false)
|
||||
|
||||
// Stop the opening notification
|
||||
DatabaseOpenNotificationService.stop(this)
|
||||
TimeoutHelper.temporarilyDisableTimeout()
|
||||
onPreExecute.invoke()
|
||||
withContext(Dispatchers.IO) {
|
||||
onExecute.invoke(progressTaskUpdater)?.apply {
|
||||
val asyncResult: Deferred<ActionRunnable.Result> = async {
|
||||
val startTime = System.currentTimeMillis()
|
||||
var timeIsUp = false
|
||||
// Run the actionRunnable
|
||||
run()
|
||||
// Wait onBind or 4 seconds max
|
||||
while (!mAllowFinishAction.get() && !timeIsUp) {
|
||||
delay(100)
|
||||
if (startTime + 4000 < System.currentTimeMillis())
|
||||
timeIsUp = true
|
||||
}
|
||||
result
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
onPostExecute.invoke(asyncResult.await())
|
||||
TimeoutHelper.releaseTemporarilyDisableTimeout()
|
||||
// Start the opening notification
|
||||
if (TimeoutHelper.checkTimeAndLockIfTimeout(this@DatabaseTaskNotificationService)) {
|
||||
DatabaseOpenNotificationService.start(this@DatabaseTaskNotificationService)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun newNotification(title: Int) {
|
||||
|
||||
val builder = buildNewNotification()
|
||||
@@ -256,7 +312,6 @@ class DatabaseTaskNotificationService : NotificationService(), ProgressTaskUpdat
|
||||
keyFileUri,
|
||||
readOnly,
|
||||
cipherEntity,
|
||||
PreferencesUtil.omitBackup(this),
|
||||
intent.getBooleanExtra(FIX_DUPLICATE_UUID_KEY, false),
|
||||
this
|
||||
) { result ->
|
||||
@@ -564,33 +619,6 @@ class DatabaseTaskNotificationService : NotificationService(), ProgressTaskUpdat
|
||||
}
|
||||
}
|
||||
|
||||
private class ActionRunnableAsyncTask(private val progressTaskUpdater: ProgressTaskUpdater,
|
||||
private val onPreExecute: () -> Unit,
|
||||
private val onPostExecute: (result: ActionRunnable.Result) -> Unit)
|
||||
: AsyncTask<((ProgressTaskUpdater?) -> ActionRunnable), Void, ActionRunnable.Result>() {
|
||||
|
||||
override fun onPreExecute() {
|
||||
super.onPreExecute()
|
||||
onPreExecute.invoke()
|
||||
}
|
||||
|
||||
override fun doInBackground(vararg actionRunnables: ((ProgressTaskUpdater?)-> ActionRunnable)?): ActionRunnable.Result {
|
||||
var resultTask = ActionRunnable.Result(false)
|
||||
actionRunnables.forEach {
|
||||
it?.invoke(progressTaskUpdater)?.apply {
|
||||
run()
|
||||
resultTask = result
|
||||
}
|
||||
}
|
||||
return resultTask
|
||||
}
|
||||
|
||||
override fun onPostExecute(result: ActionRunnable.Result) {
|
||||
super.onPostExecute(result)
|
||||
onPostExecute.invoke(result)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
private val TAG = DatabaseTaskNotificationService::class.java.name
|
||||
|
||||
@@ -88,30 +88,36 @@ data class OtpElement(var otpModel: OtpModel = OtpModel()) {
|
||||
get() = otpModel.counter
|
||||
@Throws(NumberFormatException::class)
|
||||
set(value) {
|
||||
otpModel.counter = if (value < MIN_HOTP_COUNTER || value > MAX_HOTP_COUNTER) {
|
||||
otpModel.counter = if (isValidCounter(value)) {
|
||||
value
|
||||
} else {
|
||||
TokenCalculator.HOTP_INITIAL_COUNTER
|
||||
throw IllegalArgumentException()
|
||||
} else value
|
||||
}
|
||||
}
|
||||
|
||||
var period
|
||||
get() = otpModel.period
|
||||
@Throws(NumberFormatException::class)
|
||||
set(value) {
|
||||
otpModel.period = if (value < MIN_TOTP_PERIOD || value > MAX_TOTP_PERIOD) {
|
||||
otpModel.period = if (isValidPeriod(value)) {
|
||||
value
|
||||
} else {
|
||||
TokenCalculator.TOTP_DEFAULT_PERIOD
|
||||
throw NumberFormatException()
|
||||
} else value
|
||||
}
|
||||
}
|
||||
|
||||
var digits
|
||||
get() = otpModel.digits
|
||||
@Throws(NumberFormatException::class)
|
||||
set(value) {
|
||||
otpModel.digits = if (value < MIN_OTP_DIGITS|| value > MAX_OTP_DIGITS) {
|
||||
otpModel.digits = if (isValidDigits(value)) {
|
||||
value
|
||||
} else {
|
||||
TokenCalculator.OTP_DEFAULT_DIGITS
|
||||
throw NumberFormatException()
|
||||
} else value
|
||||
}
|
||||
}
|
||||
|
||||
var algorithm
|
||||
@@ -144,16 +150,15 @@ data class OtpElement(var otpModel: OtpModel = OtpModel()) {
|
||||
|
||||
@Throws(IllegalArgumentException::class)
|
||||
fun setBase32Secret(secret: String) {
|
||||
val secretChars = replaceBase32Chars(secret)
|
||||
if (secretChars.isNotEmpty() && checkBase32Secret(secretChars))
|
||||
otpModel.secret = Base32().decode(secretChars.toByteArray())
|
||||
if (isValidBase32(secret))
|
||||
otpModel.secret = Base32().decode(replaceBase32Chars(secret).toByteArray())
|
||||
else
|
||||
throw IllegalArgumentException()
|
||||
}
|
||||
|
||||
@Throws(IllegalArgumentException::class)
|
||||
fun setBase64Secret(secret: String) {
|
||||
if (secret.isNotEmpty() && checkBase64Secret(secret))
|
||||
if (isValidBase64(secret))
|
||||
otpModel.secret = Base64().decode(secret.toByteArray())
|
||||
else
|
||||
throw IllegalArgumentException()
|
||||
@@ -184,11 +189,33 @@ data class OtpElement(var otpModel: OtpModel = OtpModel()) {
|
||||
const val MAX_HOTP_COUNTER = Long.MAX_VALUE
|
||||
|
||||
const val MIN_TOTP_PERIOD = 1
|
||||
const val MAX_TOTP_PERIOD = 60
|
||||
const val MAX_TOTP_PERIOD = 900
|
||||
|
||||
const val MIN_OTP_DIGITS = 4
|
||||
const val MAX_OTP_DIGITS = 18
|
||||
|
||||
fun isValidCounter(counter: Long): Boolean {
|
||||
return counter in MIN_HOTP_COUNTER..MAX_HOTP_COUNTER
|
||||
}
|
||||
|
||||
fun isValidPeriod(period: Int): Boolean {
|
||||
return period in MIN_TOTP_PERIOD..MAX_TOTP_PERIOD
|
||||
}
|
||||
|
||||
fun isValidDigits(digits: Int): Boolean {
|
||||
return digits in MIN_OTP_DIGITS..MAX_OTP_DIGITS
|
||||
}
|
||||
|
||||
fun isValidBase32(secret: String): Boolean {
|
||||
val secretChars = replaceBase32Chars(secret)
|
||||
return secretChars.isNotEmpty() && checkBase32Secret(secretChars)
|
||||
}
|
||||
|
||||
fun isValidBase64(secret: String): Boolean {
|
||||
// TODO replace base 64 chars
|
||||
return secret.isNotEmpty() && checkBase64Secret(secret)
|
||||
}
|
||||
|
||||
fun replaceSpaceChars(parameter: String): String {
|
||||
return parameter.replace("[\\r|\\n|\\t|\\s|\\u00A0]+".toRegex(), "")
|
||||
}
|
||||
|
||||
@@ -26,8 +26,6 @@ import com.kunzisoft.keepass.database.element.security.ProtectedString
|
||||
import com.kunzisoft.keepass.model.Field
|
||||
import com.kunzisoft.keepass.otp.OtpElement.Companion.replaceSpaceChars
|
||||
import com.kunzisoft.keepass.otp.TokenCalculator.*
|
||||
import java.lang.Exception
|
||||
import java.lang.StringBuilder
|
||||
import java.net.URLEncoder
|
||||
import java.util.*
|
||||
import java.util.regex.Pattern
|
||||
|
||||
@@ -369,6 +369,18 @@ object PreferencesUtil {
|
||||
context.resources.getBoolean(R.bool.keyboard_key_sound_default))
|
||||
}
|
||||
|
||||
fun isKeyboardPreviousDatabaseCredentialsEnable(context: Context): Boolean {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
return prefs.getBoolean(context.getString(R.string.keyboard_previous_database_credentials_key),
|
||||
context.resources.getBoolean(R.bool.keyboard_previous_database_credentials_default))
|
||||
}
|
||||
|
||||
fun isKeyboardPreviousFillInEnable(context: Context): Boolean {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
return prefs.getBoolean(context.getString(R.string.keyboard_previous_fill_in_key),
|
||||
context.resources.getBoolean(R.bool.keyboard_previous_fill_in_default))
|
||||
}
|
||||
|
||||
fun isAutofillAutoSearchEnable(context: Context): Boolean {
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
return prefs.getBoolean(context.getString(R.string.autofill_auto_search_key),
|
||||
|
||||
@@ -92,6 +92,9 @@ open class SettingsActivity
|
||||
lockAndExit()
|
||||
}
|
||||
|
||||
// Focus view to reinitialize timeout
|
||||
resetAppTimeoutWhenViewFocusedOrChanged(coordinatorLayout)
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
supportFragmentManager.beginTransaction()
|
||||
.add(R.id.fragment_container, retrieveMainFragment())
|
||||
|
||||
@@ -36,7 +36,6 @@ import com.kunzisoft.androidclearchroma.colormode.ColorMode
|
||||
import com.kunzisoft.androidclearchroma.fragment.ChromaColorFragment
|
||||
import com.kunzisoft.androidclearchroma.fragment.ChromaColorFragment.*
|
||||
import com.kunzisoft.keepass.R
|
||||
import java.lang.Exception
|
||||
|
||||
class DatabaseColorPreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class HashedBlockInputStream(inputStream: InputStream) : InputStream() {
|
||||
bufferPos = 0
|
||||
|
||||
val index = baseStream.readUInt()
|
||||
if (index.toLong() != bufferIndex) {
|
||||
if (index.toKotlinLong() != bufferIndex) {
|
||||
throw IOException("Invalid data format")
|
||||
}
|
||||
bufferIndex++
|
||||
@@ -91,7 +91,7 @@ class HashedBlockInputStream(inputStream: InputStream) : InputStream() {
|
||||
throw IOException("Invalid data format")
|
||||
}
|
||||
|
||||
val bufferSize = baseStream.readBytes4ToUInt().toInt()
|
||||
val bufferSize = baseStream.readBytes4ToUInt().toKotlinInt()
|
||||
if (bufferSize == 0) {
|
||||
for (hash in 0 until HASH_SIZE) {
|
||||
if (storedHash[hash].toInt() != 0) {
|
||||
@@ -141,7 +141,7 @@ class HashedBlockInputStream(inputStream: InputStream) : InputStream() {
|
||||
if (!readHashedBlock()) return -1
|
||||
}
|
||||
|
||||
val output = UnsignedInt.fromByte(buffer[bufferPos]).toInt()
|
||||
val output = UnsignedInt.fromKotlinByte(buffer[bufferPos]).toKotlinInt()
|
||||
bufferPos++
|
||||
|
||||
return output
|
||||
|
||||
@@ -99,7 +99,7 @@ class HashedBlockOutputStream : OutputStream {
|
||||
|
||||
@Throws(IOException::class)
|
||||
private fun writeHashedBlock() {
|
||||
baseStream.writeUInt(UnsignedInt.fromLong(bufferIndex))
|
||||
baseStream.writeUInt(UnsignedInt.fromKotlinLong(bufferIndex))
|
||||
bufferIndex++
|
||||
|
||||
if (bufferPos > 0) {
|
||||
|
||||
@@ -44,7 +44,7 @@ class HmacBlockInputStream(baseStream: InputStream, private val verify: Boolean,
|
||||
if (!readSafeBlock()) return -1
|
||||
}
|
||||
|
||||
val output = UnsignedInt.fromByte(buffer[bufferPos]).toInt()
|
||||
val output = UnsignedInt.fromKotlinByte(buffer[bufferPos]).toKotlinInt()
|
||||
bufferPos++
|
||||
|
||||
return output
|
||||
@@ -101,7 +101,7 @@ class HmacBlockInputStream(baseStream: InputStream, private val verify: Boolean,
|
||||
val blockSize = bytes4ToUInt(pbBlockSize)
|
||||
bufferPos = 0
|
||||
|
||||
buffer = baseStream.readBytes(blockSize.toInt())
|
||||
buffer = baseStream.readBytes(blockSize.toKotlinInt())
|
||||
|
||||
if (verify) {
|
||||
val cmpHmac: ByteArray
|
||||
@@ -135,7 +135,7 @@ class HmacBlockInputStream(baseStream: InputStream, private val verify: Boolean,
|
||||
|
||||
blockIndex++
|
||||
|
||||
if (blockSize.toLong() == 0L) {
|
||||
if (blockSize.toKotlinLong() == 0L) {
|
||||
endOfStream = true
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -171,11 +171,11 @@ fun bytes5ToDate(buf: ByteArray, calendar: Calendar = Calendar.getInstance()): D
|
||||
System.arraycopy(buf, 0, cDate, 0, dateSize)
|
||||
|
||||
val readOffset = 0
|
||||
val dw1 = UnsignedInt.fromByte(cDate[readOffset]).toInt()
|
||||
val dw2 = UnsignedInt.fromByte(cDate[readOffset + 1]).toInt()
|
||||
val dw3 = UnsignedInt.fromByte(cDate[readOffset + 2]).toInt()
|
||||
val dw4 = UnsignedInt.fromByte(cDate[readOffset + 3]).toInt()
|
||||
val dw5 = UnsignedInt.fromByte(cDate[readOffset + 4]).toInt()
|
||||
val dw1 = UnsignedInt.fromKotlinByte(cDate[readOffset]).toKotlinInt()
|
||||
val dw2 = UnsignedInt.fromKotlinByte(cDate[readOffset + 1]).toKotlinInt()
|
||||
val dw3 = UnsignedInt.fromKotlinByte(cDate[readOffset + 2]).toKotlinInt()
|
||||
val dw4 = UnsignedInt.fromKotlinByte(cDate[readOffset + 3]).toKotlinInt()
|
||||
val dw5 = UnsignedInt.fromKotlinByte(cDate[readOffset + 4]).toKotlinInt()
|
||||
|
||||
// Unpack 5 byte structure to date and time
|
||||
val year = dw1 shl 6 or (dw2 shr 2)
|
||||
@@ -199,7 +199,7 @@ fun bytes5ToDate(buf: ByteArray, calendar: Calendar = Calendar.getInstance()): D
|
||||
fun uIntTo4Bytes(value: UnsignedInt): ByteArray {
|
||||
val buf = ByteArray(4)
|
||||
for (i in 0 until 4) {
|
||||
buf[i] = (value.toInt().ushr(8 * i) and 0xFF).toByte()
|
||||
buf[i] = (value.toKotlinInt().ushr(8 * i) and 0xFF).toByte()
|
||||
}
|
||||
return buf
|
||||
}
|
||||
@@ -246,8 +246,8 @@ fun dateTo5Bytes(date: Date, calendar: Calendar = Calendar.getInstance()): ByteA
|
||||
val minute = calendar.get(Calendar.MINUTE)
|
||||
val second = calendar.get(Calendar.SECOND)
|
||||
|
||||
buf[0] = UnsignedInt(year shr 6 and 0x0000003F).toByte()
|
||||
buf[1] = UnsignedInt(year and 0x0000003F shl 2 or (month shr 2 and 0x00000003)).toByte()
|
||||
buf[0] = UnsignedInt(year shr 6 and 0x0000003F).toKotlinByte()
|
||||
buf[1] = UnsignedInt(year and 0x0000003F shl 2 or (month shr 2 and 0x00000003)).toKotlinByte()
|
||||
buf[2] = (month and 0x00000003 shl 6
|
||||
or (day and 0x0000001F shl 1) or (hour shr 4 and 0x00000001)).toByte()
|
||||
buf[3] = (hour and 0x0000000F shl 4 or (minute shr 2 and 0x0000000F)).toByte()
|
||||
|
||||
@@ -21,7 +21,6 @@ package com.kunzisoft.keepass.tasks
|
||||
|
||||
import android.os.Bundle
|
||||
import com.kunzisoft.keepass.database.exception.DatabaseException
|
||||
import java.lang.Exception
|
||||
|
||||
/**
|
||||
* Callback after a task is completed.
|
||||
|
||||
@@ -38,6 +38,7 @@ object TimeoutHelper {
|
||||
|
||||
private const val TAG = "TimeoutHelper"
|
||||
|
||||
private var lastAppTimeoutRecord: Long? = null
|
||||
var temporarilyDisableTimeout = false
|
||||
private set
|
||||
|
||||
@@ -84,9 +85,15 @@ object TimeoutHelper {
|
||||
* Record the current time, to check it later with checkTime and start a new lock timer
|
||||
*/
|
||||
fun recordTime(context: Context) {
|
||||
// Record timeout time in case timeout service is killed
|
||||
PreferencesUtil.saveCurrentTime(context)
|
||||
startLockTimer(context)
|
||||
// To prevent spam registration, record after at least 2 seconds
|
||||
if (lastAppTimeoutRecord == null
|
||||
|| lastAppTimeoutRecord!! + 2000 <= System.currentTimeMillis()) {
|
||||
Log.d(TAG, "Record app timeout")
|
||||
// Record timeout time in case timeout service is killed
|
||||
PreferencesUtil.saveCurrentTime(context)
|
||||
startLockTimer(context)
|
||||
lastAppTimeoutRecord = System.currentTimeMillis()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -42,10 +42,12 @@ const val DATABASE_STOP_TASK_ACTION = "com.kunzisoft.keepass.DATABASE_STOP_TASK_
|
||||
|
||||
const val LOCK_ACTION = "com.kunzisoft.keepass.LOCK"
|
||||
const val REMOVE_ENTRY_MAGIKEYBOARD_ACTION = "com.kunzisoft.keepass.REMOVE_ENTRY_MAGIKEYBOARD"
|
||||
const val BACK_PREVIOUS_KEYBOARD_ACTION = "com.kunzisoft.keepass.BACK_PREVIOUS_KEYBOARD"
|
||||
|
||||
class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
||||
|
||||
var mLockPendingIntent: PendingIntent? = null
|
||||
var backToPreviousKeyboardAction: (() -> Unit)? = null
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
// If allowed, lock and exit
|
||||
@@ -76,7 +78,12 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
||||
}
|
||||
}
|
||||
LOCK_ACTION,
|
||||
REMOVE_ENTRY_MAGIKEYBOARD_ACTION -> lockAction.invoke()
|
||||
REMOVE_ENTRY_MAGIKEYBOARD_ACTION -> {
|
||||
lockAction.invoke()
|
||||
}
|
||||
BACK_PREVIOUS_KEYBOARD_ACTION -> {
|
||||
backToPreviousKeyboardAction?.invoke()
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
@@ -93,14 +100,16 @@ class LockReceiver(var lockAction: () -> Unit) : BroadcastReceiver() {
|
||||
}
|
||||
|
||||
fun Context.registerLockReceiver(lockReceiver: LockReceiver?,
|
||||
registerRemoveEntryMagikeyboard: Boolean = false) {
|
||||
registerKeyboardAction: Boolean = false) {
|
||||
lockReceiver?.let {
|
||||
registerReceiver(it, IntentFilter().apply {
|
||||
addAction(Intent.ACTION_SCREEN_OFF)
|
||||
addAction(Intent.ACTION_SCREEN_ON)
|
||||
addAction(LOCK_ACTION)
|
||||
if (registerRemoveEntryMagikeyboard)
|
||||
if (registerKeyboardAction) {
|
||||
addAction(REMOVE_ENTRY_MAGIKEYBOARD_ACTION)
|
||||
addAction(BACK_PREVIOUS_KEYBOARD_ACTION)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,31 +21,31 @@ package com.kunzisoft.keepass.utils
|
||||
|
||||
class UnsignedInt(private var unsignedValue: Int) {
|
||||
|
||||
constructor(unsignedValue: UnsignedInt) : this(unsignedValue.toInt())
|
||||
constructor(unsignedValue: UnsignedInt) : this(unsignedValue.toKotlinInt())
|
||||
|
||||
/**
|
||||
* Get the int value
|
||||
*/
|
||||
fun toInt(): Int {
|
||||
fun toKotlinInt(): Int {
|
||||
return unsignedValue
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert an unsigned Integer to Long
|
||||
*/
|
||||
fun toLong(): Long {
|
||||
fun toKotlinLong(): Long {
|
||||
return unsignedValue.toLong() and INT_TO_LONG_MASK
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert an unsigned Integer to Byte
|
||||
*/
|
||||
fun toByte(): Byte {
|
||||
fun toKotlinByte(): Byte {
|
||||
return (unsignedValue and 0xFF).toByte()
|
||||
}
|
||||
|
||||
override fun toString():String {
|
||||
return toLong().toString()
|
||||
return toKotlinLong().toString()
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
@@ -72,12 +72,12 @@ class UnsignedInt(private var unsignedValue: Int) {
|
||||
/**
|
||||
* Convert a byte to an unsigned byte
|
||||
*/
|
||||
fun fromByte(value: Byte): UnsignedInt {
|
||||
fun fromKotlinByte(value: Byte): UnsignedInt {
|
||||
return UnsignedInt(value.toInt() and 0xFF)
|
||||
}
|
||||
|
||||
@Throws(NumberFormatException::class)
|
||||
fun fromLong(value: Long): UnsignedInt {
|
||||
fun fromKotlinLong(value: Long): UnsignedInt {
|
||||
if (value > UINT_MAX_VALUE)
|
||||
throw NumberFormatException("UInt value > $UINT_MAX_VALUE")
|
||||
return UnsignedInt(value.toInt())
|
||||
|
||||
@@ -24,7 +24,7 @@ class UnsignedLong(private var unsignedValue: Long) {
|
||||
/**
|
||||
* Convert an unsigned Integer to Long
|
||||
*/
|
||||
fun toLong(): Long {
|
||||
fun toKotlinLong(): Long {
|
||||
return unsignedValue
|
||||
}
|
||||
|
||||
|
||||
@@ -127,13 +127,13 @@ open class VariantDictionary {
|
||||
if (bType == VdType.None) {
|
||||
break
|
||||
}
|
||||
val nameLen = inputStream.readUInt().toInt()
|
||||
val nameLen = inputStream.readUInt().toKotlinInt()
|
||||
val nameBuf = inputStream.readBytes(nameLen)
|
||||
if (nameLen != nameBuf.size) {
|
||||
throw IOException("Invalid format")
|
||||
}
|
||||
val name = String(nameBuf, UTF8Charset)
|
||||
val valueLen = inputStream.readUInt().toInt()
|
||||
val valueLen = inputStream.readUInt().toKotlinInt()
|
||||
val valueBuf = inputStream.readBytes(valueLen)
|
||||
if (valueLen != valueBuf.size) {
|
||||
throw IOException("Invalid format")
|
||||
@@ -149,7 +149,7 @@ open class VariantDictionary {
|
||||
dictionary.setBool(name, valueBuf[0] != 0.toByte())
|
||||
}
|
||||
VdType.Int32 -> if (valueLen == 4) {
|
||||
dictionary.setInt32(name, bytes4ToUInt(valueBuf).toInt())
|
||||
dictionary.setInt32(name, bytes4ToUInt(valueBuf).toKotlinInt())
|
||||
}
|
||||
VdType.Int64 -> if (valueLen == 8) {
|
||||
dictionary.setInt64(name, bytes64ToLong(valueBuf))
|
||||
|
||||
@@ -31,7 +31,7 @@ class SpecialModeView @JvmOverloads constructor(context: Context,
|
||||
: Toolbar(context, attrs, defStyle) {
|
||||
|
||||
init {
|
||||
setNavigationIcon(R.drawable.ic_close_white_24dp)
|
||||
setNavigationIcon(R.drawable.ic_arrow_back_white_24dp)
|
||||
title = resources.getString(R.string.selection_mode)
|
||||
}
|
||||
|
||||
|
||||
13
app/src/main/res/drawable/ic_arrow_back_white_24dp.xml
Normal file
13
app/src/main/res/drawable/ic_arrow_back_white_24dp.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<group>
|
||||
<path
|
||||
android:fillColor="#ffffff"
|
||||
android:strokeWidth="1.78885484"
|
||||
android:pathData="M 9.6582031 2.3417969 C 9.4025809 2.3417969 9.1470385 2.4408503 8.9511719 2.6367188 L 3.2929688 8.2929688 C 2.9012354 8.6847056 2.9012354 9.3152944 3.2929688 9.7070312 L 8.9511719 15.363281 C 9.3429052 15.755018 9.973501 15.755018 10.365234 15.363281 C 10.756968 14.971544 10.756968 14.340956 10.365234 13.949219 L 6.4160156 10 L 16 10 L 16 10.03125 A 4.5000001 4.5000001 0 0 1 20 14.5 A 4.5000001 4.5000001 0 0 1 16 18.966797 L 16 19 L 7 19 C 6.4460006 19 6 19.446001 6 20 C 6 20.553999 6.4460006 21 7 21 L 16 21 C 16.123984 21 16.240233 20.970575 16.349609 20.929688 A 6.5000001 6.5000001 0 0 0 22 14.5 A 6.5000001 6.5000001 0 0 0 16 8.0214844 L 16 8 L 6.4160156 8 L 10.365234 4.0507812 C 10.756968 3.6590444 10.756968 3.0284556 10.365234 2.6367188 C 10.169368 2.4408503 9.9138254 2.3417969 9.6582031 2.3417969 z" />
|
||||
</group>
|
||||
</vector>
|
||||
@@ -21,6 +21,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/activity_group_container_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
android:importantForAutofill="no"
|
||||
android:hint="@string/otp_period"
|
||||
tools:text="30"
|
||||
android:maxLength="2"
|
||||
android:maxLength="3"
|
||||
android:digits="0123456789"
|
||||
tools:targetApi="jelly_bean" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
<string name="clipboard_cleared">مُسِحت الحافظة</string>
|
||||
<string name="clipboard_error_title">خطأ في الحافظة</string>
|
||||
<string name="clipboard_error_clear">تعذَّر مسح الحافظة</string>
|
||||
<string name="clipboard_swipe_clean">اسحب لمسح الحافظة فورًا</string>
|
||||
<string name="database">قاعدة البيانات</string>
|
||||
<string name="decrypting_db">يفك تعمية محتوى قاعدة البيانات…</string>
|
||||
<string name="digits">أرقام</string>
|
||||
@@ -134,21 +133,21 @@
|
||||
<string name="error_nokeyfile">اختر ملف مفتاح.</string>
|
||||
<string name="error_out_of_memory">لا ذاكرة لتحميل قاعدة البيانات كاملة.</string>
|
||||
<string name="error_load_database">تعذر تحميل قاعدة البيانات.</string>
|
||||
<string name="error_load_database_KDF_memory">غير قادر على تحميل المفتاح، في محاولة لتقليل الذاكرة المستخدمة من قبل KDF.</string>
|
||||
<string name="error_pass_gen_type">يجب تحديد كلمة مرور واحد على الأقل نوع الجيل</string>
|
||||
<string name="error_load_database_KDF_memory">لا يمكن تحميل المفتاح، حاول تقليل \"الذاكرة المستخدمة\" من قبل KDF.</string>
|
||||
<string name="error_pass_gen_type">يجب تحديد على الأقل نوعا واحدا لتوليد كلمة مرور.</string>
|
||||
<string name="error_rounds_too_large">\"جولات\" كبيرة جداً. الإعداد إلى 2147483648.</string>
|
||||
<string name="error_string_key">يجب أن يكون لكل سلسلة اسم حقل.</string>
|
||||
<string name="error_wrong_length">أدخل عددًا صحيحًا موجبًا في حقل «الطول».</string>
|
||||
<string name="error_autofill_enable_service">تعذر تمكين خدمة الملء التلقائي.</string>
|
||||
<string name="error_move_folder_in_itself">غير قادر على نقل مجموعة إلى نفسها.</string>
|
||||
<string name="file_not_found_content">تعذر إيجاد الملف. جرِّب فتحه من متصفح ملفات.</string>
|
||||
<string name="file_browser">متصفح الملفات</string>
|
||||
<string name="file_browser">مدير الملفات</string>
|
||||
<string name="invalid_credentials">تعذرت قراءة كلمة السر أو ملف المفتاح.</string>
|
||||
<string name="invalid_db_sig">تعذر تمييز نسق قاعدة البيانات.</string>
|
||||
<string name="keyfile_is_empty">ملف المفتاح فارغ.</string>
|
||||
<string name="list_entries_show_username_title">أظهر أسماء المستخدمين</string>
|
||||
<string name="list_entries_show_username_summary">أظهر أسماء المستخدمين في قوائم المدخلات</string>
|
||||
<string name="hint_generated_password">كلمةالسر المشفرة</string>
|
||||
<string name="hint_generated_password">كلمةالسر الموَلدة</string>
|
||||
<string name="hint_keyfile">الملف المفتاحي</string>
|
||||
<string name="hide_password_title">اخفاء كلمات السر</string>
|
||||
<string name="copy_field">نُسخ %1$s</string>
|
||||
@@ -285,4 +284,45 @@
|
||||
<string name="validate">تأكيد</string>
|
||||
<string name="security">الأمان</string>
|
||||
<string name="master_key">المفتاح الرئيسي</string>
|
||||
<string name="error_otp_period">يجب ان تكون المدة بين %1$d و%2$d ثانية.</string>
|
||||
<string name="error_otp_secret_key">المفتاح السري يجب ان يكون بصيغة Base32.</string>
|
||||
<string name="error_save_database">لا يمكن حفظ قاعدة البيانات.</string>
|
||||
<string name="error_create_database">غير قادر على إنشاء ملف قاعدة البيانات.</string>
|
||||
<string name="error_copy_group_here">لا يمكنك نسخ مجموعة هنا.</string>
|
||||
<string name="error_label_exists">هذه التسمية موجودة بالفعل.</string>
|
||||
<string name="otp_period">المدة (ثواني)</string>
|
||||
<string name="otp_algorithm">الخوارزمية</string>
|
||||
<string name="otp_digits">أرقام</string>
|
||||
<string name="otp_counter">العداد</string>
|
||||
<string name="entry_setup_otp">عين كلمة المرور للمرة الواحدة</string>
|
||||
<string name="entry_UUID">UUID</string>
|
||||
<string name="html_about_contribution">من أجل <strong>حماية خصوصيتا</strong>٫<strong> إصلاح العلل</strong>٫ <strong>إضافة مميزات</strong> <strong>وجعلنا نشطاء دائما</strong>٫ نحن نعتمد على <strong>مساهمتك</strong>.</string>
|
||||
<string name="content_description_keyfile_checkbox">خانة تأشير الملف المفتاحي</string>
|
||||
<string name="content_description_password_checkbox">خانة تأشير كلمة المرور</string>
|
||||
<string name="content_description_add_item">أضف عنصر</string>
|
||||
<string name="warning_permanently_delete_nodes">حذف العقد المحددة نهائيا؟</string>
|
||||
<string name="filter">مرشح</string>
|
||||
<string name="command_execution">ينفذ الأمر…</string>
|
||||
<string name="hide_broken_locations_title">اِخفي روابط قواعد البيانات المعطلة</string>
|
||||
<string name="show_recent_files_summary">أظهر موقع قواعد البيانات الأخيرة</string>
|
||||
<string name="show_recent_files_title">أظهر الملفات الأخيرة</string>
|
||||
<string name="remember_keyfile_locations_summary">تذكر موقع الملفات المفتاحية لقاعدة البيانات</string>
|
||||
<string name="remember_keyfile_locations_title">احفظ موقع الملف المفتاحي</string>
|
||||
<string name="remember_database_locations_summary">تذكر موقع قاعدة البيانات</string>
|
||||
<string name="remember_database_locations_title">موقع تخزين قاعدة البيانات</string>
|
||||
<string name="contains_duplicate_uuid_procedure">للمتابعة هل تريد حل المشكلة بتوليد UUID للعناصر المكررة ؟</string>
|
||||
<string name="contains_duplicate_uuid">تحتوي قاعدة البيانات على UUID مكرر.</string>
|
||||
<string name="auto_focus_search_title">البحث السريع</string>
|
||||
<string name="omit_backup_search_summary">أزِل مجموعتي \"سلة المحذوفات\" و\" النسخ الاحتياطي\" من نتائج البحث</string>
|
||||
<string name="menu_delete_entry_history">احذف السجل</string>
|
||||
<string name="menu_restore_entry_history">استعادة السجل</string>
|
||||
<string name="menu_empty_recycle_bin">أفرغ سلة المحذوفات</string>
|
||||
<string name="menu_save_database">اِحفظ قاعدة البيانات</string>
|
||||
<string name="menu_master_key_settings">إعدادات المفتاح الرئيسي</string>
|
||||
<string name="menu_security_settings">إعدادات الأمن</string>
|
||||
<string name="creating_database">ينشئ قاعدة البيانات…</string>
|
||||
<string name="error_string_type">لا يطابق هذا النص العنصر المطلوب.</string>
|
||||
<string name="error_otp_counter">على العداد أن يكون ما بين %1$d و %2$d.</string>
|
||||
<string name="entry_otp">كلمة مرور لمرة واحدة</string>
|
||||
<string name="otp_type">نوع كلمة المرور لمرة واحدة</string>
|
||||
</resources>
|
||||
@@ -295,7 +295,6 @@
|
||||
<string name="content_description_add_node">Afegeix node</string>
|
||||
<string name="content_description_open_file">Obre fitxer</string>
|
||||
<string name="content_description_background">Fons</string>
|
||||
<string name="clipboard_swipe_clean">Llisqueu per a netejear el porta-retalls ara</string>
|
||||
<string name="clipboard_error_clear">No ha estat possible netejar el porta-retalls</string>
|
||||
<string name="clipboard_error">Alguns dispositius no permeten que les aplicacions facin servir el porta-retalls.</string>
|
||||
<string name="clipboard_error_title">Error del porta-retalls</string>
|
||||
|
||||
@@ -156,7 +156,6 @@
|
||||
<string name="key_derivation_function">Funkce pro tvorbu klíče</string>
|
||||
<string name="extended_ASCII">Rozšířené ASCII</string>
|
||||
<string name="allow">Umožnit</string>
|
||||
<string name="clipboard_swipe_clean">Schránku vymažete přejetím</string>
|
||||
<string name="error_load_database">Databázi se nedaří načíst.</string>
|
||||
<string name="error_load_database_KDF_memory">Klíč se nedaří načíst, zkuste snížit množství paměti, využívané funkcí pro tvorbu klíče.</string>
|
||||
<string name="error_autofill_enable_service">Službu automatického vyplňování se nedaří zapnout.</string>
|
||||
@@ -280,11 +279,10 @@
|
||||
<string name="education_entry_new_field_summary">Registrovat další kolonku, zadat hodnotu a volitelně ji ochránit.</string>
|
||||
<string name="education_unlock_title">Odemknout databázi</string>
|
||||
<string name="education_read_only_title">Ochraňte svou databázi před zápisem</string>
|
||||
<string name="education_read_only_summary">Změnit režim otevírání pro dané sezení.
|
||||
\n
|
||||
\nV režimu pouze pro čtení zabráníte nechtěným změnám do databáze.
|
||||
\n
|
||||
\nV režimu zápisu je možné přidávat, mazat nebo měnit všechny prvky dle libosti.</string>
|
||||
<string name="education_read_only_summary">Změnit režim otevírání pro dané sezení.
|
||||
\n
|
||||
\nV režimu pouze pro čtení zabráníte nechtěným změnám do databáze.
|
||||
\n V režimu zápisu je možné přidávat, mazat nebo měnit všechny prvky dle libosti.</string>
|
||||
<string name="education_field_copy_title">Zkopírujte kolonku</string>
|
||||
<string name="education_field_copy_summary">Zkopírované kolonky lze vkládat kam chcete
|
||||
\n
|
||||
@@ -469,7 +467,7 @@
|
||||
<string name="validate">Ověřit</string>
|
||||
<string name="education_setup_OTP_summary">Nastavit správu One-Time hesla (HOTP / TOTP) pro založení tokenu požadovaného pro dvoufázové ověření (2FA).</string>
|
||||
<string name="education_setup_OTP_title">Nastavit OTP</string>
|
||||
<string name="autofill_auto_search_summary">Automaticky navrhne výsledky hledání z webové domény nebo Id aplikace</string>
|
||||
<string name="autofill_auto_search_summary">Automaticky navrhnout výsledky hledání z webové domény nebo ID aplikace</string>
|
||||
<string name="autofill_auto_search_title">Samočinné hledání</string>
|
||||
<string name="lock_database_show_button_summary">Ukáže tlačítko zámku v uživatelském rozhraní</string>
|
||||
<string name="lock_database_show_button_title">Ukázat tlačítko zámku</string>
|
||||
@@ -478,4 +476,15 @@
|
||||
<string name="error_label_exists">Tento štítek již existuje.</string>
|
||||
<string name="keyboard_search_share_summary">Automaticky vyhledat sdílené informace pro naplnění klávesnice</string>
|
||||
<string name="keyboard_search_share_title">Prohledat sdílené info</string>
|
||||
<string name="autofill_block_restart">Aktivovat zamezení restartováním aplikace obsahující formulář.</string>
|
||||
<string name="autofill_block">Zamezit samovyplnění</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Seznam domén, pro něž se zamezí samovyplnění</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Seznam blokovaných webových domén</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Seznam aplikací, v nichž se zamezí samovyplnění</string>
|
||||
<string name="autofill_application_id_blocklist_title">Seznam blokovaných aplikací</string>
|
||||
<string name="filter">Vytřídit</string>
|
||||
<string name="subdomain_search_summary">Hledat ve webových doménách s omezením subdomén</string>
|
||||
<string name="subdomain_search_title">Hledat v subdoméně</string>
|
||||
<string name="error_string_type">Tento text se s požadovanou položkou neshoduje.</string>
|
||||
<string name="content_description_add_item">Přidat položku</string>
|
||||
</resources>
|
||||
@@ -155,7 +155,6 @@
|
||||
<string name="key_derivation_function">Nøgleafledningsfunktion</string>
|
||||
<string name="extended_ASCII">Udvidet ASCII</string>
|
||||
<string name="allow">Tillad</string>
|
||||
<string name="clipboard_swipe_clean">Stryg for at at rydde udklipsholder nu</string>
|
||||
<string name="error_load_database">Databasen kunne ikke indlæses.</string>
|
||||
<string name="error_load_database_KDF_memory">Kunne ikke indlæse nøglen. Prøv at reducere KDF \"hukommelsesforbrug\".</string>
|
||||
<string name="error_autofill_enable_service">Kunne ikke aktivere autofyld tjenesten.</string>
|
||||
|
||||
@@ -186,7 +186,7 @@
|
||||
<string name="list_password_generator_options_summary">Erlaubte Zeichen für Passwortgenerator festlegen</string>
|
||||
<string name="list_password_generator_options_title">Passwortzeichen</string>
|
||||
<string name="configure_biometric">Die biometrische Abfrage wird unterstützt, ist aber nicht eingerichtet.</string>
|
||||
<string name="open_biometric_prompt_unlock_database">Biometrie-Abfrage öffnen, um die Datenbank zu entsperrenœ</string>
|
||||
<string name="open_biometric_prompt_unlock_database">Biometrie-Abfrage öffnen, um die Datenbank zu entsperren</string>
|
||||
<string name="encrypted_value_stored">Verschlüsseltes Passwort wurde gespeichert</string>
|
||||
<string name="biometric_invalid_key">Der biometrische Schlüssel kann nicht gelesen werden. Bitte löschen Sie ihn und wiederholen Sie den biometrischen Erkennungsprozess.</string>
|
||||
<string name="biometric_scanning_error">Biometrischer Fehler: %1$s</string>
|
||||
@@ -198,7 +198,6 @@
|
||||
<string name="key_derivation_function">Schlüsselableitungsfunktion</string>
|
||||
<string name="extended_ASCII">Erweiterte ASCII</string>
|
||||
<string name="allow">Erlauben</string>
|
||||
<string name="clipboard_swipe_clean">Wischen, um Zwischenablage jetzt zu leeren</string>
|
||||
<string name="error_autofill_enable_service">Autofill-Dienst kann nicht aktiviert werden.</string>
|
||||
<string name="copy_field">Kopie von %1$s</string>
|
||||
<string name="menu_form_filling_settings">Formularausfüllung</string>
|
||||
@@ -479,7 +478,7 @@
|
||||
<string name="discard">Verwerfen</string>
|
||||
<string name="discard_changes">Änderungen verwerfen\?</string>
|
||||
<string name="validate">Validieren</string>
|
||||
<string name="autofill_auto_search_summary">Suchergebnissen aus der Web-Domain oder Anwendung-ID automatisch vorschlagen</string>
|
||||
<string name="autofill_auto_search_summary">Suchergebnisse aus der Web-Domain oder Anwendungs-ID automatisch vorschlagen</string>
|
||||
<string name="autofill_auto_search_title">Automatische Suche</string>
|
||||
<string name="lock_database_show_button_summary">Zeigt die Sperrtaste in der Benutzeroberfläche an</string>
|
||||
<string name="lock_database_show_button_title">Sperrtaste anzeigen</string>
|
||||
@@ -488,4 +487,15 @@
|
||||
<string name="error_label_exists">Diese Bezeichnung existiert bereits.</string>
|
||||
<string name="keyboard_search_share_summary">Automatische Suche nach gemeinsam genutzten Informationen zur Belegung der Tastatur</string>
|
||||
<string name="keyboard_search_share_title">Gemeinsame Infos durchsuchen</string>
|
||||
<string name="autofill_block_restart">Starten Sie die Anwendung, die das Formular enthält, neu, um die Sperrung zu aktivieren.</string>
|
||||
<string name="autofill_block">Automatisches Füllen blockieren</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Blockliste, die das automatische Füllen von Web-Domains verhindert</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Web-Domain-Blockliste</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Blockliste, die das automatische Füllen von Apps verhindert</string>
|
||||
<string name="autofill_application_id_blocklist_title">Anwendungs-Blockliste</string>
|
||||
<string name="subdomain_search_summary">Suche Web-Domains mit Subdomain-Beschränkungen</string>
|
||||
<string name="subdomain_search_title">Subdomain-Suche</string>
|
||||
<string name="error_string_type">Dieser Text stimmt nicht mit dem angeforderten Element überein.</string>
|
||||
<string name="content_description_add_item">Element hinzufügen</string>
|
||||
<string name="filter">Filter</string>
|
||||
</resources>
|
||||
@@ -157,7 +157,6 @@
|
||||
<string name="key_derivation_function">Λειτουργία εξαγωγής κλειδιών</string>
|
||||
<string name="extended_ASCII">Extended ASCII</string>
|
||||
<string name="allow">Δέχομαι</string>
|
||||
<string name="clipboard_swipe_clean">Σύρετε για να διαγράψετε το πρόχειρο τώρα</string>
|
||||
<string name="error_autofill_enable_service">Δεν ήταν δυνατή η ενεργοποίηση της υπηρεσίας αυτόματης συμπλήρωσης.</string>
|
||||
<string name="file_not_found_content">Δεν ήταν δυνατή η εύρεση αρχείου. Δοκιμάστε να το ανοίξετε ξανά από το πρόγραμμα περιήγησης αρχείων σας.</string>
|
||||
<string name="copy_field">Αντιγραφή του %1$s</string>
|
||||
|
||||
@@ -148,7 +148,6 @@
|
||||
<string name="clipboard_error_title">Error del portapapeles</string>
|
||||
<string name="clipboard_error">Algunos dispositivos Android tienen un error en la implementación del portapapeles que provoca fallos al copiar desde las aplicaciones.</string>
|
||||
<string name="clipboard_error_clear">Falló la limpieza del portapapeles</string>
|
||||
<string name="clipboard_swipe_clean">Deslizar ahora para limpiar el portapapeles</string>
|
||||
<string name="error_string_key">Cada cadena debe tener un nombre de campo.</string>
|
||||
<string name="error_autofill_enable_service">No se pudo activar el servicio de compleción automática.</string>
|
||||
<string name="field_name">Nombre del campo</string>
|
||||
|
||||
@@ -39,10 +39,11 @@
|
||||
<string name="select_to_copy">Valitse kopioidaksesi %1$s</string>
|
||||
<string name="retrieving_db_key">Luodaan tietokanta-avainta…</string>
|
||||
<string name="database">Tietokanta</string>
|
||||
<string name="decrypting_db">Puretaan tietokannan salausta…</string>
|
||||
<string name="decrypting_db">Puretaan tietokannan sisältöä…</string>
|
||||
<string name="default_checkbox">Käytä tätä oletustietokantana</string>
|
||||
<string name="digits">Numerot</string>
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft comes with absolutely no warranty. This is free software, and you are welcome to redistribute it under the conditions of the GPL version 3 or later.</string>
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft on <strong>avointa lähdekoodia</strong> ja <strong>mainokseton</strong>.
|
||||
\nSe tarjotaan sellaisenaan <strong>GPLv3</strong> lisenssillä ja ilman takuuta.</string>
|
||||
<string name="select_database_file">Anna tietokannan tiedostonimi</string>
|
||||
<string name="entry_accessed">Käytetty</string>
|
||||
<string name="entry_cancel">Peruuta</string>
|
||||
@@ -58,18 +59,18 @@
|
||||
<string name="entry_title">Nimi</string>
|
||||
<string name="entry_url">URL-osoite</string>
|
||||
<string name="entry_user_name">Käyttäjänimi</string>
|
||||
<string name="error_arc4">The Arcfour stream cipher ei ole tuettu.</string>
|
||||
<string name="error_arc4">Arcfour stream cipher ei ole tuettu.</string>
|
||||
<string name="error_can_not_handle_uri">KeePassDX ei osaa käsitellä tätä osoitetta.</string>
|
||||
<string name="error_file_not_create">Tiedoston luonti epäonnistui:</string>
|
||||
<string name="error_invalid_db">Viallinen salasanatietokanta.</string>
|
||||
<string name="error_invalid_path">Viallinen hakemistopolku.</string>
|
||||
<string name="error_no_name">Nimi puuttuu.</string>
|
||||
<string name="error_nokeyfile">Salasana tai avaintiedosto puuttuu.</string>
|
||||
<string name="error_out_of_memory">Puhelimesta loppui muisti salasanatietokantaa avatessa. Tietokanta voi olla liian suuri tälle puhelinmallille.</string>
|
||||
<string name="error_invalid_db">Tietokantaa ei pystytty lukemaan.</string>
|
||||
<string name="error_invalid_path">Varmista että polku on oikein.</string>
|
||||
<string name="error_no_name">Anna nimi.</string>
|
||||
<string name="error_nokeyfile">Valitse avaintiedosto.</string>
|
||||
<string name="error_out_of_memory">Ei tarpeeksi tallennustilaa ladatakseen koko tietokantaa.</string>
|
||||
<string name="error_pass_gen_type">Vähintään yksi salasanagenerointitapa täytyy olla valittuna.</string>
|
||||
<string name="error_pass_match">Salasanat eivät täsmää.</string>
|
||||
<string name="error_rounds_too_large">Kierroksia on liian paljon. Asetetaan se arvoon 2147483648.</string>
|
||||
<string name="error_string_key">Kentän nimi on pakollinen joka tekstille.</string>
|
||||
<string name="error_string_key">Jokaisella tekstillä tulee olla kentässä nimi.</string>
|
||||
<string name="error_wrong_length">Syötä positiivinen kokonaisluku pituus-kenttään</string>
|
||||
<string name="field_name">Kentän nimi</string>
|
||||
<string name="field_value">Kentän arvo</string>
|
||||
@@ -149,7 +150,6 @@
|
||||
<item>Keskikokoinen</item>
|
||||
<item>Suuri</item>
|
||||
</string-array>
|
||||
<string name="clipboard_swipe_clean">Pyyhkäise tyhjentääksesi leikepöydän</string>
|
||||
<string name="allow">Salli</string>
|
||||
<string name="extended_ASCII">Laajennettu ASCII</string>
|
||||
<string name="key_derivation_function">Avaimen derivointifunktio</string>
|
||||
@@ -160,4 +160,40 @@
|
||||
<string name="encryption">Salaus</string>
|
||||
<string name="security">Turvallisuus</string>
|
||||
<string name="edit_entry">Muokkaa merkintää</string>
|
||||
</resources>
|
||||
<string name="error_disallow_no_credentials">Ainakin yksi pääsytieto tulee olla asetettuna.</string>
|
||||
<string name="error_load_database_KDF_memory">Avainta ei pystytty lataamaan. Kokeile vähentää KDF \"Muistin käyttöä\".</string>
|
||||
<string name="error_load_database">Tietokantaa ei pystytty avaamaan.</string>
|
||||
<string name="error_invalid_OTP">Virheellinen OTP salaisuus.</string>
|
||||
<string name="entry_otp">OTP</string>
|
||||
<string name="otp_algorithm">Algoritmi</string>
|
||||
<string name="otp_digits">Numerot</string>
|
||||
<string name="otp_counter">Laskuri</string>
|
||||
<string name="otp_period">Ajanjakso (sekunteina)</string>
|
||||
<string name="otp_secret">Salaisuus</string>
|
||||
<string name="otp_type">OTP tyyppi</string>
|
||||
<string name="entry_setup_otp">Luo kertakäyttöinen salasana</string>
|
||||
<string name="entry_attachments">Liitetiedostot</string>
|
||||
<string name="entry_history">Historia</string>
|
||||
<string name="entry_UUID">UUID</string>
|
||||
<string name="html_about_contribution">Pitääksemme <strong>vapaudemme</strong>, <strong>korjataksemme bugeja</strong>, <strong>lisätäksemme ominaisuuksia</strong> ja <strong>ollaksemme aina ajantasalla</strong>, luotamme teidän <strong>apuun</strong>.</string>
|
||||
<string name="content_description_keyboard_close_fields">Sulje kenttä</string>
|
||||
<string name="content_description_update_from_list">Päivitä</string>
|
||||
<string name="entry_add_field">Lisää kenttä</string>
|
||||
<string name="content_description_remove_field">Poista kenttä</string>
|
||||
<string name="entry_add_attachment">Lisää liite</string>
|
||||
<string name="content_description_password_length">Salasanan pituus</string>
|
||||
<string name="entry_password_generator">Salanan generaattori</string>
|
||||
<string name="discard">Hylkää</string>
|
||||
<string name="discard_changes">Hylkää muutokset\?</string>
|
||||
<string name="validate">Vahvista</string>
|
||||
<string name="content_description_entry_icon">Merkintä kuvake</string>
|
||||
<string name="content_description_repeat_toggle_password_visibility">Toista salasanan näkyvyyden vaihto</string>
|
||||
<string name="content_description_keyfile_checkbox">Avaintiedoston valintaruutu</string>
|
||||
<string name="content_description_password_checkbox">Salasanan valintaruutu</string>
|
||||
<string name="content_description_file_information">Tietoja tiedostosta</string>
|
||||
<string name="content_description_add_item">Lisää esine</string>
|
||||
<string name="content_description_add_group">Lisää ryhmä</string>
|
||||
<string name="content_description_add_entry">Lisää kohta</string>
|
||||
<string name="content_description_add_node">Lisää solmu</string>
|
||||
<string name="content_description_background">Tausta</string>
|
||||
</resources>
|
||||
@@ -40,8 +40,7 @@
|
||||
<string name="clipboard_error">Certains appareils ne permettent pas aux applications d’utiliser le presse-papier.</string>
|
||||
<string name="clipboard_error_clear">Impossible de vider le presse-papier</string>
|
||||
<string name="clipboard_timeout">Expiration du presse-papier</string>
|
||||
<string name="clipboard_timeout_summary">Durée de stockage dans le presse-papier</string>
|
||||
<string name="clipboard_swipe_clean">Glisser pour vider le presse-papier maintenant</string>
|
||||
<string name="clipboard_timeout_summary">Durée de stockage dans le presse-papier (si supporté par votre appareil)</string>
|
||||
<string name="select_to_copy">Copier %1$s dans le presse-papier</string>
|
||||
<string name="retrieving_db_key">Récupération de la clé de la base de données…</string>
|
||||
<string name="database">Base de données</string>
|
||||
@@ -210,7 +209,7 @@
|
||||
<string name="monospace_font_fields_enable_summary">Change la fonte utilisée dans les champs pour une meilleure visibilité des caractères</string>
|
||||
<string name="allow_copy_password_title">Faire confiance au presse-papier</string>
|
||||
<string name="allow_copy_password_summary">Autorise la copie du mot de passe de l’entrée et des champs protégés dans le presse-papier</string>
|
||||
<string name="allow_copy_password_warning">Attention : Le presse-papiers est partagé par toutes les applications. Si des données sensibles sont copiées, d’autres logiciels peuvent les récupérer.</string>
|
||||
<string name="allow_copy_password_warning">Attention : Le presse-papier est partagé par toutes les applications. Si des données sensibles sont copiées, d’autres logiciels peuvent les récupérer.</string>
|
||||
<string name="database_name_title">Nom de la base de données</string>
|
||||
<string name="database_description_title">Description de la base de données</string>
|
||||
<string name="database_version_title">Version de la base de données</string>
|
||||
@@ -219,7 +218,7 @@
|
||||
<string name="other">Autres</string>
|
||||
<string name="keyboard">Clavier</string>
|
||||
<string name="magic_keyboard_title">Magiclavier</string>
|
||||
<string name="magic_keyboard_explanation_summary">Active un clavier personnalisé pour remplir vos mots de passe et tous les champs d’identité</string>
|
||||
<string name="magic_keyboard_explanation_summary">Activer un clavier personnalisé pour remplir vos mots de passe et tous les champs d’identité</string>
|
||||
<string name="enable_education_screens_title">Conseils pédagogiques</string>
|
||||
<string name="enable_education_screens_summary">Met en surbrillance les éléments pour apprendre le fonctionnement de l’application</string>
|
||||
<string name="reset_education_screens_title">Réinitialiser les conseils pédagogiques</string>
|
||||
@@ -349,12 +348,12 @@
|
||||
<string name="lock_database_back_root_title">Appuyer sur « Retour » pour verrouiller</string>
|
||||
<string name="lock_database_back_root_summary">Verrouille la base de données lorsque l’utilisateur clique sur le bouton retour de l’écran racine</string>
|
||||
<string name="clear_clipboard_notification_title">Suppression à la fermeture</string>
|
||||
<string name="clear_clipboard_notification_summary">Verrouille la base de données lors de la fermeture de la notification</string>
|
||||
<string name="clear_clipboard_notification_summary">Verrouille la base de données lorsque la durée du presse-papier expire ou que la notification est fermée après avoir commencé à l’utiliser</string>
|
||||
<string name="recycle_bin">Corbeille</string>
|
||||
<string name="keyboard_selection_entry_title">Sélection de l’entrée</string>
|
||||
<string name="keyboard_selection_entry_summary">Affiche les champs de saisie dans le Magiclavier lors de l’affichage d’une entrée</string>
|
||||
<string name="delete_entered_password_title">Supprimer le mot de passe</string>
|
||||
<string name="delete_entered_password_summary">Supprime le mot de passe saisi après une tentative de connexion</string>
|
||||
<string name="delete_entered_password_summary">Supprime le mot de passe saisi après une tentative de connexion à une base de données</string>
|
||||
<string name="content_description_open_file">Ouvrir le fichier</string>
|
||||
<string name="content_description_add_node">Ajouter un nœud</string>
|
||||
<string name="content_description_add_entry">Ajouter une entrée</string>
|
||||
@@ -413,7 +412,7 @@
|
||||
<string name="contains_duplicate_uuid">La base de données contient des doublons d’UUID.</string>
|
||||
<string name="contains_duplicate_uuid_procedure">Résoudre le problème en générant de nouveaux UUID pour les doublons et continuer \?</string>
|
||||
<string name="database_opened">Base de données ouverte</string>
|
||||
<string name="clipboard_explanation_summary">Copie les champs d’une entrée à l’aide du presse-papier de votre appareil</string>
|
||||
<string name="clipboard_explanation_summary">Copier les champs d’une entrée à l’aide du presse-papier de votre appareil</string>
|
||||
<string name="advanced_unlock_explanation_summary">Utilise le déverrouillage avancé pour ouvrir plus facilement une base de données</string>
|
||||
<string name="database_data_compression_title">Compression de données</string>
|
||||
<string name="database_data_compression_summary">La compression des données réduit la taille de la base de données.</string>
|
||||
@@ -476,11 +475,24 @@
|
||||
<string name="discard">Abandonner</string>
|
||||
<string name="discard_changes">Abandonner les modifications \?</string>
|
||||
<string name="validate">Valider</string>
|
||||
<string name="autofill_auto_search_summary">Suggérer automatiquement des résultats de recherche à partir du domaine Web ou de l\'identifiant de l\'appli</string>
|
||||
<string name="autofill_auto_search_summary">Suggérer automatiquement des résultats de recherche à partir du domaine Web ou de l\'application ID</string>
|
||||
<string name="autofill_auto_search_title">Recherche automatique</string>
|
||||
<string name="lock_database_show_button_summary">Affiche le bouton de verrouillage dans l\'interface utilisateur</string>
|
||||
<string name="lock_database_show_button_title">Afficher le bouton de verrouillage</string>
|
||||
<string name="autofill_preference_title">Paramètres de remplissage automatique</string>
|
||||
<string name="warning_database_link_revoked">Accès au fichier révoqué par le gestionnaire de fichiers</string>
|
||||
<string name="error_label_exists">Ce label existe déjà.</string>
|
||||
</resources>
|
||||
<string name="autofill_block_restart">Redémarrez l\'application contenant le formulaire pour activer le blocage.</string>
|
||||
<string name="autofill_block">Blocker le remplissage automatique</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Liste de blocage qui empêche le remplissage automatique des domaines Web</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Liste de blocage de domaine Web</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Liste de blocage qui empêche le remplissage automatique des applications</string>
|
||||
<string name="autofill_application_id_blocklist_title">Liste de blocage d\'application</string>
|
||||
<string name="keyboard_search_share_summary">Rechercher automatiquement les informations partagées pour remplir le clavier</string>
|
||||
<string name="keyboard_search_share_title">Rechercher les informations partagées</string>
|
||||
<string name="filter">Filtre</string>
|
||||
<string name="subdomain_search_summary">Rechercher des domaines Web avec des contraintes de sous-domaines</string>
|
||||
<string name="subdomain_search_title">Recherche de sous-domaine</string>
|
||||
<string name="error_string_type">Ce texte ne correspond pas à l\'élément demandé.</string>
|
||||
<string name="content_description_add_item">Ajouter un élément</string>
|
||||
</resources>
|
||||
@@ -37,7 +37,6 @@
|
||||
<string name="clipboard_error_clear">Fallou a limpeza do portapapeis</string>
|
||||
<string name="clipboard_timeout">Tempo límite para o portapapeis</string>
|
||||
<string name="clipboard_timeout_summary">Tempo antes de limpar o portapapeis após copiar usuario ou contrasinal</string>
|
||||
<string name="clipboard_swipe_clean">Deslice para limpar agora o portapapeis</string>
|
||||
<string name="edit_entry">Editar entrada</string>
|
||||
<string name="select_to_copy">Seleccione para copiar %1$s para o portapapeis</string>
|
||||
<string name="retrieving_db_key">A criar a chave da base de dados…</string>
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
<string name="clipboard_error_clear">क्लिपबोर्ड को साफ़ नहीं किया जा सका</string>
|
||||
<string name="clipboard_timeout">क्लिपबोर्ड टाइमआउट</string>
|
||||
<string name="clipboard_timeout_summary">क्लिपबोर्ड में भंडारण की अवधि</string>
|
||||
<string name="clipboard_swipe_clean">अब क्लिपबोर्ड को साफ करने के लिए स्वाइप करें</string>
|
||||
<string name="select_to_copy">क्लिपबोर्ड पर %1$s को कॉपी करने के लिए चयन करें</string>
|
||||
<string name="retrieving_db_key">डेटाबेस कुंजी पुनर्प्राप्त कर रहा है…</string>
|
||||
<string name="database">डेटाबेस</string>
|
||||
|
||||
@@ -20,25 +20,24 @@
|
||||
<string name="about_description">Android implementacija KeePass upravitelja lozinki</string>
|
||||
<string name="accept">Prihvati</string>
|
||||
<string name="add_entry">Dodaj unos</string>
|
||||
<string name="edit_entry">Uređivanje unosa</string>
|
||||
<string name="edit_entry">Uredi unos</string>
|
||||
<string name="add_group">Dodaj grupu</string>
|
||||
<string name="master_key">Glavni ključ</string>
|
||||
<string name="security">Sigurnost</string>
|
||||
<string name="encryption">Šifriranje</string>
|
||||
<string name="encryption_algorithm">Algoritam šifriranja</string>
|
||||
<string name="key_derivation_function">Funkcija izvedbe ključa</string>
|
||||
<string name="key_derivation_function">Funkcija za generiranje ključeva</string>
|
||||
<string name="app_timeout_summary">Vrijeme neaktivnosti prije zaključavanja baze podataka</string>
|
||||
<string name="application">Aplikacija</string>
|
||||
<string name="brackets">Zagrade</string>
|
||||
<string name="extended_ASCII">Prošireni ASCII kod</string>
|
||||
<string name="file_manager_install_description">Za stvaranje, otvaranje i pohranu datoteka baze podataka potreban je upravitelj datoteka koji prihvaća zahtjeve ACTION_CREATE_DOCUMENT i ACTION_OPEN_DOCUMENT.</string>
|
||||
<string name="extended_ASCII">Prošireni ASCII</string>
|
||||
<string name="file_manager_install_description">Za stvaranje, otvaranje i spremanje datoteka baze podataka potreban je upravitelj datoteka koji prihvaća zahtjeve ACTION_CREATE_DOCUMENT i ACTION_OPEN_DOCUMENT.</string>
|
||||
<string name="allow">Dozvoli</string>
|
||||
<string name="clipboard_cleared">Međuspremnik je ispražnjen</string>
|
||||
<string name="clipboard_error_title">Pogreška međuspremnika</string>
|
||||
<string name="clipboard_cleared">Međuspremnik ispražnjen</string>
|
||||
<string name="clipboard_error_title">Greška međuspremnika</string>
|
||||
<string name="clipboard_error">Neki uređaji neće dopustiti aplikacijama korištenje međuspremnika.</string>
|
||||
<string name="clipboard_error_clear">Nije moguće isprazniti međuspremnik</string>
|
||||
<string name="clipboard_timeout_summary">Trajanje pohrane u međuspremniku</string>
|
||||
<string name="clipboard_swipe_clean">Prijeđite prstom da biste odmah ispraznili međuspremnik</string>
|
||||
<string name="content_description_background">Pozadina</string>
|
||||
<string name="content_description_open_file">Otvori datoteku</string>
|
||||
<string name="content_description_add_node">Dodaj čvor</string>
|
||||
@@ -54,30 +53,30 @@
|
||||
<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>
|
||||
<string name="retrieving_db_key">Dohvaćanje ključa baze podataka…</string>
|
||||
<string name="retrieving_db_key">Dohvaćanje ključa baze podataka …</string>
|
||||
<string name="database">Baza podataka</string>
|
||||
<string name="decrypting_db">Dešifriranje sadržaja baze podataka…</string>
|
||||
<string name="default_checkbox">Koristi kao zadanu bazu podataka</string>
|
||||
<string name="decrypting_db">Dešifriranje sadržaja baze podataka …</string>
|
||||
<string name="default_checkbox">Koristi kao standardnu bazu podataka</string>
|
||||
<string name="digits">Znamenke</string>
|
||||
<string name="entry_cancel">Odustani</string>
|
||||
<string name="entry_notes">Bilješke</string>
|
||||
<string name="entry_confpassword">Potvrdi lozinku</string>
|
||||
<string name="entry_created">Kreirano</string>
|
||||
<string name="entry_created">Stvoreno</string>
|
||||
<string name="entry_expires">Istječe</string>
|
||||
<string name="entry_UUID">UUID</string>
|
||||
<string name="entry_history">Povijest</string>
|
||||
<string name="entry_attachments">Privitci</string>
|
||||
<string name="entry_modified">Zadnja izmjena</string>
|
||||
<string name="entry_not_found">Nije moguće pronaći podatke o unosu.</string>
|
||||
<string name="entry_modified">Promijenjeno</string>
|
||||
<string name="entry_not_found">Nije moguće pronaći podatke unosa.</string>
|
||||
<string name="content_description_password_checkbox">Potvrdni okvir lozinke</string>
|
||||
<string name="content_description_keyfile_checkbox">Potvrdni okvir datoteke ključa</string>
|
||||
<string name="entry_keyfile">Datoteka ključa</string>
|
||||
<string name="entry_password">Lozinka</string>
|
||||
<string name="entry_save">Spremi</string>
|
||||
<string name="entry_title">Naslov</string>
|
||||
<string name="entry_setup_otp">Postavi jednokratnu zaporku</string>
|
||||
<string name="entry_setup_otp">Postavi jednokratnu lozinku</string>
|
||||
<string name="otp_type">Tip OTP-a</string>
|
||||
<string name="otp_secret">Tajni ključ</string>
|
||||
<string name="otp_secret">Tajna</string>
|
||||
<string name="otp_period">Razdoblje (u sekundama)</string>
|
||||
<string name="otp_counter">Brojač</string>
|
||||
<string name="otp_digits">Znamenke</string>
|
||||
@@ -86,19 +85,19 @@
|
||||
<string name="entry_url">URL</string>
|
||||
<string name="entry_user_name">Korisničko ime</string>
|
||||
<string name="error_nokeyfile">Odaberi datoteku ključa.</string>
|
||||
<string name="error_pass_gen_type">Bar jedan tip generiranja lozinke mora biti odabran.</string>
|
||||
<string name="error_pass_match">Lozinke se ne podudaraju.</string>
|
||||
<string name="error_wrong_length">Unesi pozitivan cijeli broj u polje \"Duljina\".</string>
|
||||
<string name="error_pass_gen_type">Barem jedan tip generiranja lozinke mora biti odabran.</string>
|
||||
<string name="error_pass_match">Lozinke se ne poklapaju.</string>
|
||||
<string name="error_wrong_length">Upiši pozitivan cijeli broj u polje „Duljina”.</string>
|
||||
<string name="error_otp_secret_key">Tajni ključ mora biti u Base32 formatu.</string>
|
||||
<string name="error_otp_counter">Brojač mora biti između %1$d i %2$d.</string>
|
||||
<string name="error_otp_digits">Token mora sadržavati %1$d do %2$d znamenki.</string>
|
||||
<string name="field_name">Naziv polja</string>
|
||||
<string name="field_name">Ime polja</string>
|
||||
<string name="field_value">Vrijednost polja</string>
|
||||
<string name="file_browser">Upravitelj datoteka</string>
|
||||
<string name="generate_password">Generiraj lozinku</string>
|
||||
<string name="hint_conf_pass">Potvrdi lozinku</string>
|
||||
<string name="hint_generated_password">Generirana lozinka</string>
|
||||
<string name="hint_group_name">Naziv grupe</string>
|
||||
<string name="hint_group_name">Ime grupe</string>
|
||||
<string name="hint_keyfile">Datoteka ključa</string>
|
||||
<string name="hint_length">Duljina</string>
|
||||
<string name="hint_pass">Lozinka</string>
|
||||
@@ -109,16 +108,16 @@
|
||||
<string name="keyfile_is_empty">Datoteka ključa je prazna.</string>
|
||||
<string name="length">Duljina</string>
|
||||
<string name="list_entries_show_username_title">Prikaži korisnička imena</string>
|
||||
<string name="list_entries_show_username_summary">Prikaži korisnička imena u listi unosa</string>
|
||||
<string name="list_entries_show_username_summary">Prikaži korisnička imena u popisima unosa</string>
|
||||
<string name="list_groups_show_number_entries_title">Prikaži broj unosa</string>
|
||||
<string name="list_groups_show_number_entries_summary">Prikaži broj unosa u grupi</string>
|
||||
<string name="creating_database">Kreiranje baze podataka…</string>
|
||||
<string name="loading_database">Učitavanje baze podataka…</string>
|
||||
<string name="creating_database">Stvaranje baze podataka …</string>
|
||||
<string name="loading_database">Učitavanje baze podataka …</string>
|
||||
<string name="hide_password_title">Sakrij lozinke</string>
|
||||
<string name="menu_change_key_settings">Promjeni glavni ključ</string>
|
||||
<string name="settings">Postavke</string>
|
||||
<string name="menu_app_settings">Postavke aplikacije</string>
|
||||
<string name="menu_form_filling_settings">Ispunjavanje forme</string>
|
||||
<string name="menu_form_filling_settings">Ispunjavanje obrasca</string>
|
||||
<string name="menu_advanced_unlock_settings">Napredno otključavanje</string>
|
||||
<string name="menu_database_settings">Postavke baze podataka</string>
|
||||
<string name="menu_security_settings">Postavke sigurnosti</string>
|
||||
@@ -126,17 +125,17 @@
|
||||
<string name="menu_donate">Doniraj</string>
|
||||
<string name="menu_edit">Izmjeni</string>
|
||||
<string name="menu_copy">Kopiraj</string>
|
||||
<string name="menu_paste">Zalijepi</string>
|
||||
<string name="menu_paste">Umetni</string>
|
||||
<string name="menu_delete">Izbriši</string>
|
||||
<string name="menu_hide_password">Sakrij lozinku</string>
|
||||
<string name="menu_lock">Zaključaj bazu podataka</string>
|
||||
<string name="menu_save_database">Spremi bazu podataka</string>
|
||||
<string name="menu_open">Otvori</string>
|
||||
<string name="menu_search">Pretraži</string>
|
||||
<string name="menu_search">Traži</string>
|
||||
<string name="menu_showpass">Prikaži lozinku</string>
|
||||
<string name="menu_biometric_remove_key">Izbriši spremljene biometričke ključeve</string>
|
||||
<string name="menu_biometric_remove_key">Izbriši spremljene biometrijske ključeve</string>
|
||||
<string name="menu_url">Idi na URL</string>
|
||||
<string name="menu_open_file_read_and_write">Promijenjivo</string>
|
||||
<string name="menu_open_file_read_and_write">Promjenjivo</string>
|
||||
<string name="menu_empty_recycle_bin">Isprazni koš za smeće</string>
|
||||
<string name="menu_restore_entry_history">Vrati povijest</string>
|
||||
<string name="menu_delete_entry_history">Izbriši povijest</string>
|
||||
@@ -145,163 +144,163 @@
|
||||
<string name="no_results">Nema rezultata pretraživanja</string>
|
||||
<string name="no_url_handler">Instalirajte web preglednik da bi ste otvorili ovaj URL.</string>
|
||||
<string name="select_database_file">Otvori postojeću bazu podataka</string>
|
||||
<string name="create_keepass_file">Kreiraj novu bazu podataka</string>
|
||||
<string name="create_keepass_file">Stvori novu bazu podataka</string>
|
||||
<string name="omit_backup_search_title">Ne pretražuj kopije unosa</string>
|
||||
<string name="progress_create">Kreiranje nove baze podataka…</string>
|
||||
<string name="progress_create">Stvaranje nove baze podataka …</string>
|
||||
<string name="protection">Zaštita</string>
|
||||
<string name="contains_duplicate_uuid">Baza podataka sadrži duplicirane UUID-ove.</string>
|
||||
<string name="selection_mode">Mod odabira</string>
|
||||
<string name="encryption_explanation">Odaberite algoritam za šifriranje svih podataka.</string>
|
||||
<string name="encryption_explanation">Algoritam šifriranja baze podataka koji se koristi za sve podatke.</string>
|
||||
<string name="memory_usage">Korištenje memorije</string>
|
||||
<string name="parallelism">Paralelnost</string>
|
||||
<string name="parallelism_explanation">Stupanj paralelnosti (odnosno broj threadova) koji će koristiti funkcija izvedbe ključa.</string>
|
||||
<string name="saving_database">Spremanje baze podataka…</string>
|
||||
<string name="command_execution">Izvršavanje naredbe…</string>
|
||||
<string name="parallelism_explanation">Stupanj paralelnosti (odnosno broj threadova) koji će koristiti funkcija za generiranje ključeva.</string>
|
||||
<string name="saving_database">Spremanje baze podataka …</string>
|
||||
<string name="command_execution">Izvršavanje naredbe …</string>
|
||||
<string name="space">Razmak</string>
|
||||
<string name="search_label">Pretraži</string>
|
||||
<string name="search_label">Pretraga</string>
|
||||
<string name="sort_menu">Sortiraj po</string>
|
||||
<string name="sort_ascending">Uzlazno</string>
|
||||
<string name="sort_ascending">Počevši s najnižim ↓</string>
|
||||
<string name="sort_groups_before">Grupe prije</string>
|
||||
<string name="sort_recycle_bin_bottom">Koš za smeće na dnu</string>
|
||||
<string name="sort_db">Prirodnom poredku</string>
|
||||
<string name="sort_db">Prirodnom poretku</string>
|
||||
<string name="sort_title">Naslovu</string>
|
||||
<string name="sort_username">Korisničkom imenu</string>
|
||||
<string name="sort_creation_time">Vremenu kreiranja</string>
|
||||
<string name="sort_last_modify_time">Vremenu zadnje izmjene</string>
|
||||
<string name="search">Pretraži</string>
|
||||
<string name="search_results">Rezultati pretraživanja</string>
|
||||
<string name="sort_last_modify_time">Zadnja promjena</string>
|
||||
<string name="search">Pretraga</string>
|
||||
<string name="search_results">Rezultati pretrage</string>
|
||||
<string name="unsupported_db_version">Nepodržana verzija baze podataka.</string>
|
||||
<string name="warning">Upozorenje</string>
|
||||
<string name="warning_empty_password">Jeste li sigurni da ne želite zaštititi otključavanje lozinkom\?</string>
|
||||
<string name="warning_no_encryption_key">Jeste li sigurni da ne želite koristiti nijedan ključ šifriranja\?</string>
|
||||
<string name="warning_permanently_delete_nodes">Jeste li sigurni da želite trajno izbrisati odabrane čvorove\?</string>
|
||||
<string name="warning_empty_password">Nastaviti bez zaštitite otključavanja lozinkom\?</string>
|
||||
<string name="warning_no_encryption_key">Nastaviti bez ključa šifriranja\?</string>
|
||||
<string name="warning_permanently_delete_nodes">Trajno izbrisati odabrane čvorove\?</string>
|
||||
<string name="version_label">Verzija %1$s</string>
|
||||
<string name="build_label">Build %1$s</string>
|
||||
<string name="biometric_prompt_store_credential_message">Upozorenje: Ako koristite biometričko prepoznavanje i dalje morate zapamtiti vašu glavnu lozinku.</string>
|
||||
<string name="biometric_prompt_extract_credential_title">Otvori bazu podataka pomoću biometričkog prepoznavanja</string>
|
||||
<string name="build_label">Izgradnja %1$s</string>
|
||||
<string name="biometric_prompt_store_credential_message">Upozorenje: Ako koristiš biometrijsko prepoznavanje i dalje moraš zapamtiti svoju glavnu lozinku.</string>
|
||||
<string name="biometric_prompt_extract_credential_title">Otvori bazu podataka pomoću biometrijskog prepoznavanja</string>
|
||||
<string name="encrypted_value_stored">Šifrirana lozinka pohranjena</string>
|
||||
<string name="biometric_invalid_key">Nije moguće pročitati biometrički ključ. Molimo izbrišite ga i ponovite postupak prepoznavanje.</string>
|
||||
<string name="biometric_invalid_key">Nije moguće pročitati biometrijski ključ. Izbriši ga i ponovi postupak prepoznavanja.</string>
|
||||
<string name="database_history">Povijest</string>
|
||||
<string name="menu_appearance_settings">Izgled</string>
|
||||
<string name="general">Općenito</string>
|
||||
<string name="general">Opće</string>
|
||||
<string name="autofill">Automatsko ispunjavanje</string>
|
||||
<string name="autofill_service_name">KeepassDX automatsko ispunjavanje forme</string>
|
||||
<string name="set_autofill_service_title">Postavi zadani servis automatskog ispunjavanja</string>
|
||||
<string name="autofill_service_name">Automatsko ispunjavanje obrazaca KeepassDX</string>
|
||||
<string name="set_autofill_service_title">Postavi standardnu uslugu automatskog ispunjavanja</string>
|
||||
<string name="list_password_generator_options_title">Znakovi lozinke</string>
|
||||
<string name="list_password_generator_options_summary">Postavi dozvoljene znakove za generiranje lozinke</string>
|
||||
<string name="database_opened">Baza podataka otvorena</string>
|
||||
<string name="clipboard">Međuspremnik</string>
|
||||
<string name="clipboard_notifications_title">Obavijesti međuspremnika</string>
|
||||
<string name="clipboard_warning">Ako automatsko brisanje međuspremnika ne uspije, izbrišite njegovu povijest ručno.</string>
|
||||
<string name="clipboard_warning">Ako automatsko brisanje međuspremnika ne uspije, izbriši njegovu povijest ručno.</string>
|
||||
<string name="lock_database_screen_off_summary">Zaključaj bazu podataka kada je ekran ugašen</string>
|
||||
<string name="lock_database_back_root_title">Pritisni \'Natrag\' za zaključavanje</string>
|
||||
<string name="advanced_unlock">Napredno otključavanje</string>
|
||||
<string name="advanced_unlock_explanation_summary">Koristite napredno otključavanje za jednostavnije otvaranje baze podataka</string>
|
||||
<string name="biometric_unlock_enable_title">Biometričko otključavanje</string>
|
||||
<string name="advanced_unlock_explanation_summary">Koristi napredno otključavanje za jednostavnije otvaranje baze podataka</string>
|
||||
<string name="biometric_unlock_enable_title">Biometrijsko otključavanje</string>
|
||||
<string name="biometric_unlock_enable_summary">Otvaranje baze podataka skeniranjem biometrike</string>
|
||||
<string name="biometric_delete_all_key_title">Izbriši ključeve šifriranja</string>
|
||||
<string name="biometric_delete_all_key_summary">Izbriši sve ključeve šifriranja povezane s biometričkim prepoznavanjem</string>
|
||||
<string name="biometric_delete_all_key_warning">Jeste li sigurni da želite izbrisati sve ključeve povezane s biometričkim prepoznavanjem\?</string>
|
||||
<string name="biometric_delete_all_key_summary">Izbriši sve ključeve šifriranja povezane s biometrijskim prepoznavanjem</string>
|
||||
<string name="biometric_delete_all_key_warning">Izbrisati sve ključeve povezane s biometrijskim prepoznavanjem\?</string>
|
||||
<string name="unavailable_feature_hardware">Nije moguće pronaći odgovarajući hardver.</string>
|
||||
<string name="file_name">Naziv datoteke</string>
|
||||
<string name="file_name">Ime datoteke</string>
|
||||
<string name="path">Putanja</string>
|
||||
<string name="assign_master_key">Pridruži glavni ključ</string>
|
||||
<string name="assign_master_key">Zadaj glavni ključ</string>
|
||||
<string name="full_file_path_enable_title">Putanja datoteke</string>
|
||||
<string name="full_file_path_enable_summary">Prikaži punu putanju do datoteke</string>
|
||||
<string name="database_data_compression_title">Kompresija podataka</string>
|
||||
<string name="database_data_compression_summary">Kompresija podataka smanjuje veličinu baze podataka.</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="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čeno obnavljanje</string>
|
||||
<string name="settings_database_recommend_changing_master_key_summary">Preporuči promjenu glavnog ključa (u danima)</string>
|
||||
<string name="settings_database_force_changing_master_key_title">Prisilno obnavljanje</string>
|
||||
<string name="settings_database_force_changing_master_key_summary">Zahtjevaj promjenu glavnog ključa (u dani)</string>
|
||||
<string name="settings_database_force_changing_master_key_next_time_title">Prisilno obnavljanje sljedeći put</string>
|
||||
<string name="settings_database_force_changing_master_key_next_time_summary">Zahtjevaj promjenu glavnog ključa sljedeći put</string>
|
||||
<string name="settings_database_recommend_changing_master_key_title">Preporuči obnavljanje</string>
|
||||
<string name="settings_database_recommend_changing_master_key_summary">Preporuči mijenjanje glavnog ključa (u danima)</string>
|
||||
<string name="settings_database_force_changing_master_key_title">Prisili obnavljanje</string>
|
||||
<string name="settings_database_force_changing_master_key_summary">Zahtijevaj promjenu glavnog ključa (u danima)</string>
|
||||
<string name="settings_database_force_changing_master_key_next_time_title">Prisili obnavljanje sljedeći put</string>
|
||||
<string name="settings_database_force_changing_master_key_next_time_summary">Zahtijevaj promjenu glavnog ključa sljedeći put (jednom)</string>
|
||||
<string name="monospace_font_fields_enable_title">Font polja</string>
|
||||
<string name="monospace_font_fields_enable_summary">Promjeni font u poljima za bolju vidljivost znakova</string>
|
||||
<string name="enable">Omogući</string>
|
||||
<string name="disable">Onemogući</string>
|
||||
<string name="enable">Anktiviraj</string>
|
||||
<string name="disable">Deaktiviraj</string>
|
||||
<string name="clear_clipboard_notification_title">Isprazni pri zatvaranju</string>
|
||||
<string name="clear_clipboard_notification_summary">Zaključaj bazu podataka pri zatvaranju obavijesti</string>
|
||||
<string name="database_name_title">Ime baze podataka</string>
|
||||
<string name="database_description_title">Opis baze podataka</string>
|
||||
<string name="database_default_username_title">Zadano korisničko ime</string>
|
||||
<string name="database_default_username_title">Standardno korisničko ime</string>
|
||||
<string name="database_custom_color_title">Proizvoljna boja baze podataka</string>
|
||||
<string name="database_version_title">Verzija baze podataka</string>
|
||||
<string name="text_appearance">Tekst</string>
|
||||
<string name="application_appearance">Aplikacija</string>
|
||||
<string name="other">Ostalo</string>
|
||||
<string name="compression">Kompresija</string>
|
||||
<string name="compression_none">Bez kompresije</string>
|
||||
<string name="compression">Komprimiranje</string>
|
||||
<string name="compression_none">Bez</string>
|
||||
<string name="compression_gzip">gzip</string>
|
||||
<string name="recycle_bin">Koš za smeće</string>
|
||||
<string name="content_description_node_children">Pod-čvor</string>
|
||||
<string name="entry_accessed">Zadnji pristup</string>
|
||||
<string name="error_arc4">Arcfour stream cipher nije podržan.</string>
|
||||
<string name="error_file_not_create">Nije moguće kreirati datoteku:</string>
|
||||
<string name="error_invalid_db">Baza podataka se ne može pročitati.</string>
|
||||
<string name="error_invalid_path">Provjerite putanju do datoteke.</string>
|
||||
<string name="entry_accessed">Pristupljeno</string>
|
||||
<string name="error_arc4">Arcfour šifriranje nije podržano.</string>
|
||||
<string name="error_file_not_create">Nije moguće stvoriti datoteku:</string>
|
||||
<string name="error_invalid_db">Nije moguće čitati bazu podataka.</string>
|
||||
<string name="error_invalid_path">Provjeri putanju do datoteke.</string>
|
||||
<string name="error_invalid_OTP">Neispravan OTP tajni ključ.</string>
|
||||
<string name="error_no_name">Unesite naziv.</string>
|
||||
<string name="error_no_name">Upiši ime.</string>
|
||||
<string name="error_out_of_memory">Nema dovoljno memorije za učitavanje cijele baze podataka.</string>
|
||||
<string name="error_load_database">Nije moguće učitati bazu podataka.</string>
|
||||
<string name="error_load_database_KDF_memory">Nije moguće učitati ključ. Pokušaje smanjiti uporabu memorije KDF.</string>
|
||||
<string name="error_disallow_no_credentials">Bar jedna akreditacija mora biti postavljena.</string>
|
||||
<string name="error_disallow_no_credentials">Barem jedna akreditacija mora biti postavljena.</string>
|
||||
<string name="error_string_key">Svaki niz mora imati ime polja.</string>
|
||||
<string name="error_autofill_enable_service">Nije moguće omogućiti servis automatskog ispunjavanja.</string>
|
||||
<string name="error_move_folder_in_itself">Nije moguće grupu premijestiti u samu sebe.</string>
|
||||
<string name="error_autofill_enable_service">Nije moguće aktivirati uslugu automatskog ispunjavanja.</string>
|
||||
<string name="error_move_folder_in_itself">Nije moguće premjestiti grupu u samu sebe.</string>
|
||||
<string name="error_move_entry_here">Unos se ne može ovdje premijestiti.</string>
|
||||
<string name="error_copy_entry_here">Unos se ne može ovdje kopirati.</string>
|
||||
<string name="error_copy_group_here">Grupa se ne može ovjde kopirati.</string>
|
||||
<string name="error_create_database_file">Nije moguće kreirati bazu podataka s ovom lozinkom i datotekom ključa.</string>
|
||||
<string name="error_create_database_file">Nije moguće stvoriti bazu podataka s ovom lozinkom i datotekom ključa.</string>
|
||||
<string name="error_save_database">Nije moguće spremiti bazu podataka.</string>
|
||||
<string name="error_otp_period">Razdoblje mora biti između %1$d i %2$d sekundi.</string>
|
||||
<string name="file_not_found_content">Nije moguće pronaći datoteku. Probajte je ponovno otvoriti iz vašeg upravitelja datotekama.</string>
|
||||
<string name="invalid_credentials">Akreditacija se ne može pročitati.</string>
|
||||
<string name="list_size_title">Veličina članova liste</string>
|
||||
<string name="list_size_summary">Veličina teksta članova liste</string>
|
||||
<string name="file_not_found_content">Nije moguće pronaći datoteku. Probaj je ponovo otvoriti iz upravitelja datoteka.</string>
|
||||
<string name="invalid_credentials">Nije moguće čitati akreditacije.</string>
|
||||
<string name="list_size_title">Veličina elemenata popisa</string>
|
||||
<string name="list_size_summary">Veličina teksta u popisu elemenata</string>
|
||||
<string name="lowercase">Mala slova</string>
|
||||
<string name="hide_password_summary">Sakrij lozinke (***) pod zadano</string>
|
||||
<string name="hide_password_summary">Standardno sakrij lozinke (***)</string>
|
||||
<string name="about">O aplikaciji</string>
|
||||
<string name="copy_field">Kopiraj %1$s</string>
|
||||
<string name="menu_move">Premijesti</string>
|
||||
<string name="copy_field">Kopija od %1$s</string>
|
||||
<string name="menu_move">Premjesti</string>
|
||||
<string name="menu_cancel">Otkaži</string>
|
||||
<string name="menu_file_selection_read_only">Zaštićeno od pisanja</string>
|
||||
<string name="omit_backup_search_summary">Izostavi grupe \"Backup\" i \"Recycle bin\" iz rezultata pretraživanja</string>
|
||||
<string name="progress_title">Obrada…</string>
|
||||
<string name="progress_title">Rad u tijeku …</string>
|
||||
<string name="read_only">Zaštićeno od pisanja</string>
|
||||
<string name="read_only_warning">Zavisno o vašem upravitelju datotekama, KeePassDX možda neće moći zapisivati u vašu pohranu.</string>
|
||||
<string name="contains_duplicate_uuid_procedure">Riješi problem generiranjem novih UUID-ova za duplikate\?</string>
|
||||
<string name="read_only_warning">Ovisno o upravitelju datoteka, KeePassDX možda neće moći pisati u tvoje spremište.</string>
|
||||
<string name="contains_duplicate_uuid_procedure">Riješiti problem generiranjem novih UUID-ova za duplikate\?</string>
|
||||
<string name="root">Korijen</string>
|
||||
<string name="memory_usage_explanation">Količina memorije (u bajtovima) koju će koristiti funkcija izvedbe ključa.</string>
|
||||
<string name="do_not_kill_app">Ne zatvarajte aplikaciju…</string>
|
||||
<string name="sort_last_access_time">Vremenu pristupa</string>
|
||||
<string name="memory_usage_explanation">Količina memorije (u bajtovima) koju će koristiti funkcija za generiranje ključeva.</string>
|
||||
<string name="do_not_kill_app">Ne zatvaraj aplikaciju …</string>
|
||||
<string name="sort_last_access_time">Zadnji pristup</string>
|
||||
<string name="special">Posebni znakovi</string>
|
||||
<string name="underline">Donja crta</string>
|
||||
<string name="underline">Podcrtaj</string>
|
||||
<string name="uppercase">Velika slova</string>
|
||||
<string name="biometric_prompt_store_credential_title">Spremi biometrijsko prepoznavanje</string>
|
||||
<string name="biometric_prompt_extract_credential_message">Izvadi akreditaciju baze podataka s biometrijskim podatcima</string>
|
||||
<string name="biometric_prompt_extract_credential_message">Izvadi akreditaciju baze podataka s biometrijskim podacima</string>
|
||||
<string name="biometric_not_recognized">Nije moguće prepoznati biometriju</string>
|
||||
<string name="no_credentials_stored">Ova baza podataka još nema spremljenu akreditaciju.</string>
|
||||
<string name="credential_before_click_biometric_button">Upišite lozinku prije nego kliknete na biometriju.</string>
|
||||
<string name="credential_before_click_biometric_button">Upiši lozinku, zatim klikne gumb „Biometrija”.</string>
|
||||
<string name="biometric">Biometrija</string>
|
||||
<string name="autofill_sign_in_prompt">Prijavite se s KeePassDX</string>
|
||||
<string name="autofill_explanation_summary">Omogući automatsko ispunjavanje za brzo ispunjavanje formi u drugim aplikacijama</string>
|
||||
<string name="autofill_sign_in_prompt">Prijavi se s KeePassDX</string>
|
||||
<string name="autofill_explanation_summary">Aktiviraj automatsko ispunjavanje za brzo ispunjavanje obrazaca u drugim aplikacijama</string>
|
||||
<string name="password_size_title">Duljina generirane lozinke</string>
|
||||
<string name="password_size_summary">Postavi zadanu duljinu generirane lozinke</string>
|
||||
<string name="clipboard_explanation_summary">Kopiraj polja unosa koristeći međuspremnik uređaja</string>
|
||||
<string name="clipboard_notifications_summary">Omogući obavijesti međuspremnika za kopiranje polja unosa</string>
|
||||
<string name="password_size_summary">Postavlja standardnu duljinu generiranih lozinki</string>
|
||||
<string name="clipboard_explanation_summary">Kopiraj polja unosa koristeći međuspremnik tvog uređaja</string>
|
||||
<string name="clipboard_notifications_summary">Aktiviraj obavijesti međuspremnika za kopiranje polja prilikom prikaza unosa</string>
|
||||
<string name="lock">Zaključavanje</string>
|
||||
<string name="lock_database_screen_off_title">Zaključavanje ekrana</string>
|
||||
<string name="recycle_bin_title">Koristi koš za smeće</string>
|
||||
<string name="recycle_bin_summary">Premijesti grupe i unose u koš za smeće prije brisanja</string>
|
||||
<string name="recycle_bin_group_title">Grupa koša za smeće</string>
|
||||
<string name="max_history_items_summary">Postavi broj spremljenih povijesti po unosu</string>
|
||||
<string name="max_history_size_summary">Postavi veličinu povijesti (u bajtovima) po unosu</string>
|
||||
<string name="max_history_items_summary">Ograniči broj spremljenih povijesti po unosu</string>
|
||||
<string name="max_history_size_summary">Ograniči veličinu povijesti (u bajtovima) po unosu</string>
|
||||
<string name="allow_copy_password_title">Povjerenje međuspremniku</string>
|
||||
<string name="allow_copy_password_summary">Dozvoli kopiranje lozinke i zaštićenih polja u međuspremnik</string>
|
||||
<string name="allow_copy_password_warning">Upozorenje: Međuspremnik dijele sve aplikacije. Ako kopirate osjetljive podatke, druga aplikacija ih može vidjeti.</string>
|
||||
<string name="allow_copy_password_warning">Upozorenje: Međuspremnik dijele sve aplikacije. Ako se kopiraju osjetljivi podaci, druga aplikacija ih može vidjeti.</string>
|
||||
<string name="keyboard">Tipkovnica</string>
|
||||
<string name="magic_keyboard_title">Magikeyboard</string>
|
||||
<string name="magic_keyboard_explanation_summary">Aktivirajte prilagođenu tipkovnicu za popunjavanje lozinki i identifikacijskih polja</string>
|
||||
@@ -312,8 +311,8 @@
|
||||
<string name="keyboard_entry_category">Unos</string>
|
||||
<string name="keyboard_selection_entry_title">Odabir unosa</string>
|
||||
<string name="keyboard_notification_entry_title">Obavijesti</string>
|
||||
<string name="keyboard_notification_entry_summary">Prikaži obavijest kada je neki unos dostupan</string>
|
||||
<string name="keyboard_notification_entry_clear_close_title">Zatvaranje obavijesti</string>
|
||||
<string name="keyboard_notification_entry_summary">Prikaži obavijest kad je neki unos dostupan</string>
|
||||
<string name="keyboard_notification_entry_clear_close_title">Isprazni pri zatvaranju</string>
|
||||
<string name="keyboard_notification_entry_clear_close_summary">Zatvori bazu podataka nakon zatvaranja obavijesti</string>
|
||||
<string name="keyboard_notification_entry_content_title_text">Unos</string>
|
||||
<string name="keyboard_notification_entry_content_title">%1$s je na Magikeyboard</string>
|
||||
@@ -324,31 +323,151 @@
|
||||
<string name="keyboard_key_vibrate_title">Vibracija tipki</string>
|
||||
<string name="keyboard_key_sound_title">Zvuk tipki</string>
|
||||
<string name="allow_no_password_title">Dozvoli bez lozinke</string>
|
||||
<string name="allow_no_password_summary">Omogući dugme \"Otvori\" bez odabrane akreditacije</string>
|
||||
<string name="allow_no_password_summary">Aktiviraj gumb „Otvori”, ako nijedna akreditacija nije odabrana</string>
|
||||
<string name="delete_entered_password_title">Izbriši lozinku</string>
|
||||
<string name="delete_entered_password_summary">Izbriši unešenu lozinku nakon pokušaja prijave</string>
|
||||
<string name="delete_entered_password_summary">Briše upisanu lozinku nakon pokušaja povezivanja s bazom podataka</string>
|
||||
<string name="enable_read_only_title">Zaštićeno od pisanja</string>
|
||||
<string name="enable_read_only_summary">Otvori bazu podataka samo za čitanje pod zadano</string>
|
||||
<string name="enable_auto_save_database_title">Automatsko spremanje baze podataka</string>
|
||||
<string name="enable_auto_save_database_summary">Automatski spremi bazu podataka nakon važnih promjena ( samo u modu za mijenjanje)</string>
|
||||
<string name="enable_read_only_summary">Standardno otvori bazu podataka u zaštićenom stanju</string>
|
||||
<string name="enable_auto_save_database_title">Automatski spremi bazu podataka</string>
|
||||
<string name="enable_auto_save_database_summary">Automatski spremi bazu podataka nakon svake važne radnje (samo u modusu „Promjenjivo”)</string>
|
||||
<string name="enable_education_screens_title">Edukativne poruke</string>
|
||||
<string name="enable_education_screens_summary">Istakni elemente za prikaz rada aplikacije</string>
|
||||
<string name="reset_education_screens_title">Resetiranje edukativnih poruka</string>
|
||||
<string name="reset_education_screens_summary">Ponovno prikaži sve edukativne poruke</string>
|
||||
<string name="reset_education_screens_text">Resetiraj edukativne poruke</string>
|
||||
<string name="education_create_database_title">Kreiranje vaše baze podataka</string>
|
||||
<string name="education_create_database_summary">Kreirajte svoju prvu datoteku za upravljanje lozinkama.</string>
|
||||
<string name="education_select_database_title">Otvaranje postojeće baze podataka</string>
|
||||
<string name="education_select_database_summary">Otvorite vašu prijašnju bazu podataka iz vašeg upravitelja datotekama kako bi je nastavili koristiti.</string>
|
||||
<string name="remember_database_locations_title">Zapamti lokaciju baze podataka</string>
|
||||
<string name="auto_focus_search_title">Brzo pretraživanje</string>
|
||||
<string name="error_create_database">Nije moguće kreirati datoteku baze podataka.</string>
|
||||
<string name="error_rounds_too_large">Prevelik broj \"transformacijskih rundi\". Postavljeno na 2147483648.</string>
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft je <strong>open source</strong> te <strong>bez reklama</strong>.
|
||||
\nDostupan kakav je, pod <strong>GPLv3</strong> licencom, bez ikakvog jamstva.</string>
|
||||
<string name="reset_education_screens_title">Resetirj edukativne poruke</string>
|
||||
<string name="reset_education_screens_summary">Ponovo prikaži sve edukativne poruke</string>
|
||||
<string name="reset_education_screens_text">Resetiranje edukativnih poruka</string>
|
||||
<string name="education_create_database_title">Stvori svoju bazu podataka</string>
|
||||
<string name="education_create_database_summary">Stvori svoju prvu datoteku za upravljanje lozinkama.</string>
|
||||
<string name="education_select_database_title">Otvori jednu postojeću bazu podataka</string>
|
||||
<string name="education_select_database_summary">Za daljnju upotrebu prijašnje datoteke baze podataka, otvori je iz upravitelja datoteka.</string>
|
||||
<string name="remember_database_locations_title">Spremi mjesto baze podataka</string>
|
||||
<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>.
|
||||
\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>
|
||||
<string name="discard_changes">Odbaci promjene\?</string>
|
||||
<string name="discard_changes">Odbaciti promjene\?</string>
|
||||
<string name="contact">Kontakt</string>
|
||||
<string name="homepage">Početna stranica</string>
|
||||
<string name="remember_keyfile_locations_title">Spremi mjesto datoteke ključa</string>
|
||||
<string name="unavailable_feature_version">Tvoja Android verzija %1$s ne odgovara minimalno potrebnoj verziji %2$s.</string>
|
||||
<string name="autofill_auto_search_summary">Automatski predloži rezultate pretrage od web domene ili ID-a aplikacije</string>
|
||||
<string name="hide_broken_locations_summary">Sakrij pokvarene poveznice u popisu nedavnih baza podataka</string>
|
||||
<string name="html_text_dev_feature">Ova se funkcija nalazi <strong>u razvoju</strong> i treba tvoj <strong>doprinos</strong> kako bi uskoro bila dostupna.</string>
|
||||
<string name="education_generate_password_title">Stvori sigurnu lozinku</string>
|
||||
<string name="education_entry_new_field_summary">Registriraj dodatno polje, dodaj vrijednost i po želji ga zaštiti.</string>
|
||||
<string name="lock_database_show_button_title">Prikaži gumb za zaključavanje</string>
|
||||
<string name="style_choose_summary">U aplikaciji korištena tema</string>
|
||||
<string name="autofill_application_id_blocklist_title">Popis blokiranja aplikacija</string>
|
||||
<string name="validate">Provjeri valjanost</string>
|
||||
<string name="education_entry_edit_title">Uredi unos</string>
|
||||
<string name="autofill_auto_search_title">Automatska pretraga</string>
|
||||
<string name="html_text_dev_feature_work_hard">Trudimo se brzo izdati ovu funkciju.</string>
|
||||
<string name="html_text_dev_feature_encourage">potičeš programere da stvore <strong>nove funkcije</strong> i <strong>isprave greške</strong> na osnovi tvojih napomena.</string>
|
||||
<string name="encryption_rijndael">Rijndael (AES)</string>
|
||||
<string name="keyboard_auto_go_action_summary">Radnja tipke „Idi” nakon pritiskanja tipke „Polje”</string>
|
||||
<string name="html_about_contribution">Kako bismo <strong>zadržali našu slobodu</strong>, <strong>ispravljali greške</strong>, <strong>dodavali funkcije</strong> i <strong>uvijek bili aktivni</strong>, računamo na tvoj <strong>doprinos</strong>.</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Popis blokiranja koja sprečavaju automatsko ispunjavanje web domena</string>
|
||||
<string name="feedback">Povratne informacije</string>
|
||||
<string name="autofill_preference_title">Postavke automatskog ispunjavanja</string>
|
||||
<string name="education_generate_password_summary">Stvori snažnu lozinku za tvoj unosu, jednostavno je definiraj prema kriterijima obrasca i ne zaboravi sigurnu lozinku.</string>
|
||||
<string name="style_choose_title">Tema aplikacije</string>
|
||||
<string name="error_can_not_handle_uri">Nije moguće baratati ovim URI-jem u KeePassDX-u.</string>
|
||||
<string name="keyboard_entry_timeout_summary">Istek vremena za brisanje unosa tipkovnicom</string>
|
||||
<string name="education_read_only_title">Zaštiti bazu podataka od pisanja</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Popis blokiranja web domena</string>
|
||||
<string name="education_biometric_title">Otključaj bazu podataka pomoću biometrije</string>
|
||||
<string name="kdf_AES">AES</string>
|
||||
<string name="contribution">Doprinos</string>
|
||||
<string name="open_biometric_prompt_store_credential">Za spremanje akreditacija, otvori biometrijsku prijavu</string>
|
||||
<string name="error_label_exists">Ova oznaka već postoji.</string>
|
||||
<string name="warning_database_read_only">Za spremanje promjena u bazi podataka, datoteci dozvoli pisanje</string>
|
||||
<string name="app_timeout">Istek vremena aplikacije</string>
|
||||
<string name="content_description_repeat_toggle_password_visibility">Ponovo uklj/isklj vidljivosti lozinke</string>
|
||||
<string name="warning_password_encoding">Izbjegni u lozinkama koristiti znakove koji su izvan formata kodiranja teksta u datoteci baze podataka (neprepoznati znakovi pretvaraju se u isto slovo).</string>
|
||||
<string name="rounds_explanation">Dodatni prolazi šifriranja pružaju veću zaštitu od brutalnih napada, ali stvarno mogu usporiti učitavanje i spremanje.</string>
|
||||
<string name="subdomain_search_summary">Traži web domene s ograničenjima poddomena</string>
|
||||
<string name="keyboard_search_share_title">Traži dijeljene informacije</string>
|
||||
<string name="html_text_dev_feature_upgrade">Ne zaboravi aktualizirati aplikaciju najnovijim verzijama.</string>
|
||||
<string name="autofill_block_restart">Za aktiviranje blokiranja, ponovo pokreni aplikaciju koja sadrži obrazac.</string>
|
||||
<string name="education_sort_summary">Odaberi način razvrstavanja unosa i grupa.</string>
|
||||
<string name="warning_database_link_revoked">Pristup datoteci koju je opozvao upravitelj datoteka</string>
|
||||
<string name="download_attachment">Preuzmi %1$s</string>
|
||||
<string name="keyboard_entry_timeout_title">Istek vremena</string>
|
||||
<string name="auto_focus_search_summary">Pokreni pretragu prilikom otvaranja baze podataka</string>
|
||||
<string name="education_entry_edit_summary">Uredi svoj unos pomoću prilagođenih polja. Moguće je unakrsno pozivanje podataka između različitih polja unosa.</string>
|
||||
<string name="remember_database_locations_summary">Zapamti mjesto baza podataka</string>
|
||||
<string name="education_field_copy_summary">Kopirana polja mogu se umetnuti bilo gdje.
|
||||
\n
|
||||
\nKoristi preferirani način ispunjavanja obrazaca.</string>
|
||||
<string name="filter">Filtar</string>
|
||||
<string name="encryption_chacha20">ChaCha20</string>
|
||||
<string name="show_recent_files_title">Prikaži nedavne datoteke</string>
|
||||
<string name="html_text_dev_feature_contibute"><strong>Doprinosom</strong>,</string>
|
||||
<string name="education_entry_new_field_title">Dodaj prilagođena polja</string>
|
||||
<string name="education_lock_summary">Zaključaj bazu podataka brzo, aplikaciju možeš postaviti tako da bazu nakon nekog vremena zaključa i kad se ekran isključi.</string>
|
||||
<string name="kdf_Argon2">Argon2</string>
|
||||
<string name="encryption_twofish">Twofish</string>
|
||||
<string name="show_recent_files_summary">Prikaži mjesto nedavnih baza podataka</string>
|
||||
<string name="education_biometric_summary">Za brzo otključavanje baze podataka, poveži lozinku sa skeniranom biometrijom.</string>
|
||||
<string name="html_text_donation">Kako bismo zadržali našu slobodu i uvijek bili aktivni, računamo na tvoj<strong>doprinos.</strong></string>
|
||||
<string name="kdf_explanation">Za stvaranje ključa za algoritam šifriranja, glavni ključ se transformira pomoću funkcije za generiranje ključeva koja sadrži slučajnu komponentu.</string>
|
||||
<string name="lock_database_back_root_summary">Zaključaj bazu podataka kad korisnik pritisne gumb za natrag na ekranu</string>
|
||||
<string name="hide_broken_locations_title">Sakrij pokvarene poveznice baze podataka</string>
|
||||
<string name="autofill_block">Blokiranje automatskog ispunjavanja</string>
|
||||
<string name="keystore_not_accessible">Baza ključeva nije ispravno inicijalizirana.</string>
|
||||
<string name="icon_pack_choose_summary">Paket ikona, koji se koristi u aplikaciji</string>
|
||||
<string name="hide_expired_entries_summary">Istekli unosi su skrivaju</string>
|
||||
<string name="education_lock_title">Zaključaj bazu podataka</string>
|
||||
<string name="open_biometric_prompt_unlock_database">Za otključavanje baze podataka, otvori biometrijsku prijavu</string>
|
||||
<string name="education_unlock_title">Otključaj bazu podataka</string>
|
||||
<string name="biometric_auto_open_prompt_summary">Automatski traži biometriju, ako je baza podataka tako postavljena</string>
|
||||
<string name="unavailable_feature_text">Nije moguće pokrenuti ovu funkciju.</string>
|
||||
<string name="biometric_auto_open_prompt_title">Automatski otvori biometrijsku prijavu</string>
|
||||
<string name="clipboard_timeout">Istek vremena međuspremnika</string>
|
||||
<string name="education_search_title">Pretraži unose</string>
|
||||
<string name="education_field_copy_title">Kopiraj jedno polje</string>
|
||||
<string name="icon_pack_choose_title">Paket ikona</string>
|
||||
<string name="contribute">Doprinesi</string>
|
||||
<string name="html_text_dev_feature_thanks">Zahvaljujemo na doprinosu.</string>
|
||||
<string name="education_setup_OTP_title">Postavi OTP</string>
|
||||
<string name="content_description_add_item">Dodaj element</string>
|
||||
<string name="html_text_dev_feature_buy_pro">Kupnjom <strong>pro</strong> verzije,</string>
|
||||
<string name="keyboard_selection_entry_summary">Prikaži polja unosa u Magikeyboardu prilikom prikaza unosa</string>
|
||||
<string name="education_new_node_title">Dodaj elemente u bazu podataka</string>
|
||||
<string name="keyboard_search_share_summary">Automatski traži dijeljene informacije radi punjenja tipkovnice</string>
|
||||
<string name="education_donation_summary">Pomogni povećati stabilnost i sigurnost dodavanjem dodatnih funkcija.</string>
|
||||
<string name="error_string_type">Ovaj se tekst ne poklapa sa zatraženim elementom.</string>
|
||||
<string name="html_text_buy_pro">Kupnjom pro verzije imat ćaš pristup ovom <strong>vizualnom stilu</strong> i k tome ćeš pomoći <strong>u realizaciji projekata zajednice.</strong></string>
|
||||
<string name="keyboard_auto_go_action_title">Automatska radnja tipke</string>
|
||||
<string name="education_sort_title">Razvrstavanje elemenata</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Popis blokiranja koja sprečavaju automatsko ispunjavanje aplikacija</string>
|
||||
<string name="education_read_only_summary">Promijeni način otvaranja sesije.
|
||||
\n
|
||||
\n„Zaštićeno od pisanja” sprečava nenamjerne promjene u bazi podataka.
|
||||
\n„Promjenjivo” omogućuje dodavanje, brisanje ili mijenjanje svih elemenata.</string>
|
||||
<string name="education_search_summary">Upiši naslov, korisničko ime ili sadržaj drugih polja za pronalaženje lozinki.</string>
|
||||
<string name="html_text_feature_generosity">Ovaj <strong>visualni stil</strong> dostupan je zahvaljujući tvojoj darežljivosti.</string>
|
||||
<string name="education_unlock_summary">Upiši lozinku i/ili datoteku ključa za otključavanje baze podataka.
|
||||
\n
|
||||
\nSpremi sigurnosnu kopiju datoteke baze podataka na sigurno mjesto nakon svake promjene.</string>
|
||||
<string name="configure_biometric">Biometrijska prijava je podržana, ali nije postavljena.</string>
|
||||
<string name="subdomain_search_title">Pretraživanje poddomenom</string>
|
||||
<string name="education_setup_OTP_summary">Postavi upravljanje jednokratnih lozinki (HOTP / TOTP) za generiranje tokena koji je potreban za dvofaktorsku autentifikaciju (2FA).</string>
|
||||
<string name="hide_expired_entries_title">Sakrij istekle unose</string>
|
||||
<string name="download_finalization">Završavanje …</string>
|
||||
<string name="download">Preuzimanje</string>
|
||||
<string name="lock_database_show_button_summary">Prikazuje gumb za zaključavanje u korisničkom sučelju</string>
|
||||
<string name="remember_keyfile_locations_summary">Zapamti mjesto datoteka ključeva baze podataka</string>
|
||||
<string name="html_text_ad_free">Za razliku od mnogih aplikacija za upravljanje lozinkama, ova je <strong>bez oglasa</strong>, <strong>copylefted slobodan softver</strong> i ne prikuplja osobne podatke na svojim poslužiteljima, bez obzira na korištenu verziju.</string>
|
||||
<string name="rounds">Transformacijski prolazi</string>
|
||||
<string name="download_initialization">Inicijaliziranje …</string>
|
||||
<string name="biometric_scanning_error">Biometrijska greška: %1$s</string>
|
||||
<string name="education_donation_title">Sudjeluj</string>
|
||||
<string name="education_new_node_summary">Unosi pomažu u upravljanju digitalnim identitetom.
|
||||
\n
|
||||
\nGrupe (~mape) organiziraju unose u bazi podataka.</string>
|
||||
<string name="download_progression">U tijeku: %1$d%%</string>
|
||||
<string name="download_complete">Gotovo! Dodirni, za otvaranje datoteke.</string>
|
||||
</resources>
|
||||
@@ -312,7 +312,6 @@
|
||||
<string name="education_sort_title">Elemek rendezése</string>
|
||||
<string name="education_sort_summary">Válasszon, hogy az elemek és csoportok hogyan legyenek rendezve.</string>
|
||||
<string name="education_donation_title">Közreműködés</string>
|
||||
<string name="clipboard_swipe_clean">Seprés a vágólap azonnali törléséhez</string>
|
||||
<string name="education_entry_edit_summary">Szerkessze a bejegyzése egyéni mezőit. Az adatok hivatkozhatóak a különböző mezők között.</string>
|
||||
<string name="education_donation_summary">Segítsen a stabilitás és a biztonság növelésében, és az új funkciók hozzáadásában.</string>
|
||||
<string name="html_text_ad_free">Számos más jelszókezelő alkalmazással ellentétben, ez egy <strong>reklámmentes</strong>, <strong>copyleft licencelésű szabad szoftver</strong>, amely nem gyűjt személyes adatokat a kiszolgálókon, bármelyik verziót is használja.</string>
|
||||
|
||||
@@ -168,7 +168,6 @@
|
||||
<string name="encryption">Cifratura</string>
|
||||
<string name="key_derivation_function">Funzione di derivazione chiave</string>
|
||||
<string name="extended_ASCII">ASCII esteso</string>
|
||||
<string name="clipboard_swipe_clean">Scorri per pulire gli appunti ora</string>
|
||||
<string name="error_nokeyfile">Seleziona un file chiave.</string>
|
||||
<string name="error_autofill_enable_service">Attivazione del servizio di auto-completamento fallita.</string>
|
||||
<string name="error_move_folder_in_itself">Non puoi spostare un gruppo in se stesso.</string>
|
||||
@@ -253,9 +252,9 @@
|
||||
<string name="enable_read_only_summary">Apri il database in sola lettura in modo predefinito</string>
|
||||
<string name="enable_education_screens_title">Suggerimenti educativi</string>
|
||||
<string name="enable_education_screens_summary">Evidenzia gli elementi per imparare come funziona l\'app</string>
|
||||
<string name="reset_education_screens_title">Ripristina le schermate educative</string>
|
||||
<string name="reset_education_screens_summary">Mostra di nuovo tutti gli elementi educativi</string>
|
||||
<string name="reset_education_screens_text">Schermate educative ripristinate</string>
|
||||
<string name="reset_education_screens_title">Ripristina i suggerimenti educativi</string>
|
||||
<string name="reset_education_screens_summary">Mostra di nuovo tutte le informazioni educative</string>
|
||||
<string name="reset_education_screens_text">Suggerimenti educativi ripristinati</string>
|
||||
<string name="education_create_database_title">Crea il tuo file di database</string>
|
||||
<string name="education_create_database_summary">Crea il tuo primo file di gestione password.</string>
|
||||
<string name="education_select_database_title">Apri un database esistente</string>
|
||||
@@ -270,10 +269,10 @@
|
||||
<string name="education_biometric_summary">Collega la password alla tua impronta digitale per sbloccare velocemente il database.</string>
|
||||
<string name="education_entry_edit_title">Modifica l\'elemento</string>
|
||||
<string name="education_entry_edit_summary">Modifica l\'elemento con campi personalizzati. I dati possono fare riferimento ad altri campi.</string>
|
||||
<string name="education_generate_password_title">Crea una password robusta per l\'elemento.</string>
|
||||
<string name="education_generate_password_title">Crea una password robusta</string>
|
||||
<string name="education_generate_password_summary">Genera una password robusta da associare all\'elemento, definiscila a seconda dei criteri del modulo e non dimenticare di tenerla al sicuro.</string>
|
||||
<string name="education_entry_new_field_title">Aggiungi campi personalizzati</string>
|
||||
<string name="education_entry_new_field_summary">Registra un campo base non fornito, inserendone uno nuovo che puoi anche proteggere.</string>
|
||||
<string name="education_entry_new_field_summary">Registra un campo aggiuntivo, inserisci delle informazioni e proteggilo se necessario.</string>
|
||||
<string name="education_unlock_title">Sblocca il tuo database</string>
|
||||
<string name="education_read_only_title">Proteggi da scrittura il tuo database</string>
|
||||
<string name="education_read_only_summary">Cambia la modalità di apertura per la sessione.
|
||||
@@ -291,9 +290,8 @@
|
||||
<string name="education_donation_title">Partecipa</string>
|
||||
<string name="education_donation_summary">Aiuta a migliorare la stabilità, la sicurezza e ad aggiungere nuove funzioni.</string>
|
||||
<string name="html_text_ad_free">Diversamente da molte app di gestione password, questa è <strong>senza pubblicità</strong>, <strong>software libero (copyleft)</strong> e non raccoglie dati personali nei suoi server, non importa quale versione usi.</string>
|
||||
<string name="html_text_buy_pro">Acquistando la versione pro, avrai accesso a questa <strong>funzione visiva</strong> e soprattutto aiuterai nella <strong>realizzazione di progetti della comunità.</strong>
|
||||
</string>
|
||||
<string name="html_text_feature_generosity">Questa <strong>funzione visiva</strong> è disponibile grazie alla tua generosità.</string>
|
||||
<string name="html_text_buy_pro">Acquistando la versione pro, avrai accesso a questo <strong>tema</strong> e soprattutto aiuterai nella <strong>realizzazione di progetti della comunità.</strong></string>
|
||||
<string name="html_text_feature_generosity">Questo<strong>tema</strong> è disponibile grazie alla tua generosità.</string>
|
||||
<string name="html_text_donation">Per mantenere la nostra libertà ed essere sempre attivi, contiamo sul tuo <strong>contributo.</strong>
|
||||
</string>
|
||||
<string name="html_text_dev_feature">Questa funzione è <strong>in sviluppo</strong> e richiede il tuo <strong>contributo</strong> per essere disponibile a breve.</string>
|
||||
@@ -309,7 +307,7 @@
|
||||
<string name="encryption_rijndael">Rijndael (AES)</string>
|
||||
<string name="encryption_twofish">Twofish</string>
|
||||
<string name="encryption_chacha20">ChaCha20</string>
|
||||
<string name="kdf_AES">AES KDF</string>
|
||||
<string name="kdf_AES">AES</string>
|
||||
<string name="kdf_Argon2">Argon2</string>
|
||||
<string name="style_choose_title">Tema dell\'app</string>
|
||||
<string name="style_choose_summary">Tema usato nell\'app</string>
|
||||
@@ -345,12 +343,12 @@
|
||||
<string name="lock_database_back_root_title">Premere \'\'Indietro\'\' per bloccare</string>
|
||||
<string name="lock_database_back_root_summary">Bloccare il database quando l\'utente preme il pulsante Indietro nella schermata principale</string>
|
||||
<string name="clear_clipboard_notification_title">Pulisci alla chiusura</string>
|
||||
<string name="clear_clipboard_notification_summary">Chiudere il database alla chiusura della notifica</string>
|
||||
<string name="clear_clipboard_notification_summary">Blocca il database alla chiusura della notifica</string>
|
||||
<string name="recycle_bin">Cestino</string>
|
||||
<string name="keyboard_selection_entry_title">Selezione elemento</string>
|
||||
<string name="keyboard_selection_entry_summary">Mostra i campi di input nella Magitastiera durante la visualizzazione di un elemento</string>
|
||||
<string name="delete_entered_password_title">Elimina password</string>
|
||||
<string name="delete_entered_password_summary">Elimina la password immessa dopo un tentativo di connessione</string>
|
||||
<string name="delete_entered_password_summary">Elimina la password immessa dopo un tentativo di connessione al database</string>
|
||||
<string name="content_description_open_file">Apri il file</string>
|
||||
<string name="content_description_node_children">Figli del nodo</string>
|
||||
<string name="content_description_add_node">Aggiungi un nodo</string>
|
||||
@@ -437,7 +435,7 @@
|
||||
<string name="recycle_bin_group_title">Gruppo cestino</string>
|
||||
<string name="database_data_compression_summary">La compressione dei dati riduce le dimensioni del database.</string>
|
||||
<string name="database_data_compression_title">Compressione dati</string>
|
||||
<string name="biometric_auto_open_prompt_summary">Apri automaticamente il prompt biometrico quando viene definita una chiave biometrica per un database</string>
|
||||
<string name="biometric_auto_open_prompt_summary">Proponi l\'autenticazione biometrica quando il database è configurato per usarla</string>
|
||||
<string name="advanced_unlock_explanation_summary">Utilizza lo sblocco avanzato per aprire il database più facilmente</string>
|
||||
<string name="clipboard_explanation_summary">Copia i campi di immissione utilizzando gli appunti del tuo dispositivo</string>
|
||||
<string name="database_opened">Database aperto</string>
|
||||
@@ -479,4 +477,17 @@
|
||||
<string name="warning_database_link_revoked">Accesso al file revocato dal file manager</string>
|
||||
<string name="remember_keyfile_locations_summary">Ricorda la posizione dei keyfiles dei database</string>
|
||||
<string name="error_label_exists">Questa etichetta esiste già.</string>
|
||||
</resources>
|
||||
<string name="autofill_block_restart">Riavvia l\'app contenente il campo per attivare il blocco.</string>
|
||||
<string name="autofill_block">Blocca riempimento automatico</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">La lista di blocco impedisce l\'auto riempimento nei domini web</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Lista di blocco per domini web</string>
|
||||
<string name="autofill_application_id_blocklist_title">Lista di blocco per app</string>
|
||||
<string name="autofill_application_id_blocklist_summary">La lista di blocco impedisce l\'auto riempimento nelle app</string>
|
||||
<string name="keyboard_search_share_summary">Cerca automaticamente le informazioni condivise per compilare la tastiera</string>
|
||||
<string name="keyboard_search_share_title">Cerca informazioni condivise</string>
|
||||
<string name="filter">Filtro</string>
|
||||
<string name="error_string_type">Questo testo non soddisfa l\'elemento richiesto.</string>
|
||||
<string name="subdomain_search_summary">Cerca nei domini web includendo i sotto-domini</string>
|
||||
<string name="subdomain_search_title">Ricerca per sotto-dominio</string>
|
||||
<string name="content_description_add_item">Aggiungi elemento</string>
|
||||
</resources>
|
||||
@@ -149,7 +149,6 @@
|
||||
<string name="edit_entry">ערוך רשומה</string>
|
||||
<string name="encryption">הצפנה</string>
|
||||
<string name="allow">אפשר</string>
|
||||
<string name="clipboard_swipe_clean">החלק לניקוי לוח העתקה עכשיו</string>
|
||||
<string name="entry_url">כתובת URL</string>
|
||||
<string name="error_load_database">לא ניתן לטעון את בסיס הנתונים</string>
|
||||
</resources>
|
||||
@@ -147,7 +147,6 @@
|
||||
<string name="clipboard_error_title">クリップボードエラー</string>
|
||||
<string name="clipboard_error">一部の端末ではアプリからクリップボードを使用できません。</string>
|
||||
<string name="clipboard_error_clear">クリップボードをクリアできません</string>
|
||||
<string name="clipboard_swipe_clean">スワイプすると今すぐクリップボードをクリアします</string>
|
||||
<string name="entry_not_found">エントリデータが見つかりませんでした。</string>
|
||||
<string name="error_load_database">データベースを読み込みできませんでした。</string>
|
||||
<string name="error_load_database_KDF_memory">鍵を読み込みできませんでした。KDF の \"メモリ使用量\" を下げてみてください。</string>
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
<string name="clipboard_error_clear">클립보드를 비울 수 없음</string>
|
||||
<string name="clipboard_timeout">클립보드 시간 초과</string>
|
||||
<string name="clipboard_timeout_summary">클립보드 저장이 유지될 시간</string>
|
||||
<string name="clipboard_swipe_clean">클립보드를 지우기 위해 스와이프</string>
|
||||
<string name="select_to_copy">%1$s 을(를) 클립보드에 복사하려면 선택하십시오.</string>
|
||||
<string name="retrieving_db_key">데이터베이스 키를 검색하는 중…</string>
|
||||
<string name="database">데이터베이스</string>
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
<string name="clipboard_error_clear">Kunne ikke tømme utklippstavle</string>
|
||||
<string name="clipboard_timeout">Tidsavbrudd for utklippstavle</string>
|
||||
<string name="clipboard_timeout_summary">Tid før utklippstavlen tømmes etter kopiering av brukernavn og passord</string>
|
||||
<string name="clipboard_swipe_clean">Dra for å tømme utklippstavlen nå</string>
|
||||
<string name="select_to_copy">Velg for å kopier %1$s til utklippstavlen</string>
|
||||
<string name="retrieving_db_key">Oppretter databasenøkkel…</string>
|
||||
<string name="database">Database</string>
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
<string name="clipboard_error_title">Klembordfout</string>
|
||||
<string name="clipboard_error">Sommige apparaten staan niet toe dat apps het klembord gebruiken.</string>
|
||||
<string name="clipboard_error_clear">Wissen van klembord mislukt</string>
|
||||
<string name="clipboard_swipe_clean">Veeg om klembord nu te wissen</string>
|
||||
<string name="entry_not_found">Geen iteminhoud gevonden.</string>
|
||||
<string name="error_load_database">Je database kan niet worden geladen.</string>
|
||||
<string name="error_load_database_KDF_memory">De sleutel kan niet worden geladen. Probeer om het \"geheugengebruik\" van KDF te verminderen.</string>
|
||||
@@ -476,4 +475,17 @@
|
||||
<string name="contact">Contact</string>
|
||||
<string name="keyboard_search_share_summary">Zoek automatisch naar gedeelde informatie om het toetsenbord te vullen</string>
|
||||
<string name="keyboard_search_share_title">Gedeelde informatie zoeken</string>
|
||||
<string name="autofill_block_restart">Start de app met het formulier opnieuw op om de blokkering te activeren.</string>
|
||||
<string name="autofill_block">Blokkering van automatisch invullen</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Lijst die het automatisch invullen bij webdomeinen voorkomt</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Webdomein blokkeringslijst</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Lijst die het automatisch invullen bij apps voorkomt</string>
|
||||
<string name="autofill_application_id_blocklist_title">Applicatieblokkering</string>
|
||||
<string name="filter">Filteren</string>
|
||||
<string name="subdomain_search_summary">Zoeken op webdomein met beperkingen voor subdomein</string>
|
||||
<string name="subdomain_search_title">Zoeken op subdomein</string>
|
||||
<string name="error_string_type">Deze tekst komt niet overeen met het gevraagde item.</string>
|
||||
<string name="content_description_add_item">Item toevoegen</string>
|
||||
<string name="keyboard_auto_go_action_summary">\"Gaan\"-toetsactie na het indrukken van een \"Veld\"-toets</string>
|
||||
<string name="keyboard_auto_go_action_title">Auto-type actie</string>
|
||||
</resources>
|
||||
250
app/src/main/res/values-pa/strings.xml
Normal file
250
app/src/main/res/values-pa/strings.xml
Normal file
@@ -0,0 +1,250 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="hide_expired_entries_summary">ਮਿਆਦ ਪੁੱਗੀਆਂ ਐਂਟਰੀਆਂ ਨੂੰ ਲੁਕਾ ਕੇ ਰੱਖੋ</string>
|
||||
<string name="hide_expired_entries_title">ਮਿਆਦ ਪੁੱਗੀਆਂ ਐਂਟਰੀਆਂ ਲੁਕਾਓ</string>
|
||||
<string name="icon_pack_choose_summary">ਐਪ ਵਿੱਚ ਵਰਤਿਆ ਆਈਕਾਨ ਪੈਕ</string>
|
||||
<string name="icon_pack_choose_title">ਆਈਕਾਨ ਪੈਕ</string>
|
||||
<string name="style_choose_summary">ਐਪ ਵਿੱਚ ਵਰਤਿਆ ਥੀਮ</string>
|
||||
<string name="style_choose_title">ਐਪ ਦਾ ਥੀਮ</string>
|
||||
<string name="download_complete">ਪੂਰਾ ਹੋਇਆ! ਫ਼ਾਇਲ ਖੋਲ੍ਹਣ ਲਈ ਛੂਹੋ।</string>
|
||||
<string name="download_finalization">…ਪੂਰਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="download_progression">ਜਾਰੀ ਹੈ: %1$d%%</string>
|
||||
<string name="download_initialization">…ਸ਼ੁਰੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="download_attachment">%1$s ਡਾਊਨਲੋਡ ਕਰੋ</string>
|
||||
<string name="contribute">ਯੋਗਦਾਨ</string>
|
||||
<string name="download">ਡਾਊਨਲੋਡ ਕਰੋ</string>
|
||||
<string name="education_setup_OTP_title">OTP ਸੈਟਅੱਪ ਕਰੋ</string>
|
||||
<string name="education_create_database_title">ਆਪਣੀ ਡਾਟਾਬੇਸ ਫ਼ਾਇਲ ਬਣਾਓ</string>
|
||||
<string name="delete_entered_password_title">ਪਾਸਵਰਡ ਹਟਾਓ</string>
|
||||
<string name="keyboard_appearance_category">ਦਿੱਖ</string>
|
||||
<string name="keyboard_notification_entry_title">ਨੋਟੀਫਿਕੇਸ਼ਨ ਜਾਣਕਾਰੀ</string>
|
||||
<string name="compression_none">ਕੋਈ ਨਹੀਂ</string>
|
||||
<string name="clear_clipboard_notification_title">ਬੰਦ ਕਰਨ ਉੱਤੇ ਸਾਫ਼ ਕਰੋ</string>
|
||||
<string name="disable">ਅਸਮਰੱਥ</string>
|
||||
<string name="enable">ਸਮਰੱਥ</string>
|
||||
<string name="full_file_path_enable_title">ਫ਼ਾਇਲ ਦਾ ਮਾਰਗ</string>
|
||||
<string name="assign_master_key">ਮਾਸਟਰ ਕੁੰਜੀ ਦਿਓ</string>
|
||||
<string name="path">ਮਾਰਗ</string>
|
||||
<string name="file_name">ਫ਼ਾਇਲ ਦਾ ਨਾਂ</string>
|
||||
<string name="lock_database_screen_off_title">ਸਕਰੀਨ ਲਾਕ</string>
|
||||
<string name="lock">ਲਾਕ</string>
|
||||
<string name="clipboard">ਕਲਿੱਪਬੋਰਡ</string>
|
||||
<string name="database_opened">ਡਾਟਾਬੇਸ ਖੁੱਲ੍ਹਾ ਹੈ</string>
|
||||
<string name="autofill_sign_in_prompt">KeePassDX ਨਾਲ ਸਾਇਨ ਇਨ ਕਰੋ</string>
|
||||
<string name="autofill">ਆਪੇ-ਭਰਨ</string>
|
||||
<string name="general">ਸਧਾਰਨ</string>
|
||||
<string name="biometric">ਬਾਇਓਮੈਟਰਿਕ</string>
|
||||
<string name="menu_appearance_settings">ਦਿੱਖ</string>
|
||||
<string name="database_history">ਅਤੀਤ</string>
|
||||
<string name="warning">ਚੇਤਾਵਨੀ</string>
|
||||
<string name="uppercase">ਵੱਡੇ ਅੱਖਰ (ਅੰਗਰੇਜ਼ੀ)</string>
|
||||
<string name="unsupported_db_version">ਗ਼ੈਰ-ਸਹਾਇਕ ਡਾਟਾਬੇਸ ਵਰਜ਼ਨ ਹੈ।</string>
|
||||
<string name="underline">ਹੇਠਾਂ ਲਾਈਨ</string>
|
||||
<string name="search_results">ਖੋਜ ਨਤੀਜੇ</string>
|
||||
<string name="search">ਖੋਜ</string>
|
||||
<string name="special">ਖਾਸ</string>
|
||||
<string name="sort_last_access_time">ਪਹੁੰਚ</string>
|
||||
<string name="sort_last_modify_time">ਸੋਧ</string>
|
||||
<string name="sort_creation_time">ਨਿਰਮਾਣ</string>
|
||||
<string name="sort_username">ਵਰਤੋਂਕਾਰ-ਨਾਂ</string>
|
||||
<string name="sort_groups_before">ਗਰੁੱਪ ਪਹਿਲਾਂ</string>
|
||||
<string name="sort_ascending">ਸਭ ਤੋਂ ਘੱਟ ਪਹਿਲਾਂ ↓</string>
|
||||
<string name="sort_menu">ਲੜੀਬੱਧ</string>
|
||||
<string name="filter">ਫਿਲਟਰ</string>
|
||||
<string name="search_label">ਖੋਜੋ</string>
|
||||
<string name="space">ਥਾਂ</string>
|
||||
<string name="saving_database">…ਡਾਟਾਬੇਸ ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="memory_usage">ਮੈਮੋਰੀ ਵਰਤੋਂ</string>
|
||||
<string name="root">ਰੂਟ</string>
|
||||
<string name="hide_broken_locations_summary">ਤਾਜ਼ਾ ਡਾਟਾਬੇਸਾਂ ਦੀ ਸੂਚੀ ਵਿੱਚ ਖ਼ਰਾਬ ਹੋਏ ਲਿੰਕ ਲੁਕਾਓ</string>
|
||||
<string name="hide_broken_locations_title">ਖ਼ਰਾਬ ਹੋਏ ਡਾਟਾਬੇਸ ਲਿੰਕ ਲੁਕਾਓ</string>
|
||||
<string name="show_recent_files_summary">ਤਾਜ਼ਾ ਡਾਟਾਬੇਸਾਂ ਦੇ ਟਿਕਾਣੇ ਵਿਖਾਓ</string>
|
||||
<string name="show_recent_files_title">ਤਾਜ਼ਾ ਫ਼ਾਇਲਾਂ ਵਿਖਾਓ</string>
|
||||
<string name="remember_database_locations_title">ਡਾਟਾਬੇਸਾਂ ਦਾ ਟਿਕਾਣਾ ਸੰਭਾਲੋ</string>
|
||||
<string name="remember_keyfile_locations_title">ਕੁੰਜੀ-ਫ਼ਾਇਲਾਂ ਦਾ ਟਿਕਾਣਾ ਸੰਭਾਲੋ</string>
|
||||
<string name="remember_database_locations_summary">ਡਾਟਾਬੇਸ ਦੇ ਟਿਕਾਣੇ ਨੂੰ ਯਾਦ ਰੱਖੋ</string>
|
||||
<string name="selection_mode">ਚੋਣ ਦਾ ਢੰਗ</string>
|
||||
<string name="contains_duplicate_uuid">ਡਾਟਾਬੇਸ ਵਿੱਚ ਡੁਪਲੀਕੇਟ UUID ਹਨ।</string>
|
||||
<string name="read_only_warning">ਤੁਹਾਡੇ ਫ਼ਾਇਲ ਮੈਨੇਜਰ ਦੇ ਮੁਤਾਬਕ KeePassDX ਨੂੰ ਤੁਹਾਡੇ ਸਟੋਰੇਜ਼ ਵਿੱਚ ਲਿਖਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੋ ਸਕਦੀ ਹੈ।</string>
|
||||
<string name="read_only">ਲਿਖਣ-ਤੋਂ-ਬਚਾਅ</string>
|
||||
<string name="protection">ਸੁਰੱਖਿਆ</string>
|
||||
<string name="progress_title">…ਕੰਮ ਜਾਰੀ ਹੈ</string>
|
||||
<string name="progress_create">…ਨਵਾਂ ਡਾਟਾਬੇਸ ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="subdomain_search_title">ਅਧੀਨ-ਡੋਮੇਨ ਖੋਜ</string>
|
||||
<string name="auto_focus_search_summary">ਜਦੋਂ ਡਾਟਾਬੇਸ ਖੋਲ੍ਹਣਾ ਹੋਵੇ ਤਾਂ ਖੋਜ ਦੀ ਮੰਗ ਕਰੋ</string>
|
||||
<string name="auto_focus_search_title">ਫ਼ੌਰੀ ਖੋਜ</string>
|
||||
<string name="omit_backup_search_title">ਬੈਕਐਪ ਐਂਟਰੀਆਂ ਰਾਹੀਂ ਨਾ ਖੋਜੋ</string>
|
||||
<string name="create_keepass_file">ਨਵਾਂ ਡਾਟਾਬੇਸ ਬਣਾਓ</string>
|
||||
<string name="select_database_file">ਮੌਜੂਦਾ ਡਾਟਾਬੇਸ ਨੂੰ ਖੋਲ੍ਹੋ</string>
|
||||
<string name="no_url_handler">ਇਹ URL ਖੋਲ੍ਹਣ ਲਈ ਵੈੱਬ ਬਰਾਊਜ਼ਰ ਇੰਸਟਾਲ ਕਰੋ।</string>
|
||||
<string name="no_results">ਕੋਈ ਖੋਜ ਨਤੀਜੇ ਨਹੀਂ</string>
|
||||
<string name="never">ਕਦੇ ਵੀ ਨਹੀਂ</string>
|
||||
<string name="minus">ਘਟਾਓ</string>
|
||||
<string name="menu_delete_entry_history">ਅਤੀਤ ਨੂੰ ਹਟਾਓ</string>
|
||||
<string name="menu_restore_entry_history">ਅਤੀਤ ਨੂੰ ਬਹਾਲ ਕਰੋ</string>
|
||||
<string name="menu_empty_recycle_bin">ਰੱਦੀ ਨੂੰ ਖਾਲੀ ਕਰੋ</string>
|
||||
<string name="menu_open_file_read_and_write">ਸੋਧ-ਯੋਗ</string>
|
||||
<string name="menu_file_selection_read_only">ਲਿਖਣ-ਤੋਂ-ਬਚਾਅ</string>
|
||||
<string name="menu_url">URL ਉੱਤੇ ਜਾਓ</string>
|
||||
<string name="menu_biometric_remove_key">ਸੰਭਾਲੀ ਬਾਇਓਮੈਟਰਿਕ ਕੁੰਜੀ ਹਟਾਓ</string>
|
||||
<string name="menu_showpass">ਪਾਸਵਰਡ ਵਿਖਾਓ</string>
|
||||
<string name="menu_search">ਖੋਜੋ</string>
|
||||
<string name="menu_open">ਖੋਲ੍ਹੋ</string>
|
||||
<string name="menu_save_database">ਡਾਟਾਬੇਸ ਸੰਭਾਲੋ</string>
|
||||
<string name="menu_lock">ਡਾਟਾਬੇਸ ਲਾਕ ਕਰੋ</string>
|
||||
<string name="menu_hide_password">ਪਾਸਵਰਡ ਲੁਕਾਓ</string>
|
||||
<string name="menu_cancel">ਰੱਦ ਕਰੋ</string>
|
||||
<string name="menu_delete">ਹਟਾਓ</string>
|
||||
<string name="menu_paste">ਚੇਪੋ</string>
|
||||
<string name="menu_move">ਭੇਜੋ</string>
|
||||
<string name="menu_copy">ਕਾਪੀ ਕਰੋ</string>
|
||||
<string name="menu_edit">ਸੋਧੋ</string>
|
||||
<string name="menu_donate">ਦਾਨ ਦਿਓ</string>
|
||||
<string name="menu_master_key_settings">ਮਾਸਟਰ ਕੁੰਜੀ ਸੈਟਿੰਗਾਂ</string>
|
||||
<string name="menu_security_settings">ਸੁਰੱਖਿਆ ਸੈਟਿੰਗਾਂ</string>
|
||||
<string name="menu_database_settings">ਡਾਟਾਬੇਸ ਸੈਟਿੰਗਾਂ</string>
|
||||
<string name="menu_advanced_unlock_settings">ਤਕਨੀਕੀ ਅਣ-ਲਾਕ</string>
|
||||
<string name="menu_form_filling_settings">ਫਾਰਮ ਭਰਨਾ</string>
|
||||
<string name="menu_app_settings">ਐਪ ਸੈਟਿੰਗਾਂ</string>
|
||||
<string name="settings">ਸੈਟਿੰਗਾਂ</string>
|
||||
<string name="copy_field">%1$s ਦੀ ਕਾਪੀ</string>
|
||||
<string name="menu_change_key_settings">ਮਾਸਟਰ ਕੁੰਜੀ ਬਦਲੋ</string>
|
||||
<string name="about">ਇਸ ਬਾਰੇ</string>
|
||||
<string name="hide_password_summary">ਪਾਸਵਰਡਾਂ ਨੂੰ ਮੂਲ ਰੂਪ ਵਿੱਚ ਲੁਕਾਓ (***)</string>
|
||||
<string name="hide_password_title">ਪਾਸਵਰਡ ਲੁਕਾਓ</string>
|
||||
<string name="lowercase">ਛੋਟੇ ਅੱਖਰ (ਅੰਗਰੇਜ਼ੀ)</string>
|
||||
<string name="loading_database">…ਡਾਟਾਬੇਸ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="creating_database">…ਡਾਟਾਬੇਸ ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ</string>
|
||||
<string name="list_size_summary">ਭਾਗ ਸੂਚੀ ਵਿੱਚ ਲਿਖਤ ਦਾ ਆਕਾਰ</string>
|
||||
<string name="list_size_title">ਸੂਚੀ ਚੀਜ਼ਾਂ ਦਾ ਆਕਾਰ</string>
|
||||
<string name="list_groups_show_number_entries_summary">ਗਰੁੱਪ ਵਿੱਚ ਐਂਟਰੀਆਂ ਦੀ ਗਿਣਤੀ ਵਿਖਾਓ</string>
|
||||
<string name="list_groups_show_number_entries_title">ਐਂਟਰੀਆਂ ਦੀ ਗਿਣਤੀ ਵਿਖਾਓ</string>
|
||||
<string name="list_entries_show_username_summary">ਐਂਟਰੀ ਸੂਚੀਆਂ ਵਿੱਚ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਵਿਖਾਓ</string>
|
||||
<string name="list_entries_show_username_title">ਵਰਤੋਂਕਾਰ-ਨਾਂ ਵਿਖਾਓ</string>
|
||||
<string name="length">ਲੰਬਾਈ</string>
|
||||
<string name="invalid_algorithm">ਗ਼ਲਤ ਐਲਗੋਰਿਥ ਹੈ।</string>
|
||||
<string name="invalid_credentials">ਸਨਦ ਪੜ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ।</string>
|
||||
<string name="password">ਪਾਸਵਰਡ</string>
|
||||
<string name="hint_pass">ਪਾਸਵਰਡ</string>
|
||||
<string name="hint_length">ਲੰਬਾਈ</string>
|
||||
<string name="hint_keyfile">ਕੁੰਜੀ-ਫ਼ਾਇਲ</string>
|
||||
<string name="hint_group_name">ਗਰੁੱਪ ਦਾ ਨਾਂ</string>
|
||||
<string name="hint_generated_password">ਪਾਸਵਰਡ ਬਣਾਇਆ</string>
|
||||
<string name="hint_conf_pass">ਪਾਸਵਰਡ ਤਸਦੀਕ ਕਰੋ</string>
|
||||
<string name="generate_password">ਪਾਸਵਰਡ ਬਣਾਓ</string>
|
||||
<string name="file_browser">ਫ਼ਾਇਲ ਮੈਨੇਜਰ</string>
|
||||
<string name="file_not_found_content">ਫ਼ਾਇਲ ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕੀ। ਆਪਣੇ ਫ਼ਾਇਲ ਬਰਾਊਜ਼ਰ ਤੋਂ ਮੁੜ ਖੋਲ੍ਹ ਕੇ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</string>
|
||||
<string name="field_value">ਖੇਤਰ ਦਾ ਮੁੱਲ</string>
|
||||
<string name="field_name">ਖ਼ੇਤਰ ਦਾ ਨਾਂ</string>
|
||||
<string name="error_string_type">ਇਹ ਲਿਖਤ ਮੰਗੀ ਕੀਤੀ ਚੀਜ਼ ਨਾਲ ਮਿਲਦੀ ਨਹੀਂ ਹੈ।</string>
|
||||
<string name="error_otp_digits">ਟੋਕਨ ਵਿੱਚ %1$d ਤੋਂ %2$d ਅੰਕ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ।</string>
|
||||
<string name="error_otp_period">ਅੰਤਰਾਲ %1$d ਅਤੇ %2$d ਸਕਿੰਟਾਂ ਵਿਚਾਲੇ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।</string>
|
||||
<string name="error_otp_counter">ਗਿਣਤੀ %1$d ਅਤੇ %2$d ਦੇ ਵਿਚਾਲੇ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।</string>
|
||||
<string name="error_otp_secret_key">ਭੇਤ ਕੁੰਜੀ Base32 ਫਾਰਮੈਟ ਵਿੱਚ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।</string>
|
||||
<string name="error_save_database">ਡਾਟਾਬੇਸ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।</string>
|
||||
<string name="error_create_database_file">ਇਸ ਪਾਸਵਰਡ ਅਤੇ ਕੁੰਜੀ-ਫ਼ਾਇਲ ਲਈ ਡਾਟਾਬੇਸ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।</string>
|
||||
<string name="error_label_exists">ਇਹ ਲੇਬਲ ਪਹਿਲਾਂ ਹੀ ਵਰਤਿਆ ਗਿਆ ਹੈ।</string>
|
||||
<string name="error_string_key">ਹਰ ਸਤਰ ਲਈ ਖੇਤਰ ਨਾਂ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।</string>
|
||||
<string name="error_pass_match">ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।</string>
|
||||
<string name="error_disallow_no_credentials">ਘੱਟੋ-ਘੱਟ ਇੱਕ ਸਨਦ ਸੈੱਟ ਕੀਤੀ ਜਾਣੀ ਚਾਹੀਦੀ ਹੈ।</string>
|
||||
<string name="error_pass_gen_type">ਘੱਟੋ-ਘੱਟ ਇੱਕ ਪਾਸਵਰਡ ਜਰਨੇਟਰ ਕਿਸਮ ਚੁਣਨੀ ਲਾਜ਼ਮੀ ਹੈ।</string>
|
||||
<string name="error_load_database_KDF_memory">ਕੁੰਜੀ ਲੋਡ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ। KDF \"ਮੈਮੋਰੀ ਵਰਤੋਂ\" ਘਟਾ ਕੇ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</string>
|
||||
<string name="error_load_database">ਤੁਹਾਡੇ ਡਾਟਾਬੇਸ ਨੂੰ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।</string>
|
||||
<string name="error_out_of_memory">ਤੁਹਾਡੇ ਪੂਰੇ ਡਾਟਾਬੇਸ ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ।</string>
|
||||
<string name="error_nokeyfile">ਕੁੰਜੀ-ਫ਼ਾਇਲ ਚੁਣੋ।</string>
|
||||
<string name="error_no_name">ਨਾਂ ਦਿਓ।</string>
|
||||
<string name="error_invalid_OTP">ਗ਼ਲਤ OTP ਭੇਤ ਹੈ।</string>
|
||||
<string name="error_invalid_path">ਪਾਥ ਦੇ ਠੀਕ ਹੋਣ ਨੂੰ ਯਕੀਨੀ ਬਣਾਓ।</string>
|
||||
<string name="error_invalid_db">ਡਾਟਾਬੇਸ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।</string>
|
||||
<string name="error_file_not_create">ਫ਼ਾਇਲ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ:</string>
|
||||
<string name="error_can_not_handle_uri">ਇਹ URI KeePassDX ਵਿੱਚ ਹੈਂਡਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।</string>
|
||||
<string name="error_arc4">Arcfour ਸਟਰੀਮ ਸੀਫ਼ਰ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।</string>
|
||||
<string name="entry_user_name">ਵਰਤੋਂਕਾਰ-ਨਾਂ</string>
|
||||
<string name="entry_url">URL</string>
|
||||
<string name="entry_otp">OTP</string>
|
||||
<string name="otp_algorithm">ਐਲਗੋਰਿਥਮ</string>
|
||||
<string name="otp_digits">ਅੰਕ</string>
|
||||
<string name="otp_counter">ਗਿਣਤੀ</string>
|
||||
<string name="otp_period">ਅੰਤਰਾਲ (ਸਕਿੰਟ)</string>
|
||||
<string name="otp_secret">ਗੁਪਤ</string>
|
||||
<string name="otp_type">OTP ਦੀ ਕਿਸਮ</string>
|
||||
<string name="entry_setup_otp">ਇਕੇਹਰਾ ਪਾਸਵਰਡ ਸੈਟਅੱਪ ਕਰੋ</string>
|
||||
<string name="entry_title">ਨਾਂ</string>
|
||||
<string name="entry_save">ਸੰਭਾਲੋ</string>
|
||||
<string name="entry_password">ਪਾਸਵਰਡ</string>
|
||||
<string name="entry_not_found">ਐਂਟਰੀ ਡਾਟਾ ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।</string>
|
||||
<string name="entry_modified">ਸੋਧ ਕੀਤੀ</string>
|
||||
<string name="entry_keyfile">ਕੁੰਜੀ-ਫ਼ਾਇਲ</string>
|
||||
<string name="entry_attachments">ਨੱਥੀ ਕੀਤੇ</string>
|
||||
<string name="entry_history">ਅਤੀਤ</string>
|
||||
<string name="entry_UUID">UUID</string>
|
||||
<string name="entry_expires">ਮਿਆਦ ਪੁੱਗਦੀ ਹੈ</string>
|
||||
<string name="entry_created">ਬਣਾਇਆ</string>
|
||||
<string name="entry_confpassword">ਪਾਸਵਰਡ ਤਸਦੀਕ ਕਰੋ</string>
|
||||
<string name="entry_notes">ਨੋਟਿਸ</string>
|
||||
<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> ਉੱਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਾਂ।</string>
|
||||
<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>
|
||||
<string name="decrypting_db">…ਡਾਟਾਬੇਸ ਸਮੱਗਰੀ ਡਿਕ੍ਰਿਪਟ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ</string>
|
||||
<string name="database">ਡਾਟਾਬੇਸ</string>
|
||||
<string name="retrieving_db_key">ਡਾਟਾਬੇਸ ਕੁੰਜੀ ਲਈ ਜਾ ਰਹੀ ਹੈ…</string>
|
||||
<string name="select_to_copy">%1$s ਨੂੰ ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਕਰਨ ਲਈ ਚੁਣੋ</string>
|
||||
<string name="content_description_keyboard_close_fields">ਖੇਤਰਾਂ ਨੂੰ ਬੰਦ ਕਰੋ</string>
|
||||
<string name="content_description_remove_from_list">ਹਟਾਓ</string>
|
||||
<string name="content_description_update_from_list">ਅੱਪਡੇਟ ਕਰੋ</string>
|
||||
<string name="content_description_remove_field">ਖੇਤਰ ਹਟਾਓ</string>
|
||||
<string name="entry_add_attachment">ਨੱਥੀ ਕਰੋ</string>
|
||||
<string name="entry_add_field">ਖੇਤਰ ਜੋੜੋ</string>
|
||||
<string name="content_description_password_length">ਪਾਸਵਰਡ ਦੀ ਲੰਬਾਈ</string>
|
||||
<string name="entry_password_generator">ਪਾਸਵਰਡ ਜਰਨੇਟਰ</string>
|
||||
<string name="discard">ਅਣਡਿੱਠਾ</string>
|
||||
<string name="discard_changes">ਤਬਦੀਲੀਆਂ ਅਣਡਿੱਠੀਆਂ ਕਰਨੀਆਂ ਹਨ\?</string>
|
||||
<string name="validate">ਵੈਧਤਾ</string>
|
||||
<string name="content_description_entry_icon">ਐਂਟਰੀ ਆਈਕਾਨ</string>
|
||||
<string name="content_description_repeat_toggle_password_visibility">ਪਾਸਵਰਡ ਦਿੱਖ ਨੂੰ ਦੁਬਾਰਾ ਬਦਲੋ</string>
|
||||
<string name="content_description_keyfile_checkbox">ਕੁੰਜੀ-ਫ਼ਾਇਲ ਚੈਕ-ਬਕਸਾ</string>
|
||||
<string name="content_description_password_checkbox">ਪਾਸਵਰਡ ਚੈਕ-ਬਕਸਾ</string>
|
||||
<string name="content_description_file_information">ਫ਼ਾਇਲ ਦੀ ਜਾਣਕਾਰੀ</string>
|
||||
<string name="content_description_add_item">ਚੀਜ਼ ਜੋੜੋ</string>
|
||||
<string name="content_description_add_group">ਗਰੁੱਪ ਜੋੜੋ</string>
|
||||
<string name="content_description_add_entry">ਐਂਟਰੀ ਜੋੜੋ</string>
|
||||
<string name="content_description_add_node">ਨੋਡ ਜੋੜੋ</string>
|
||||
<string name="content_description_node_children">ਨੋਡ ਚਾਈਲਡ</string>
|
||||
<string name="content_description_open_file">ਫ਼ਾਇਲ ਖੋਲ੍ਹੋ</string>
|
||||
<string name="content_description_background">ਬੈਕਗਰਾਊਂਡ</string>
|
||||
<string name="clipboard_timeout_summary">ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਸਟੋਰ ਕਰਕੇ ਰੱਖਣ ਦੀ ਮਿਆਦ</string>
|
||||
<string name="clipboard_timeout">ਕਲਿੱਪਬੋਰਡ ਲਈ ਸਮਾਂ-ਮਿਆਦ</string>
|
||||
<string name="clipboard_error_clear">ਕਲਿੱਪਬੋਰਡ ਸਾਫ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</string>
|
||||
<string name="clipboard_error">ਕੁਝ ਡਿਵਾਈਸ ਐਪਾਂ ਨੂੰ ਕਲਿੱਪਬੋਰਡ ਵਰਤਣ ਨਹੀਂ ਦੇਣਗੇ।</string>
|
||||
<string name="clipboard_error_title">ਕਲਿੱਪਬੋਰਡ ਗ਼ਲਤੀ</string>
|
||||
<string name="clipboard_cleared">ਕਲਿੱਪਬੋਰਡ ਸਾਫ਼ ਕੀਤਾ</string>
|
||||
<string name="allow">ਮਨਜ਼ੂਰ</string>
|
||||
<string name="extended_ASCII">ASCII ਵਾਧਰਾ</string>
|
||||
<string name="brackets">ਬਰੈਕਟਾਂ</string>
|
||||
<string name="application">ਐਪ</string>
|
||||
<string name="app_timeout_summary">ਡਾਟਾਬੇਸ ਲਾਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਨਾ ਵਰਤਣ ਦਾ ਸਮਾਂ</string>
|
||||
<string name="app_timeout">ਐਪ ਸਮਾਂ-ਮਿਆਦ</string>
|
||||
<string name="key_derivation_function">ਕੁੰਜੀ ਡੇਰੀਵੇਸ਼ਨ ਫੰਕਸ਼ਨ</string>
|
||||
<string name="encryption_algorithm">ਇੰਕ੍ਰਿਪਸ਼ਨ ਐਲਗੋਰਿਥਮ</string>
|
||||
<string name="encryption">ਇੰਕ੍ਰਿਪਸ਼ਨ</string>
|
||||
<string name="security">ਸੁਰੱਖਿਆ</string>
|
||||
<string name="master_key">ਮਾਸਟਰ ਕੁੰਜੀ</string>
|
||||
<string name="add_group">ਗਰੁੱਪ ਜੋੜੋ</string>
|
||||
<string name="edit_entry">ਐਂਟਰੀ ਸੋਧੋ</string>
|
||||
<string name="add_entry">ਐਂਟਰੀ ਜੋੜੋ</string>
|
||||
<string name="accept">ਮਨਜ਼ੂਰ</string>
|
||||
<string name="about_description">ਐਂਡਰਾਇਡ ਲਈ ਬਣਾਇਆ KeePass ਪਾਸਵਰਡ ਮੈਨੇਜਰ</string>
|
||||
<string name="homepage">ਮੁੱਖ-ਸਫ਼ਾ</string>
|
||||
<string name="feedback">ਸੁਝਾਅ</string>
|
||||
<string name="contribution">ਯੋਗਦਾਨ</string>
|
||||
<string name="contact">ਸੰਪਰਕ</string>
|
||||
<string name="keyfile_is_empty">ਕੁੰਜੀ ਫਾਇਲ ਖਾਲੀ ਹੈ।</string>
|
||||
<string name="error_create_database">ਡਾਟਾਬੇਸ ਫਾਈਲ ਬਣਾਉਣ ਲਈ ਅਸਮਰੱਥ।</string>
|
||||
<string name="error_copy_group_here">ਤੁਸੀਂ ਗਰੁੱਪ ਨੂੰ ਇੱਥੇ ਕਾਪੀ ਨਹੀਂ ਕਰ ਸਕਦੇ ਹੋ।</string>
|
||||
<string name="error_copy_entry_here">ਤੁਸੀੰ ਇਸ ਐੰਟਰੀ ਨੂੰ ਇੱਥੇ ਕਾਪੀ ਨਹੀਂ ਕਰ ਸਕਦੇ ਹੋ।</string>
|
||||
<string name="error_move_folder_in_itself">ਤੁਸੀੰ ਗਰੁੱਪ ਨੂੰ ਖੁਦ ਵਿੱਚ ਨਹੀਂ ਭੇਜ ਸਕਦੇ ਹੋ।</string>
|
||||
</resources>
|
||||
@@ -146,7 +146,6 @@
|
||||
<string name="clipboard_error_title">Błąd schowka</string>
|
||||
<string name="clipboard_error">Niektóre urządzenia nie pozwalają aplikacjom korzystać ze schowka.</string>
|
||||
<string name="clipboard_error_clear">Nie można wyczyścić schowka</string>
|
||||
<string name="clipboard_swipe_clean">Przesuń, by wyczyścić schowek</string>
|
||||
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft jest <strong>open source</strong> i <strong>bez reklam</strong>.
|
||||
\nJest on dostarczany w stanie, zgodnie z licencją <strong>GPLv3</strong> bez żadnych gwarancji.</string>
|
||||
<string name="entry_not_found">Nie znaleziono danych wejściowych.</string>
|
||||
@@ -476,4 +475,15 @@
|
||||
<string name="error_label_exists">Ta etykieta już istnieje.</string>
|
||||
<string name="keyboard_search_share_summary">Automatyczne wyszukiwanie udostępnionych informacji w celu zapełnienia klawiatury</string>
|
||||
<string name="keyboard_search_share_title">Wyszukaj udostępnione informacje</string>
|
||||
<string name="autofill_block_restart">Zrestartuj aplikację zawierającą formularz, aby aktywować blokadę.</string>
|
||||
<string name="autofill_block">Blokowanie autouzupełniania</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Lista zablokowanych, która uniemożliwia automatyczne wypełnianie aplikacji</string>
|
||||
<string name="filter">Filtr</string>
|
||||
<string name="subdomain_search_title">Wyszukiwanie subdomen</string>
|
||||
<string name="subdomain_search_summary">Wyszukiwanie domen internetowych z ograniczeniami związanymi z subdomenami</string>
|
||||
<string name="error_string_type">Ten tekst nie pasuje do żądanej pozycji.</string>
|
||||
<string name="content_description_add_item">Dodaj pozycję</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Lista zablokowanych, która uniemożliwia automatyczne wypełnianie aplikacji</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Lista zablokowanych domen internetowych</string>
|
||||
<string name="autofill_application_id_blocklist_title">Lista zablokowanych aplikacji</string>
|
||||
</resources>
|
||||
@@ -147,7 +147,6 @@
|
||||
<string name="clipboard_error_title">Erro na área de transferência</string>
|
||||
<string name="clipboard_error">Alguns dispositivos não permitem que aplicativos usem a á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_swipe_clean">Deslize para limpar a área de transferência agora</string>
|
||||
<string name="entry_not_found">Não pôde encontrar dado de entrada.</string>
|
||||
<string name="error_string_key">Um nome do campo é necessário para cada string.</string>
|
||||
<string name="error_autofill_enable_service">Não pôde ser habilitado o serviço de preenchimento automático.</string>
|
||||
|
||||
@@ -208,7 +208,6 @@
|
||||
<string name="edit_entry">Editar entrada</string>
|
||||
<string name="encryption">Encriptação</string>
|
||||
<string name="key_derivation_function">Função de derivação de chave</string>
|
||||
<string name="clipboard_swipe_clean">Deslize para o lado para limpar agora a área de transferência</string>
|
||||
<string name="error_autofill_enable_service">Não pôde ser habilitado o serviço de preenchimento automático.</string>
|
||||
<string name="encryption_explanation">Algoritmo de encriptação usado para todos os dados.</string>
|
||||
<string name="password_size_summary">Define o tamanho padrão para palavras-passe geradas</string>
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
<string name="clipboard_error_clear">Nu s-a putut curata memoria carnetelului</string>
|
||||
<string name="clipboard_timeout">Timp expirat de citire a carnetelului</string>
|
||||
<string name="clipboard_timeout_summary">Durata de memorare din carnetel</string>
|
||||
<string name="clipboard_swipe_clean">Schimba ca sa cureti carnetelul acum</string>
|
||||
<string name="content_description_background">In spate</string>
|
||||
<string name="content_description_open_file">Deschide fisier</string>
|
||||
<string name="content_description_node_children">Copil nod</string>
|
||||
|
||||
@@ -184,7 +184,6 @@
|
||||
<string name="sort_last_access_time">Время последнего доступа</string>
|
||||
<string name="edit_entry">Изменить</string>
|
||||
<string name="allow">Разрешить</string>
|
||||
<string name="clipboard_swipe_clean">Смахните для очистки буфера обмена</string>
|
||||
<string name="error_load_database">Невозможно загрузить базу.</string>
|
||||
<string name="error_load_database_KDF_memory">Невозможно загрузить ключ. Попробуйте уменьшить размер памяти, используемой функцией формирования ключа (KDF).</string>
|
||||
<string name="error_move_folder_in_itself">Нельзя переместить группу в саму себя.</string>
|
||||
@@ -467,7 +466,7 @@
|
||||
<string name="error_create_database">Невозможно создать файл базы.</string>
|
||||
<string name="education_setup_OTP_title">Настройте OTP</string>
|
||||
<string name="education_setup_OTP_summary">Настройте управление одноразовыми паролями (HOTP / TOTP) для создания токена, запрашиваемого при двухфакторной аутентификации (2FA).</string>
|
||||
<string name="autofill_auto_search_summary">Автоматически предлагать результаты поиска из веб-домена или идентификатора приложения</string>
|
||||
<string name="autofill_auto_search_summary">Автоматически предлагать результаты поиска для домена или идентификатора приложения</string>
|
||||
<string name="lock_database_show_button_summary">Использовать кнопку блокировки в интерфейсе</string>
|
||||
<string name="lock_database_show_button_title">Показывать кнопку блокировки</string>
|
||||
<string name="error_label_exists">Такая метка уже существует.</string>
|
||||
@@ -476,4 +475,15 @@
|
||||
<string name="autofill_preference_title">Настройки автозаполнения</string>
|
||||
<string name="keyboard_search_share_summary">Выполнять автоматический поиск общедоступной информации для подстановки в клавиатуру</string>
|
||||
<string name="keyboard_search_share_title">Поиск доступной информации</string>
|
||||
<string name="subdomain_search_title">Поиск поддоменов</string>
|
||||
<string name="subdomain_search_summary">Выполнять поиск доменов с некоторыми поддоменами</string>
|
||||
<string name="autofill_block_restart">Перезапустите приложение, содержащее форму, чтобы активировать отключение.</string>
|
||||
<string name="autofill_block">Отключить автозаполнение</string>
|
||||
<string name="error_string_type">Текст не соответствует запрошенному элементу.</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Список доменов, для которых функция автозаполнения не применяется</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Чёрный список доменов</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Список приложений, для которых функция автозаполнения не применяется</string>
|
||||
<string name="autofill_application_id_blocklist_title">Чёрный список приложений</string>
|
||||
<string name="filter">Фильтр</string>
|
||||
<string name="content_description_add_item">Добавить элемент</string>
|
||||
</resources>
|
||||
@@ -147,7 +147,6 @@
|
||||
<string name="clipboard_error_title">Chyba schránky</string>
|
||||
<string name="clipboard_error">Niektoré zariadenia nedovolia aplikáciám používať schránku.</string>
|
||||
<string name="clipboard_error_clear">Nepodarilo sa vymazať schránku</string>
|
||||
<string name="clipboard_swipe_clean">Schránku vymažete potiahnutím prsta cez políčko</string>
|
||||
<string name="entry_not_found">Nenašli sa údaje záznamu</string>
|
||||
<string name="contact">Kontakt</string>
|
||||
<string name="content_description_open_file">Otvoriť súbor</string>
|
||||
|
||||
@@ -156,7 +156,6 @@
|
||||
<string name="key_derivation_function">Nyckelhärledningsfunktion</string>
|
||||
<string name="extended_ASCII">Utökad ASCII</string>
|
||||
<string name="allow">Tillåt</string>
|
||||
<string name="clipboard_swipe_clean">Svep för att rensa urklipp nu</string>
|
||||
<string name="content_description_open_file">Öppna fil</string>
|
||||
<string name="content_description_add_node">Lägg till nod</string>
|
||||
<string name="content_description_add_entry">Ny post</string>
|
||||
|
||||
@@ -57,7 +57,6 @@
|
||||
<string name="error_invalid_db">Veritabanı okunamadı.</string>
|
||||
<string name="error_invalid_path">Yolun doğru olduğundan emin olun.</string>
|
||||
<string name="error_no_name">Bir isim girin.</string>
|
||||
<string name="clipboard_swipe_clean">Şimdi panoyu temizlemek için kaydırın</string>
|
||||
<string name="select_to_copy">%1$s dosyasını panoya kopyalamak için seçin</string>
|
||||
<string name="retrieving_db_key">Veritabanı anahtarı alınıyor…</string>
|
||||
<string name="decrypting_db">Veritabanı içeriği deşifre ediliyor…</string>
|
||||
@@ -99,7 +98,7 @@
|
||||
<string name="length">Uzunluk</string>
|
||||
<string name="list_entries_show_username_title">Kullanıcı adlarını göster</string>
|
||||
<string name="list_entries_show_username_summary">Giriş listelerinde kullanıcı adlarını göster</string>
|
||||
<string name="list_size_title">Liste öğelerinin boyutu</string>
|
||||
<string name="list_size_title">Liste ögelerinin boyutu</string>
|
||||
<string name="list_size_summary">Öğe listesindeki metin boyutu</string>
|
||||
<string name="loading_database">Veritabanı yükleniyor…</string>
|
||||
<string name="lowercase">Küçük harf</string>
|
||||
@@ -264,7 +263,7 @@
|
||||
<string name="education_create_database_summary">İlk parola yönetim dosyanızı oluşturun.</string>
|
||||
<string name="education_select_database_title">Mevcut bir veritabanını aç</string>
|
||||
<string name="education_select_database_summary">Kullanmaya devam etmek için önceki veritabanı dosyanızı dosya tarayıcınızdan açın.</string>
|
||||
<string name="education_new_node_title">Veritabanınıza öğe ekleyin</string>
|
||||
<string name="education_new_node_title">Veri tabanınıza öge ekleyin</string>
|
||||
<string name="education_new_node_summary">Girdiler dijital kimliğinizi yönetmenize yardımcı olur.
|
||||
\n
|
||||
\nGruplar (~klasörler) veritabanınızdaki girdileri düzenler.</string>
|
||||
@@ -293,7 +292,7 @@
|
||||
\nTercih ettiğiniz form doldurma yöntemini kullanın.</string>
|
||||
<string name="education_lock_title">Veritabanını kilitle</string>
|
||||
<string name="education_lock_summary">Veritabanınızı hızlıca kilitleyin, uygulamayı bir süre sonra kilitlemek için ve ekran kapandığında ayarlayabilirsiniz.</string>
|
||||
<string name="education_sort_title">Öğe sıralama</string>
|
||||
<string name="education_sort_title">Öge sıralama</string>
|
||||
<string name="education_sort_summary">Girdilerin ve grupların nasıl sıralandığını seçin.</string>
|
||||
<string name="education_donation_title">Katıl</string>
|
||||
<string name="education_donation_summary">Daha fazla özellik ekleyerek istikrarı, güvenliği artırmaya yardımcı olun.</string>
|
||||
@@ -393,7 +392,7 @@
|
||||
<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="max_history_items_title">Maksimum sayı</string>
|
||||
<string name="max_history_items_summary">Giriş başına geçmiş öğelerinin sayısını sınırla</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">Maksimum boyut</string>
|
||||
<string name="max_history_size_summary">Giriş başına geçmiş boyutunu (bayt olarak) sınırlama</string>
|
||||
<string name="settings_database_recommend_changing_master_key_title">Yenilemeyi öner</string>
|
||||
@@ -460,4 +459,15 @@
|
||||
<string name="error_label_exists">Bu etiket zaten var.</string>
|
||||
<string name="keyboard_search_share_summary">Klavyeyi doldurmak için paylaşılan bilgileri otomatik olarak ara</string>
|
||||
<string name="keyboard_search_share_title">Paylaşılan bilgileri ara</string>
|
||||
<string name="filter">Filtre</string>
|
||||
<string name="autofill_block_restart">Engellemeyi etkinleştirmek için formu içeren uygulamayı yeniden başlatın.</string>
|
||||
<string name="autofill_block">Otomatik doldurmayı engelle</string>
|
||||
<string name="autofill_web_domain_blocklist_summary">Web etki alanlarının otomatik olarak doldurulmasını engelleme listesi</string>
|
||||
<string name="autofill_web_domain_blocklist_title">Web etki alanı engelleme listesi</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Uygulamaların otomatik olarak doldurulmasını engelleme listesi</string>
|
||||
<string name="autofill_application_id_blocklist_title">Uygulama engelleme listesi</string>
|
||||
<string name="subdomain_search_summary">Web etki alanlarını alt alan kısıtlamaları ile arayın</string>
|
||||
<string name="subdomain_search_title">Alt etki alanı arama</string>
|
||||
<string name="error_string_type">Bu metin istenen ögeyle eşleşmiyor.</string>
|
||||
<string name="content_description_add_item">Öge ekle</string>
|
||||
</resources>
|
||||
@@ -43,7 +43,7 @@
|
||||
\nЗастосунок постачається як є, на умовах ліцензії <strong>GPLv3</strong>, без будь-яких гарантій.</string>
|
||||
<string name="select_database_file">Відкрити наявну базу даних</string>
|
||||
<string name="entry_accessed">Доступ</string>
|
||||
<string name="entry_cancel">Скасовано</string>
|
||||
<string name="entry_cancel">Скасувати</string>
|
||||
<string name="entry_notes">Примітки</string>
|
||||
<string name="entry_confpassword">Підтвердження пароля</string>
|
||||
<string name="entry_created">Створено</string>
|
||||
@@ -83,7 +83,7 @@
|
||||
<string name="list_size_summary">Розмір тексту у переліку груп</string>
|
||||
<string name="loading_database">Завантаження бази даних…</string>
|
||||
<string name="lowercase">Малі літери</string>
|
||||
<string name="hide_password_title">Приховати паролі</string>
|
||||
<string name="hide_password_title">Приховувати паролі</string>
|
||||
<string name="hide_password_summary">Типово приховувати паролі за (***)</string>
|
||||
<string name="about">Про KeePassDX</string>
|
||||
<string name="menu_change_key_settings">Змінити головний ключ</string>
|
||||
@@ -147,7 +147,6 @@
|
||||
<string name="content_description_open_file">Відкрити файл</string>
|
||||
<string name="extended_ASCII">Розширений ASCII</string>
|
||||
<string name="edit_entry">Змінити запис</string>
|
||||
<string name="clipboard_swipe_clean">Проведіть пальцем, щоб очистити буфер обміну зараз</string>
|
||||
<string name="clear_clipboard_notification_summary">Блокувати базу даних під час закриття сповіщення</string>
|
||||
<string name="configure_biometric">Розблокування біометричними даними підтримується, але не налаштоване.</string>
|
||||
<string name="content_description_add_group">Додати групу</string>
|
||||
@@ -178,14 +177,14 @@
|
||||
<string name="encryption">Шифрування</string>
|
||||
<string name="security">Безпека</string>
|
||||
<string name="master_key">Головний ключ</string>
|
||||
<string name="hide_broken_locations_summary">Приховати пошкоджені посилання до недавніх баз даних</string>
|
||||
<string name="hide_broken_locations_title">Приховати пошкоджені посилання до баз даних</string>
|
||||
<string name="show_recent_files_summary">Показати розташування недавніх баз даних</string>
|
||||
<string name="show_recent_files_title">Показати недавні файли</string>
|
||||
<string name="remember_keyfile_locations_summary">Запам\'ятати розташування файлів ключів баз даних</string>
|
||||
<string name="remember_keyfile_locations_title">Зберегти розташування файлів ключів</string>
|
||||
<string name="remember_database_locations_summary">Запам\'ятати розташування баз даних</string>
|
||||
<string name="remember_database_locations_title">Зберегти розташування баз даних</string>
|
||||
<string name="hide_broken_locations_summary">Приховувати пошкоджені посилання до недавніх баз даних</string>
|
||||
<string name="hide_broken_locations_title">Приховувати пошкоджені посилання до баз даних</string>
|
||||
<string name="show_recent_files_summary">Показувати розташування недавніх баз даних</string>
|
||||
<string name="show_recent_files_title">Показувати недавні файли</string>
|
||||
<string name="remember_keyfile_locations_summary">Пам\'ятати розташування файлів ключів баз даних</string>
|
||||
<string name="remember_keyfile_locations_title">Зберігати розташування файлів ключів</string>
|
||||
<string name="remember_database_locations_summary">Пам\'ятати розташування баз даних</string>
|
||||
<string name="remember_database_locations_title">Зберігати розташування баз даних</string>
|
||||
<string name="selection_mode">Режим вибору</string>
|
||||
<string name="contains_duplicate_uuid">База даних містить дублікати UUID.</string>
|
||||
<string name="contains_duplicate_uuid_procedure">Розв\'язати проблему, створивши нові UUID для дублікатів щоби продовжити\?</string>
|
||||
@@ -216,7 +215,7 @@
|
||||
<string name="list_groups_show_number_entries_summary">Показувати кількість записів у групі</string>
|
||||
<string name="list_groups_show_number_entries_title">Показувати кількість записів</string>
|
||||
<string name="list_entries_show_username_summary">Показувати імена користувачів у переліках записів</string>
|
||||
<string name="list_entries_show_username_title">Показати імена користувачів</string>
|
||||
<string name="list_entries_show_username_title">Показувати імена користувачів</string>
|
||||
<string name="keyfile_is_empty">Файл ключа порожній.</string>
|
||||
<string name="invalid_db_same_uuid">%1$s з таким самим UUID %2$s вже існує.</string>
|
||||
<string name="invalid_algorithm">Неправильний алгоритм.</string>
|
||||
@@ -272,8 +271,8 @@
|
||||
<string name="biometric_invalid_key">Не вдалося розпізнати біометричний ключ. Видаліть його та повторіть процедуру створення ключа.</string>
|
||||
<string name="biometric_prompt_store_credential_message">Попередження: Якщо ви користуєтеся біометричним ключем, вам однаково необхідно пам\'ятати головний пароль.</string>
|
||||
<string name="hide_expired_entries_summary">Застарілі записи приховано</string>
|
||||
<string name="hide_expired_entries_title">Приховати застарілі записи</string>
|
||||
<string name="icon_pack_choose_summary">Набір піктограм у застосунку</string>
|
||||
<string name="hide_expired_entries_title">Приховувати застарілі записи</string>
|
||||
<string name="icon_pack_choose_summary">Набір піктограм застосунку</string>
|
||||
<string name="icon_pack_choose_title">Набір піктограм</string>
|
||||
<string name="style_choose_summary">Тема застосунку</string>
|
||||
<string name="style_choose_title">Тема застосунку</string>
|
||||
@@ -331,7 +330,7 @@
|
||||
\n
|
||||
\nСтворюйте групи (~теки) для впорядкування записів у вашій базі даних.</string>
|
||||
<string name="device_keyboard_setting_title">Налаштування клавіатури пристрою</string>
|
||||
<string name="education_new_node_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>
|
||||
@@ -345,10 +344,10 @@
|
||||
<string name="enable_read_only_summary">Типово відкривати базу даних лише для читання</string>
|
||||
<string name="enable_read_only_title">Захист від запису</string>
|
||||
<string name="delete_entered_password_summary">Видаляти пароль, введений після спроби з\'єднання з базою даних</string>
|
||||
<string name="delete_entered_password_title">Видалити пароль</string>
|
||||
<string name="delete_entered_password_title">Видаляти пароль</string>
|
||||
<string name="allow_no_password_summary">Увімкнути кнопку \"Відкрити\", якщо не вибрано головний пароль</string>
|
||||
<string name="allow_no_password_title">Дозволити без головного ключа</string>
|
||||
<string name="autofill_auto_search_summary">Автоматично пропонувати результати пошуку з вебдомену або ідентифікатора застосунку</string>
|
||||
<string name="autofill_auto_search_summary">Автоматично пропонувати результати пошуку з вебдомену або ID застосунку</string>
|
||||
<string name="autofill_auto_search_title">Автоматичний пошук</string>
|
||||
<string name="keyboard_key_sound_title">Звук під час натискання</string>
|
||||
<string name="keyboard_key_vibrate_title">Вібрація під час натискання</string>
|
||||
@@ -366,13 +365,13 @@
|
||||
<string name="keyboard_notification_entry_clear_close_title">Очищати під час закриття</string>
|
||||
<string name="keyboard_notification_entry_summary">Показувати сповіщення, коли запис доступний</string>
|
||||
<string name="keyboard_notification_entry_title">Інформаційне сповіщення</string>
|
||||
<string name="keyboard_selection_entry_summary">Показати поля введення в Magikeyboard під час перегляду запису</string>
|
||||
<string name="keyboard_selection_entry_summary">Показувати поля введення в Magikeyboard під час перегляду запису</string>
|
||||
<string name="keyboard_selection_entry_title">Вибір запису</string>
|
||||
<string name="keyboard_entry_category">Запис</string>
|
||||
<string name="keyboard_setting_label">Параметри Magikeyboard</string>
|
||||
<string name="keyboard_label">Magikeyboard (KeePassDX)</string>
|
||||
<string name="keyboard_name">Magikeyboard</string>
|
||||
<string name="magic_keyboard_explanation_summary">Активувати власну клавіатуру для заповнення ваших паролів та інших полів ідентифікації</string>
|
||||
<string name="magic_keyboard_explanation_summary">Увімкнути власну клавіатуру для заповнення ваших паролів та інших полів ідентифікації</string>
|
||||
<string name="magic_keyboard_title">Magikeyboard</string>
|
||||
<string name="recycle_bin">Кошик</string>
|
||||
<string name="compression_none">Не стискати</string>
|
||||
@@ -395,7 +394,7 @@
|
||||
<string name="recycle_bin_title">Використання кошика</string>
|
||||
<string name="database_data_compression_summary">Стиснення даних зменшує розмір бази даних.</string>
|
||||
<string name="database_data_compression_title">Стиснення даних</string>
|
||||
<string name="full_file_path_enable_summary">Переглянути повний шлях до файлу</string>
|
||||
<string name="full_file_path_enable_summary">Показувати повний шлях до файлу</string>
|
||||
<string name="full_file_path_enable_title">Шлях до файлу</string>
|
||||
<string name="assign_master_key">Призначити головний ключ</string>
|
||||
<string name="path">Шлях</string>
|
||||
@@ -476,4 +475,15 @@
|
||||
<string name="encryption_explanation">Алгоритм шифрування бази даних, застосований для всіх даних.</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>
|
||||
<string name="autofill_web_domain_blocklist_title">Перелік блокування вебдоменів</string>
|
||||
<string name="autofill_application_id_blocklist_summary">Застосунки для яких вимкнено автозаповнення</string>
|
||||
<string name="autofill_application_id_blocklist_title">Перелік заблокованих застосунків</string>
|
||||
<string name="subdomain_search_summary">Пошук у вебдоменах обмежений піддоменами</string>
|
||||
<string name="subdomain_search_title">Пошук у піддоменах</string>
|
||||
<string name="error_string_type">Текст не відповідає запитуваному елементу.</string>
|
||||
<string name="filter">Фільтр</string>
|
||||
<string name="content_description_add_item">Додати елемент</string>
|
||||
</resources>
|
||||
@@ -143,7 +143,6 @@
|
||||
<string name="clipboard_error_title">剪切板错误</string>
|
||||
<string name="clipboard_error">一些设备不允许程序使用剪切板。</string>
|
||||
<string name="clipboard_error_clear">无法清空剪切板</string>
|
||||
<string name="clipboard_swipe_clean">滑动以清空剪切板</string>
|
||||
<string name="encryption_chacha20">ChaCha20</string>
|
||||
<string name="kdf_AES">AES</string>
|
||||
<string name="kdf_Argon2">Argon2</string>
|
||||
@@ -476,4 +475,15 @@
|
||||
<string name="error_label_exists">该标签已经存在。</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>
|
||||
<string name="autofill_web_domain_blocklist_title">Web域名黑名单</string>
|
||||
<string name="autofill_application_id_blocklist_summary">禁止应用程序自动填充的黑名单</string>
|
||||
<string name="autofill_application_id_blocklist_title">应用拦截列表</string>
|
||||
<string name="filter">过滤器</string>
|
||||
<string name="subdomain_search_summary">搜索带有子域约束的web域</string>
|
||||
<string name="subdomain_search_title">子域搜索</string>
|
||||
<string name="error_string_type">文本和请求的条目不匹配.</string>
|
||||
<string name="content_description_add_item">添加条目</string>
|
||||
</resources>
|
||||
@@ -140,7 +140,6 @@
|
||||
<string name="clipboard_error_title">剪貼簿錯誤</string>
|
||||
<string name="clipboard_error">部份設備不容許其他程式使用剪貼簿。</string>
|
||||
<string name="clipboard_error_clear">無法清除剪貼簿</string>
|
||||
<string name="clipboard_swipe_clean">滑动即可清除剪贴板</string>
|
||||
<string name="error_autofill_enable_service">無法啟用自動填入服務。</string>
|
||||
<string name="error_move_folder_in_itself">無法移動一個群組至自己本身。</string>
|
||||
<string name="invalid_algorithm">無效的演算法。</string>
|
||||
|
||||
@@ -132,6 +132,10 @@
|
||||
<bool name="keyboard_key_vibrate_default" translatable="false">true</bool>
|
||||
<string name="keyboard_key_sound_key" translatable="false">keyboard_key_sound_key</string>
|
||||
<bool name="keyboard_key_sound_default" translatable="false">false</bool>
|
||||
<string name="keyboard_previous_database_credentials_key" translatable="false">keyboard_previous_database_credentials_key</string>
|
||||
<bool name="keyboard_previous_database_credentials_default" translatable="false">false</bool>
|
||||
<string name="keyboard_previous_fill_in_key" translatable="false">keyboard_previous_fill_in_key</string>
|
||||
<bool name="keyboard_previous_fill_in_default" translatable="false">false</bool>
|
||||
<string name="autofill_auto_search_key" translatable="false">autofill_auto_search_key</string>
|
||||
<bool name="autofill_auto_search_default" translatable="false">true</bool>
|
||||
<string name="autofill_application_id_blocklist_key" translatable="false">autofill_application_id_blocklist_key</string>
|
||||
|
||||
@@ -44,8 +44,7 @@
|
||||
<string name="clipboard_error">Some devices won\'t let apps use the clipboard.</string>
|
||||
<string name="clipboard_error_clear">Could not clear clipboard</string>
|
||||
<string name="clipboard_timeout">Clipboard timeout</string>
|
||||
<string name="clipboard_timeout_summary">Duration of storage in the clipboard</string>
|
||||
<string name="clipboard_swipe_clean">Swipe to clear clipboard now</string>
|
||||
<string name="clipboard_timeout_summary">Duration of storage in the clipboard (if supported by your device)</string>
|
||||
<string name="content_description_background">Background</string>
|
||||
<string name="content_description_open_file">Open file</string>
|
||||
<string name="content_description_node_children">Node children</string>
|
||||
@@ -341,7 +340,7 @@
|
||||
<string name="enable">Enable</string>
|
||||
<string name="disable">Disable</string>
|
||||
<string name="clear_clipboard_notification_title">Clear at closing</string>
|
||||
<string name="clear_clipboard_notification_summary">Lock the database when closing the notification</string>
|
||||
<string name="clear_clipboard_notification_summary">Lock the database when the clipboard duration expires or the notification is closed after you start using it</string>
|
||||
<string name="database_name_title">Database name</string>
|
||||
<string name="database_description_title">Database description</string>
|
||||
<string name="database_default_username_title">Default username</string>
|
||||
@@ -382,6 +381,11 @@
|
||||
<string name="keyboard_auto_go_action_summary">\"Go\" key action after pressing a \"Field\" key</string>
|
||||
<string name="keyboard_key_vibrate_title">Vibratory keypresses</string>
|
||||
<string name="keyboard_key_sound_title">Audible keypresses</string>
|
||||
<string name="keyboard_change">Keyboard change</string>
|
||||
<string name="keyboard_previous_database_credentials_title">Previous keyboard during database credentials</string>
|
||||
<string name="keyboard_previous_database_credentials_summary">Automatically back to the previous keyboard if the database credentials screen is shown</string>
|
||||
<string name="keyboard_previous_fill_in_title">Previous keyboard after form filling</string>
|
||||
<string name="keyboard_previous_fill_in_summary">Automatically back to the previous keyboard if the form is filling and "Go" key action is auto activated</string>
|
||||
<string name="autofill_auto_search_title">Auto search</string>
|
||||
<string name="autofill_auto_search_summary">Automatically suggest search results from the web domain or application ID</string>
|
||||
<string name="autofill_application_id_blocklist_title">Application blocklist</string>
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
|
||||
<!-- Special Toolbar text titlé -->
|
||||
<style name="KeepassDXStyle.TextAppearance.Toolbar.Special.Title" parent="KeepassDXStyle.TextAppearance.Small">
|
||||
<item name="android:textColor">?attr/colorAccent</item>
|
||||
<item name="android:textColor">?android:attr/textColorHintInverse</item>
|
||||
</style>
|
||||
<style name="KeepassDXStyle.TextAppearance.Toolbar.Special.SubTitle" parent="KeepassDXStyle.TextAppearance.Tiny">
|
||||
<item name="android:textColor">@color/colorTextInverse</item>
|
||||
|
||||
@@ -67,4 +67,18 @@
|
||||
android:defaultValue="@bool/keyboard_key_sound_default"
|
||||
android:title="@string/keyboard_key_sound_title" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
android:title="@string/keyboard_change">
|
||||
<SwitchPreference
|
||||
android:key="@string/keyboard_previous_database_credentials_key"
|
||||
android:title="@string/keyboard_previous_database_credentials_title"
|
||||
android:summary="@string/keyboard_previous_database_credentials_summary"
|
||||
android:defaultValue="@bool/keyboard_previous_database_credentials_default"/>
|
||||
<SwitchPreference
|
||||
android:key="@string/keyboard_previous_fill_in_key"
|
||||
android:title="@string/keyboard_previous_fill_in_title"
|
||||
android:summary="@string/keyboard_previous_fill_in_summary"
|
||||
android:defaultValue="@bool/keyboard_previous_fill_in_default"
|
||||
android:dependency="@string/keyboard_auto_go_action_key"/>
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
96
art/ic_back_to.svg
Normal file
96
art/ic_back_to.svg
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
id="svg4830"
|
||||
version="1.1"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
inkscape:export-filename="/home/joker/Project/Scratcheck/TestExport.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
sodipodi:docname="ic_back_to.svg">
|
||||
<defs
|
||||
id="defs4832" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#acacac"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="15.999999"
|
||||
inkscape:cx="0.25001431"
|
||||
inkscape:cy="2.6167943"
|
||||
inkscape:current-layer="g4770"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="74"
|
||||
inkscape:window-maximized="1">
|
||||
<sodipodi:guide
|
||||
position="0.99999471,22.999999"
|
||||
orientation="22,0"
|
||||
id="guide2987"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="0.99999471,0.99999888"
|
||||
orientation="0,22"
|
||||
id="guide2989"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="22.999995,0.99999888"
|
||||
orientation="-22,0"
|
||||
id="guide2991"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="39,23"
|
||||
orientation="0,-22"
|
||||
id="guide2993"
|
||||
inkscape:locked="false" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2989" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata4835">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
transform="translate(0,-8)">
|
||||
<g
|
||||
id="g4770"
|
||||
transform="matrix(1.7777778,0,0,1.7777778,-205.48441,-31.997877)">
|
||||
<g
|
||||
id="Layer_1"
|
||||
transform="matrix(-0.00397893,0,0,0.00397893,125.58386,23.674135)" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.78885484;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
d="M 9.6582031 2.3417969 C 9.4025809 2.3417969 9.1470385 2.4408503 8.9511719 2.6367188 L 3.2929688 8.2929688 C 2.9012354 8.6847056 2.9012354 9.3152944 3.2929688 9.7070312 L 8.9511719 15.363281 C 9.3429052 15.755018 9.973501 15.755018 10.365234 15.363281 C 10.756968 14.971544 10.756968 14.340956 10.365234 13.949219 L 6.4160156 10 L 16 10 L 16 10.03125 A 4.5000001 4.5000001 0 0 1 20 14.5 A 4.5000001 4.5000001 0 0 1 16 18.966797 L 16 19 L 7 19 C 6.4460006 19 6 19.446001 6 20 C 6 20.553999 6.4460006 21 7 21 L 16 21 C 16.123984 21 16.240233 20.970575 16.349609 20.929688 A 6.5000001 6.5000001 0 0 0 22 14.5 A 6.5000001 6.5000001 0 0 0 16 8.0214844 L 16 8 L 6.4160156 8 L 10.365234 4.0507812 C 10.756968 3.6590444 10.756968 3.0284556 10.365234 2.6367188 C 10.169368 2.4408503 9.9138254 2.3417969 9.6582031 2.3417969 z "
|
||||
transform="matrix(0.56249999,0,0,0.56249999,115.58498,22.498806)"
|
||||
id="rect820" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
7
fastlane/metadata/android/en-US/changelogs/36.txt
Normal file
7
fastlane/metadata/android/en-US/changelogs/36.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
* Fix TOTP period (> 60s)
|
||||
* Fix searching in recycle bin
|
||||
* Settings to back to the previous keyboard during database credentials and after form filling
|
||||
* Improving action tasks
|
||||
* Improve recognition to reset app timeout
|
||||
* Fix minor issues
|
||||
|
||||
6
fastlane/metadata/android/fr-FR/changelogs/36.txt
Normal file
6
fastlane/metadata/android/fr-FR/changelogs/36.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
* Correction de la période pour le TOTP (> 60s)
|
||||
* Correction de la recherche dans la corbeille
|
||||
* Paramètres pour revenir automatiquement au clavier précédent durant l'identification de la base et après le remplissage de formulaire
|
||||
* Amélioration des tâches d'action
|
||||
* Amélioration de la reconnaissance pour le temps écoulé
|
||||
* Correction de problèmes mineurs
|
||||
Reference in New Issue
Block a user