diff --git a/CHANGELOG b/CHANGELOG index 4734503f2..ede1134b9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,10 @@ +KeePassDX(4.2.1) + * Fix Magikeyboard autosearch #2233 + * Fix database merge #2223 + * Fix dialog database action #2234 + * Fix autofill selection #2238 #2235 + * Small fixes + KeePassDX(4.2.0) * Passkeys management #1421 #2097 (@cali-95) * Confirm usage of passkey #2165 #2124 diff --git a/app/build.gradle b/app/build.gradle index 895d76061..21fe4d380 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 19 targetSdkVersion 35 - versionCode = 145 - versionName = "4.2.0" + versionCode = 146 + versionName = "4.2.1" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" diff --git a/app/src/free/assets/passkeys_privileged_apps_community.json b/app/src/free/assets/passkeys_privileged_apps_community.json index 27eb8b5bc..0e2e4e5dd 100644 --- a/app/src/free/assets/passkeys_privileged_apps_community.json +++ b/app/src/free/assets/passkeys_privileged_apps_community.json @@ -48,6 +48,18 @@ ] } }, + { + "type": "android", + "info": { + "package_name": "org.ironfoxoss.ironfox.nightly", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "C5:E2:91:B5:A5:71:F9:C8:CD:9A:97:99:C2:C9:4E:02:EC:97:03:94:88:93:F2:CA:75:6D:67:B9:42:04:F9:04" + } + ] + } + }, { "type": "android", "info": { diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index f339459fa..9ac3e99b0 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -63,7 +63,6 @@ import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.buildSpecia import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveRegisterInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSearchInfo import com.kunzisoft.keepass.credentialprovider.TypeMode -import com.kunzisoft.keepass.credentialprovider.magikeyboard.MagikeyboardService import com.kunzisoft.keepass.credentialprovider.passkey.util.PasskeyHelper.buildPasskeyResponseAndSetResult import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.database.element.Attachment @@ -486,14 +485,12 @@ class EntryEditActivity : DatabaseLockActivity(), } private fun entryValidatedForKeyboardSelection(database: ContextualDatabase, entry: Entry) { - // Populate Magikeyboard with entry - MagikeyboardService.populateKeyboardAndMoveAppToBackground( - this, - entry.getEntryInfo(database) + // Build Magikeyboard response with the entry selected + this.buildSpecialModeResponseAndSetResult( + entryInfo = entry.getEntryInfo(database), + extras = buildEntryResult(entry) ) onValidateSpecialMode() - // Don't keep activity history for entry edition - finishForEntryResult(entry) } private fun entryValidatedForAutofill(database: ContextualDatabase, entry: Entry) { diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index 3c8ebc179..28cd408fe 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -467,7 +467,7 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(), * ------------------------- */ - fun launchForSearchResult( + fun launchForSearch( context: Context, searchInfo: SearchInfo ) { @@ -488,7 +488,7 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(), context: Context, typeMode: TypeMode, searchInfo: SearchInfo? = null, - activityResultLauncher: ActivityResultLauncher? = null, + activityResultLauncher: ActivityResultLauncher?, ) { EntrySelectionHelper.startActivityForSelectionModeResult( context = context, @@ -512,10 +512,10 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(), ) { EntrySelectionHelper.startActivityForRegistrationModeResult( context = context, - activityResultLauncher = activityResultLauncher, intent = Intent(context, FileDatabaseSelectActivity::class.java), registerInfo = registerInfo, - typeMode = typeMode + typeMode = typeMode, + activityResultLauncher = activityResultLauncher ) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt index f0bba2b56..238c950d5 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -18,6 +18,7 @@ */ package com.kunzisoft.keepass.activities +import android.app.Activity import android.app.SearchManager import android.content.ComponentName import android.content.Context @@ -41,7 +42,6 @@ import android.widget.TextView import androidx.activity.result.ActivityResultLauncher import androidx.activity.viewModels import androidx.appcompat.app.ActionBarDrawerToggle -import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.Toolbar @@ -915,11 +915,8 @@ class GroupActivity : DatabaseLockActivity(), private fun entrySelectedForKeyboardSelection(database: ContextualDatabase, entry: Entry) { removeSearch() - // Populate Magikeyboard with entry - MagikeyboardService.populateKeyboardAndMoveAppToBackground( - this, - entry.getEntryInfo(database) - ) + // Build response with the entry selected + this.buildSpecialModeResponseAndSetResult(entry.getEntryInfo(database)) onValidateSpecialMode() } @@ -1521,7 +1518,7 @@ class GroupActivity : DatabaseLockActivity(), * Search Launch * ------------------------- */ - fun launchForSearchResult( + fun launchForSearch( context: Context, database: ContextualDatabase, searchInfo: SearchInfo, @@ -1536,13 +1533,18 @@ class GroupActivity : DatabaseLockActivity(), } } + /* + * ------------------------- + * Selection Launch + * ------------------------- + */ fun launchForSelection( context: Context, database: ContextualDatabase, typeMode: TypeMode, searchInfo: SearchInfo? = null, autoSearch: Boolean = false, - activityResultLauncher: ActivityResultLauncher? = null, + activityResultLauncher: ActivityResultLauncher?, ) { if (database.loaded) { checkTimeAndBuildIntent(context, null) { intent -> @@ -1590,7 +1592,7 @@ class GroupActivity : DatabaseLockActivity(), * ------------------------- */ fun launch( - activity: AppCompatActivity, + activity: Activity, database: ContextualDatabase, onValidateSpecialMode: () -> Unit, onCancelSpecialMode: () -> Unit, @@ -1610,7 +1612,7 @@ class GroupActivity : DatabaseLockActivity(), searchAction = { searchInfo -> // Search action if (database.loaded) { - launchForSearchResult(activity, + launchForSearch(activity, database, searchInfo, true) @@ -1632,11 +1634,7 @@ class GroupActivity : DatabaseLockActivity(), MagikeyboardService.performSelection( items = items, actionPopulateKeyboard = { entryInfo -> - // Keyboard populated - MagikeyboardService.populateKeyboardAndMoveAppToBackground( - activity, - entryInfo - ) + activity.buildSpecialModeResponseAndSetResult(items) onValidateSpecialMode() }, actionEntrySelection = { autoSearch -> @@ -1645,6 +1643,7 @@ class GroupActivity : DatabaseLockActivity(), database = database, typeMode = TypeMode.MAGIKEYBOARD, searchInfo = searchInfo, + activityResultLauncher = activityResultLauncher, autoSearch = autoSearch ) onLaunchActivitySpecialMode() diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt index 95ce84881..63bba08eb 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt @@ -36,7 +36,6 @@ import android.widget.TextView import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.viewModels -import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.biometric.BiometricManager import androidx.coordinatorlayout.widget.CoordinatorLayout @@ -803,13 +802,13 @@ class MainCredentialActivity : DatabaseModeActivity() { @Throws(FileNotFoundException::class) fun launchForSelection( - activity: AppCompatActivity, + activity: Activity, databaseFile: Uri, keyFile: Uri?, hardwareKey: HardwareKey?, typeMode: TypeMode, searchInfo: SearchInfo?, - activityResultLauncher: ActivityResultLauncher? = null, + activityResultLauncher: ActivityResultLauncher? ) { buildAndLaunchIntent(activity, databaseFile, keyFile, hardwareKey) { intent -> EntrySelectionHelper.startActivityForSelectionModeResult( @@ -831,20 +830,20 @@ class MainCredentialActivity : DatabaseModeActivity() { @Throws(FileNotFoundException::class) fun launchForRegistration( activity: Activity, - activityResultLauncher: ActivityResultLauncher?, databaseFile: Uri, keyFile: Uri?, hardwareKey: HardwareKey?, typeMode: TypeMode, - registerInfo: RegisterInfo? + registerInfo: RegisterInfo?, + activityResultLauncher: ActivityResultLauncher? ) { buildAndLaunchIntent(activity, databaseFile, keyFile, hardwareKey) { intent -> EntrySelectionHelper.startActivityForRegistrationModeResult( context = activity, - activityResultLauncher = activityResultLauncher, intent = intent, typeMode = typeMode, - registerInfo = registerInfo + registerInfo = registerInfo, + activityResultLauncher = activityResultLauncher, ) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt index f823220f6..183f21ddc 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseActivity.kt @@ -65,7 +65,6 @@ abstract class DatabaseActivity : StylishActivity(), DatabaseRetrieval { finish() } } - is DatabaseViewModel.ActionState.OnDatabaseInfoChanged -> { if (manageDatabaseInfo()) { showDatabaseChangedDialog( @@ -75,29 +74,21 @@ abstract class DatabaseActivity : StylishActivity(), DatabaseRetrieval { ) } } - is DatabaseViewModel.ActionState.OnDatabaseActionRequested -> { startDatabasePermissionService( uiState.bundle, uiState.actionTask ) } - is DatabaseViewModel.ActionState.OnDatabaseActionStarted -> { - if (showDatabaseDialog()) - startDialog(uiState.progressMessage) + showDialog(uiState.progressMessage) } - is DatabaseViewModel.ActionState.OnDatabaseActionUpdated -> { - if (showDatabaseDialog()) - updateDialog(uiState.progressMessage) + showDialog(uiState.progressMessage) } - is DatabaseViewModel.ActionState.OnDatabaseActionStopped -> { - // Remove the progress task - stopDialog() + // nothing here, wait for the action to finish } - is DatabaseViewModel.ActionState.OnDatabaseActionFinished -> { onDatabaseActionFinished( uiState.database, @@ -203,29 +194,27 @@ abstract class DatabaseActivity : StylishActivity(), DatabaseRetrieval { } } - private fun startDialog(progressMessage: ProgressMessage) { + private fun showDialog(progressMessage: ProgressMessage) { lifecycleScope.launch { - if (progressTaskDialogFragment == null) { - progressTaskDialogFragment = supportFragmentManager - .findFragmentByTag(PROGRESS_TASK_DIALOG_TAG) as ProgressTaskDialogFragment? + if (showDatabaseDialog()) { + if (progressTaskDialogFragment == null) { + progressTaskDialogFragment = supportFragmentManager + .findFragmentByTag(PROGRESS_TASK_DIALOG_TAG) as ProgressTaskDialogFragment? + } + if (progressTaskDialogFragment == null) { + progressTaskDialogFragment = ProgressTaskDialogFragment() + progressTaskDialogFragment?.show( + supportFragmentManager, + PROGRESS_TASK_DIALOG_TAG + ) + } + progressTaskDialogFragment?.apply { + updateTitle(progressMessage.titleId) + updateMessage(progressMessage.messageId) + updateWarning(progressMessage.warningId) + setCancellable(progressMessage.cancelable) + } } - if (progressTaskDialogFragment == null) { - progressTaskDialogFragment = ProgressTaskDialogFragment() - progressTaskDialogFragment?.show( - supportFragmentManager, - PROGRESS_TASK_DIALOG_TAG - ) - } - updateDialog(progressMessage) - } - } - - private fun updateDialog(progressMessage: ProgressMessage) { - progressTaskDialogFragment?.apply { - updateTitle(progressMessage.titleId) - updateMessage(progressMessage.messageId) - updateWarning(progressMessage.warningId) - setCancellable(progressMessage.cancelable) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt index bf60df362..e929852d4 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt @@ -34,15 +34,20 @@ import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.IconCompat import com.kunzisoft.keepass.R import com.kunzisoft.keepass.database.ContextualDatabase +import com.kunzisoft.keepass.database.element.node.NodeIdUUID import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.RegisterInfo import com.kunzisoft.keepass.model.SearchInfo import com.kunzisoft.keepass.utils.LOCK_ACTION +import com.kunzisoft.keepass.utils.getEnum import com.kunzisoft.keepass.utils.getEnumExtra +import com.kunzisoft.keepass.utils.getParcelableCompat import com.kunzisoft.keepass.utils.getParcelableExtraCompat import com.kunzisoft.keepass.utils.getParcelableList +import com.kunzisoft.keepass.utils.putEnum import com.kunzisoft.keepass.utils.putEnumExtra import com.kunzisoft.keepass.utils.putParcelableList +import java.io.IOException import java.util.UUID object EntrySelectionHelper { @@ -157,10 +162,21 @@ object EntrySelectionHelper { return this } + fun Bundle.addSearchInfo(searchInfo: SearchInfo?): Bundle { + searchInfo?.let { + putParcelable(KEY_SEARCH_INFO, it) + } + return this + } + fun Intent.retrieveSearchInfo(): SearchInfo? { return getParcelableExtraCompat(KEY_SEARCH_INFO) } + fun Bundle.getSearchInfo(): SearchInfo? { + return getParcelableCompat(KEY_SEARCH_INFO) + } + fun Intent.addRegisterInfo(registerInfo: RegisterInfo?): Intent { registerInfo?.let { putExtra(KEY_REGISTER_INFO, it) @@ -168,10 +184,21 @@ object EntrySelectionHelper { return this } + fun Bundle.addRegisterInfo(registerInfo: RegisterInfo?): Bundle { + registerInfo?.let { + putParcelable(KEY_REGISTER_INFO, it) + } + return this + } + fun Intent.retrieveRegisterInfo(): RegisterInfo? { return getParcelableExtraCompat(KEY_REGISTER_INFO) } + fun Bundle.getRegisterInfo(): RegisterInfo? { + return getParcelableCompat(KEY_REGISTER_INFO) + } + fun Intent.removeInfo() { removeExtra(KEY_SEARCH_INFO) removeExtra(KEY_REGISTER_INFO) @@ -182,8 +209,17 @@ object EntrySelectionHelper { return this } + fun Bundle.addSpecialMode(specialMode: SpecialMode): Bundle { + this.putEnum(KEY_SPECIAL_MODE, specialMode) + return this + } + fun Intent.retrieveSpecialMode(): SpecialMode { - return getEnumExtra(KEY_SPECIAL_MODE) ?: SpecialMode.DEFAULT + return this.getEnumExtra(KEY_SPECIAL_MODE) ?: SpecialMode.DEFAULT + } + + fun Bundle.getSpecialMode(): SpecialMode { + return this.getEnum(KEY_SPECIAL_MODE) ?: SpecialMode.DEFAULT } fun Intent.addTypeMode(typeMode: TypeMode): Intent { @@ -233,12 +269,26 @@ object EntrySelectionHelper { removeExtra(EXTRA_NODE_ID) } + /** + * Retrieve nodes ids from intent and get the corresponding entry info list in [database] + */ + fun Intent.retrieveAndRemoveEntries(database: ContextualDatabase): List { + val nodesIds = retrieveNodesIds() + ?: throw IOException("NodesIds is null") + removeNodesIds() + return nodesIds.mapNotNull { nodeId -> + database + .getEntryById(NodeIdUUID(nodeId)) + ?.getEntryInfo(database) + } + } + /** * Intent sender uses special retains data in callback */ fun isIntentSenderMode(specialMode: SpecialMode, typeMode: TypeMode): Boolean { return (specialMode == SpecialMode.SELECTION - && (typeMode == TypeMode.AUTOFILL || typeMode == TypeMode.PASSKEY)) + && (typeMode == TypeMode.MAGIKEYBOARD || typeMode == TypeMode.AUTOFILL || typeMode == TypeMode.PASSKEY)) || (specialMode == SpecialMode.REGISTRATION && (typeMode == TypeMode.AUTOFILL || typeMode == TypeMode.PASSKEY)) } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/AutofillLauncherActivity.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/AutofillLauncherActivity.kt index 1fad3d25d..2e02fbf8f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/AutofillLauncherActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/AutofillLauncherActivity.kt @@ -38,14 +38,17 @@ import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.addRegisterInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.addSearchInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.addSpecialMode +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.getRegisterInfo +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.getSearchInfo +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.getSpecialMode import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.setActivityResult import com.kunzisoft.keepass.credentialprovider.SpecialMode import com.kunzisoft.keepass.credentialprovider.autofill.AutofillComponent import com.kunzisoft.keepass.credentialprovider.autofill.AutofillHelper.addAutofillComponent +import com.kunzisoft.keepass.credentialprovider.autofill.AutofillHelper.retrieveAutofillComponent import com.kunzisoft.keepass.credentialprovider.viewmodel.AutofillLauncherViewModel import com.kunzisoft.keepass.credentialprovider.viewmodel.CredentialLauncherViewModel import com.kunzisoft.keepass.database.ContextualDatabase -import com.kunzisoft.keepass.database.exception.RegisterInReadOnlyDatabaseException import com.kunzisoft.keepass.model.RegisterInfo import com.kunzisoft.keepass.model.SearchInfo import com.kunzisoft.keepass.utils.AppUtil.randomRequestCode @@ -76,6 +79,14 @@ class AutofillLauncherActivity : DatabaseModeActivity() { } override fun onCreate(savedInstanceState: Bundle?) { + // To apply the bypass https://github.com/Kunzisoft/KeePassDX/issues/2238 + // before managing intent in super class + intent.retrieveSelectionBundle()?.apply { + intent.addSpecialMode(getSpecialMode()) + intent.addSearchInfo(getSearchInfo()) + intent.addRegisterInfo(getRegisterInfo()) + intent.addAutofillComponent(retrieveAutofillComponent()) + } super.onCreate(savedInstanceState) autofillLauncherViewModel.initialize() lifecycleScope.launch { @@ -87,10 +98,6 @@ class AutofillLauncherActivity : DatabaseModeActivity() { showBlockRestartMessage() autofillLauncherViewModel.cancelResult() } - is AutofillLauncherViewModel.UIState.ShowReadOnlyMessage -> { - showReadOnlySaveMessage() - autofillLauncherViewModel.cancelResult() - } is AutofillLauncherViewModel.UIState.ShowAutofillSuggestionMessage -> { showAutofillSuggestionMessage() } @@ -101,8 +108,8 @@ class AutofillLauncherActivity : DatabaseModeActivity() { // Retrieve the UI autofillLauncherViewModel.credentialUiState.collect { uiState -> when (uiState) { - is CredentialLauncherViewModel.UIState.Loading -> {} - is CredentialLauncherViewModel.UIState.LaunchGroupActivityForSelection -> { + is CredentialLauncherViewModel.CredentialState.Loading -> {} + is CredentialLauncherViewModel.CredentialState.LaunchGroupActivityForSelection -> { GroupActivity.launchForSelection( context = this@AutofillLauncherActivity, database = uiState.database, @@ -111,7 +118,7 @@ class AutofillLauncherActivity : DatabaseModeActivity() { activityResultLauncher = mAutofillSelectionActivityResultLauncher, ) } - is CredentialLauncherViewModel.UIState.LaunchGroupActivityForRegistration -> { + is CredentialLauncherViewModel.CredentialState.LaunchGroupActivityForRegistration -> { GroupActivity.launchForRegistration( context = this@AutofillLauncherActivity, database = uiState.database, @@ -120,7 +127,7 @@ class AutofillLauncherActivity : DatabaseModeActivity() { activityResultLauncher = mAutofillRegistrationActivityResultLauncher ) } - is CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForSelection -> { + is CredentialLauncherViewModel.CredentialState.LaunchFileDatabaseSelectActivityForSelection -> { FileDatabaseSelectActivity.launchForSelection( context = this@AutofillLauncherActivity, searchInfo = uiState.searchInfo, @@ -128,7 +135,7 @@ class AutofillLauncherActivity : DatabaseModeActivity() { activityResultLauncher = mAutofillSelectionActivityResultLauncher ) } - is CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForRegistration -> { + is CredentialLauncherViewModel.CredentialState.LaunchFileDatabaseSelectActivityForRegistration -> { FileDatabaseSelectActivity.launchForRegistration( context = this@AutofillLauncherActivity, registerInfo = uiState.registerInfo, @@ -136,14 +143,14 @@ class AutofillLauncherActivity : DatabaseModeActivity() { activityResultLauncher = mAutofillRegistrationActivityResultLauncher, ) } - is CredentialLauncherViewModel.UIState.SetActivityResult -> { + is CredentialLauncherViewModel.CredentialState.SetActivityResult -> { setActivityResult( lockDatabase = uiState.lockDatabase, resultCode = uiState.resultCode, data = uiState.data ) } - is CredentialLauncherViewModel.UIState.ShowError -> { + is CredentialLauncherViewModel.CredentialState.ShowError -> { toastError(uiState.error) autofillLauncherViewModel.cancelResult() } @@ -174,29 +181,34 @@ class AutofillLauncherActivity : DatabaseModeActivity() { ).show() } - private fun showReadOnlySaveMessage() { - toastError(RegisterInReadOnlyDatabaseException()) - } - companion object { + private const val KEY_PENDING_INTENT_BUNDLE = "com.kunzisoft.keepass.extra.BUNDLE" private val TAG = AutofillLauncherActivity::class.java.name + fun Intent.retrieveSelectionBundle(): Bundle? { + return this.getBundleExtra(KEY_PENDING_INTENT_BUNDLE) + } + fun getPendingIntentForSelection( context: Context, searchInfo: SearchInfo? = null, autofillComponent: AutofillComponent ): PendingIntent? { try { + // Doesn't work with direct extra Parcelable in Android 11 (don't know why?) + // https://github.com/Kunzisoft/KeePassDX/issues/2238 + // Wrap into a bundle to bypass the problem + val tempBundle = Bundle().apply { + addSpecialMode(SpecialMode.SELECTION) + addSearchInfo(searchInfo) + addAutofillComponent(autofillComponent) + } return PendingIntent.getActivity( context, randomRequestCode(), - // Doesn't work with direct extra Parcelable (don't know why?) - // Wrap into a bundle to bypass the problem Intent(context, AutofillLauncherActivity::class.java).apply { - addSpecialMode(SpecialMode.SELECTION) - addSearchInfo(searchInfo) - addAutofillComponent(autofillComponent) + putExtra(KEY_PENDING_INTENT_BUNDLE, tempBundle) }, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_CANCEL_CURRENT @@ -215,12 +227,16 @@ class AutofillLauncherActivity : DatabaseModeActivity() { registerInfo: RegisterInfo ): PendingIntent? { try { + // Bypass intent issue + val tempBundle = Bundle().apply { + addSpecialMode(SpecialMode.REGISTRATION) + addRegisterInfo(registerInfo) + } return PendingIntent.getActivity( context, randomRequestCode(), Intent(context, AutofillLauncherActivity::class.java).apply { - addSpecialMode(SpecialMode.REGISTRATION) - addRegisterInfo(registerInfo) + putExtra(KEY_PENDING_INTENT_BUNDLE, tempBundle) }, if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_CANCEL_CURRENT diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/EntrySelectionLauncherActivity.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/EntrySelectionLauncherActivity.kt index 7bb3936e8..561d64184 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/EntrySelectionLauncherActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/EntrySelectionLauncherActivity.kt @@ -22,20 +22,22 @@ package com.kunzisoft.keepass.credentialprovider.activity import android.content.Context import android.content.Intent import android.os.Bundle -import androidx.core.net.toUri +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.activity.viewModels +import androidx.lifecycle.lifecycleScope import com.kunzisoft.keepass.activities.FileDatabaseSelectActivity import com.kunzisoft.keepass.activities.GroupActivity import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity -import com.kunzisoft.keepass.credentialprovider.TypeMode +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.addSearchInfo +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.setActivityResult import com.kunzisoft.keepass.credentialprovider.magikeyboard.MagikeyboardService +import com.kunzisoft.keepass.credentialprovider.viewmodel.CredentialLauncherViewModel +import com.kunzisoft.keepass.credentialprovider.viewmodel.EntrySelectionViewModel import com.kunzisoft.keepass.database.ContextualDatabase -import com.kunzisoft.keepass.database.exception.RegisterInReadOnlyDatabaseException -import com.kunzisoft.keepass.database.helper.SearchHelper import com.kunzisoft.keepass.model.SearchInfo -import com.kunzisoft.keepass.otp.OtpEntryFields -import com.kunzisoft.keepass.utils.KeyboardUtil.isKeyboardActivatedInSettings -import com.kunzisoft.keepass.utils.getParcelableCompat import com.kunzisoft.keepass.view.toastError +import kotlinx.coroutines.launch /** * Activity to search or select entry in database, @@ -43,201 +45,129 @@ import com.kunzisoft.keepass.view.toastError */ class EntrySelectionLauncherActivity : DatabaseModeActivity() { - override fun applyCustomStyle(): Boolean { - return false - } + private val entrySelectionViewModel: EntrySelectionViewModel by viewModels() - override fun finishActivityIfReloadRequested(): Boolean { - return false + private var mEntrySelectionActivityResultLauncher: ActivityResultLauncher? = + this.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { + entrySelectionViewModel.manageSelectionResult(it) + } + + override fun applyCustomStyle() = false + + override fun finishActivityIfReloadRequested() = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + entrySelectionViewModel.initialize() + lifecycleScope.launch { + // Initialize the parameters + entrySelectionViewModel.uiState.collect { uiState -> + when (uiState) { + is EntrySelectionViewModel.UIState.Loading -> {} + is EntrySelectionViewModel.UIState.PopulateKeyboard -> { + MagikeyboardService.addEntryAndLaunchNotificationIfAllowed( + context = this@EntrySelectionLauncherActivity, + entry = uiState.entryInfo, + toast = true + ) + } + is EntrySelectionViewModel.UIState.LaunchFileDatabaseSelectForSearch -> { + FileDatabaseSelectActivity.launchForSearch( + context = this@EntrySelectionLauncherActivity, + searchInfo = uiState.searchInfo + ) + } + is EntrySelectionViewModel.UIState.LaunchGroupActivityForSearch -> { + GroupActivity.launchForSearch( + context = this@EntrySelectionLauncherActivity, + database = uiState.database, + searchInfo = uiState.searchInfo + ) + } + } + } + } + lifecycleScope.launch { + // Retrieve the UI + entrySelectionViewModel.credentialUiState.collect { uiState -> + when (uiState) { + is CredentialLauncherViewModel.CredentialState.Loading -> {} + is CredentialLauncherViewModel.CredentialState.LaunchGroupActivityForSelection -> { + GroupActivity.launchForSelection( + context = this@EntrySelectionLauncherActivity, + database = uiState.database, + searchInfo = uiState.searchInfo, + typeMode = uiState.typeMode, + activityResultLauncher = mEntrySelectionActivityResultLauncher + ) + } + is CredentialLauncherViewModel.CredentialState.LaunchGroupActivityForRegistration -> { + GroupActivity.launchForRegistration( + context = this@EntrySelectionLauncherActivity, + database = uiState.database, + registerInfo = uiState.registerInfo, + typeMode = uiState.typeMode, + activityResultLauncher = null // Null to not get any callback + ) + finish() + } + is CredentialLauncherViewModel.CredentialState.LaunchFileDatabaseSelectActivityForSelection -> { + FileDatabaseSelectActivity.launchForSelection( + context = this@EntrySelectionLauncherActivity, + searchInfo = uiState.searchInfo, + typeMode = uiState.typeMode, + activityResultLauncher = mEntrySelectionActivityResultLauncher + ) + } + is CredentialLauncherViewModel.CredentialState.LaunchFileDatabaseSelectActivityForRegistration -> { + FileDatabaseSelectActivity.launchForRegistration( + context = this@EntrySelectionLauncherActivity, + registerInfo = uiState.registerInfo, + typeMode = uiState.typeMode, + activityResultLauncher = null // Null to not get any callback + ) + finish() + } + is CredentialLauncherViewModel.CredentialState.SetActivityResult -> { + setActivityResult( + lockDatabase = uiState.lockDatabase, + resultCode = uiState.resultCode, + data = uiState.data + ) + } + is CredentialLauncherViewModel.CredentialState.ShowError -> { + toastError(uiState.error) + entrySelectionViewModel.cancelResult() + } + } + } + } } override fun onUnknownDatabaseRetrieved(database: ContextualDatabase?) { super.onUnknownDatabaseRetrieved(database) - - val keySelectionBundle = intent.getBundleExtra(KEY_SELECTION_BUNDLE) - if (keySelectionBundle != null) { - // To manage package name - var searchInfo = SearchInfo() - keySelectionBundle.getParcelableCompat(KEY_SEARCH_INFO)?.let { mSearchInfo -> - searchInfo = mSearchInfo - } - launch(database, searchInfo) - } else { - // To manage share - var sharedWebDomain: String? = null - var otpString: String? = null - - when (intent?.action) { - Intent.ACTION_SEND -> { - if ("text/plain" == intent.type) { - // Retrieve web domain or OTP - intent.getStringExtra(Intent.EXTRA_TEXT)?.let { extra -> - if (OtpEntryFields.isOTPUri(extra)) - otpString = extra - else - sharedWebDomain = extra.toUri().host - } - } - launchSelection(database, sharedWebDomain, otpString) - } - Intent.ACTION_VIEW -> { - // Retrieve OTP - intent.dataString?.let { extra -> - if (OtpEntryFields.isOTPUri(extra)) - otpString = extra - } - launchSelection(database, null, otpString) - } - else -> { - if (database != null) { - GroupActivity.launch(this, database) - } else { - FileDatabaseSelectActivity.launch(this) - } - } - } - } - finish() + entrySelectionViewModel.launchActionIfNeeded(intent, mSpecialMode, database) } - private fun launchSelection(database: ContextualDatabase?, - sharedWebDomain: String?, - otpString: String?) { - // Build domain search param - val searchInfo = SearchInfo().apply { - this.webDomain = sharedWebDomain - this.otpString = otpString - } - launch(database, searchInfo) - } - - private fun launch(database: ContextualDatabase?, - searchInfo: SearchInfo) { - - // Setting to integrate Magikeyboard - val searchShareForMagikeyboard = isKeyboardActivatedInSettings() - - // If database is open - val readOnly = database?.isReadOnly != false - SearchHelper.checkAutoSearchInfo( - context = this, - database = database, - searchInfo = searchInfo, - onItemsFound = { openedDatabase, items -> - // Items found - if (searchInfo.otpString != null) { - if (!readOnly) { - GroupActivity.launchForRegistration( - context = this, - activityResultLauncher = null, - database = openedDatabase, - registerInfo = searchInfo.toRegisterInfo(), - typeMode = TypeMode.DEFAULT - ) - } else { - toastError(RegisterInReadOnlyDatabaseException()) - } - } else if (searchShareForMagikeyboard) { - MagikeyboardService.performSelection( - items, - { entryInfo -> - // Automatically populate keyboard - MagikeyboardService.populateKeyboardAndMoveAppToBackground( - this, - entryInfo - ) - }, - { autoSearch -> - GroupActivity.launchForSelection( - context = this, - database = openedDatabase, - typeMode = TypeMode.MAGIKEYBOARD, - searchInfo = searchInfo, - autoSearch = autoSearch - ) - } - ) - } else { - GroupActivity.launchForSearchResult( - this, - openedDatabase, - searchInfo, - true - ) - } - }, - onItemNotFound = { openedDatabase -> - // Show the database UI to select the entry - if (searchInfo.otpString != null) { - if (!readOnly) { - GroupActivity.launchForRegistration( - context = this, - activityResultLauncher = null, - database = openedDatabase, - registerInfo = searchInfo.toRegisterInfo(), - typeMode = TypeMode.DEFAULT - ) - } else { - toastError(RegisterInReadOnlyDatabaseException()) - } - } else if (searchShareForMagikeyboard) { - GroupActivity.launchForSelection( - context = this, - database = openedDatabase, - typeMode = TypeMode.MAGIKEYBOARD, - searchInfo = searchInfo, - autoSearch = false - ) - } else { - GroupActivity.launchForSearchResult( - this, - openedDatabase, - searchInfo, - false - ) - } - }, - onDatabaseClosed = { - // If database not open - if (searchInfo.otpString != null) { - FileDatabaseSelectActivity.launchForRegistration( - context = this, - activityResultLauncher = null, - registerInfo = searchInfo.toRegisterInfo(), - typeMode = TypeMode.DEFAULT - ) - } else if (searchShareForMagikeyboard) { - FileDatabaseSelectActivity.launchForSelection( - context = this, - typeMode = TypeMode.MAGIKEYBOARD, - searchInfo = searchInfo - ) - } else { - FileDatabaseSelectActivity.launchForSearchResult( - this, - searchInfo - ) - } - } - ) + override fun onDestroy() { + super.onDestroy() } companion object { - private const val KEY_SELECTION_BUNDLE = "KEY_SELECTION_BUNDLE" - private const val KEY_SEARCH_INFO = "KEY_SEARCH_INFO" - - fun launch(context: Context, - searchInfo: SearchInfo? = null) { - val intent = Intent(context, EntrySelectionLauncherActivity::class.java).apply { - putExtra(KEY_SELECTION_BUNDLE, Bundle().apply { - putParcelable(KEY_SEARCH_INFO, searchInfo) - }) - } - // New task needed because don't launch from an Activity context - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or - Intent.FLAG_ACTIVITY_CLEAR_TASK - context.startActivity(intent) + fun launch( + context: Context, + searchInfo: SearchInfo? = null + ) { + context.startActivity(Intent( + context, + EntrySelectionLauncherActivity::class.java + ).apply { + addSearchInfo(searchInfo) + // New task needed because don't launch from an Activity context + flags = Intent.FLAG_ACTIVITY_NEW_TASK or + Intent.FLAG_ACTIVITY_CLEAR_TASK + }) } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/HardwareKeyActivity.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/HardwareKeyActivity.kt index 8759cc86e..d486bd02e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/HardwareKeyActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/HardwareKeyActivity.kt @@ -76,14 +76,14 @@ class HardwareKeyActivity: DatabaseModeActivity(){ lifecycleScope.launch { mHardwareKeyLauncherViewModel.credentialUiState.collect { uiState -> when (uiState) { - is CredentialLauncherViewModel.UIState.SetActivityResult -> { + is CredentialLauncherViewModel.CredentialState.SetActivityResult -> { setActivityResult( lockDatabase = uiState.lockDatabase, resultCode = uiState.resultCode, data = uiState.data ) } - is CredentialLauncherViewModel.UIState.ShowError -> { + is CredentialLauncherViewModel.CredentialState.ShowError -> { toastError(uiState.error) mHardwareKeyLauncherViewModel.cancelResult() } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/PasskeyLauncherActivity.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/PasskeyLauncherActivity.kt index 1fc0c04c6..077034060 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/PasskeyLauncherActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/activity/PasskeyLauncherActivity.kt @@ -112,19 +112,19 @@ class PasskeyLauncherActivity : DatabaseLockActivity() { lifecycleScope.launch { passkeyLauncherViewModel.credentialUiState.collect { uiState -> when (uiState) { - is CredentialLauncherViewModel.UIState.Loading -> {} - is CredentialLauncherViewModel.UIState.SetActivityResult -> { + is CredentialLauncherViewModel.CredentialState.Loading -> {} + is CredentialLauncherViewModel.CredentialState.SetActivityResult -> { setActivityResult( lockDatabase = uiState.lockDatabase, resultCode = uiState.resultCode, data = uiState.data ) } - is CredentialLauncherViewModel.UIState.ShowError -> { + is CredentialLauncherViewModel.CredentialState.ShowError -> { toastError(uiState.error) passkeyLauncherViewModel.cancelResult() } - is CredentialLauncherViewModel.UIState.LaunchGroupActivityForSelection -> { + is CredentialLauncherViewModel.CredentialState.LaunchGroupActivityForSelection -> { GroupActivity.launchForSelection( context = this@PasskeyLauncherActivity, database = uiState.database, @@ -133,7 +133,7 @@ class PasskeyLauncherActivity : DatabaseLockActivity() { activityResultLauncher = mPasskeySelectionActivityResultLauncher ) } - is CredentialLauncherViewModel.UIState.LaunchGroupActivityForRegistration -> { + is CredentialLauncherViewModel.CredentialState.LaunchGroupActivityForRegistration -> { GroupActivity.launchForRegistration( context = this@PasskeyLauncherActivity, database = uiState.database, @@ -142,7 +142,7 @@ class PasskeyLauncherActivity : DatabaseLockActivity() { activityResultLauncher = mPasskeyRegistrationActivityResultLauncher ) } - is CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForSelection -> { + is CredentialLauncherViewModel.CredentialState.LaunchFileDatabaseSelectActivityForSelection -> { FileDatabaseSelectActivity.launchForSelection( context = this@PasskeyLauncherActivity, typeMode = uiState.typeMode, @@ -150,7 +150,7 @@ class PasskeyLauncherActivity : DatabaseLockActivity() { activityResultLauncher = mPasskeySelectionActivityResultLauncher ) } - is CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForRegistration -> { + is CredentialLauncherViewModel.CredentialState.LaunchFileDatabaseSelectActivityForRegistration -> { FileDatabaseSelectActivity.launchForRegistration( context = this@PasskeyLauncherActivity, typeMode = uiState.typeMode, diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt index 3663db746..6df679543 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt @@ -27,6 +27,7 @@ import android.content.Intent import android.graphics.BlendMode import android.graphics.drawable.Icon import android.os.Build +import android.os.Bundle import android.service.autofill.Dataset import android.service.autofill.Field import android.service.autofill.FillResponse @@ -53,6 +54,7 @@ import com.kunzisoft.keepass.model.SearchInfo import com.kunzisoft.keepass.settings.AutofillSettingsActivity import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.utils.AppUtil.randomRequestCode +import com.kunzisoft.keepass.utils.getParcelableCompat import com.kunzisoft.keepass.utils.getParcelableExtraCompat import java.io.IOException import kotlin.math.min @@ -64,20 +66,50 @@ object AutofillHelper { private const val EXTRA_BASE_STRUCTURE = "com.kunzisoft.keepass.autofill.BASE_STRUCTURE" private const val EXTRA_INLINE_SUGGESTIONS_REQUEST = "com.kunzisoft.keepass.autofill.INLINE_SUGGESTIONS_REQUEST" - fun Intent.addAutofillComponent(autofillComponent: AutofillComponent) { - this.putExtra(EXTRA_BASE_STRUCTURE, autofillComponent.assistStructure) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - autofillComponent.compatInlineSuggestionsRequest?.let { - this.putExtra(EXTRA_INLINE_SUGGESTIONS_REQUEST, it) + fun Intent.addAutofillComponent(autofillComponent: AutofillComponent?): Intent { + autofillComponent?.let { + this.putExtra(EXTRA_BASE_STRUCTURE, autofillComponent.assistStructure) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + autofillComponent.compatInlineSuggestionsRequest?.let { + this.putExtra(EXTRA_INLINE_SUGGESTIONS_REQUEST, it) + } } } + return this } fun Intent.retrieveAutofillComponent(): AutofillComponent? { - getParcelableExtraCompat(EXTRA_BASE_STRUCTURE)?.let { assistStructure -> + this.getParcelableExtraCompat(EXTRA_BASE_STRUCTURE)?.let { assistStructure -> return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - AutofillComponent(assistStructure, - getParcelableExtraCompat(EXTRA_INLINE_SUGGESTIONS_REQUEST)) + AutofillComponent( + assistStructure, + this.getParcelableExtraCompat(EXTRA_INLINE_SUGGESTIONS_REQUEST)) + } else { + AutofillComponent(assistStructure, null) + } + } + return null + } + + fun Bundle.addAutofillComponent(autofillComponent: AutofillComponent?): Bundle { + autofillComponent?.let { + this.putParcelable(EXTRA_BASE_STRUCTURE, autofillComponent.assistStructure) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + autofillComponent.compatInlineSuggestionsRequest?.let { + this.putParcelable(EXTRA_INLINE_SUGGESTIONS_REQUEST, it) + } + } + } + return this + } + + fun Bundle.retrieveAutofillComponent(): AutofillComponent? { + this.getParcelableCompat(EXTRA_BASE_STRUCTURE)?.let { assistStructure -> + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + AutofillComponent( + assistStructure, + this.getParcelableCompat(EXTRA_INLINE_SUGGESTIONS_REQUEST) + ) } else { AutofillComponent(assistStructure, null) } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt index 875609bd4..8677698bd 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt @@ -462,9 +462,11 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL KeyboardEntryNotificationService.launchNotificationIfAllowed(context, entry, toast) } - fun performSelection(items: List, - actionPopulateKeyboard: (entryInfo: EntryInfo) -> Unit, - actionEntrySelection: (autoSearch: Boolean) -> Unit) { + fun performSelection( + items: List, + actionPopulateKeyboard: (entryInfo: EntryInfo) -> Unit, + actionEntrySelection: (autoSearch: Boolean) -> Unit + ) { EntrySelectionHelper.performSelection( items = items, actionPopulateCredentialProvider = { itemFound -> @@ -478,15 +480,5 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL actionEntrySelection = actionEntrySelection ) } - - fun populateKeyboardAndMoveAppToBackground(activity: Activity, - entry: EntryInfo, - toast: Boolean = true) { - // Populate Magikeyboard with entry - addEntryAndLaunchNotificationIfAllowed(activity, entry, toast) - // Consume the selection mode - activity.intent.removeModes() - activity.moveTaskToBack(true) - } } } \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/AutofillLauncherViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/AutofillLauncherViewModel.kt index b16a552fa..13b109a5f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/AutofillLauncherViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/AutofillLauncherViewModel.kt @@ -9,8 +9,7 @@ import android.util.Log import androidx.activity.result.ActivityResult import androidx.annotation.RequiresApi import androidx.lifecycle.viewModelScope -import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.removeNodesIds -import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveNodesIds +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveAndRemoveEntries import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveRegisterInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSearchInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSpecialMode @@ -21,7 +20,7 @@ import com.kunzisoft.keepass.credentialprovider.autofill.AutofillHelper import com.kunzisoft.keepass.credentialprovider.autofill.AutofillHelper.retrieveAutofillComponent import com.kunzisoft.keepass.credentialprovider.autofill.KeeAutofillService import com.kunzisoft.keepass.database.ContextualDatabase -import com.kunzisoft.keepass.database.element.node.NodeIdUUID +import com.kunzisoft.keepass.database.exception.RegisterInReadOnlyDatabaseException import com.kunzisoft.keepass.database.helper.SearchHelper import com.kunzisoft.keepass.model.RegisterInfo import com.kunzisoft.keepass.model.SearchInfo @@ -119,7 +118,7 @@ class AutofillLauncherViewModel(application: Application): CredentialLauncherVie onItemNotFound = { openedDatabase -> // Show the database UI to select the entry mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchGroupActivityForSelection( + CredentialState.LaunchGroupActivityForSelection( database = openedDatabase, searchInfo = searchInfo, typeMode = TypeMode.AUTOFILL @@ -128,7 +127,7 @@ class AutofillLauncherViewModel(application: Application): CredentialLauncherVie onDatabaseClosed = { // If database not open mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForSelection( + CredentialState.LaunchFileDatabaseSelectActivityForSelection( searchInfo = searchInfo, typeMode = TypeMode.AUTOFILL ) @@ -156,17 +155,10 @@ class AutofillLauncherViewModel(application: Application): CredentialLauncherVie Log.d(TAG, "Autofill selection result") if (intent == null) throw IOException("Intent is null") - val nodesIds = intent.retrieveNodesIds() - ?: throw IOException("NodesIds is null") - intent.removeNodesIds() + val entries = intent.retrieveAndRemoveEntries(database) val autofillComponent = mAutofillComponent if (autofillComponent == null) throw IOException("Autofill component is null") - val entries = nodesIds.mapNotNull { nodeId -> - database - .getEntryById(NodeIdUUID(nodeId)) - ?.getEntryInfo(database) - } withContext(Dispatchers.Main) { AutofillHelper.buildResponse( context = getApplication(), @@ -211,32 +203,36 @@ class AutofillLauncherViewModel(application: Application): CredentialLauncherVie if (!readOnly) { // Show the database UI to select the entry mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchGroupActivityForRegistration( + CredentialState.LaunchGroupActivityForRegistration( database = openedDatabase, registerInfo = registerInfo, typeMode = TypeMode.AUTOFILL ) } else { - mUiState.value = UIState.ShowReadOnlyMessage + mCredentialUiState.value = CredentialState.ShowError( + RegisterInReadOnlyDatabaseException() + ) } }, onItemNotFound = { openedDatabase -> if (!readOnly) { // Show the database UI to select the entry mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchGroupActivityForRegistration( + CredentialState.LaunchGroupActivityForRegistration( database = openedDatabase, registerInfo = registerInfo, typeMode = TypeMode.AUTOFILL ) } else { - mUiState.value = UIState.ShowReadOnlyMessage + mCredentialUiState.value = CredentialState.ShowError( + RegisterInReadOnlyDatabaseException() + ) } }, onDatabaseClosed = { // If database not open mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForRegistration( + CredentialState.LaunchFileDatabaseSelectActivityForRegistration( registerInfo = registerInfo, typeMode = TypeMode.AUTOFILL ) @@ -274,7 +270,6 @@ class AutofillLauncherViewModel(application: Application): CredentialLauncherVie sealed class UIState { object Loading: UIState() object ShowBlockRestartMessage: UIState() - object ShowReadOnlyMessage: UIState() object ShowAutofillSuggestionMessage: UIState() } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/CredentialLauncherViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/CredentialLauncherViewModel.kt index 7eb876f2a..01d441831 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/CredentialLauncherViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/CredentialLauncherViewModel.kt @@ -25,12 +25,12 @@ abstract class CredentialLauncherViewModel(application: Application): AndroidVie protected var isResultLauncherRegistered: Boolean = false private var mSelectionResult: ActivityResult? = null - protected val mCredentialUiState = MutableStateFlow(UIState.Loading) - val credentialUiState: StateFlow = mCredentialUiState + protected val mCredentialUiState = MutableStateFlow(CredentialState.Loading) + val credentialUiState: StateFlow = mCredentialUiState fun showError(error: Throwable) { Log.e(TAG, "Error on credential provider launch", error) - mCredentialUiState.value = UIState.ShowError(error) + mCredentialUiState.value = CredentialState.ShowError(error) } open fun onResult() { @@ -41,7 +41,7 @@ abstract class CredentialLauncherViewModel(application: Application): AndroidVie fun setResult(intent: Intent, lockDatabase: Boolean = false) { // Remove the launcher register onResult() - mCredentialUiState.value = UIState.SetActivityResult( + mCredentialUiState.value = CredentialState.SetActivityResult( lockDatabase = lockDatabase, resultCode = RESULT_OK, data = intent @@ -50,7 +50,7 @@ abstract class CredentialLauncherViewModel(application: Application): AndroidVie fun cancelResult(lockDatabase: Boolean = false) { onResult() - mCredentialUiState.value = UIState.SetActivityResult( + mCredentialUiState.value = CredentialState.SetActivityResult( lockDatabase = lockDatabase, resultCode = RESULT_CANCELED ) @@ -115,34 +115,34 @@ abstract class CredentialLauncherViewModel(application: Application): AndroidVie database: ContextualDatabase? ) - sealed class UIState { - object Loading : UIState() + sealed class CredentialState { + object Loading : CredentialState() data class LaunchGroupActivityForSelection( val database: ContextualDatabase, val searchInfo: SearchInfo?, val typeMode: TypeMode - ): UIState() + ): CredentialState() data class LaunchGroupActivityForRegistration( val database: ContextualDatabase, val registerInfo: RegisterInfo?, val typeMode: TypeMode - ): UIState() + ): CredentialState() data class LaunchFileDatabaseSelectActivityForSelection( val searchInfo: SearchInfo?, val typeMode: TypeMode - ): UIState() + ): CredentialState() data class LaunchFileDatabaseSelectActivityForRegistration( val registerInfo: RegisterInfo?, val typeMode: TypeMode - ): UIState() + ): CredentialState() data class SetActivityResult( val lockDatabase: Boolean, val resultCode: Int, val data: Intent? = null - ): UIState() + ): CredentialState() data class ShowError( val error: Throwable - ): UIState() + ): CredentialState() } companion object { diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/EntrySelectionViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/EntrySelectionViewModel.kt new file mode 100644 index 000000000..703c4d385 --- /dev/null +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/EntrySelectionViewModel.kt @@ -0,0 +1,297 @@ +package com.kunzisoft.keepass.credentialprovider.viewmodel + +import android.app.Activity.RESULT_CANCELED +import android.app.Activity.RESULT_OK +import android.app.Application +import android.content.Intent +import android.util.Log +import androidx.activity.result.ActivityResult +import androidx.core.net.toUri +import androidx.lifecycle.viewModelScope +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveAndRemoveEntries +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveNodeId +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSearchInfo +import com.kunzisoft.keepass.credentialprovider.SpecialMode +import com.kunzisoft.keepass.credentialprovider.TypeMode +import com.kunzisoft.keepass.credentialprovider.magikeyboard.MagikeyboardService +import com.kunzisoft.keepass.database.ContextualDatabase +import com.kunzisoft.keepass.database.exception.RegisterInReadOnlyDatabaseException +import com.kunzisoft.keepass.database.helper.SearchHelper +import com.kunzisoft.keepass.model.EntryInfo +import com.kunzisoft.keepass.model.SearchInfo +import com.kunzisoft.keepass.otp.OtpEntryFields +import com.kunzisoft.keepass.utils.KeyboardUtil.isKeyboardActivatedInSettings +import kotlinx.coroutines.CoroutineExceptionHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.io.IOException + +class EntrySelectionViewModel(application: Application): CredentialLauncherViewModel(application) { + + private var searchShareForMagikeyboard: Boolean = false + private var mLockDatabaseAfterSelection: Boolean = false + private val mUiState = MutableStateFlow(UIState.Loading) + val uiState: StateFlow = mUiState + + fun initialize() { + searchShareForMagikeyboard = getApplication().isKeyboardActivatedInSettings() + mLockDatabaseAfterSelection = false // TODO Close database after selection + } + + override fun launchActionIfNeeded( + intent: Intent, + specialMode: SpecialMode, + database: ContextualDatabase? + ) { + // Launch with database when a nodeId is present + if ((database != null && database.loaded) || intent.retrieveNodeId() == null) { + super.launchActionIfNeeded(intent, specialMode, database) + } + } + + override suspend fun launchAction( + intent: Intent, + specialMode: SpecialMode, + database: ContextualDatabase? + ) { + val searchInfo: SearchInfo? = intent.retrieveSearchInfo() + if (searchInfo != null) { + launch(database, searchInfo) + } else { + // To manage share + var sharedWebDomain: String? = null + var otpString: String? = null + + when (intent.action) { + Intent.ACTION_SEND -> { + if ("text/plain" == intent.type) { + // Retrieve web domain or OTP + intent.getStringExtra(Intent.EXTRA_TEXT)?.let { extra -> + if (OtpEntryFields.isOTPUri(extra)) + otpString = extra + else + sharedWebDomain = extra.toUri().host + } + } + launchSelection(database, sharedWebDomain, otpString) + } + Intent.ACTION_VIEW -> { + // Retrieve OTP + intent.dataString?.let { extra -> + if (OtpEntryFields.isOTPUri(extra)) + otpString = extra + } + launchSelection(database, null, otpString) + } + else -> { + if (database != null && database.loaded) { + mUiState.value = UIState.LaunchGroupActivityForSearch( + database = database, + searchInfo = SearchInfo() + ) + } else { + mUiState.value = UIState.LaunchFileDatabaseSelectForSearch( + searchInfo = SearchInfo() + ) + } + } + } + } + } + + // ------------- + // Selection + // ------------- + + private fun launchSelection( + database: ContextualDatabase?, + sharedWebDomain: String?, + otpString: String? + ) { + // Build domain search param + val searchInfo = SearchInfo().apply { + this.webDomain = sharedWebDomain + this.otpString = otpString + } + launch(database, searchInfo) + } + + private fun launch( + database: ContextualDatabase?, + searchInfo: SearchInfo + ) { + // If database is open + val readOnly = database?.isReadOnly != false + SearchHelper.checkAutoSearchInfo( + context = getApplication(), + database = database, + searchInfo = searchInfo, + onItemsFound = { openedDatabase, items -> + // Items found + if (searchInfo.otpString != null) { + if (!readOnly) { + mCredentialUiState.value = + CredentialState.LaunchGroupActivityForRegistration( + database = openedDatabase, + registerInfo = searchInfo.toRegisterInfo(), + typeMode = TypeMode.DEFAULT + ) + } else { + mCredentialUiState.value = CredentialState.ShowError( + RegisterInReadOnlyDatabaseException() + ) + } + } else if (searchShareForMagikeyboard) { + MagikeyboardService.performSelection( + items, + { entryInfo -> + populateKeyboard(entryInfo) + }, + { autoSearch -> + mCredentialUiState.value = CredentialState.LaunchGroupActivityForSelection( + database = openedDatabase, + searchInfo = searchInfo, + typeMode = TypeMode.MAGIKEYBOARD + ) + } + ) + } else { + mUiState.value = UIState.LaunchGroupActivityForSearch( + database = openedDatabase, + searchInfo = searchInfo + ) + } + }, + onItemNotFound = { openedDatabase -> + // Show the database UI to select the entry + if (searchInfo.otpString != null) { + if (!readOnly) { + mCredentialUiState.value = + CredentialState.LaunchGroupActivityForRegistration( + database = openedDatabase, + registerInfo = searchInfo.toRegisterInfo(), + typeMode = TypeMode.DEFAULT + ) + } else { + mCredentialUiState.value = CredentialState.ShowError( + RegisterInReadOnlyDatabaseException() + ) + } + } else if (searchShareForMagikeyboard) { + mCredentialUiState.value = CredentialState.LaunchGroupActivityForSelection( + database = openedDatabase, + searchInfo = searchInfo, + typeMode = TypeMode.MAGIKEYBOARD + ) + } else { + mUiState.value = UIState.LaunchGroupActivityForSearch( + database = openedDatabase, + searchInfo = searchInfo + ) + } + }, + onDatabaseClosed = { + // If database not open + if (searchInfo.otpString != null) { + mCredentialUiState.value = CredentialState.LaunchFileDatabaseSelectActivityForRegistration( + registerInfo = searchInfo.toRegisterInfo(), + typeMode = TypeMode.DEFAULT + ) + } else if (searchShareForMagikeyboard) { + mCredentialUiState.value = CredentialState.LaunchFileDatabaseSelectActivityForSelection( + searchInfo = searchInfo, + typeMode = TypeMode.MAGIKEYBOARD + ) + } else { + mUiState.value = UIState.LaunchFileDatabaseSelectForSearch( + searchInfo = searchInfo + ) + } + } + ) + } + + private fun populateKeyboard(entryInfo: EntryInfo) { + // Automatically populate keyboard + mUiState.value = UIState.PopulateKeyboard(entryInfo) + setResult(Intent(), lockDatabase = mLockDatabaseAfterSelection) + } + + override fun manageSelectionResult( + database: ContextualDatabase, + activityResult: ActivityResult + ) { + super.manageSelectionResult(database, activityResult) + val intent = activityResult.data + viewModelScope.launch(CoroutineExceptionHandler { _, e -> + Log.e(TAG, "Unable to create selection response for Magikeyboard", e) + showError(e) + }) { + when (activityResult.resultCode) { + RESULT_OK -> { + withContext(Dispatchers.IO) { + Log.d(TAG, "Magikeyboard selection result") + if (intent == null) + throw IOException("Intent is null") + val entries = intent.retrieveAndRemoveEntries(database) + withContext(Dispatchers.Main) { + // Populate Magikeyboard with entry + entries.firstOrNull()?.let { entryInfo -> + populateKeyboard(entryInfo) + } // TODO Manage multiple entries in Magikeyboard + } + } + } + RESULT_CANCELED -> { + withContext(Dispatchers.Main) { + cancelResult() + } + } + } + } + } + + override fun manageRegistrationResult(activityResult: ActivityResult) { + super.manageRegistrationResult(activityResult) + viewModelScope.launch(CoroutineExceptionHandler { _, e -> + Log.e(TAG, "Unable to create selection response for Magikeyboard", e) + showError(e) + }) { + when (activityResult.resultCode) { + RESULT_OK -> { + // Empty data result + // TODO Show Toast indicating value is saved + withContext(Dispatchers.Main) { + setResult(Intent(), lockDatabase = false) + } + } + RESULT_CANCELED -> { + withContext(Dispatchers.Main) { + cancelResult() + } + } + } + } + } + + sealed class UIState { + object Loading: UIState() + data class PopulateKeyboard( + val entryInfo: EntryInfo + ): UIState() + data class LaunchFileDatabaseSelectForSearch( + val searchInfo: SearchInfo + ): UIState() + data class LaunchGroupActivityForSearch( + val database: ContextualDatabase, + val searchInfo: SearchInfo + ): UIState() + } + + companion object { + private val TAG = EntrySelectionViewModel::class.java.name + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/PasskeyLauncherViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/PasskeyLauncherViewModel.kt index 138cef430..2e49c6843 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/PasskeyLauncherViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/viewmodel/PasskeyLauncherViewModel.kt @@ -238,7 +238,7 @@ class PasskeyLauncherViewModel(application: Application): CredentialLauncherView "launch manual selection in opened database" ) mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchGroupActivityForSelection( + CredentialState.LaunchGroupActivityForSelection( database = openedDatabase, searchInfo = searchInfo, typeMode = TypeMode.PASSKEY @@ -247,7 +247,7 @@ class PasskeyLauncherViewModel(application: Application): CredentialLauncherView onDatabaseClosed = { Log.d(TAG, "Manual passkey selection in closed database") mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForSelection( + CredentialState.LaunchFileDatabaseSelectActivityForSelection( searchInfo = searchInfo, typeMode = TypeMode.PASSKEY ) @@ -426,7 +426,7 @@ class PasskeyLauncherViewModel(application: Application): CredentialLauncherView "but launch manual registration for a new entry" ) mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchGroupActivityForRegistration( + CredentialState.LaunchGroupActivityForRegistration( database = openedDatabase, registerInfo = registerInfo, typeMode = TypeMode.PASSKEY @@ -435,7 +435,7 @@ class PasskeyLauncherViewModel(application: Application): CredentialLauncherView onItemNotFound = { openedDatabase -> Log.d(TAG, "Launch new manual registration in opened database") mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchGroupActivityForRegistration( + CredentialState.LaunchGroupActivityForRegistration( database = openedDatabase, registerInfo = registerInfo, typeMode = TypeMode.PASSKEY @@ -444,7 +444,7 @@ class PasskeyLauncherViewModel(application: Application): CredentialLauncherView onDatabaseClosed = { Log.d(TAG, "Manual passkey registration in closed database") mCredentialUiState.value = - CredentialLauncherViewModel.UIState.LaunchFileDatabaseSelectActivityForRegistration( + CredentialState.LaunchFileDatabaseSelectActivityForRegistration( registerInfo = registerInfo, typeMode = TypeMode.PASSKEY ) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 92d24a310..bbf0d4c2d 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -335,7 +335,7 @@ استخدم إلغاء القفل الجهاز لفتح قاعدة البيانات بسهولة يعرض زر القَفل في الواجهة أظهر زر القفل - قفل قاعدة البيانات عند النقر على زر الرجوع في الشاشة الرئيسية + اضغط على \"رجوع\" لقفل قاعدة البيانات إذا كنت في الشاشة الجذر لقاعدة البيانات اضغط على \"رجوع\" للإقفال انسخ حقول المدخل باستخدام الحافظة قاعدة البيانات مفتوحة @@ -642,8 +642,8 @@ أظهر \"المعرّف العام المميز\" UUID رابط فتح الجهاز لا يمكن قراءة مفتاح فتح الجهاز. يرجى حذفه وتكرار إجراء التعرف على الفتح. - المظاهر والألوان والسمات - تمكين الملء التلقائي لملء النماذج بسرعة في التطبيقات الأخرى + المظاهر والألوان والأيقونات والخطوط والسمات + اضبط الملء التلقائي لملء النماذج بسرعة في التطبيقات الأخرى يتيح لك استخدام بيانات اعتماد جهازك لفتح قاعدة البيانات فتح البحث، القفل، التاريخ، الخصائص @@ -691,4 +691,45 @@ لا يُنصح بإضافة ملف مفتاحي كبير، فقد يؤدي هذا إلى منع فتح قاعدة البيانات. أخفِ القوالب يجب أن يتكوّن المفتاح السري من %1$d أحرف على الأقل. + معرّف التطبيق + أتريد الكتابة فوق البيانات الموجودة؟ + سيؤدي هذا الإجراء إلى استبدال البيانات الموجودة في الإدخال، ويمكنك استرداد البيانات القديمة إذا كانت المحفوظات مفعلة. + موفّر بيانات الاعتماد + مفاتيح المرور + اضبط مفاتيح المرور لتسجيل دخول سريع وآمن بدون كلمة سر + إعدادات مفاتيح المرور + أغلق قاعدة البيانات + أغلق قاعدة البيانات بعد اختيار مفتاح المرور + التطبيقات المتميزة + أدر المتصفحات في القائمة المخصّصة للتطبيقات المتميزة + تحذير: يعمل تطبيق مميز كبوابة لاسترداد أصل الاستيثاق. تأكد من شرعيته لتجنب المشكلات الأمنية. + التطبيق غير معروف + يحاول %1$s تنفيذ إجراء مفتاح المرور.\n\nأتريد إضافته إلى قائمة التطبيقات المتميزة؟ + التوقيع مفقود + تحذير: أُنشئ مفتاح المرور من عميل آخر أو حُذف التوقيع. تأكد من أن التطبيق الذي تريد الاستيثاق عليه جزء من نفس الخدمة وأنه شرعي لتجنب المشكلات الأمنية.\nإذا كان التطبيق متصفحًا، فلا تضف توقيعه إلى الإدخال، بل إلى قائمة التطبيقات الموثوقة في الإعدادات. + %1$s غير معروف ويحاول الاستيثاق باستخدام مفتاح مرور موجود. + إضافة توقيع التطبيق إلى إدخال مفتاح المرور؟ + تحديد تلقائي + حدّد تلقائي إذا كان هناك إدخال واحد فقط وقاعدة البيانات مفتوحة، فقط إذا كان التطبيق الطالب متوافقًا + أهلية النسخ الاحتياطي + تحديد وقت الإنشاء ما إذا كان مسموحًا بنسخ مصدر بيانات اعتماد المفتاح العام احتياطيًا + حالة النسخ الاحتياطي + أشر إلى أن بيانات الاعتماد مدعومة ومحمية ضد فقدان جهاز واحد + مفاتيح المرور، موفّر بيانات اعتماد الملء التلقائي + مفتاح المرور + موفّر بيانات اعتماد KeePassDX + احفظ مفتاح المرور في مدخل جديد + حدِّث مفتاح المرور في %1$s + لم يُعثر على مفتاح مرور + حدّد مفتاح مرور موجود + قاعدة بيانات KeePassDX + حدّد لفتح القفل + اسم مستخدم مفتاح المرور + المفتاح الخاص لمفتاح المرور + معرّف بيانات مفتاح المرور + معرّف مستخدم مفتاح المرور + الطرف المعتمد لمفتاح المرور + أهلية النسخ الاحتياطي لمفتاح المرور + حالة النسخ الاحتياطي لمفتاح المرور + تعذر إرجاع مفتاح المرور diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 58d48dfb2..ad7011ac4 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -232,7 +232,7 @@ Бързо търсене Търсене на поддомейни Изтриване - Теми, цветове, атрибути + Теми, цветове, икони, шрифтове, атрибути Подготвяне… Цвят на фона на запис KeePassDX © %1$d Kunzisoft е приложение с <strong>отворен код</strong> и <strong>без реклами</strong>. \nРазпространява се под лиценза <strong>GPLv3</strong> без каквато и да е гаранция. @@ -283,11 +283,11 @@ Търсене Горен регистър Внимание - Заключва хранилището при докосване на бутона „Назад“ на началния екран + Бутонът „Назад“ в кореновата папка заключва хранилището Само за четене Хранилището съдържа повтарящ се идентификатор. Биометричен ключ - Задаване на подразбирана услуга за автоматично попълване + Услуга за автоматично попълване на регистрации Дължина на създаваните пароли Заключване при „Назад“ Съдържание @@ -398,7 +398,7 @@ Търсете по заглавие, потребител или съдържание на други полета, за да намерите своите пароли. За <strong>запазване на нашата независимост</strong>, <strong>отстраняване на дефекти</strong>, <strong>добавяне на нови възможности</strong> и <strong>поддържане на активна разработка</strong>, разчитаме на вашата <strong>поддръжка</strong>. Бутон за заключване - Включете услугата за попълване на формуляри в други приложения + Настройки на услугата за попълване на формуляри в други приложения Свойства Не забравяйте да потвърдите записа и да го запазите в хранилището. \n @@ -653,7 +653,7 @@ Автоматична заявка за отключване на устройството ако хранилището се отключва с устройството Разрешава копиране на паролите и защитените полета от записите в междинната памет Списъкът не може да бъде изграден отново. - Формулярът не разпознава този вид OTP и може да не създава правилни кодове за достъп. + Формулярът не разпознава този вид OTP и може да не създава верни кодове за достъп. Отпечатъкът от файла не е сигурен, защото Андроид може да променя данните в движение. Променете разширението на файла на .bin, за бъде невредим. Доверяване на междинната памет Приложението няма права за използване на точен будилник. В резултат на това дейностите, които зависят от него няма да се изпълняват на време. @@ -681,4 +681,45 @@ Шаблоните не се показват Скриване на шаблоните Тайният ключ трябва да бъде най-малко %1$d знаци. + Идент. приложение + Презаписване на информация? + Чрез това действие ще бъде презаоисана информация на записа. Може да намерите старите данни ако историята е включена. + Доставчик на регистрации + Ключове за достъп + Настройки на ключове за достъп за бърз и сигурен вход без парола + Настройки на ключове за достъп + Затваряне на хранилище + Затваряне на хранилището след избор на ключ за достъп + ВНИМАНИЕ: Привилегированото приложение работи като шлюз, който получава източника на удостоверяването. За да избегнете проблеми със сигурността се уверете в неговата автентичност. + Привилегировани приложения + Управление на мрежови четци в потребителския списък с привилегировани приложения + Неразпознато приложение + Приложението „%1$s“ опитва да извърши действия с ключ за достъп .\n\nДа бъде ли добавено в списъка с привилегировани приложения? + Липсващ подпис + Приложението „%1$s“ не е разпознато, но се опитва да извърши удостоверяване с ключ за достъп. + Добавяне на подпис към запис на ключ за достъп? + Автоматичен избор + Работи при отключено хранилище, съвпадение на един запис и съвместимо запитващо приложение + Възможност за резервно копие + Настройка, определяща още при създаване разрешението за резервно копие на публичния ключ на източника на регистрацията + Наличие на резервно копие + Указва дали регистрацията е включена в резервно копие и е защитена от загуба на едно устройство + Услуга за автоматично попълване на ключове за достъп и регистрации + Ключ за достъп + Доставчик на регистрации на KeePassDX + Запазване ключа за достъп в друг запис + Обновяване ключа за достъп в/ъв %1$s + Ключ за достъп не е намерен + Изберете съществуващ ключ за достъп + Хранилище на KeePassDX + Изберете за отключване + Потребител на ключа за достъп + Частен ключ на ключа за достъп + Идент. на регистрация на ключа за достъп + Идент. на потребител на ключа за достъп + Възможност за резервно копие на ключа за достъп + Състояние на резервно копие на ключа за достъп + Грешка при връщане на ключ за достъп + Доверяваща страна на ключа за достъп + ВНИМАНИЕ: Ключът за достъп е създаден от друг клиент или подписът е премахнат. За да избегнете проблеми със сигурността се уверете, че приложението, което удостоверявате е част от същата услуга и е автентично.\nАко приложението е мрежов четец не добавяйте подписа му към записа, а в настройките го добавете в списъка с привилегировани приложения. diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index b18a8ab34..9f4277538 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -180,8 +180,8 @@ Obecné Samovyplnění Přihlásit se s KeePassDX - Nastavit výchozí službu samovyplnění - Zapnout samovyplnění formulářů za účelem rychlého vyplnění v ostatních aplikacích + Služba poskytovatele údajů + Nastavit automatické vyplnění formulářů za účelem rychlého vyplnění v ostatních aplikacích Délka generovaného hesla Nastavení výchozí délky generovaných hesel Znaky hesla @@ -206,7 +206,7 @@ Přiřadit hlavní klíč Vytvořit nový trezor Využití koše - Před smazáním přesune vybrané položky do skupiny s názvem \"Koš\" + Před smazáním přesune vybrané záznamy do skupiny s názvem „Koš“ Písmo kolonek Čitelnost znaků v kolonkách můžete přizpůsobit změnou písma Důvěřovat schránce @@ -283,9 +283,9 @@ Magikeyboard nastavení Záznam Časový limit - Doba uchování položky v Magikeyboardu + Doba uchování položky v klávesnici Informace o oznámení - Zobrazit oznámení, když je položka dostupná + Zobrazit oznámení, když je záznam dostupný Záznam %1$s dostupné v Magikeyboardu %1$s @@ -299,7 +299,7 @@ Režim výběru Nezavírejte aplikaci… K uzamknutí stiskněte Zpět - Zamknout obrazovku, pokud uživatel stiskne tlačítko Zpět v hlavním panelu + Stiskněte „Zpět“ pro uzamčení databáze, pokud se nacházíte na hlavní obrazovce databáze Vymazat při ukončení Uzamknout databázi, jakmile trvání schránky vyprší nebo po uzavření oznámení Koš @@ -524,7 +524,7 @@ MiB KiB B - Nemohu rozpoznat existující typ OTP v této formě, jeho validace patrně nebude generovat správný token. + Nemohu rozpoznat existující typ OTP v této formě a jeho validace patrně nebude generovat správný token. Zrušeno! Vlastní Standardní @@ -679,7 +679,7 @@ Zeptat se Nastavit Propojení s odemykáním zařízení - Motivy, barvy, atributy + Motivy, barvy, ikony, písma, atributy Odemknout Ověřit vstup Nezapomeňte ověřit svůj vstup a uložit databázi. @@ -705,4 +705,45 @@ Skrýt šablony Šablony nejsou zobrazeny Tajný klíč musí obsahovat alespoň %1$d znaků. + ID aplikace + Přepsat existující data? + Tato akce nahradí existující data v položce, pokud je povolena historie, můžete původní data získat. + Poskytovatel údajů + Přístupové klíče + Nastavte přístupové klíče pro rychlé a bezpečné přihlášení bez hesla + Nastavení přístupových klíčů + Zavřít databázi + Zavřít databázi po výběru přístupového klíče + Privilegované aplikace + Spravovat prohlížeče ve vlastním seznamu privilegovaných aplikací + VAROVÁNÍ: Privilegovaná aplikace funguje jako brána k získání původu autentifikace. Ujistěte se, že se jedná o důvěryhodnou aplikaci, pro zabránění bezpečnostním problémům. + Aplikace nerozpoznána + %1$s se pokouší provést akci přísupového klíče.\n\nChcete ji přidat do seznamu privilegovaných aplikací? + Chybějící podpis + VAROVÁNÍ: Přístupový klíč byl vytvořen z jiného klienta nebo byl vymazán podpis. Ujistěte se, že aplikace, kterou chcete autentifikovat, je součástí stejné služby a že je legitimní pro zabránění bezpečnostním problémům.\nPokud je aplikace prohlížeč, nepřidávejte její podpis do záznamu, ale do seznamu privilegovaných aplikací v nastavení. + %1$s je nerozpoznaná a pokouší se o autentifikaci s existujícím přístupovým klíčem. + Přidat podpis aplikace do záznamu přístupového klíče? + Automatický výběr + Automaticky vybrat, pokud existuje pouze jeden záznam a aplikace je otevřená, pouze pokud je žádající aplikace kompatibilní + Možnost zálohy + Při vytváření určit, zda je povoleno zálohovat zdroj ověřovacích údajů veřejného klíče + Stav zálohy + Uvést, že přihlašovací údaje jsou zálohovány a chráněny proti ztrátě jednoho zařízení + Přístupové klíče, poskytovatel automatického vyplnění + Přístupový klíč + Poskytovatel údajů KeePassDX + Uložit přístupový klíč do nového záznamu + Aktualizovat přístupový klíč v %1$s + Nenalezeny žádné přístupové klíče + Vyberte existující přístupový klíč + Databáze KeePassDX + Vyberte k odemčení + Uživatelské jméno přístupového klíče + Soukromý klíč přístupového klíče + ID údaje přístupového klíče + Uživatelská adresa přístupového klíče + Strana předávající přístupový klíč + Způsobilost přístupového klíče k zálohování + Stav zálohy přístupového klíče + Nepodařilo se vrátit přístupový klíč diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 172fe006d..8662a157c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -153,7 +153,7 @@ Erscheinungsbild Generierte Passwortlänge Legt die Standardlänge des generierten Passworts fest - Kopier-Benachrichtigung + Kopierbenachrichtigung Benachrichtigung anzeigen, um beim Betrachten eines Eintrags Felder kopieren zu können Bildschirmsperre Datenbank wenige Sekunden nach Bildschirmabschaltung sperren @@ -197,7 +197,7 @@ Automatisches Ausfüllen Mit KeePassDX anmelden Standard-Autofill-Service festlegen - Automatisches Ausfüllen aktivieren, um Formulare in anderen Apps schnell auszufüllen + Automatisches Ausfüllen konfigurieren, um Formulare in anderen Apps schnell auszufüllen Eintrag auswählen … Zwischenablage Verschlüsselungsschlüssel löschen @@ -223,8 +223,8 @@ Alle Hilfsinfos nochmal anzeigen Hilfeanzeige zurückgesetzt Datenbankdatei erstellen - Erste Datei zur Passwortverwaltung erstellen. - Existierende Datenbank öffnen + Eine erste Datei zur Passwortverwaltung erstellen. + Vorhandene Datenbank öffnen Öffnet über den Dateimanager eine früher erstellte Datenbankdatei, um sie weiterzuverwenden. Datenbankelemente hinzufügen Einträge helfen, digitale Konten zu verwalten. @@ -257,7 +257,7 @@ Durch den Kauf der <strong>Pro-Version</strong>, Durch deinen <strong>Beitrag</strong>, ermutigst du die Entwickler, <strong>neue Funktionen</strong> einzuführen und gemäß deinen Anmerkungen <strong>Fehler zu beheben</strong>. - Vielen Dank für deine Unterstützung. + Vielen Dank für die Unterstützung. Wir bemühen uns, diese Funktion bald zu veröffentlichen. Denke daran, die App durch die Installation neuer Versionen auf dem aktuellsten Stand zu halten. Download @@ -312,7 +312,7 @@ Defekte Datenbankverknüpfungen ausblenden Defekte Verknüpfungen in der Liste der zuletzt verwendeten Datenbanken ausblenden App nicht beenden … - Datenbank sperren, wenn auf dem Hauptbildschirm die Taste „Zurück“ gedrückt wird + „Zurück“ drücken, um die Datenbank zu sperren, wenn man sich auf dem Hauptbildschirm der Datenbank befindet Beim Schließen löschen Papierkorb Eintragsauswahl @@ -508,7 +508,7 @@ Ablauf der Geräteentsperrung Bei Nutzung der Geräteentsperrung keine verschlüsselten Inhalte speichern Zeitlich begrenzte Geräteentsperrung - Ermöglicht das Öffnen der Datenbank mit deinen Geräteanmeldedaten + Ermöglicht das Öffnen der Datenbank mit den persönlichen Geräteanmeldedaten Drücken, um alle Geräteentsperrschlüssel zu löschen Inhalt Datenbank mit Geräteentsperrdaten öffnen @@ -536,7 +536,7 @@ Beim Hochladen der Datei ist ein Fehler aufgetreten. App-Einstellungen importieren Beim Ausführen einer Aktion in der Datenbank ist ein Fehler aufgetreten. - Der vorhandene OTP-Typ wird von diesem Formular nicht erkannt, seine Validierung kann Token möglicherweise nicht mehr korrekt erzeugen. + Der vorhandene OTP-Typ wird von diesem Formular nicht erkannt, und seine Validierung kann Token möglicherweise nicht mehr korrekt erzeugen. Informationen zu Einmalpasswörtern Auf die Datei kann nicht zugegriffen werden. Bitte die Datenbank schließen und von ihrem Speicherort aus erneut öffnen. Fehler beim Exportieren der App-Einstellungen. @@ -682,7 +682,7 @@ Fragen Später Geräteentsperrverknüpfung - Design, Farben, Attribute + Design, Farben, Symbole, Schriftarten, Attribute Die Benachrichtigungsberechtigung ermöglicht es, den Status der Datenbank anzuzeigen und sie mit einer leicht zugänglichen Taste zu sperren. \n \nWird diese Berechtigung nicht aktiviert, ist die im Hintergrund geöffnete Datenbank nicht sichtbar, wenn eine Anwendung im Vordergrund läuft. @@ -704,4 +704,28 @@ Rekursive Anzahl der Einträge Schlüsseldatei generieren Geheimschlüssel muss mindestens %1$d Zeichen lang sein. + App-ID + Bestehende Daten überschreiben? + Diese Aktion ersetzt die bestehenden Daten im Eintrag. Die alten Daten können wiederhergestellt werden, wenn der Verlauf aktiviert ist. + Passkeys + Passkeys-Einstellungen + Datenbank schließen + Vertrauliche Apps + Signatur fehlt + Automatische Auswahl + Backup-Erlaubnis + Backup-Status + App nicht erkannt + Passkey + Kein Passkey gefunden + Passkey in neuem Eintrag speichern + Passkey in %1$s aktualisieren + Vorhandenen Passkey auswählen + KeePassDX-Datenbank + Passkey-Benutzername + Passkey-Backup-Status + Passkey-Backup-Erlaubnis + Datenbank nach der Passwortauswahl schließen + Anmeldeinformationsanbieter + Passkeys für eine schnelle und sichere Anmeldung ohne Passwort konfigurieren diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 0999c2e63..f27845fa8 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -403,7 +403,7 @@ Ajalugu Omadused Välimus - Välimus, värvid, omadused + Välimus, värvid, ikoonid, kirjatüübid, omadused Ära unusta paigaldada viimaseid versioone ja tagada, et rakendus on alati uuendatud. Vähemalt üks tähemärk igast Välista mitmetähenduslikud tähemärgid @@ -452,7 +452,7 @@ Mõni sekund peale ekraani väljalülitumist lukusta andmebaas Vajuta nuppu „Tagasi“ Näita lukustuse nuppu - Lukusta andmebaas peale juurkaustas „Tagasi“ nupu klõpsimist + Kui sa pole andmebaasi juurkasutas, siis lukusta andmebaas peale „Tagasi“ nupu klõpsimist Lõikelaua usaldamine Luba sisestatud salasõna ja kaitstud väljade kopeerimise lõikelauale Eemalda oma andmebaasi lukustus @@ -470,7 +470,7 @@ Hoiatus: süsteemiülene lõikelaud on kõikide rakenduste kasutuses. Kui sa kopeerid sinna delikaatseid andmeid, siis muu tarkvara võib seda seal näha. Kui sa kasutad KDE Connecti või muud lõikelaua jagamise teenust, siis sõltuvalt seadistustest võivad need delikaatsed andmed olla nähtavad ka muudes seadmetes. Failihaldur on blokeerinud ligipääsu failile. Sulge andmebaas ja ava ta uuesti oma asukohast. Logi sisse KeePassDX abil - Täitmaks andmevorme teistes rakenduses, luba automaattäite teenus + Täitmaks andmevorme teistes rakenduses, seadista automaattäite teenus Vali kirje… Vali vaikimisi kasutatav automaattäite teenus Automaattäite teenuse seadistused @@ -662,4 +662,8 @@ Peale tegevust „Automaatne võtmetoiming“ lülita automaatselt tagasi eelmisele klahvistikule Saad juhtida sessioonil kasutatavat avamisviisi.\n\n„Kirjutuskaitstud“ tagab, et juhuslike muudatustega ei läheks andmeid kaotsi.\n„Muudetav“ võimaldab sul lisada, kustutada või muuta kõiki andmebaasi kirjeid. Salavõti peab olema vähemalt %1$d tähemärki pikk. + Rakenduse tunnus + Sulge andmebaas + Rakendust ei õnnestu tuvastada + Kas soovid olemasolevad andmed üle kirjutada? diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index ac3fcd2a2..d23804403 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -437,4 +437,30 @@ Sovellusasetukset tuotu Virhe sovellusasetuksia viedessä Sovellusasetukset tuotu + Secret key on oltava vähintään %1$d merkkiä. + Yhdistä tiedot, korvaa ulkoiset muutokset tallentamalla tietokanta tai lataa se uudelleen uusimmilla muutoksilla. + Lataa tietokanta uudelleen uusimmilla muutoksilla. + Tietokannan uudelleenlataaminen poistaa paikallisesti muokatut tiedot. + Tiedostonhallintaohjelma on peruuttanut tiedoston käyttöoikeuden. Sulje tietokanta ja avaa se uudelleen sen sijainnista. + Et ole antanut sovellukselle lupaa käyttää tarkkaa hälytystä. Tämän seurauksena ajastinta vaativat toiminnot eivät toimi tarkalla ajalla. + Tiedoston tiivisteen eheys ei ole taattu, koska Android voi muuttaa sen tietoja lennossa. Vaihda tiedostopääte .bin:ksi oikean eheyden varmistamiseksi. + Ilmoitusoikeus tarvitaan leikepöydän ilmoitusominaisuuden käyttämiseen. + Myöhemmin + Kysy + Yhdistäminen suoritettu onnistuneesti + Lupa + Määritä + Biometrinen turvallisuuspäivitys vaaditaan. + Laitteen lukituksen avauslinkki + Linkki laitteen lukituksen avaamiseen + Sinun on edelleen muistettava pääkäyttäjätunnuksesi, jos käytät laitteen lukituksen avaamisen tunnistusta. + Laitteen lukituksen tunnistus + Hae tietokannan tunnistetiedot laitteen lukituksen avaustiedoilla + Laitteen lukituksen avausavainta ei voi lukea. Poista se ja toista lukituksen tunnistamismenettely. + Laitteen lukituksen avaustunnistetta ei tunnistettu + Laitteen lukituksen avauskehotuksen alustaminen epäonnistui. + Kirjoita salasana ja napsauta sitten tätä painiketta. + Ominaisuudet + Teemat, värit, kuvakkeet, fontit, attribuutit + Laitteen tunnistetiedot diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e18c16959..49f09f97e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -19,7 +19,7 @@ --> Commentaires Page d’accueil - Implémentation Android du gestionnaire de mots de passe KeePass + Implémentation Android du gestionnaire de mots de passe KeePass. Accepter Ajouter une entrée Ajouter un groupe @@ -165,7 +165,7 @@ Remplissage automatique Se connecter avec KeePassDX Définir le service de remplissage automatique par défaut - Activer le remplissage automatique pour remplir rapidement des formulaires dans d’autres applications + Configurer le remplissage automatique pour remplir rapidement des formulaires dans d’autres applications Sélectionner une entrée… Taille du mot de passe généré Défini la taille par défaut des mots de passe générés @@ -319,7 +319,7 @@ Mode sélection Ne pas fermer l\'application… Appuyer sur \"Retour\" pour verrouiller - Verrouille la base de données lorsque l’utilisateur clique sur le bouton retour de l’écran racine + Appuyer sur « Retour » pour verrouiller la base de données si vous vous trouvez sur l\'écran racine de la base de données Suppression à la fermeture 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 Corbeille @@ -539,7 +539,7 @@ Mébioctets Kibioctets Octets - Le type OTP existant n\'est pas reconnu par ce formulaire, sa validation peut ne plus générer correctement le jeton. + Le type OTP existant n\'est pas reconnu par ce formulaire, et sa validation peut ne plus générer correctement le jeton. Annulé ! Customisé Standard @@ -702,4 +702,45 @@ Cacher les gabarits Les gabarits ne sont pas affichés La clé secrète doit avoir ai moins %1$d caractères. + ID d\'application + Écraser les données existantes ? + Cette action va remplacer la donnée existante de cette entrée, vous pourrez récupérer l\'ancienne donnée si l\'historique est activé. + Clé d\'accès + Configurer des clés d\'accès pour une connexion rapide et sécurisée, sans mot de passe + Paramètres des clés d\'accès + Fermer la base de données + Fournisseur d\'authentification + Fermer la base de données après la sélection d\'un mot de passe + Applications privilégiées + Gérer les navigateurs dans la liste personnalisée des applications privilégiées + AVERTISSEMENT : une application privilégiée sert de passerelle pour récupérer l\'origine d\'une authentification. Assurez-vous de sa légitimité afin d\'éviter tout problème de sécurité. + Application non reconnue + %1$s tente d\'effectuer une action Passkey.\n\nL\'ajouter à la liste des applications privilégiées ? + Signature manquante + AVERTISSEMENT : la clé d\'accès a été créée à partir d\'un autre client ou la signature a été supprimée. Assurez-vous que l\'application que vous souhaitez authentifier fait partie du même service et qu\'elle est légitime afin d\'éviter tout problème de sécurité.\nSi l\'application est un navigateur, n\'ajoutez pas sa signature à l\'entrée, mais à la liste des applications privilégiées dans les paramètres. + %1$s n\'est pas reconnu et tente de s\'authentifier avec une clé d\'accès existante. + Ajouter la signature d\'application à l\'entrée contenant la clé d\'accès ? + Sélection automatique + Sélection automatique s\'il n\'y a qu\'une seule entrée et que la base de données est ouverte, uniquement si l\'application requérante est compatible + Admissibilité à la sauvegarde + Déterminer au moment de la création si la source d\'authentification de clé publique est autorisé à une copie de sauvegarde + État de sauvegarde + Indiquer que les informations d\'authentification sont sauvegardées et protégées contre la perte d\'un seul appareil + Clés d\'accès, Remplissage automatique fournisseur d\'authentification + Clé d\'accès + KeePassDX Fournisseur d\'Authentification + Enregistrer la clé d\'accès dans la nouvelle entrée + Mettre à jour la clé d\'accès dans %1$s + Aucune clé d\'accès trouvée + Sélectionner une clé d\'accès existante + Base de données KeePassDX + Sélectionner pour déverrouiller + Nom d\'Utilisateur de Clé d\'Accès + Clé Privée de Clé d\'Accès + Identifiant d\'Authentification de Clé d\'Accès + Identifiant Utilisateur de Clé d\'Accès + Partie Utilisatrice de Clé d\'Accès + Admissibilité à la Sauvegarde de Clé d\'Accès + État de la Sauvegarde de Clé d\'Accès + Impossible de restituer la clé d\'accès diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 09b59a42d..92c35ebc7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -18,7 +18,7 @@ along with KeePassDX. If not, see . --> Visszajelzés - Honlap + Weboldal A KeePass jelszókezelő androidos megvalósítása. Elfogadás Bejegyzés hozzáadása @@ -29,7 +29,7 @@ Alkalmazás Alkalmazásbeállítások Zárójelek - Az adatbázisfájlok létrehozásához, megnyitásához és mentéséhez szükség van egy fájlkezelőre, amely képes fogadni az ACTION_CREATE_DOCUMENT és ACTION_OPEN_DOCUMENT Intenteket. + Az adatbázisfájlok létrehozásához, megnyitásához és mentéséhez szükség van egy fájlkezelőre, amely képes fogadni az ACTION_CREATE_DOCUMENT és ACTION_OPEN_DOCUMENT intenteket. Vágólap törölve Vágólaphiba Egyes eszközök nem engedik, hogy az alkalmazások használják a vágólapot. @@ -56,7 +56,7 @@ Jelszó Mentés Cím - URL + Webcím Felhasználónév Az Arcfour adatfolyam-titkosítás nem támogatott. Ez az URI nem kezelhető a KeePassDX-ben. @@ -83,7 +83,7 @@ Hossz Jelszó Jelszó - A hitelesítő adatok nem olvashatók. + A hitelesítési adatok nem olvashatók. Hibás algoritmus. Az adatbázis formátuma nem ismerhető fel. A kulcsfájl üres. @@ -106,11 +106,11 @@ Megnyitás Keresés Jelszó megjelenítése - Ugrás az URL-re + Ugrás a webcímre Mínusz Soha Nincs találat - Telepítsen egy webböngészőt az URL megnyitásához. + Telepítsen egy webböngészőt a webcím megnyitásához. Új adatbázis létrehozása… Feldolgozás… Védelem @@ -127,15 +127,13 @@ Keresés Aláhúzás Nem támogatott adatbázis-verzió. - Nagybetűs + Nagybetűk Figyelmeztetés Kerülje a Latin-1 karakterkészlettől eltérő jelszókaraktereket az adatbázis-fájlban (a nem felismert karakterek mert ugyanarra a betűre lesznek alakítva). Verzió: %1$s Titkosított jelszó tárolva Nem érhető el - Adja meg a jelszót és/vagy a kulcsfájlt, hogy kinyithassa az adatbázist. -\n -\nKészítsen biztonsági mentést az adatbázisról minden egyes módosítás után. + Adja meg a jelszót és/vagy a kulcsfájlt, hogy kinyithassa az adatbázist. \n \nBiztonsági mentés létrehozása az adatbázisról minden egyes módosítás után. Kicsi Közepes @@ -184,8 +182,8 @@ Általános Automatikus kitöltés Bejelentkezés a KeePassDX-szel - Alapértelmezett automatikus kitöltési szolgáltatás beállítása - Automatikus kitöltés engedélyezése az űrlapok gyors kitöltéséhez más alkalmazásokban + Hitelesítő adatkezelő szolgáltatás + Automatikus kitöltés az űrlapok gyors kitöltéséhez más alkalmazásokban Előállított jelszó mérete Beállítja az előállított jelszavak alapértelmezett méretét Jelszó karakterek @@ -193,7 +191,7 @@ Vágólap Vágólap-értesítések Vágólap-értesítések megjelenítése a bejegyzésmezők másolásakor - Ha a vágólap automatikus törlése meghiúsul, akkor törölje kézzel az előzményeket. + Ha a vágólap automatikus törlése meghiúsul, akkor törölje saját kezűleg az előzményeket. Zárolás Képernyőzár Az adatbázis zárolása néhány másodperc után, ha a képernyő kikapcsol @@ -217,7 +215,7 @@ Figyelmeztetés: A vágólapon osztozik az összes alkalmazás. Ha érzékeny adatokat másol, akkor a többi szoftver is hozzáférhet. Adatbázis neve Adatbázis leírása - Adatbázis verzió + Adatbázis-verzió Szöveg Felhasználói felület Egyéb @@ -243,7 +241,7 @@ Rezgés gombnyomáskor Hang gombnyomáskor Mesterkulcs elhagyásának engedélyezése - A „Megnyitás” gomb engedélyezése, ha nincsenek hitelesítő adatok kiválasztva + A „Megnyitás” gomb engedélyezése, ha nincsenek hitelesítési adatok kiválasztva Oktatóképernyők Elemek kiemelése, hogy megtudja hogyan működik az alkalmazás Oktatóképernyők visszaállítása @@ -278,18 +276,18 @@ Zárolja gyorsan az adatbázist, beállíthatja hogy az alkalmazás lezárja egy idő után, valamint ha a képernyőt kikapcsolja. Elemek rendezése Válasszon, hogy az elemek és csoportok hogyan legyenek rendezve. - Közreműködés + Részvétel Szerkessze a bejegyzése egyéni mezőit. Az adatok hivatkozhatóak a különböző mezők között. Segítsen a stabilitás és a biztonság növelésében, és az új funkciók hozzáadásában. 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. A pro verzió megvásárlásával hozzáférést kap ehhez a <strong>vizuális stílushoz</strong>, és segít a <strong>közösségi projektek megvalósulásában.</strong> Ez a <strong>vizuális stílus</strong> az Ön nagylelkűségének köszönhetően érhető el. Azzal, hogy <strong>hozzájárul</strong> a projekthez <i>(pénzzel, kóddal, fordítással)</i>, segít abban, hogy a projekt tovább éljen és gyarapodjon, továbbá Ön jogosulttá válik a <strong>téma</strong>feloldásának lehetősége. - Ez a funkció <strong>fejlesztés alatt áll</strong>, és az Ön <strong>támogatására</strong> van szükség, hogy hamarosan elérhető legyen. + Ez a funkció <strong>fejlesztés alatt áll</strong>, és az Ön <strong>közreműködésére</strong> van szükség, hogy hamarosan elérhető legyen. A <strong>pro</strong> verzió megvásárlásával, - A <strong>támogatással</strong> - arra ösztönzi a fejlesztőket, hogy <strong>új funkciókat</strong> készítsenek, és <strong>hibákat javítsanak</strong> az észrevételei alapján. - Köszönjük a támogatását. + A <strong>közreműködésével</strong>, + arra ösztönzi a fejlesztőket, hogy <strong>új funkciókat</strong> hozzanak létre, és <strong>hibákat javítsanak</strong> az észrevételei alapján. + Köszönjük a közreműködését. Keményen dolgozunk, hogy gyorsan kiadjuk ezt a funkciót. Ne felejtse naprakészen tartani az alkalmazást az új verziók telepítésével. Letöltés @@ -315,7 +313,7 @@ Zárolás bezáráskor Megjeleníti a zárolás gombot a felhasználói felületen Zárolás gomb megjelenítése - Az adatbázis zárolása, ha a felhasználó a vissza gombra kattint az indítóképernyőn + Nyomja meg a „Vissza” gombot az adatbázis zárolásához, ha az adatbázis indítóképernyőjén tartózkodik Automatikus kitöltés beállításai A fájlhoz történő hozzáférést visszavonta a fájlkezelő Fájlírási-hozzáférés megadása az adatbázis-változások mentéséhez @@ -330,7 +328,7 @@ Keresés kérése az adatbázis megnyitásakor Az adatbázisfájl létrehozása sikertelen. Ez a címke már létezik. - A <strong>szabadságunk megtartása</strong>, a <strong>hibák javítása</strong>, a <strong>funkciók hozzáadása</strong> és az <strong>állandó aktivitás</strong> érdekében számítunk a <strong>támogatására</strong>. + A <strong>szabadságunk megtartása</strong>, a <strong>hibák javítása</strong>, a <strong>funkciók hozzáadása</strong> és az <strong>állandó aktivitás</strong> érdekében számítunk a <strong>közreműködésére</strong>. Melléklet hozzáadása Mező hozzáadása Jelszógenerátor @@ -355,7 +353,7 @@ Az adatbázis mentése minden fontos művelet után („Módosítható” módban) Adatbázis automatikus mentése Kuka csoportja - Az kulcstár nincs helyesen előkészítve. + A KeyStore nincs helyesen előkészítve. Biztos, hogy végleg törli a kiválasztott csomópontokat\? Parancs végrehajtása… Kuka ürítése @@ -393,7 +391,7 @@ A számlálónak %1$d és %2$d között kell lennie. A titkos kulcsnak Base32 formátumban kell lennie. Csoport nem másolható ide. - Legalább egy hitelesíti módot be kell állítani. + Legalább egy hitelesítési módot be kell állítani. Érvénytelen OTP titok. OTP Algoritmus @@ -421,7 +419,7 @@ Jelszó hossza Bejegyzésikon Jelszó láthatóságának átváltásának megismétlése - Csomópont gyermekei + Alárendelt csomópontok Törli a beírt jelszót az adatbázishoz való kapcsolódási kísérlet után Jelszó törlése A Mágikus billentyűzet kitöltése azzal a bejegyzéssel, amelyet megtekint a KeePassDX-ben @@ -430,7 +428,7 @@ Nyomja meg a „Vissza” gombot a zároláshoz Ne lője ki az alkalmazást… Kiválasztási mód - Adatbázis-hitelesítőadatok képernyője + Adatbázis-hitelesítő képernyő Billentyűzet váltása Megosztott információk mentése Értesítés @@ -438,7 +436,7 @@ Nem összekapcsolt adatok eltávolítása Adatok Biometrikus biztonsági frissítés szükséges. - Nincs biometrikus vagy eszközazonosító beállítva. + Nincs biometrikus vagy eszközhitelesítési adat beállítva. A kulcsfájl tartalmának sosem szabad megváltoznia, és a legjobb esetben véletlenszerűen előállított adatokat kellene tartalmaznia. Nem ajánlott, hogy üres kulcsfájl adjon hozzá. Mindenképp törli ezeket az adatokat\? @@ -456,7 +454,7 @@ Aldomain keresés Az új elem mentése nem engedélyezett írásvédett adatbázisban. A szöveg nem egyezik a kért elemmel. - Hitelesítő adatok információi + Hitelesítési adatok információi Elem hozzáadása Fájl létrehozása az alkalmazásbeállítások exportálásához Alkalmazásbeállítások exportálása @@ -473,7 +471,7 @@ A lista újbóli összeállítása sikertelen. Az adatbázis URI nem kérhető le. A mezőnév már létezik. - A meglévő OTP típus nem ismert ebben a formában, a kiértékelése nem biztos, hogy helyes tokent fog előállítani. + A meglévő OTP típus nem felismerhető ebben az űrlapban, és érvényesítése már nem biztosítja a token helyes generálását. Ez egy foglalt szó, és nem használható. Verzió Sablon @@ -518,25 +516,25 @@ Válasszon bejegyzést… Adatok egyesítése, majd a külső módosítások felülírása az adatbázis mentésével, vagy újratöltés a legfrissebb változtatásokkal. Hivatkozás az eszköz feloldásához - Továbbra is meg kell jegyeznie a széf fő jelszavát, ha az eszköz feloldásfelismerését használja. - Adatbázis hitelesítő adatainak kinyerése az eszköz adatfeloldásával + Ha az eszköz feloldásának felismerését használja, akkor is meg kell jegyeznie a széf fő hitelesítési adatait. + Adatbázis hitelesítési adatainak kinyerése az eszköz feloldási adatok alapján Az eszközfeloldási kulcs nem olvasható. Törölje, és ismételje meg a feloldásfelismerési folyamatot. Az eszközfeloldási ujjlenyomat nem ismerhető fel Az eszközfeloldási képernyő előkészítése sikertelen. Tulajdonságok - Eszköz hitelesítő adatai + Eszköz hitelesítési adatai Ne tároljon semmilyen titkosított tartalmat az eszközfeloldás használatához Eszközfeloldás lejárati ideje A fájl elérését visszavonta a fájlkezelő, zárja be az adatbázist és nyissa meg újra a helyéről. Nem engedélyezte az alkalmazásnak, hogy pontos riasztást használjon. Ezért az időzítőt használó funkciók nem a pontos időt fogják használni. - Eszköz feloldásfelismerése + Eszköz feloldásának felismerése Írja be a jelszót, majd kattintson erre a gombra. Ideiglenes eszközfeloldás Engedély Tartalom Koppintson az eszközfeloldási kulcsok törléséhez - Eszköz hitelesítő adataival történő feloldás - Lehetővé teszi, hogy az eszköz hitelesítő adataival nyissa meg az adatbázist + Eszköz hitelesítési adataival történő feloldás + Lehetővé teszi, hogy az eszköz hitelesítési adataival nyissa meg az adatbázist Letiltott alkalmazások Adatok egyesítése Adatbázis bezárása @@ -576,7 +574,7 @@ Megjeleníti a bejegyzéshez vagy csoporthoz tartozó UUID-t OTP token megjelenítése Törli az összes, az eszközfeloldás-felismeréshez tartozó titkosítási kulcsot\? - A könnyebb jövőbeli használat érdekében próbálja menteni a megosztott információkat a kézi bejegyzéskiválasztásnál + A könnyebb jövőbeli használat érdekében próbálja menteni a megosztott információkat a kézi bejegyzés kiválasztásánál Egyéni mezők Vissza az előző billentyűzethez %1$s feltöltése @@ -587,10 +585,10 @@ Letiltott webes domainek Adatok mentésének kérése Eszközadatbázis feloldása - A jelszó összekötése a leolvasott biometrikus adatokkal vagy eszköz-hitelesítőadatokkal, hogy gyorsan feloldhassa az adatbázist. + A jelszó összekapcsolása a leolvasott biometrikus adatokkal vagy eszközhitelesítő adatokkal, hogy gyorsan feloldhassa az adatbázist. Megjeleníti az OTP tokeneket a bejegyzések között Melléklet hozzáadása - Automatikus visszaváltás az előző billentyűzetre az adatbázis-hitelesítőadatok képernyőn + Automatikus visszaváltás az előző billentyűzetre az adatbázis-hitelesítő adatok képernyőjén Az adatbázis újratöltése törli a helyileg módosított adatokat. Sablonok Nem kérhető le a válasz a kihívásból. @@ -625,19 +623,19 @@ A navigációs tálca bezárása <strong>Nincsenek felhasználói adatok lekérve</strong>, az alkalmazás nem kapcsolódik semmilyen külső kiszolgálóhoz, csak helyben működik, és teljes mértékben tiszteletben tartja a felhasználók adatvédelmét. Képernyő bekapcsolva tartása egy bejegyzés megtekintésekor vagy szerkesztésekor - Nagy Kezdőbetűs + Nagy kezdőbetűs A navigációs tálca kinyitása Hardverkulcs jelölőnégyzete Legalább egy karakter mindegyikből kisbetűk Képernyőképmodul - Kis- és nagybetű eltérő + Kis- és nagybetűk megkülönböztetése Az adatbázis helye ismeretlen, az adatbázis-művelet nem hajtható végre. A jelmondat szószáma Reguláris kifejezés Bejegyzésszínek Jelmondat - Témák, színek, attribútumok + Témák, színek, ikonok, betűkészletek, attribútumok Lejárt A válasz már megérkezett. A jelszó karaktereinek színezése típus szerint @@ -652,7 +650,7 @@ Wi-Fi A hardverkulcs nem támogatott. Jelszavak színezése - Biometrikus adatok, eszköz-hitelesítőadatok + Biometrikus adatok, eszközhitelesítési adatok Hibásan formázott XML. Követi a használt hardverkulcsokat Egy adatbázis már nyitva van, előbb zárja be, hogy újat nyisson meg @@ -662,11 +660,7 @@ Az értesítési engedély lehetővé teszi az adatbázis állapotának megjelenítését, és az egyszerű ikonnal történő zárolást. \n \nHa nem aktiválja az engedélyt, akkor a háttérben nyitott adatbázis nem lesz látható, ha egy másik alkalmazás van előtérben. - A funkció eltárolja a titkosított hitelesítőadatokat az eszköz biztonságos kulcstárában. -\n -\nAz operációs rendszer natív API megvalósításától függően lehet, hogy nem lesz teljes értékű. -\n -\nEllenőrizze a kulcstár kompatibilitását és biztonságát az eszköz gyártójánál és a használt ROM készítőjénél. + A funkció eltárolja a titkosított hitelesítési adatokat az eszköz biztonságos KeyStore-jában. \n \nAz operációs rendszer natív API megvalósításától függően lehet, hogy nem lesz teljes értékű. \n \nEllenőrizze a KeyStore kompatibilitását és biztonságát az eszköz gyártójánál, valamint a használt ROM készítőjénél. Megjeleníti egy bejegyzés előtér- és háttérszínét Eszközfeloldási hivatkozás Az értesítési engedély szükséges a vágólap-értesítési funkció használatához. @@ -704,4 +698,45 @@ Kulcsfájl előállítása Sablonok elrejtése A titkos kulcsnak legalább %1$d karakterből kell állnia. + Alkalmazásazonosító + Felülírja a meglévő adatokat? + Ez a művelet felülírja a bejegyzésben található meglévő adatokat. Ha a előzmények funkció engedélyezve van, akkor a régi adatokat vissza lehet állítani. + Hitelesítési adatok szolgáltatója + Hozzáférési kulcsok + Hozzáférési kulcsok beállítása a gyors és biztonságos jelszó nélküli bejelentkezéshez + Hozzáférési kulcsok beállításai + Adatbázis bezárása + Adatbázis bezárása a hozzáférési kulcs kiválasztása után + Emelt jogosultságú alkalmazások + A böngészők kezelése az emelt jogosultságú alkalmazások egyéni listájában + FIGYELEM: Az emelt jogosultságú alkalmazás kapuként szolgál a hitelesítés eredetének lekéréséhez. Biztonsági okokból győződjön meg annak jogszerűségéről. + Az alkalmazás nem ismerhető fel + %1$s megkísérli végrehajtani a hozzáférési kulcsműveletet.\n\nHozzáadja az emelt jogosultságú alkalmazások listájához? + Aláírás hiányzik + FIGYELEM: A hozzáférési kulcsot egy másik kliens hozta létre, vagy az aláírás törölve lett. A biztonsági problémák elkerülése érdekében győződjön meg arról, hogy az azonosítani kívánt alkalmazás ugyanahhoz a szolgáltatáshoz tartozik, és jogszerű.\nHa az alkalmazás egy böngésző, ne adja hozzá az aláírását a bejegyzéshez, hanem a beállítások emelt jogosultságú alkalmazások listájához. + %1$s nem ismerhető fel, és hitelesíteni próbál egy meglévő hozzáférési kulccsal. + Alkalmazás-aláírás hozzáadása a hozzáférési kulcs bejegyzéséhez? + Automatikus kiválasztás + Automatikus kiválasztás, ha csak egy bejegyzés szerepel, és az adatbázis nyitva van, csak akkor, ha a kérő alkalmazás kompatibilis + Biztonsági mentéshez való jogosultság + A biztonsági mentés létrehozáskor határozza meg, hogy a nyilvános kulcs hitelesítési adatforrása jogosult-e visszaállítani a biztonsági mentést + Biztonsági mentés állapota + Jelzi, hogy a hitelesítési adatokról biztonsági másolat lett létrehozva, és azok egyetlen eszköz elvesztése esetén is védve vannak + Biztonsági kulcsok, automatikus kitöltés hitelesítési adat szolgáltató + Hozzáférési kulcs + KeePassDX hitelesítési adatok szolgáltató + Hozzáférési kulcs mentése új bejegyzésben + Hozzáférési kulcs frissítése a(z) %1$s fájlban + Nem található hozzáférési kulcs + Válasszon egy meglévő hozzáférési kulcsot + KeePassDX adatbázis + Válassza a feloldáshoz + Hozzáférési kulcs felhasználóneve + Hozzáférési kulcs privát kulcsa + Hozzáférési kulcs hitelesítési azonosítója + Hozzáférési kulcs felhasználói kezelője + Hozzáférési kulcs megbízható fele + Hozzáférési kulcs mentésének jogosultsága + Hozzáférési kulcs mentésének állapota + A hozzáférési kulcs visszaadása nem lehetséges diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 99fcbee5c..18fe3e5ab 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -659,7 +659,7 @@ Ingat untuk memvalidasi entri Anda dan simpan basis data Anda. \n \nJika penguncian otomatis diaktifkan dan Anda lupa bahwa Anda sedang membuat perubahan, Anda berisiko kehilangan data Anda. - Tema, warna, atribut + Tema, warna, ikon, fon, atribut Buka kunci Validasi entri Bulan diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 2dfc22a23..1044c5f40 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -180,7 +180,7 @@ Autocompletamento Accedi con KeePassDX Servizio predefinito di autocompletamento - Attiva l\'autocompletamento per riempire velocemente i campi in altre app + Configura l\'autocompletamento per riempire velocemente i campi in altre app Dimensione password generata Imposta la dimensione predefinita delle password generate Caratteri password @@ -304,7 +304,7 @@ Modalità selezione Non terminare l\'app… Premere \'\'Indietro\'\' per bloccare - Blocca il database quando l\'utente preme il pulsante Indietro nella schermata principale + Premi \'Indietro\' per bloccare il database se sei nella schermata principale del database Pulisci alla chiusura Blocca il database quando scade la durata degli appunti o la notifica viene chiusa dopo che inizi ad usarlo Cestino @@ -522,7 +522,7 @@ Unisci i dati, sovrascrivi le modifiche esterne salvando il database o ricaricalo con le ultime modifiche. I dati nel tuo database sono stati modificati al di fuori di questa app. Ricarica dati - Il tipo di OTP esistente non è riconosciuto da questo modulo, la sua convalida potrebbe non generare più correttamente il token. + Il tipo di OTP esistente non è riconosciuto da questo modulo e la sua convalida potrebbe non generare più il token correttamente. Annullato! GiB MiB @@ -678,7 +678,7 @@ Chiedi Configura Collegamento sblocco con dispositivo - Temi, colori, attributi + Temi, colori, icone, caratteri, attributi Sblocca Conferma la voce Ricordati di confermare la voce e salvare il tuo database. @@ -707,4 +707,45 @@ Calcola in modo ricorsivo il numero di voci in un gruppo I template non vengono mostrati La chiave segreta deve essere lunga almeno %1$d caratteri. + ID app + Sovrascrivere i dati esistenti? + Questa azione sostituirà i dati esistenti nella voce, puoi recuperare i vecchi dati se la cronologia è attiva. + Fornitore di credenziali + Passkey + Configura una passkey per un accesso veloce e sicuro senza password + Impostazioni passkey + Chiudi database + Chiudi il database dopo la selezione di una passkey + App privilegiate + Gestisci i browser nell\'elenco personalizzato di app privilegiate + ATTENZIONE: Un\'app privilegiata funge da gateway per recuperare l\'origine di un\'autenticazione. Assicurati della sua legittimità per evitare problemi di sicurezza. + App non riconosciuta + %1$s tentativi di eseguire un\'azione passkey.\n\nAggiungerla alla lista delle app privilegiate? + Firma mancante + ATTENZIONE: la passkey è stata creata da un altro client o la firma è stata eliminata. Assicurati che l\'app che vuoi autenticare sia parte dello stesso servizio e che sia legittima per evitare problemi di sicurezza.\nSe l\'app è un browser, non aggiungere la sua firma alla voce, ma all\'elenco delle app privilegiate nelle impostazioni. + %1$s non è riconosciuto e tenta di autenticarsi con un passkey esistente. + Aggiungere la firma dell\'app alla voce della passkey? + Selezione automatica + Selezionare automaticamente se una sola voce e il database è aperto, solo se l\'app richiesta è compatibile + Ammissibilità del backup + Determina al momento della creazione se l\'origine delle credenziali della chiave pubblica sia consentita per il backup + Stato del backup + Indica che le credenziali sono dietro backup e protette contro la perdita di un singolo dispositivo + Passkey, fornitore di autocompletamento credenziali + Passkey + Fornitore di credenziali KeePassDX + Salva la passkey in una nuova voce + Aggiorna la passkey in %1$s + Nessuna passkey trovata + Seleziona una passkey esistente + Database di KeePassDX + Seleziona per sbloccare + Nome utente passkey + Chiave privata passkey + ID credenziali passkey + Handle utente passkey + Parte affidabile passkey + Ammissibilità backup passkey + Stato backup passkey + Impossibile ritornare la passkey diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 02f954866..21385043d 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -273,7 +273,7 @@ 全般 自動入力 KeePassDX でログイン - 自動入力を有効にして、他のアプリ内のフォームにすばやく入力します + 自動入力を設定し、他のアプリ内のフォームにすばやく入力します デフォルトの自動入力サービスに設定 自動入力の設定 生成されるパスワードの長さ @@ -290,7 +290,7 @@ 画面ロック 画面がオフになった数秒後に、データベースをロックします [戻る] を押してロック - ユーザーがルート画面上で戻るボタンをタップしたとき、データベースをロックします + データベースのルート画面にいる場合、‘戻る‘ を押してデータベースをロックしてください ロックボタンを表示 ユーザー インターフェースにロックボタンを表示します デバイスのロック解除 @@ -671,8 +671,8 @@ 権限を要求する マージが正常に完了しました 設定する - テーマ、色、属性 - ロックを解除します + テーマ、色、アイコン、フォント、属性 + ロックを解除 ムーン ダーク ライト @@ -695,4 +695,45 @@ テンプレートを非表示にする テンプレートは表示されません 秘密鍵は少なくとも %1$d 文字以上でないといけません。 + アプリID + 既存データを上書きしますか? + この操作でエントリの既存データが上書きされ、履歴機能が有効ならば古いデータから復元できます。 + 認証プロバイダ + パスキー + パスキーを設定し、迅速・安全なパスワード不要ログインを実現 + パスキーの設定 + データベースを選択 + パスキー選択後にデータベースを閉じる + 特権アプリ + 特権アプリのカスタム一覧でブラウザを管理 + 警告: 特権アプリは認証起源を取得するためのゲートウェイとして機能します。セキュリティ上の問題回避の為に正当性を確認下さい。 + アプリが認識されません + %1$s がパスキー操作を行おうとしています。\n\n特権アプリ一覧に追加しますか? + 署名がありません + 警告: パスキーは別なクライアントから作成されたか署名が削除されています。セキュリティ上の問題を避ける為に認証対象のアプリが同一サービスに属した正しいものかを確認してください。\nアプリがブラウザなら、当該署名をエントリへ追加せずに、設定内の特権アプリ一覧へ追加してください。 + %1$s は認識されなかったので既存パスキーでの認証を試みます。 + アプリ署名をパスキーエントリへ追加しますか? + 自動選択 + データベースが開いていて要求元アプリに互換性がある場合に限り、エントリを1つだけ自動選択します + バックアップ資格 + 作成時に公開鍵認証情報ソースのバックアップが許可されているか判定する + バックアップの状態 + 認証情報がバックアップされ単一デバイスの紛失から保護されている事を示します + パスキー、自動入力認証情報プロバイダー + パスキー + KeePassDX 認証情報プロバイダー + 新しいエントリにパスキーを保存 + %1$s のパスキーを更新 + パスキーが見つかりません + 既存のパスキーを選択 + KeePassDX データベース + 選択してロックを解除 + パスキーのユーザー名 + パスキーのプライベートキー + パスキーの認証ID + パスキーのユーザーハンドル + パスキーの信頼者 + パスキーのバックアップ資格 + パスキーのバックアップ状態 + パスキーを復元できません diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 0611f4bcf..706ae1a65 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -6,7 +6,12 @@ संपर्क स्वीकार करा किपास सांकेतांक व्यवस्थापनाचे अँड्रॉइड अंतर्भूतीकरण - राणी चावी + मास्टर की गट जोडा सुरक्षा + माहिती + नोंद जोडा + नोंद संपादित करा + एन्क्रिप्शन + एन्क्रिप्शन अल्गोरिदम diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 7517146ad..2b8dc4378 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -90,7 +90,7 @@ Lengde Passord Passord - Kunne ikke lese autentiseringsopplysningene. + Kunne ikke lese påloggingsdata. Ugyldig algoritme. Fremmed databaseformat. Nøkkelfilen er tom. @@ -175,7 +175,7 @@ Autofyll Logg inn med KeePassDX Sett forvalgt autofyll-tjeneste - Skru på tjenesten for å fylle ut skjema fra andre programmer + Konfigurer tjenesten for å fylle ut skjema fra andre programmer Passordsstørrelse Sett forvalgt størrelse for generert passord Passordtegn @@ -216,7 +216,7 @@ Magikeyboard Aktiver et egendefinert tastatur som fyller inn passordene og alle identitetsfelter Tillat ingen hovednøkkel - Tillater å trykke på \"Åpne\"-knappen hvis ingen legitimasjon er valgt + Tillater å trykke på «Åpne»-knappen hvis ingen opplysninger er valgt Lærerike tips Fremhev elementer for å finne ut hvordan appen fungerer Tilbakestill lærerike tips @@ -291,7 +291,7 @@ Valgmodus Ikke drep programmet… Trykk «Tilbake» for å låse - Lås databasen når brukeren klikker tilbakeknappen på root-skjermen + Trykk «Tilbake» for å låse databasen hvis du er ved rotskjermen til databasen Tøm ved lukking Lås databasen når utklippstavlens varighet utløper eller varselet lukkes etter at du begynner å bruke den Papirkurv @@ -340,7 +340,7 @@ Passordsavkryssningsboks Avkrysningsrute for nøkkelfil Biometrisk - Minst én identitetsdetalj må angis. + Minst én påloggingsdetalj må angis. Du kan ikke kopiere en gruppe hit. Hemmelig nøkkel må være i Base32-format. Symbolet må inneholde %1$d til %2$d siffer. @@ -428,7 +428,7 @@ Start appen på nytt som inneholder skjemaet for å aktivere blokkeringen. Datalagring er ikke tillatt for en database som er skrivebeskyttet. Forslag til autofyll er lagt til. - Koble passordet ditt til den skannede biometriske eller enhetslegitimasjonen for å raskt låse opp databasen din. + Koble passordet ditt til den skannede biometriske eller påloggingsinformasjonen på enheten din for å raskt låse opp databasen din. Sett opp OTP Avbrutt! Denne teksten samsvarer ikke med det valgte elementet. @@ -479,7 +479,7 @@ Innehaver Éngangspassordsinfo Maler - Identitetdetaljsinfo + Påloggingsinformasjon Bruk dynamiske maler for å fylle inn feltene for en oppføring Maler Dette ordet er reservert og kan ikke brukes. @@ -527,11 +527,11 @@ Du må fortsatt huske hovedlegitimasjonen for hvelvet selv om du bruker enhetens opplåsingsgjenkjenning. Kunne ikke gjenkjenne enhetens oppåsningsmetode Skriv inn passordet, og klikk deretter på denne knappen. - Enhets-identitetsdetalj + Enhetens påloggingsinformasjon Velg oppføring … Midlertidig enhets opplåsing Utløpsdato for opplåsing av enhet - Lar deg bruke din enhets-identitetsdetalj for å åpne databasen + Lar deg bruke påloggingsinformasjonen på enheten din for å åpne databasen Varigheten av enhetens opplåsingsbruk før innholdet blir slettet Bruk enhetsopplåsing for å åpne en database enklere Opplåsing av enhetslegitimasjon @@ -539,8 +539,8 @@ Mal-bruk Fjerner vedlegg som er å finne i databasen, men som ikke er lenket til en oppføring Prøv å lagre delt informasjon når du foretar en manuell oppføring for enklere fremtidig bruk - Skjem for database-identitetsdetaljer - Bytt tilbake til forrige tastatur atuomatisk på skjermen for database-identitetsdetaljer + Skjerm for påloggingsinformasjon til database + Bytt tilbake til forrige tastatur automatisk på skjermen for påloggingsinformasjonen til databasen Forslag på linjen Prøv å vise autofullføringsforslag direkte fra et kompatibelt tastatur Manuellt utvalg @@ -562,7 +562,7 @@ Forespør opplasting automatisk hvis databasen er satt opp til å bruke det Eksternt ikon Underdomenesøk - Eksisterende OTP-type gjenkjennes ikke av dette skjemaet og valideringen kan derfor ikke lenger generere tokenet. + Den eksisterende OTP-typen gjenkjennes ikke av dette skjemaet og valideringen kan derfor ikke lenger generere tokenet. En feil inntraff under utføring av en databasehandling. Ikke lagre noe kryptert innhold for å bruke enhets opplåsing Søk i vev-domener med underdomene-begrensninger @@ -661,7 +661,7 @@ Spør Sammenslåingen er fullført Konfigurer - Drakter, farger, attributter + Drakter, farger, ikoner, skrifttyper, attributter Skjermbilde-modus Vurder karakterer Entropi: Beregn… @@ -694,4 +694,45 @@ Det anbefales ikke å legge til en stor nøkkelfil, siden dette kan hindre databasen i å åpnes. Skjul maler Maler vises ikke + App-ID + Overskriv eksisterende data? + Denne handlingen vil erstatte de eksisterende dataene i feltet, og du kan hente frem de gamle i historikken hvis det er skrudd på. + Passnøkler + Konfigurer passnøkler for rask og sikker passordløs innlogging + Passnøkkel-innstillinger + Lukk database + Lukk databasen etter å ha valgt en passnøkkel + Privilegerte apper + Håndter nettlesere i den brukerdefinerte listen over privilegerte apper + ADVARSEL: En priveligert app fungerer som mellommann for å hente opphavet til en autentisering. Bekreft at den er legitim for å unngå sikkerhetsproblemer. + App kjennes ikke igjen + %1$s prøver i gjøre noe med en passnøkkel.\n\nLegg den til listen over privilegerte apper? + Mangler signatur + ADVARSEL: Denne passnøkkelen ble laget av en annen klient eller så har signaturen blitt slettet. Pass på at appen du vil autentisere er en del av samme tjeneste og er legitim for å unngå sikkerhetsproblemer.\nHvis appen er en nettleser, så ikke legg til dens signatur til feltet, men legg den til som en privilegert app i innstillingene. + %1$s kjennes ikke igjen og prøver å autentisere seg med en eksisterende passnøkkel. + Legg til appsignaturen til passnøkkelen? + Automatisk valg + Velg automatisk hvis det bare er en oppføring og databasen er åpen, bare hvis appen er kompatibel + Mulighet til å ta sikkerhetskopi + Sjekk ved opprettelse om den offentlige nøkkelen kan sikkerhetskopieres + Status til sikkerhetskopi + Indikerer at oppføringen er sikkerhetskopiert og beskyttet mot tap av én enkel enhet + Passnøkler, fyll inn automatisk leverandør + Passnøkkel + Lagre passnøkkel i ny oppføring + Oppdater passnøkkel i %1$s + Ingen passnøkkel funnet + Velg en eksisterende passnøkkel + KeePassDX-database + Velg for å låse opp + Passnøkkel-brukernavn + Passnøkkel-privatnøkkel + Passnøkkel-brukernavn + Kunne ikke returnere passnøkkelen + Påloggingsinformasjons-leverandør + Påloggingsleverandør til KeePassDX + Passnøkkel-ID + Passnøkkelens tillitspart + Mulighet for sikkerhetskopiering av passnøkkelen + Tilstand til sikkerhetskopien til passnøkkelen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 659c93b0d..8a7ed481a 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -186,8 +186,8 @@ Algemeen Automatisch aanvullen Inloggen met KeePassDX - Dienst automatisch aanvullen - Schakel de dienst in om formulieren in andere apps in te vullen + Dienst Automatisch aanvullen + Dienst Automatisch aanvullen configureren om formulieren in andere apps in te vullen Gegenereerde wachtwoordlengte Stel de standaardlengte van gegenereerde wachtwoorden in Wachtwoordtekens @@ -305,7 +305,7 @@ Selectiemodus App niet afsluiten… Druk \'Terug\' om te vergrendelen - Vergrendel de database wanneer de gebruiker in het hoofdscherm op de knop Terug klikt + Druk in het hoofdscherm van de database op \'Terug\' om de database te vergrendelen Wissen bij afsluiten Vergrendel de database wanneer het klembord verlopen is of wanneer de melding wordt gesloten nadat u deze hebt gebruikt Prullenbak @@ -526,7 +526,7 @@ Gegevens opnieuw laden Kan de lijst niet correct opnieuw opbouwen. Database-URI kan niet worden opgehaald. - Het bestaande OTP-type wordt niet herkend door dit formulier, de validatie ervan genereert het token mogelijk niet langer. + Het bestaande OTP-type wordt niet herkend door dit formulier en de validatie ervan genereert het token mogelijk niet meer correct. Aangepast Standaard Selecteer lichte of donkere thema\'s @@ -672,7 +672,7 @@ Later Vragen Configureren - Thema\'s, kleuren, attributen + Thema\'s, kleuren, pictogrammen, lettertypen, attributen Zoeken, vergrendelen, geschiedenis, eigenschappen Toetsenbord, automatisch aanvullen, klembord Informatie @@ -706,4 +706,45 @@ Berekent recursief het aantal items in een groep Het is niet verstandig om een groot sleutelbestand toe te voegen, aangezien dit het openen van de database kan belemmeren. Geheime sleutel moet minimaal %1$d tekens bevatten. + App-ID + Bestaande gegevens overschrijven? + Deze actie vervangt de bestaande gegevens van het item. Je kunt de oude gegevens ophalen als de geschiedenis is ingeschakeld. + Dienst Automatisch aanvullen + Passkeys, Dienst Automatisch aanvullen + KeePassDX Dienst Automatisch aanvullen + Passkeys + Configureer Passkeys voor snelle en veilige wachtwoordloze login + Instellingen voor passkeys + Database sluiten + Database sluiten na selectie van passkey + Bevoorrechte apps + Browsers beheren in de aangepaste lijst met bevoorrechte apps + WAARSCHUWING: Een bevoorrechte app fungeert als toegangspoort om de oorsprong van een authenticatie op te halen. Zorg voor de legitimiteit ervan om veiligheidsproblemen te voorkomen. + App niet herkend + %1$s probeert een Passkey-actie uit te voeren.\n\nToevoegen aan de lijst met bevoorrechte apps? + Handtekening ontbreekt + App-handtekening toevoegen aan passkey-item? + Autom. selecteren + Automatisch selecteren bij slechts één item, een geopende database en alleen als de aanvragende app compatibel is + Bepaal bij het aanmaken of een back-up mag worden gemaakt van de bron van de publieke sleutel + Geschikt voor back-up + Back-upstatus + Aangeven dat er een back-up van de inloggegevens wordt gemaakt en beschermd tegen het verlies van een enkel apparaat + Passkey + Passkey opslaan in nieuw item + Passkey in %1$s bijwerken + Geen passkey gevonden + Bestaande passkey selecteren + KeePassDX-database + Selecteren voor ontgrendeling + Passkey Gebruikersnaam + Passkey Privésleutel + Passkey Inlog-ID + Passkey Gebruikershandvat + Passkey Vertrouwde partij + Passkey Back-upgeschiktheid + Passkey Back-upstatus + Kan de passkey niet retourneren + %1$s wordt niet herkend en probeert te authenticeren met een bestaande passkey. + WAARSCHUWING: De passkey is aangemaakt door een andere client of de handtekening is verwijderd. Zorg ervoor dat de app die je wilt authenticeren deel uitmaakt van dezelfde service en legitiem is om beveiligingsproblemen te voorkomen.\nAls de app een browser is, voeg dan niet de handtekening toe aan het item, maar aan de lijst met bevoorrechte apps in de instellingen. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 95388ec4d..b5704d4dd 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -135,7 +135,7 @@ Nie można załadować bazy danych. Nie można załadować klucza. Spróbuj zmniejszyć „Użycie pamięci” KDF. Każdy ciąg musi mieć nazwę pola. - Nie można włączyć usługi autouzupełniania. + Nie można włączyć usługi automatycznego wypełniania. Nazwa pola Wartość pola Nie znaleziono pliku. Spróbuj ponownie otworzyć go w przeglądarce plików. @@ -182,7 +182,7 @@ Wypełnij automatycznie Zaloguj się za pomocą KeePassDX Ustaw domyślną usługę autouzupełniania - Włącz autouzupełnianie, aby móc szybko wypełniać formularze w innych aplikacjach + Skonfiguruj funkcję automatycznego wypełniania, aby szybko wypełniać formularze w innych aplikacjach Wygenerowany rozmiar hasła Ustawia domyślny rozmiar wygenerowanych haseł Znaki hasła @@ -296,7 +296,7 @@ Dźwięk przy naciskaniu klawiszy Nie zamykaj aplikacji… Naciśnij „Wstecz”, aby zablokować - Zablokuj bazę danych, gdy użytkownik kliknie przycisk „Wstecz” na ekranie głównym + Naciśnij „Wstecz”, aby zablokować bazę danych, jeśli znajdujesz się na ekranie głównym bazy danych Wyczyść po zamknięciu Blokowanie bazy danych po wygaśnięciu czasu trwania schowka lub zamknięciu powiadomienia po rozpoczęciu korzystania z niej Kosz @@ -423,11 +423,11 @@ Walidacja Wyświetla przycisk blokady w interfejsie użytkownika Pokaż przycisk blokady - Ustawienia autouzupełniania + Ustawienia automatycznego wypełniania Dostęp do pliku anulowany przez menedżer plików Ta etykieta już istnieje. Zrestartuj aplikację zawierającą formularz, aby aktywować blokadę. - Blokowanie autouzupełniania + Blokowanie automatycznego wypełniania Lista zablokowanych, która uniemożliwia automatyczne wypełnianie aplikacji Filtr Wyszukiwanie subdomen @@ -463,7 +463,7 @@ Pytaj o zapisanie danych Staraj się zapisywać informacje wyszukiwania podczas dokonywania ręcznego wyboru wpisu, aby ułatwić sobie przyszłe użycie Zapisz informacje wyszukiwania - Zamknij bazę danych po wybraniu autouzupełniania + Zamknij bazę danych po wybraniu automatycznego wypełniania Zamknij bazę danych Automatycznie przełącz z powrotem do poprzedniej klawiatury po zablokowaniu bazy danych Zablokuj bazę danych @@ -504,9 +504,9 @@ Rozpoznawanie odblokowania urządzenia Nie można poprawnie odbudować listy. Nie można pobrać identyfikatora URI bazy danych. - Dodano sugestie autouzupełniania. + Dodano sugestie automatycznego wypełniania. Sugestie wbudowane - Spróbuj wyświetlić sugestie autouzupełniania bezpośrednio z kompatybilnej klawiatury + Spróbuj wyświetlić sugestie automatycznego wypełniania bezpośrednio z kompatybilnej klawiatury Odblokowywanie tymczasowe urządzenia Nie można zainicjować monitu o odblokowanie urządzenia. Dostęp do pliku odwołany przez menedżera plików, zamknij bazę danych i otwórz ją ponownie z jej lokalizacji. @@ -517,7 +517,7 @@ MiB KiB B - Istniejący typ OTP nie jest rozpoznawany przez ten formularz, jego walidacja może już nie generować poprawnie tokenu. + Istniejący typ OTP nie jest rozpoznawany przez ten formularz, a jego walidacja może już nie generować poprawnie tokenu. Anulowano! Niestandardowy Standardowy @@ -655,7 +655,7 @@ Scalanie zostało pomyślnie zakończone Informacje Wyszukiwanie, blokada, historia, właściwości - Klawiatura, autouzupełnianie, schowek + Klawiatura, automatyczne wypełnianie, schowek Metadane, kosz, szablony, historia Szyfrowanie, funkcja wyprowadzania klucza Zmiana, odnowienie @@ -664,7 +664,7 @@ Zapytaj Skonfiguruj Łącze do odblokowania urządzenia - Motywy, kolory, atrybuty + Motywy, kolory, ikony, czcionki, atrybuty Odblokuj Sprawdź poprawność wpisu Biometria, poświadczenie urządzenia @@ -694,4 +694,45 @@ Ukryj szablony Szablony nie są wyświetlane Klucz tajny musi składać się z co najmniej %1$d znaków. + Identyfikator aplikacji + Nadpisać istniejące dane? + Ta czynność spowoduje zastąpienie istniejących danych we wpisie. Możesz odzyskać stare dane, jeśli historia jest włączona. + Dostawca poświadczeń + Klucze dostępu + Skonfiguruj klucze dostępu, aby zapewnić szybkie i bezpieczne logowanie bez hasła + Ustawienia kluczy dostępu + Zamknij bazę danych + Zamknij bazę danych po wybraniu klucza dostępu + Aplikacje uprzywilejowane + Zarządzaj przeglądarkami na liście niestandardowej aplikacji uprzywilejowanych + OSTRZEŻENIE: aplikacja uprzywilejowana działa jako brama do pobierania źródła uwierzytelnienia. Upewnij się, że jest właściwa, aby uniknąć problemów z bezpieczeństwem. + Aplikacja nie została rozpoznana + %1$s próbuje wykonać czynność klucza dostępu.\n\nDodać ją do listy aplikacji uprzywilejowanych? + Brak podpisu + OSTRZEŻENIE: klucz dostępu został utworzony z innego klienta lub podpis został usunięty. Upewnij się, że aplikacja, którą chcesz uwierzytelnić, jest częścią tej samej usługi i jest właściwa, aby uniknąć problemów z bezpieczeństwem.\nJeśli aplikacja jest przeglądarką, nie dodawaj jej podpisu do wpisu, ale do listy aplikacji uprzywilejowanych w ustawieniach. + %1$s nie został rozpoznany i próbuje uwierzytelnić się przy użyciu istniejącego klucza dostępu. + Dodać podpis aplikacji do wpisu klucza dostępu? + Wybór automatyczny + Wybierz automatycznie, jeśli otwarty jest tylko jeden wpis i baza danych, a także tylko wtedy, gdy żądająca aplikacja jest zgodna + Uprawnienia do tworzenia kopii zapasowych + Określ w momencie tworzenia, czy można wykonać kopię zapasową źródła poświadczeń klucza publicznego + Stan kopii zapasowej + Oznaczaj, że dane uwierzytelniające są tworzone w kopii zapasowej i chronione przed utratą na pojedynczym urządzeniu + Dostawca poświadczeń automatycznego wypełniania, kluczy dostępu + Klucz dostępu + Dostawca poświadczeń KeePassDX + Zapisz klucz dostępu w nowym wpisie + Zaktualizuj klucz dostępu w %1$s + Nie znaleziono klucza dostępu + Wybierz istniejący klucz dostępu + Baza danych KeePassDX + Wybierz, aby odblokować + Nazwa użytkownika klucza dostępu + Klucz prywatny klucza dostępu + Identyfikator poświadczenia klucza dostępu + Identyfikator użytkownika klucza dostępu + Strona ufająca kluczu dostępu + Uprawnienie do utworzenia kopii zapasowej klucza dostępu + Stan kopii zapasowej klucza dostępu + Nie można zwrócić klucza dostępu diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f0b2bd0ca..d261d7854 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -19,7 +19,7 @@ --> Comentários Página inicial - Implementação para Android do gerenciador de senhas KeePass + Implementação para Android do gerenciador de senhas KeePass. Aceitar Adicionar entrada Adicionar grupo @@ -180,7 +180,7 @@ Preenchimento automático Entre com o KeePassDX Definir serviço padrão de preenchimento automático - Habilite o serviço para rapidamente preencher formulários em outros aplicativos + Configure o serviço para rapidamente preencher formulários em outros aplicativos Comprimento da senha gerada Define o tamanho padrão para senhas geradas Caracteres da senha @@ -303,7 +303,7 @@ Modo seleção Não feche o aplicativo… Pressionar \'Voltar\' para bloquear - Tranca o banco de dados quando o usuário pressiona o botão \"Voltar\" na tela inicial + Se estiver na tela raiz da base de dados, o botão \"Voltar\" irá trancá-la Limpar ao fechar Bloquear o banco de dados quando a duração da área de transferência expirar ou a notificação for fechada depois do início do uso Lixeira @@ -673,7 +673,7 @@ Perguntar Configurar Link de desbloqueio do dispositivo - Temas, cores, atributos + Temas, cores, ícones, fontes, atributos Desbloquear Validar a entrada Pesquisar, bloquear, histórico, propriedades @@ -703,4 +703,24 @@ Não é recomendável adicionar um arquivo-chave grande, pois isso pode impedir a abertura do banco de dados. Ocultar modelos Os modelos não são exibidos + Id do App + Chave secreta deve ter pelo menos %1$d caracteres. + Sobrescrever dados existentes? + Esta ação irá substituir os dados existentes na entrada, você pode recuperar os dados antigos se o histórico estiver habilitado. + Provedor da credencial + Gerencie navegadores na lista customizada de aplicações privilegiadas + AVISO: Um aplicativo privilegiado age como portão para obter a origem de uma autenticação. Certifique sua legitimidade para evitar problemas de segurança. + App não reconhecido + %1$s tenta fazer uma ação de Passkey.\n\nAdicionar à lista de aplicativos privilegiados? + Assinatura faltando + AVISO: A Passkey foi criada de outro cliente ou a assinatura foi deletada. Certifique que o aplicativo que você quer autenticar é parte do mesmo serviço e é legítimo para evitar problemas de segurança.\nSe o aplicativo é um navegador, não adicione sua assinatura à entrada, mas à lista de aplicativos privilegiados nas configurações. + %1$s não é reconhecido e tenta autenticar com uma Passkey existente. + Adicionar assinatura de app à entrada de Passkey? + Auto selecionar + Auto selecionar se só uma entrada e a base de dados estiverem abertas, apenas se o app solicitante for compatível + Elegibilidade de Backup + Determine no tempo de criação se é permitido que seja feito o backup da fonte da credencial de chaves públicas + Estado do Backup + Passkey + Provedor de Credenciais KeePassDX diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 2d768c7ad..d27829bf9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -182,7 +182,7 @@ Общие Автозаполнение Войти с помощью KeePassDX - Включите службу для быстрого заполнения форм в других приложениях + Настройте службу для быстрого заполнения форм в других приложениях Использовать службу автозаполнения Длина создаваемого пароля Настройка длины создаваемых паролей по умолчанию @@ -300,7 +300,7 @@ Звук при нажатии Не закрывайте приложение… Блокировка нажатием \"Назад\" - Блокировка базы нажатием кнопки \"Назад\" на начальном экране + Блокировка базы нажатием кнопки \"Назад\", если открыт её корневой раздел Очищать при закрытии Блокировать базу при закрытии уведомления после использования или истечения времени ожидания Корзина @@ -519,7 +519,7 @@ Объединить данные, перезаписав внешние изменения, или перезагрузить её с последними изменениями. Информация, содержащаяся в файле базы, была изменена вне этого приложения. Перезагрузить данные - Существующий тип OTP не распознаётся данной формой, его проверка больше не может корректно генерировать токен. + Существующий тип OTP не распознаётся данной формой и его проверка больше не может корректно генерировать токен. ГиБ МиБ КиБ @@ -677,7 +677,7 @@ Информация Изменение, обновление Разрешение необходимо для использования функции уведомления буфера обмена. - Темы, цвета, атрибуты + Темы, цвета, значки, шрифты, атрибуты Настройка Проверка записи Настройка разблокировки устройства @@ -704,4 +704,45 @@ Скрывать шаблоны Не показывать шаблоны Секретный ключ должен содержать не менее %1$d символов. + ID приложения + Перезаписать существующие данные? + Будут заменены существующие данные в записи. Если включена история, там могут оказаться старые данные. + Поставщик учётных данных + Настройка ключей доступа для быстрого и безопасного входа без ввода пароля + Ключи доступа + Настройки ключей доступа + Закрыть базу + Закрыть базу после выбора ключа доступа + Привилегированные приложения + Управление пользовательским списком привилегированных приложений + ВНИМАНИЕ: привилегированное приложение действует как шлюз для получения информации о происхождении аутентификации. Убедитесь в его легитимности, чтобы избежать проблем с безопасностью. + Приложение не распознано + %1$s пытается взаимодействовать с ключом доступа.\n\nДобавить его в список привилегированных приложений? + Отсутствует подпись + ВНИМАНИЕ: ключ доступа был создан в другом клиенте или подпись была удалена. Убедитесь, что приложение, которое вы хотите аутентифицировать, является частью той же службы и является легитимным, чтобы избежать проблем с безопасностью.\nЕсли приложение является браузером, добавьте его в список привилегированных приложений в настройках, но не добавляйте его подпись к записи ключа доступа. + %1$s не распознано и пытается пройти аутентификацию с помощью существующего ключа доступа. + Добавить подпись приложения к записи ключа доступа? + Автовыбор + Автоматический выбор, если открыта одна запись в единственной отрытой базе и при условии совместимости запрашивающего приложения + Возможность резервирования + Настройка разрешения резервного копирования источника учётных данных открытого ключа при создании + Статус резервирования + Указывает, резервируются ли учётные данные и защищены ли они от потери одного устройства + Ключи доступа, поставщик учётных данных для автозаполнения + Ключ доступа + Поставщик учётных данных KeePassDX + Сохранить ключ доступа в новой записи + Обновить ключ доступа в %1$s + Ключ доступа не найден + Выберите существующий ключ доступа + База KeePassDX + Выберите для разблокировки + Пользователь ключа доступа + Закрытый ключ доступа + ID учётных данных ключа доступа + Идентификатор пользователя ключа доступа + Доверяющая сторона ключа доступа + Возможность резервирования ключа доступа + Статус резервирования ключа доступа + Невозможно вернуть ключ доступа diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 741a48820..f8e18ee5c 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -345,7 +345,7 @@ XML e keqformuar. Blloko vetëplotësim Lejon prekjen e butoni “Hape”, nëse s’janë përzgjedhur kredenciale - Sendërtim për Android i përgjegjësit KeePass të fjalëkalimeve + Sendërtim për Android i përgjegjësit KeePass të fjalëkalimeve. Kërko një kërkim, kur hapet një bazë të dhënash Ngarkimi i kësaj kartele do të zëvendësojë atë ekzistuesen. Vetëplotësoje @@ -364,7 +364,7 @@ E thjeshtë Përgjigju Kutizë kyçi hardware - + Përsërit ndryshim dukshmërie fjalëkalimi Ngjyrë e përparme e zërit Ngjyrë sfondi e zërit Panel lëvizjesh i hapur @@ -382,14 +382,14 @@ Plotësim formularësh E ndryshueshme Mënyra kërkim - + Mënyra Kursim Ndjek se ku depozitohen kartela kyç Mbaj mend kyçe hardware Ndjek kyçet hardware të përdorur Fshihi lidhjen e dëmtuara te lista e bazave të të dhënave së fundi Krijoni një kartelë ku të eksportohen rregullime aplikacioni Rregullimet e aplikacionit u importuan - Gabim gjatë importimit të rregullimeve të aplikacionit + Gabim gjatë importimit të rregullimeve të aplikacionit. Rregullimet e aplikacionit u eksportuan Algoritëm fshehtëzimi të dhënash i përdorur për krejt të dhënat Më tepër raunde fshehtëzimi furnizojnë mbrojtje më të madhe kundër sulmesh hyrjeje me zor, por mund të ngadalësojnë vërtet ngarkimin dhe ruajtjen e gjërave. @@ -428,7 +428,7 @@ Shkyçje e përkohshme pajisjeje Që të krijohen, hapen dhe ruhen kartela bazash të dhënash, lypset një përgjegjës kartelash që pranon veprime ACTION_CREATE_DOCUMENT dhe ACTION_OPEN_DOCUMENT. Kutizë për kartelë kyçi - + Krye lëvizjesh Panel lëvizjesh i mbyllur Filtra kërkimesh @@ -476,9 +476,9 @@ S’u ngarkua dot kyçi. Provoni të ulni “Përdorim Kujtese” KDF. Duhet përzgjedhur të paktën një lloj prodhimi fjalëkalimi. S’arrihet të krijohet bazë të dhënash me këtë fjalëkalim dhe kartelë kyç. - Në baza të dhënash që janë vetëm-për-lexim s’lejohet ruajtja e një objekti të ri + Në baza të dhënash që janë vetëm-për-lexim s’lejohet ruajtja e një objekti të ri. S’mund të merret URI baze të dhënash. - Sfida është kërkuar tashmë + Sfida është kërkuar tashmë. Përgjigja është dhënë tashmë. S’arrihet të merret përgjigja nga sfida. Përudhësi për %1$s është i domosdoshëm. @@ -487,13 +487,13 @@ Tejtëdhëna, kosh ricklimesh, gjedhe, historik Fshehtëzim, funksion derivimi kyçesh Ndryshojeni, rinovim - + Lëvize Përzieni të dhëna Fshi kyç shkyçjeje pajisjeje Kërkim nënpërkatësie Në varësi të përgjegjësit tuaj të kartelave, KeePassDX-i mund të mos lejojë të shkruhet në depozitën tuaj. Ndjek se ku depozitohen bazat e të dhënave - Gabim gjatë eksportimit të rregullimeve të aplikacionit + Gabim gjatë eksportimit të rregullimeve të aplikacionit. Sasi kujtese për t’u përdorur nga funksioni i derivimit të kyçeve. Po përmbushet urdhri… Më i ulti së pari ↓ @@ -522,7 +522,7 @@ Njoftime mbi të papastrën Shfaq njoftime të papastre te fusha kopjimi, kur shihet një zë Shtypni “Mbrapsht”, që të kyçet - Kyçe bazën e të dhënave, kur përdoruesi klikon butonin “Mbrapsht” te skena e rrënjës + Shtypni “Mbrapsht” për kyçje të bazës së të dhënave, nëse gjendeni te skena rrënjë e bazës së të dhënave Bën shfaqjen të butonit të kyçjeve te ndërfaqja e përdoruesit Përdorni shkyçjen e pajisjes, për ta hapur më kollaj bazën e të dhënave Mbarim kohe shkyçjeje pajisjeje @@ -653,4 +653,5 @@ Lidheni fjalëkalimin tuaj me hollësi biometrike të skanuara, ose kredenciale pajisjeje, për të shkyçur shpejt bazën tuaj të dhënave. Të vazhdohet pa mbrojtje shkyçjeje fjalëkalimesh? S’arrihet të bëhet gati hapi i shkyçjes së pajisjes. + Kyçi i fshehtë duhet të jetë të paktën %1$d shenja. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a2b717406..cfbdbe195 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -32,7 +32,7 @@ Uygulama Parantez Genişletilmiş ASCII - Veritabanı dosyalarını oluşturmak, açmak ve kaydetmek için ACTION_CREATE_DOCUMENT ve ACTION_OPEN_DOCUMENT intent eylemlerini kabul eden bir dosya yöneticisi gereklidir. + Veri tabanı dosyalarını oluşturmak, açmak ve kaydetmek için ACTION_CREATE_DOCUMENT ve ACTION_OPEN_DOCUMENT intent eylemlerini kabul eden bir dosya yöneticisi gereklidir. İzin ver Pano temizlendi Pano hatası @@ -174,9 +174,9 @@ Görünüm Genel Otomatik Doldurma - KeePassDX ile giriş yap + KeePassDX ile oturum aç Öntanımlı otomatik doldurma hizmetini ayarla - Diğer uygulamalardaki formları hızlı doldurmak için otomatik doldurmayı etkinleştirin + Diğer uygulamalardaki formları hızlı doldurmak için otomatik doldurmayı yapılandırın Oluşturulan parola boyutu Oluşturulan parolaların öntanımlı boyutunu ayarlar Parola karakterleri @@ -188,11 +188,11 @@ Kilit Ekran kilidi Ekran kapandığında birkaç saniye sonra veri tabanını kilitle - Cihaz kilidini aç + Aygıt kilidini aç Biyometrik kilit açma Veri tabanını açmak için biyometriklerinizi taramanızı sağlar Şifreleme anahtarlarını silin - Cihaz kilit açma tanımayla ilgili tüm şifreleme anahtarlarını silin + Aygıt kilidi açma tanımayla ilgili tüm şifreleme anahtarlarını silin Bu özellik başlatılamadı. Aygıtta Android %1$s çalışıyor, ancak %2$s veya sonraki bir sürüm gerekli. İlgili donanım bulunamadı. @@ -294,7 +294,7 @@ Uygulamada kullanılan simge paketi Seçim modu Uygulamayı sonlandırmayın… - Kullanıcı kök ekranda geri düğmesine tıkladığında veri tabanını kilitle + Veri tabanının kök ekranındaysanız, \'Geri\' düğmesine basarak veri tabanını kilitleyin Kapanışta temizle Panonun süresi dolduğunda veya kullanmaya başladıktan sonra bildirim kapatıldığında veri tabanını kilitle Dosya aç @@ -317,7 +317,7 @@ Kilitlemek için \'Geri\'ye basın Geri dönüşüm kutusu Girdi seçimi - Bir girdiyi görüntülerken Magikeyboard\'da giriş alanlarını göster + Bir girdiyi görüntülerken Magikeyboard\'da o girdiyi göster Parolayı sil Veri tabanına bağlantı denemesinden sonra girilen parolayı siler Alt düğüm @@ -326,10 +326,10 @@ Güncelle Alanları kapat Bu parola ve anahtar dosyası ile veri tabanı oluşturulamıyor. - Cihaz kilidini aç + Aygıt kilidini aç Biyometrik Otomatik açma istemi - Veritabanı onu kullanacak şekilde ayarlanmışsa cihazın kilidini otomatik olarak talep et + Veri tabanı onu kullanacak şekilde ayarlanmışsa aygıt kilidini otomatik olarak talep et Etkinleştir Devre dışı Ana anahtar @@ -358,7 +358,7 @@ Tekrarlananlar için yeni UUID\'ler oluşturarak sorunu çöz ve devam et\? Veri tabanı açıldı Aygıtınızın panosunu kullanarak girdi alanlarını kopyalayın - Bir veritabanını daha kolay açmak için cihazın kilidini açmayı kullanın + Bir veri tabanını daha kolay açmak için aygıt kilidini açmayı kullanın Veri sıkıştırma Veri sıkıştırma veri tabanı boyutunu azaltır Azami sayı @@ -461,13 +461,13 @@ Salt okunur olarak açılan bir veri tabanı için veri kaydına izin verilmiyor. Form doldurma işlemi tamamlandığında verileri kaydetmek için sor Verileri kaydetmek için sor - Gelecekteki daha kolay kullanımlar için el ile giriş seçimi yaparken arama bilgilerini kaydetmeyi deneyin + Gelecekteki daha kolay kullanımlar için el ile girdi seçimi yaparken arama bilgilerini kaydetmeyi deneyin Arama bilgilerini kaydet Otomatik doldurma seçiminden sonra veri tabanını kapat Veri tabanını kapat Veri tabanını kilitledikten sonra otomatik olarak önceki klavyeye dön Veri tabanını kilitle - Gelecekteki daha kolay kullanımlar için el ile giriş seçimi yaparken paylaşılan bilgileri kaydetmeyi deneyin + Gelecekteki daha kolay kullanımlar için el ile girdi seçimi yaparken paylaşılan bilgileri kaydetmeyi deneyin Paylaşılan bilgileri kaydet Bildirim Biyometrik güvenlik güncellemesi gerekli. @@ -477,33 +477,33 @@ Arama modu Salt okunur bir veri tabanında yeni bir öge kaydetmeye izin verilmiyor. Alan adı zaten var. - Cihaz kilit açma tanımayla ilgili tüm şifreleme anahtarları silinsin mi\? + Aygıt kilidi açma tanımayla ilgili tüm şifreleme anahtarları silinsin mi? Veri tabanını açmak için aygıt kimlik bilgilerinizi kullanmanıza olanak tanır Aygıt kimlik bilgisiyle kilit açma Aygıt kimlik bilgileri Parolayı yazın ve ardından bu düğmeye tıklayın. - Cihaz kilit açma istemi başlatılamıyor. + Aygıt kilit açma istemi başlatılamıyor. Kullanım dışı - Cihaz kilit açma parmak izi tanınamadı - Cihazın kilit açma anahtarı okunamıyor. Lütfen silin ve kilit açma tanıma prosedürünü tekrarlayın. - Cihaz kilit açma verileriyle veritabanı kimlik bilgilerini çıkarın - Cihaz kilidini tanıma - Cihaz kilit açma tanımayı kullanıyorsanız kasa ana kimlik bilgilerinizi yine de hatırlamanız gerekir. - Cihaz kilidini açma bağlantısı - Cihaz kilit açma anahtarını sil + Aygıt kilit açma parmak izi tanınamadı + Aygıtın kilit açma anahtarı okunamıyor. Lütfen silin ve kilit açma tanıma işlemini tekrarlayın. + Aygıt kilit açma verileriyle veri tabanı kimlik bilgilerini çıkarın + Aygıt kilidini tanıma + Aygıt kilit açma tanımayı kullanıyorsanız kasa ana kimlik bilgilerinizi yine de hatırlamanız gerekir. + Aygıt kilidini açma bağlantısı + Aygıt kilit açma anahtarını sil Enter Backspace Girdi seç Önceki klavyeye geri dön Özel alanlar Veri tabanınızın kilidini hızlı bir şekilde açmak için parolanızı taranmış biyometrik veya aygıt kimlik bilgilerinize bağlayın. - Cihaz veritabanı kilidini açma - Cihaz kilidini açma zaman aşımı - İçeriğini silmeden önce cihazın kilit açma kullanım süresi - Cihaz kilidini açma süresi doldu - Cihaz kilidini açmak için şifrelenmiş içerik saklamayın + Aygıt veri tabanı kilidini açma + Aygıt kilidini açma zaman aşımı + İçeriğini silmeden önce aygıt kilidi açma kullanım süresi + Aygıt kilidini açma süresi doldu + Aygıt kilidini açmak için şifreli içerik saklamayın Geçici kilit açma - Cihaz kilit açma anahtarlarını silmek için dokunun + Aygıt kilit açma anahtarlarını silmek için dokunun İçerik Liste düzgün şekilde yeniden oluşturulamıyor. Veri tabanı URI\'si alınamıyor. @@ -518,7 +518,7 @@ MiB KiB B - Mevcut OTP türü bu form tarafından tanınmıyor, doğrulaması artık belirteci doğru şekilde oluşturmayabilir. + Var olan OTP türü bu form tarafından tanınmıyor ve doğrulaması artık belirteci doğru şekilde oluşturmayabilir. İptal edildi! Özel Standart @@ -595,7 +595,7 @@ Ekranı açık tut Girdi renkleri Bir girdi için ön plan ve arka plan renklerini görüntüler - Bir girişi izlerken veya düzenlerken ekranı açık tutun + Bir girdiyi izlerken veya düzenlerken ekranı açık tutun Gezinme başlığı Gezinme çekmecesi açık Gezinme çekmecesi kapalı @@ -661,20 +661,16 @@ Kilidi aç Değişim, yenilenme Bilgi - Girişi doğrula + Girdiyi doğrula Sor Klavye, otomatik doldur, pano Yapılandır - Temalar, renkler, öznitellikler + Temalar, renkler, simgeler, yazı tipleri, öznitellikler Şifreleme, anahtar türetme işlevi - Biyometri, cihaz kimlik bilgisi - Girişinizi doğrulamayı ve veritabanınızı kaydetmeyi unutmayın. -\n -\nOtomatik kilitleme etkinleştirilirse ve değişiklik yaptığınızı unutursanız verilerinizi kaybetme riskiyle karşı karşıya kalırsınız. - Bildirim izni, veritabanının durumunu görüntülemenize ve kolayca erişilebilen bir düğmeyle kilitlemenize olanak tanır. -\n -\nBu izni aktifleştirmezseniz arka planda açık olan veritabanı, ön planda başka bir uygulama varken görünmeyecektir. - Cihaz kilit açma bağlantısı + Biyometri, aygıt kimlik bilgisi + Girdinizi doğrulamayı ve veri tabanınızı kaydetmeyi unutmayın. \n \nOtomatik kilitleme etkinleştirilirse ve değişiklik yaptığınızı unutursanız verilerinizi kaybetme riskiyle karşı karşıya kalırsınız. + Bildirim izni, veri tabanının durumunu görüntülemenize ve kolayca erişilebilen bir düğmeyle kilitlemenize olanak tanır. \n \nBu izni etkinleştirmezseniz arka planda açık olan veri tabanı, ön planda başka bir uygulama varken görünmeyecektir. + Aygıt kilit açma bağlantısı Pano bildirim özelliğini kullanmak için bildirim izni gereklidir. Meta veriler, geri dönüşüm kutusu, şablonlar, geçmiş Ara, kilit, geçmiş, özellikler @@ -693,10 +689,51 @@ Veri tabanını en son değişikliklerle yeniden yükle. Anahtar dosyası oluştur Düğümler - Yinelenen giriş sayısı - Bir gruptaki girişlerin sayısını yinelemeli olarak hesaplar + Yinelenen girdi sayısı + Bir gruptaki girdilerin sayısını yinelemeli olarak hesaplar Büyük bir anahtar dosya eklenmesi önerilmez, bu durum veri tabanının açılmasını engelleyebilir. Şablonları gizle Şablonlar gösterilmiyor Gizli anahtar en az %1$d karakter uzunluğunda olmalıdır. + Uygulama Kimliği + Var olan verilerin üzerine yazılsın mı? + Bu işlem, girdideki var olan verileri değiştirecektir. Geçmiş etkinleştirildiyse eski verileri geri alabilirsiniz. + Kimlik bilgisi sağlayıcısı + Veri tabanını kapat + Ayrıcalıklı uygulamalar + Ayrıcalıklı uygulamaların özel listesindeki tarayıcıları yönetin + UYARI: Ayrıcalıklı bir uygulama, kimlik doğrulamanın kaynağını almak için bir ağ geçidi görevi görür. Güvenlik sorunlarını önlemek için uygulamanın doğruluğundan emin olun. + Uygulama tanınmıyor + İmza eksik + Otomatik seç + Yalnızca bir girdi varsa ve veri tabanı açıksa, yalnızca isteyen uygulama uyumluysa otomatik seç + Oluşturma sırasında, ortak anahtar kimlik bilgisi kaynağının yedeklenmesine izin verilip verilmeyeceğini belirleyin + Yedekleme Durumu + Kimlik bilgilerinin yedeklendiğini ve tek bir aygıtın kaybolmasına karşı korunduğunu belirtir + KeePassDX Kimlik Bilgisi Sağlayıcısı + KeePassDX Veri Tabanı + Kilidini açmak için seçin + Geçiş anahtarları + Hızlı ve güvenli parolasız oturum açma için geçiş anahtarlarını yapılandırın + Geçiş anahtarı ayarları + Geçiş anahtarı seçildikten sonra veri tabanını kapatın + %1$s, geçiş anahtarı eylemi gerçekleştirmeye çalışıyor.\n\nAyrıcalıklı uygulamalar listesine eklemek ister misiniz? + UYARI: Geçiş anahtarı başka bir istemciden oluşturuldu veya imza silindi. Güvenlik sorunlarını önlemek için, kimlik doğrulamasını yapmak istediğiniz uygulamanın aynı hizmetin parçası ve güvenilir olduğundan emin olun.\nUygulama bir tarayıcıysa, imzasını girdiye değil, ayarlardaki ayrıcalıklı uygulamalar listesine ekleyin. + %1$s tanınmıyor ve var olan bir geçiş anahtarıyla kimlik doğrulaması yapmaya çalışıyor. + Uygulama imzası geçiş anahtarı girdisine eklensin mi? + Yedekleme Uygunluğu + Geçiş anahtarları, Otomatik doldurma kimlik bilgisi sağlayıcısı + Geçiş anahtarı + Geçiş anahtarını yeni girdiye kaydet + %1$s içindeki geçiş anahtarını güncelle + Geçiş anahtarı bulunamadı + Var olan bir geçiş anahtarı seçin + Geçiş Anahtarı Kullanıcı Adı + Geçiş Anahtarı Özel Anahtarı + Geçiş Anahtarı Kimlik Bilgisi + Geçiş Anahtarı Kullanıcı Kimliği + Geçiş Anahtarı Güvenilen Taraf + Geçiş Anahtarı Yedekleme Uygunluğu + Geçiş Anahtarı Yedekleme Durumu + Geçiş anahtarı döndürülemiyor diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index b4f8b72a0..20322b9d1 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -29,7 +29,7 @@ Застосунок Налаштування застосунку Дужки - Для створення, відкриття та збереження файлів баз даних потрібен файловий менеджер, який приймає дії Intent ACTION_CREATE_DOCUMENT та ACTION_OPEN_DOCUMENT. + Для створення, відкриття та збереження файлів бази даних необхідний файловий менеджер, який підтримує дії ACTION_CREATE_DOCUMENT та ACTION_OPEN_DOCUMENT. Буфер обміну очищено Час до очищення буфера обміну Тривалість зберігання в буфері обміну (якщо підтримується пристроєм) @@ -187,7 +187,7 @@ Вставити Перемістити Скопіювати - Поле файла ключа + Прапорець «Ключ файл» Налаштування головного ключа Налаштування безпеки Розблокування пристрою @@ -244,7 +244,7 @@ Перевірити Піктограма запису Повторне перемикання видимості пароля - Поле пароля + Прапорець «Пароль» Додати вузол Дочірні вузли Не вдалося знайти відповідне обладнання. @@ -378,7 +378,7 @@ Розблокування пристрою Показувати кнопку блокування в інтерфейсі користувача Показувати кнопку блокування - Блокувати базу даних, коли користувач натисне кнопку назад на головному екрані + Натисніть «Назад», щоб заблокувати базу даних, якщо ви перебуваєте на головному екрані бази дани Натисніть \'Назад\', щоб заблокувати Блокувати базу даних за кілька секунд після вимкнення екрана Блокування екрана @@ -395,7 +395,7 @@ Довжина створюваного пароля Налаштування автозаповнення Встановити типовою службою автозаповнення - Увімкнути автозаповнення для швидкого заповнення форм в інших застосунках + Налаштуйте автозаповнення для швидкого заповнення форм в інших застосунках Увійти за допомогою KeePassDX Автозаповнення Загальні @@ -523,7 +523,7 @@ МіБ КіБ Б - Ця форма не розпізнає наявний тип OTP, його перевірка може надалі створювати не дійсний токен. + Наявний тип OTP не розпізнається цією формою, і його перевірка може більше не генерувати токен правильно. Скасовано! Власні Стандартні @@ -639,7 +639,7 @@ Регістр Заголовка Роздільник ВЕРХНІЙ РЕГІСТР - Прапорець апаратного ключа + Прапорець «Апаратний ключ» Апаратний ключ Хибний XML. Відповідь уже надана. @@ -674,7 +674,7 @@ Запитувати Сконфігурувати Посилання для розблокування пристрою - Теми, кольори, атрибути + Теми, кольори, піктограми, шрифти, атрибути Розблокувати Перевірте запис Не забувайте перевірити свій запис і зберегти базу даних. @@ -704,4 +704,45 @@ Шаблони не показано Не рекомендується додавати великий файл ключа, це може завадити створенню бази даних. Секретний ключ повинен містити не менше %1$d символів. + ID застосунку + Перезаписати наявні дані? + Ця дія замінить наявні дані у записі. Ви можете відновити старі дані, якщо ввімкнено історію. + Постачальник облікових даних + Ключі доступу + Налаштуйте ключі доступу для швидкого та безпечного входу без пароля + Налаштування ключів доступу + Закрити базу даних + Закрити базу даних після вибору ключа доступу + Привілейовані програми + Керуйте браузерами у спеціальному списку привілейованих програм + ПОПЕРЕДЖЕННЯ: Привілейована програма діє як шлюз для отримання інформації про походження автентифікації. Переконайтеся в її легітимності, щоб уникнути проблем із безпекою. + Програма не розпізнається + %1$s намагається виконати дію з ключем доступу.\n\nДодати до списку привілейованих програм? + Відсутній підпис + ПОПЕРЕДЖЕННЯ: Ключ доступу було створено з іншого клієнта або підпис було видалено. Щоб уникнути проблем із безпекою, переконайтеся, що програма, яку ви хочете автентифікувати, є частиною тієї самої служби та є легітимною.\nЯкщо ця програма є браузером, не додавайте її підпис до запису, а додайте до списку привілейованих програм у налаштуваннях. + %1$s не розпізнається і намагається пройти автентифікацію за допомогою наявного ключа доступу. + Додати підпис програми до запису ключа доступу? + Автоматичний вибір + Автоматичний вибір, якщо є лише один запис і база даних відкрита, лише якщо застосунок, що запитує це, сумісний + Право на резервне копіювання + Визначити під час створення, чи дозволено створювати резервні копії джерела облікових даних відкритого ключа + Стан резервного копіювання + Показувати, що облікові дані резервно копіюються та захищені від втрати одного пристрою + Ключі доступу, постачальник даних для автозаповнення + Ключ доступу + Постачальник облікових даних KeePassDX + Зберегти ключ доступу у новому записі + Оновити ключ доступу в %1$s + Ключ доступу не знайдено + Вибрати наявний ключ доступу + База даних KeePassDX + Виберіть, щоб розблокувати + Ім\'я користувача ключа доступу + Приватний ключ ключа доступу + Ідентифікатор облікового запису ключа доступу + Ідентифікатор користувача ключа доступу + Сторона, що покладається на ключ доступу + Право на резервне копіювання ключа доступу + Стан резервного копіювання ключа доступу + Не вдалося повернути ключ доступу diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6bac66c41..b724954e5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -205,14 +205,14 @@ 构建 %1$s 加密密码已保存 不可用 - 设为默认自动填充服务 - 启用自动填充功能,以快速填写其他应用中的表单 + 凭据提供程序服务 + 配置自动填充功能以快速填写其他应用中的表单 密码生成长度 设置生成密码的默认长度 密码字符集 设置密码生成时所允许的字符集 显示剪贴板通知,以便在查看条目时复制字段 - 如自动清空剪切板失败,则请手动清空。 + 如果自动删除剪贴板失败,请手动删除其历史记录。 锁定屏幕 屏幕关闭几秒钟后锁定数据库 生物识别解锁 @@ -250,7 +250,7 @@ 按键震动 按键声音 允许主密钥为空 - 如果没有凭证被选中,允许轻按“打开”按钮 + 如果未选择任何凭据,仍可点按“打开”按钮 新手引导 高亮界面元素来学习本应用工作方式 重置新手引导 @@ -301,8 +301,8 @@ 别忘了通过安装新版本来保持你的应用是最新的。 选择模式 不要终止应用… - 按返回键以锁定 - 当用户单击根屏幕上的返回按钮时锁定数据库 + 按“返回”锁定 + 如果您位于数据库的根屏幕,请按“返回”锁定数据库 关闭应用时清空剪贴板 剪贴板持续时间过期或通知在您开始使用后关闭时,锁定数据库 回收站 @@ -324,7 +324,7 @@ 密码长度 添加字段 删除字段 - UUID,通用唯一识别码(Universally Unique Identifier) + UUID 你不能将条目移到此处。 您不能将条目复制到此处。 显示条目数量 @@ -341,7 +341,7 @@ 禁用 主密钥 安全 - 修改历史 + 历史 设置 OTP OTP 类型 OTP 密钥 @@ -431,10 +431,10 @@ 该标签已经存在。 重新启动包含该表单的应用以激活拦截。 阻止自动填充 - 禁止在下列域名中自动填充凭证 - 网址域名黑名单 - 禁止应用自动填充的黑名单 - 应用拦截列表 + 用于阻止网络域名自动填充的阻止名单 + 网络域名阻止名单 + 用于阻止应用自动填充的阻止名单 + 应用阻止名单 过滤器 搜索带有子域约束的网址域名 子域搜索 @@ -453,7 +453,7 @@ KeePass 数据库应该只包含小的实用程序文件(例如 PGP 密钥文件)。 \n \n上传大文件会使增大数据库体积并降低性能。 - 凭证信息 + 凭据信息 删除未链接的数据可能会减少数据库的大小,但也可能会删除用于 KeePass 插件的数据。 无论如何要删除这些数据\? 不推荐添加一个空的密钥文件。 @@ -476,7 +476,7 @@ 保存分享的信息 通知 需要生物识别安全更新。 - 未登记生物识别或设备凭证。 + 未注册生物识别或设备凭据。 从回收站永久删除所有节点? 保存模式 搜索模式 @@ -507,7 +507,7 @@ 设备解锁过期 使用设备解锁但不存储任何加密内容 临时性设备解锁 - 轻按删除设备解锁密钥 + 点按删除设备解锁密钥 内容 无法正确地重建列表。 无法检索数据库 URI 。 @@ -522,7 +522,7 @@ 兆字节 千位字节 字节 - 现有的 OTP 类型未被此表单所识别,其验证可能不再正确生成令牌。 + 现有的 OTP 类型未被此表单所识别,并且其验证可能不再正确生成令牌。 已取消! 自定义 标准 @@ -671,7 +671,7 @@ 以后再说 配置 设备解锁链接 - 主题、颜色、属性 + 主题、颜色、图标、字体、属性 解锁 验证条目 信息 @@ -703,4 +703,45 @@ 节点 条目的递归数 密钥长度至少为 %1$d 个字符。 + %1$s 未被识别,并尝试使用现有通行密钥进行身份验证。 + 应用 ID + 覆盖现有数据? + 此操作将替换条目中的现有数据,如果启用了历史记录,您可以检索旧数据。 + 通行密钥‌ + 配置通行密钥以实现快速安全的无密码登录‌ + 通行密钥设置 + 关闭数据库‌ + 在选择通行密钥后关闭数据库 + 特权应用 + 通行密钥‌ + 在新条目中保存通行密钥‌ + 在 %1$s 中更新通行密钥‌ + 未找到通行密钥‌ + 选择现有通行密钥‌ + KeePassDX 数据库 + 通行密钥用户名 + 通行密钥私钥‌ + 通行密钥凭据 ID‌ + 通行密钥依赖方 + 通行密钥备份资格‌ + 通行密钥备份状态‌ + 无法返回通行密钥 + 备份资格‌ + 备份状态‌ + 自动选择 + 签名缺失 + 通行密钥用户句柄‌ + 选择以解锁 + 凭据提供程序 + KeePassDX 凭据提供程序 + 通行密钥、自动填充凭据提供程序‌ + 管理自定义特权应用列表中的浏览器 + 应用未被识别 + %1$s 尝试执行通行密钥操作。\n\n是否将其添加到特权应用列表? + 警告:特权应用充当检索身份验证来源的网关。请确保其合法性以避免安全问题。 + 仅当请求的应用兼容时,如果只有一个条目且数据库打开,则自动选择 + 在创建时确定是否允许备份公钥凭据来源 + 指示凭据已备份并受到保护,防止单设备丢失的影响 + 警告:通行密钥是从其他客户端创建的,或者签名已被删除。请确保您要验证的应用属于同一服务并且合法,以避免安全问题。\n如果应用是浏览器,请勿将其签名添加到条目中,而是添加到设置中的特权应用列表中。 + 是否将应用签名添加到通行密钥条目?‌ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index af5fa5100..4effb4d50 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -192,7 +192,7 @@ Counter must be between %1$d and %2$d. Period must be between %1$d and %2$d seconds. Token must contain %1$d to %2$d digits. - The existing OTP type is not recognized by this form, its validation may no longer correctly generate the token. + The existing OTP type is not recognized by this form, and its validation may no longer correctly generate the token. This text does not match the requested item. Saving a new item is not allowed in a read-only database. The field name already exists. @@ -461,7 +461,7 @@ Screen lock Lock the database after a few seconds once the screen is off Press \'Back\' to lock - Lock the database when the user clicks the back button on the root screen + Press \'Back\' to lock the database if you\'re at the root screen of the database Show lock button Displays the lock button in the user interface Content diff --git a/app/src/main/res/xml/dataset_service.xml b/app/src/main/res/xml/dataset_service.xml index 0009d2332..52eac4ec8 100644 --- a/app/src/main/res/xml/dataset_service.xml +++ b/app/src/main/res/xml/dataset_service.xml @@ -55,7 +55,7 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat android:maxLongVersionCode="10000000000" /> + android:maxLongVersionCode="427912623" /> @@ -263,6 +263,9 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat + diff --git a/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt b/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt index 198f1a1cb..c4f12fcd6 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/element/DateInstant.kt @@ -224,6 +224,10 @@ class DateInstant : Parcelable { return this.mInstant.isAfter(dateInstant.mInstant) } + fun isEquals(dateInstant: DateInstant): Boolean { + return this.mInstant.isEqual(dateInstant.mInstant) + } + fun compareTo(other: DateInstant): Int { return mInstant.compareTo(other.mInstant) } diff --git a/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt b/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt index 19e18b9e6..ba6c540b4 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/merge/DatabaseKDBXMerger.kt @@ -486,21 +486,25 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { // Merge independently custom data mergeCustomData(entry.customData, entryToMerge.customData) // Merge by modification time - if (entry.lastModificationTime.isBefore(entryToMerge.lastModificationTime) - ) { + if (entry.lastModificationTime.isBefore(entryToMerge.lastModificationTime)) { + // Update entry with databaseEntryToMerge and merge history addHistory(entry, entryToMerge) if (parentEntryToMerge == entry.parent) { entry.updateWith(entryToMerge, copyHistory = true, updateParents = false) } else { - // Update entry with databaseEntryToMerge and merge history database.removeEntryFrom(entry, entry.parent) if (parentEntryToMerge != null) { database.addEntryTo(entryToMerge, parentEntryToMerge) } } - } else if (entry.lastModificationTime.isAfter(entryToMerge.lastModificationTime) - ) { + } else if (entry.lastModificationTime.isAfter(entryToMerge.lastModificationTime)) { addHistory(entryToMerge, entry) + } else if (entry.lastModificationTime.isEquals(entryToMerge.lastModificationTime)) { + // If it's the same modification time, simply move entry to the right location + parentEntryToMerge?.let { + database.removeEntryFrom(entry, entry.parent) + database.addEntryTo(entryToMerge, parentEntryToMerge) + } } } } @@ -561,8 +565,7 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { // Merge independently custom data mergeCustomData(group.customData, groupToMerge.customData) // Merge by modification time - if (group.lastModificationTime.isBefore(groupToMerge.lastModificationTime) - ) { + if (group.lastModificationTime.isBefore(groupToMerge.lastModificationTime)) { if (parentGroupToMerge == group.parent) { group.updateWith(groupToMerge, false) } else { @@ -571,6 +574,12 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) { database.addGroupTo(groupToMerge, parentGroupToMerge) } } + } else if (group.lastModificationTime.isEquals(groupToMerge.lastModificationTime)) { + // If it's the same modification time, simply move group to the right location + parentGroupToMerge?.let { + database.removeGroupFrom(group, group.parent) + database.addGroupTo(groupToMerge, parentGroupToMerge) + } } } } diff --git a/database/src/main/java/com/kunzisoft/keepass/utils/ParcelableUtil.kt b/database/src/main/java/com/kunzisoft/keepass/utils/ParcelableUtil.kt index 94d3a5e71..6055f21d2 100644 --- a/database/src/main/java/com/kunzisoft/keepass/utils/ParcelableUtil.kt +++ b/database/src/main/java/com/kunzisoft/keepass/utils/ParcelableUtil.kt @@ -82,6 +82,13 @@ inline fun Bundle.getParcelableList(key: String?): Muta else -> @Suppress("DEPRECATION", "UNCHECKED_CAST") (getParcelableArray(key) as? Array)?.toMutableList() } +inline fun > Bundle.putEnum(key: String?, value: T?) = + putString(key, value?.name) + +inline fun > Bundle.getEnum(key: String?): T? { + return getString(key)?.let { enumValueOf(it) } +} + // -------- Parcel -------- inline fun Parcel.readParcelableCompat(): T? = when { diff --git a/fastlane/metadata/android/ar/short_description.txt b/fastlane/metadata/android/ar/short_description.txt index bfd476722..e3e8efeee 100644 --- a/fastlane/metadata/android/ar/short_description.txt +++ b/fastlane/metadata/android/ar/short_description.txt @@ -1 +1 @@ -مدير وحافظة كلمات سر آمنة ومفتوحة المصدر \ No newline at end of file +أدر كلمات السر / Passkey في مخزن محلي ومفتوح المصدر diff --git a/fastlane/metadata/android/ar/title.txt b/fastlane/metadata/android/ar/title.txt index 3526b4c59..ee6b1afb4 100644 --- a/fastlane/metadata/android/ar/title.txt +++ b/fastlane/metadata/android/ar/title.txt @@ -1 +1 @@ -KeePassDX - مدير كلمات سر مفتوح المصدر \ No newline at end of file +KeePassDX مدير كلمات سر مفتوح المصدر diff --git a/fastlane/metadata/android/cs-CZ/full_description.txt b/fastlane/metadata/android/cs-CZ/full_description.txt index a1a2c959b..db687edfe 100644 --- a/fastlane/metadata/android/cs-CZ/full_description.txt +++ b/fastlane/metadata/android/cs-CZ/full_description.txt @@ -1,19 +1,21 @@ -KeePassDX je trezor a správce hesel, který umožňuje upravovat šifrovaná data v jednom souboru v otevřeném formátu KeePass a bezpečně vyplňovat formuláře, nevyžaduje připojení k internetu a integruje standardy designu systému Android. Aplikace je open source a bez reklam. +KeePassDX je open-source trezor a správce hesel a přístupových klíčů, který umožňuje upravovat šifrovaná data v jednom souboru v otevřeném formátu KeePass a bezpečně vyplňovat formuláře, nevyžaduje připojení k internetu a integruje standardy designu systému Android. Aplikace je open source a bez reklam. Funkce -- Vytváření databázových souborů / záznamů a skupin. -- Podpora souborů .kdb a .kdbx (verze 1 až 4) s algoritmy AES - Twofish - ChaCha20 - Argon2. -- Kompatibilní s většinou alternativních programů (KeePass, KeePassXC, KeeWeb, …). -- Umožňuje rychlé otevírání a kopírování polí URI / URL. -- Biometrické rozpoznávání pro rychlé odemykání (otisk prstu / rozpoznání obličeje / …). +- Přístupové klíče pro přihlašování a lokální ukládání soukromých klíčů. +- Biometrické rozpoznávání pro rychlé odemykání (otisk prstu / odemykání obličejem / …). - Správa jednorázových hesel (HOTP / TOTP) pro dvoufaktorové ověřování (2FA). -- Material Design s motivy. -- Automatické vyplňování a integrace. -- Klávesnice pro vyplňování polí. -- Dynamické šablony. +- Automatické vyplňování pro snadné vyplňování formulářů s hesly. +- Magikeyboard pro efektivní vyplňování libovolných polí. +- Vytváření šifrovaných databázových souborů. +- Organizace přihlašovacích údajů podle záznamů a ve skupinových stromech. +- Umožňuje rychlé otevírání a kopírování polí URI / URL. +- Dynamické šablony pro každý typ záznamu. - Historie každého záznamu. -- Přesná správa nastavení. +- Přesná správa nastavení. +- Material Design s motivy. +- Podpora souborů .kdb a .kdbx (verze 1 až 4) s algoritmem AES - Twofish - ChaCha20 - Argon2. +- Kompatibilní s většinou alternativních programů (KeePass, KeePassXC, KeeWeb, …). - Kód napsaný v nativních jazycích (Kotlin / Java / JNI / C). Můžete přispět nebo si koupit profesionální verzi pro lepší služby a rychlejší vývoj funkcí, které si přejete: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro diff --git a/fastlane/metadata/android/cs-CZ/short_description.txt b/fastlane/metadata/android/cs-CZ/short_description.txt index 4230216a0..9bd08a095 100644 --- a/fastlane/metadata/android/cs-CZ/short_description.txt +++ b/fastlane/metadata/android/cs-CZ/short_description.txt @@ -1 +1 @@ -Bezpečný open-source trezor a správce hesel \ No newline at end of file +Spravujte přístupové klíče a hesla v lokálním a open-source trezoru diff --git a/fastlane/metadata/android/cs-CZ/title.txt b/fastlane/metadata/android/cs-CZ/title.txt index 3f8a53e47..26eb85b54 100644 --- a/fastlane/metadata/android/cs-CZ/title.txt +++ b/fastlane/metadata/android/cs-CZ/title.txt @@ -1 +1 @@ -KeePassDX – FOSS trezor hesel \ No newline at end of file +KeePassDX – Trezor pro hesla diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt index 59e17e4dd..777972e7c 100644 --- a/fastlane/metadata/android/de-DE/full_description.txt +++ b/fastlane/metadata/android/de-DE/full_description.txt @@ -1,23 +1,25 @@ -KeePassDX ist ein Passwort-Safe und -Manager, der es ermöglicht, verschlüsselte Daten in einer einzigen Datei im offenen KeePass-Format zu bearbeiten und die Formulare auf sichere Weise auszufüllen, erfordert keine Internetverbindung und integriert Android-Designstandards. Die App ist Open Source, ohne Werbung. +KeePassDX ist ein Open-Source-Passwort-Tresor und -Manager, der es ermöglicht, verschlüsselte Daten in einer einzigen Datei im offenen KeePass-Format zu bearbeiten und die Formulare auf sichere Weise auszufüllen, erfordert keine Internetverbindung und integriert Android-Designstandards. Die App ist Open Source, ohne Werbung. Funktionalitäten -- Erstellung von Datenbanken / Einträgen und Gruppen. -- Unterstützung von .kdb- und .kdbx-Dateien (Version 1 bis 4) mit AES - Twofish - ChaCha20 - Argon2 Algorithmus. -- Kompatibel mit den meisten alternativen Programmen (KeePass, KeePassXC, KeeWeb, ...). -- Ermöglicht das schnelle Kopieren von Feldern und das Öffnen von URIs /URLs. -- Biometrische Erkennung für eine schnelle Entsperrung (Fingerabdrücke / Entsperrung durch Gesicht / ...). -- Verwaltung von Einmalpasswörtern (One-Time Password HOTP / TOTP) für die Zwei-Faktor-Authentifizierung (2FA). -- Material Design mit Themen. -- Automatisches Ausfüllen von Feldern. -- Tastatur zum Ausfüllen von Feldern. -- Dynamische Schablonen. -- Historie jedes Eintrags. -- Präzise Verwaltung der Parameter. +- Passkeys für die Authentifizierung und lokales Speichern privater Schlüssel. +- Biometrische Erkennung für schnelles Entsperren (Fingerabdruck / Entsperren durch Gesicht / …). +- Verwaltung von Einmalpasswörtern (HOTP / TOTP) für die Zwei-Faktor-Authentifizierung (2FA). +- Automatisches Ausfüllen von Formularen mit Passwörtern. +- Magikeyboard zum effizienten Ausfüllen beliebiger Felder. +- Erstellen verschlüsselter Datenbankdateien. +- Organisation von Anmeldedaten nach Einträgen und in Gruppenbäumen. +- Ermöglicht das schnelle Öffnen und Kopieren von URI-/URL-Feldern. +- Dynamische Vorlagen für jeden Eintragstyp. +- Verlauf jedes Eintrags. +- Präzise Verwaltung der Einstellungen. +- Material Design. +- Unterstützung von .kdb- und .kdbx-Dateien (Version 1 bis 4) mit AES – Twofish – ChaCha20 – Argon2-Algorithmus. +- Kompatibel mit den meisten alternativen Programmen (KeePass, KeePassXC, KeeWeb, …). - In nativen Sprachen geschriebener Code (Kotlin / Java / JNI / C). Sie können spenden oder die Pro-Version kaufen, um einen besseren Service und eine schnelle Entwicklung der von Ihnen gewünschten Funktionen zu erhalten: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro Das Projekt wird ständig weiterentwickelt. Zögern Sie nicht, den Entwicklungsstand der nächsten Updates zu überprüfen: https://github.com/Kunzisoft/KeePassDX/projects -Sie haben einen Bug : https://github.com/Kunzisoft/KeePassDX/issues +Sie haben einen Bug : https://github.com/Kunzisoft/KeePassDX/issues \ No newline at end of file diff --git a/fastlane/metadata/android/de-DE/short_description.txt b/fastlane/metadata/android/de-DE/short_description.txt index 928efec31..7b7ede175 100644 --- a/fastlane/metadata/android/de-DE/short_description.txt +++ b/fastlane/metadata/android/de-DE/short_description.txt @@ -1 +1 @@ -Sicherer Open-Source-Passwort-Tresor und -Manager \ No newline at end of file +Passkey/Passwort in einem lokalen Open-Source-Tresor verwalten diff --git a/fastlane/metadata/android/de-DE/title.txt b/fastlane/metadata/android/de-DE/title.txt index b8423e327..e2a4d45f1 100644 --- a/fastlane/metadata/android/de-DE/title.txt +++ b/fastlane/metadata/android/de-DE/title.txt @@ -1 +1 @@ -KeePassDX – FOSS-Passworttresor \ No newline at end of file +KeePassDX Pass(key-worttresor) \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/146.txt b/fastlane/metadata/android/en-US/changelogs/146.txt new file mode 100644 index 000000000..6b92e8113 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/146.txt @@ -0,0 +1,5 @@ + * Fix Magikeyboard autosearch #2233 + * Fix database merge #2223 + * Fix dialog database action #2234 + * Fix autofill selection #2238 #2235 + * Small fixes \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index b892602c9..bbab65d38 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -22,4 +22,4 @@ You can donate or buy the pro version for better service and a quick development The project is constantly evolving. Do not hesitate to check the development status of the next updates: https://github.com/Kunzisoft/KeePassDX/projects -Send issues to: https://github.com/Kunzisoft/KeePassDX/issues +Send issues to: https://github.com/Kunzisoft/KeePassDX/issues \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt index b4a23a795..f0be6bb5b 100644 --- a/fastlane/metadata/android/en-US/title.txt +++ b/fastlane/metadata/android/en-US/title.txt @@ -1 +1 @@ -KeePassDX - Pass(key/word) Vault \ No newline at end of file +KeePassDX Pass(key/word) Vault \ No newline at end of file diff --git a/fastlane/metadata/android/et/full_description.txt b/fastlane/metadata/android/et/full_description.txt index 20e0a4ee9..b5e5d61d4 100644 --- a/fastlane/metadata/android/et/full_description.txt +++ b/fastlane/metadata/android/et/full_description.txt @@ -1,23 +1,25 @@ -KeePassDX on salasõnalaegas ja -haldur, mis võimaldab muuta krüptitud andmeid avatud KeePass vormingus ühes failis ja täita vorme turvaliselt, ei vaja internetiühendust ning järgib Androidi kujundus-standardeid. Rakendus on avatud lähtekoodiga ja reklaamivaba. +KeePassDX on avatud lähtekoodiga salavõtmete ja salasõnade laegas ja -haldur, mis võimaldab muuta krüptitud andmeid avatud KeePass vormingus ühe failina ja täita vorme turvaliselt, ei vaja internetiühendust ning järgib Androidi kujundus-standardeid. Rakendus on avatud lähtekoodiga ja reklaamivaba. -Funktsionaaldus +Funktsionaalsus -- Andmebaasi failide, kirjete ja gruppide loomine. +- Autentimiseks kasutatavad salavõtmed ja privaatvõtmete salvestamine kohalikus andmeruumis. - .kdb ja .kdbx failide tugi (versioonid 1 kuni 4) AES - Twofish - ChaCha20 - Argon2 algoritmidega. -- Ühildub enamiku alternatiivsete prakendustega (KeePass, KeePassXC, KeeWeb, …). -- Kiire võrguaadresside (URI / URL) väljade avamine ja kopeerimine. - Biomeetriline autentimine kiireks lukustuse eemaldamiseks (sõrmejälg / näotuvastus / …). -- Ühekordsete slasõnade haldus (HOTP / TOTP) kahefaktorilise autentimise (2FA) jaoks. -- MD kujunduskeel koos kujundustega. -- Automaattäide ja lõiming. -- Klahvistik väljade täitmiseks. -- Dünaamilised mallid. +- Ühekordsete salasõnade haldus (HOTP / TOTP) kahefaktorilise autentimise (2FA) jaoks. +- Automaattäide ja lõiming sisestusvormide mugavaks täitmiseks. +- Maagiline klahvistik kõikide väljade tõhusaks täitmiseks. +- Krüptitud andmebaasifailide loomine. +- Andmed on kirjete kaupa ja neid saad rühmitada gruppidena, +- Kiire võrguaadresside (URI / URL) väljade avamine ja kopeerimine. +- Dünaamilised mallid iga sisestustüübi jaoks. - Iga kirje ajalugu. - Täpne seadistuste haldus. -- Lähtekood on kirjutatud platvormiomases keeltes (Kotlin / Java / JNI / C). +- MD kujunduskeel koos erinevate kujundustega. +- .kdb ja .kdbx failide tugi (versioonid 1 kuni 4), kui kasutusel on AES - Twofish - ChaCha20 - Argon2 algoritmid. +- Ühildub enamiku alternatiivsete rakendustega (KeePass, KeePassXC, KeeWeb, …).- Lähtekood on kirjutatud platvormiomases keeltes (Kotlin / Java / JNI / C). Parema teenuse ja kiirema arendustöö huvides saad sa annetada või osta pro versiooni: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro -Projekt areneb pidevalt. Ära kõhkle kontrollimast järgmiste arenduste olekut: https://github.com/Kunzisoft/KeePassDX/projects +Projekt areneb pidevalt. Ära kõhkle kontrollimast järgmiste uuenduste ja arenduste olekut: https://github.com/Kunzisoft/KeePassDX/projects Veateated lisa palun siia: https://github.com/Kunzisoft/KeePassDX/issues diff --git a/fastlane/metadata/android/et/short_description.txt b/fastlane/metadata/android/et/short_description.txt index 2b7d178ae..e0cb3b0aa 100644 --- a/fastlane/metadata/android/et/short_description.txt +++ b/fastlane/metadata/android/et/short_description.txt @@ -1 +1 @@ -Turvaline avatud lähtekoodiga salasõnalaegas ja -haldur \ No newline at end of file +Halda salasõnu ja -võtmeid avatud lähtekoodiga kohalikus salasõnalaekas diff --git a/fastlane/metadata/android/et/title.txt b/fastlane/metadata/android/et/title.txt index af4bbda32..9f0786038 100644 --- a/fastlane/metadata/android/et/title.txt +++ b/fastlane/metadata/android/et/title.txt @@ -1 +1 @@ -KeePassDX: sinu salasõnalaegas \ No newline at end of file +KeePassDX: sinu salasõnalaegas diff --git a/fastlane/metadata/android/fr-FR/changelogs/134.txt b/fastlane/metadata/android/fr-FR/changelogs/134.txt index 8f1782234..c698aa00a 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/134.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/134.txt @@ -1,8 +1,8 @@ - * Correction de la recherche URL #1940 #1946 #2003 #2040 #2044 +* Correction de la recherche URL #1940 #1946 #2003 #2040 #2044 * Correction de la boite de dialogue de remplissage automatique #2054 * Correction des notes de groupes #2053 * Correction du fond de boite de dialogue #2005 #2004 (Thx @codokie) * Correction configuration OTP #2042 #2065 (Thx @Dev-ClayP) * Correction de petits éléments graphiques #1987 #2007 (Thx @ymcx) * Support des vues RTL #2021 (Thx @codokie) - * Metadonnées de l'app en traduction #1823 \ No newline at end of file + * Metadonnées de l'app en traduction #1823 diff --git a/fastlane/metadata/android/fr-FR/changelogs/135.txt b/fastlane/metadata/android/fr-FR/changelogs/135.txt index b80533179..4289b0c9e 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/135.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/135.txt @@ -1,5 +1,5 @@ - * Correction de l'enregistrement pour le remplissage automatique #2089 +* Correction de l'enregistrement pour le remplissage automatique #2089 * Correction des erreurs biométriques #2081 * Correction du timestamp dans le fichier de copie #1981 #1983 * Correction des gabaris Email #1986 - * Correction de la recherche #2096 \ No newline at end of file + * Correction de la recherche #2096 diff --git a/fastlane/metadata/android/fr-FR/changelogs/136.txt b/fastlane/metadata/android/fr-FR/changelogs/136.txt index 7c211d24d..c3b4b4366 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/136.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/136.txt @@ -1,3 +1,3 @@ - * Correction UnlockManager #2098 #2101 +* Correction UnlockManager #2098 #2101 * Invite de déverrouillage automatique de l'appareil #2105 - * Petites corrections ##2066 \ No newline at end of file + * Petites corrections ##2066 diff --git a/fastlane/metadata/android/fr-FR/changelogs/137.txt b/fastlane/metadata/android/fr-FR/changelogs/137.txt index 454d844ab..09c15bb8e 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/137.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/137.txt @@ -1 +1 @@ - * Correction invite de commande auto #2111 \ No newline at end of file +* Correction invite de commande auto #2111 diff --git a/fastlane/metadata/android/fr-FR/changelogs/138.txt b/fastlane/metadata/android/fr-FR/changelogs/138.txt index 847645a69..da0baea88 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/138.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/138.txt @@ -1,3 +1,3 @@ - * Ouverture auto de la prompt biometrique depuis la liste des bases #2113 +* Ouverture auto de la prompt biometrique depuis la liste des bases #2113 * Correction d'erreurs du Keystore #2114 #2115 - * Refactoring complet de l'invite biométrique pour une meilleure compatibilité \ No newline at end of file + * Refactoring complet de l'invite biométrique pour une meilleure compatibilité diff --git a/fastlane/metadata/android/fr-FR/changelogs/139.txt b/fastlane/metadata/android/fr-FR/changelogs/139.txt index e63619ba9..ee6df09f7 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/139.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/139.txt @@ -1 +1 @@ - * Correction du CipherDatabase pour les états biométriques #2119 \ No newline at end of file +* Correction du CipherDatabase pour les états biométriques #2119 diff --git a/fastlane/metadata/android/fr-FR/changelogs/140.txt b/fastlane/metadata/android/fr-FR/changelogs/140.txt index 165c091e8..23d5dde44 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/140.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/140.txt @@ -1,4 +1,4 @@ - * Mise à jour vers API 35 minimum SDK 19 #2073 #2138 #2067 #2133 (Thx @Dev-ClayP) +* Mise à jour vers API 35 minimum SDK 19 #2073 #2138 #2067 #2133 (Thx @Dev-ClayP) * Gestion des Passkeys #1421 #2097 (Thx @cali-95) * Garde en mémoire la lecture seule #2099 #2100 (Thx @rmacklin) - * Petites corrections \ No newline at end of file + * Petites corrections diff --git a/fastlane/metadata/android/fr-FR/changelogs/141.txt b/fastlane/metadata/android/fr-FR/changelogs/141.txt index c89f4045d..a9da538b4 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/141.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/141.txt @@ -1,6 +1,6 @@ - * Mise à jour vers API 35 minimum SDK 19 #2073 #2138 #2067 #2133 #1687 (Thx @Dev-ClayP) +* Mise à jour vers API 35 minimum SDK 19 #2073 #2138 #2067 #2133 #1687 (Thx @Dev-ClayP) * Sauvegarde du dernier état lecture seule #2099 #2100 (Thx @rmacklin) * Correction de la suppression lors d'un merge #1516 * Correction des espaces dans la recherche #175 * Correction de la poubelle supprimable #2163 - * Petites corrections \ No newline at end of file + * Petites corrections diff --git a/fastlane/metadata/android/fr-FR/changelogs/142.txt b/fastlane/metadata/android/fr-FR/changelogs/142.txt index 18ad406f0..1a0e34596 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/142.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/142.txt @@ -1,6 +1,6 @@ - * Gestion des Passkeys #1421 #2097 (Thx @cali-95) +* Gestion des Passkeys #1421 #2097 (Thx @cali-95) * Confirmation de l'usage de passkey #2165 * Dialogue pour gérer les signatures manquantes #2152 #2155 #2161 #2160 * Capture des erreurs #2159 * Changement des paramètres Backup Eligibility & Backup State #2135 #2150 - * Petites corrections #2157 #2164 \ No newline at end of file + * Petites corrections #2157 #2164 diff --git a/fastlane/metadata/android/fr-FR/changelogs/143.txt b/fastlane/metadata/android/fr-FR/changelogs/143.txt index 8b32c9411..0fbf28ad7 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/143.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/143.txt @@ -1,3 +1,3 @@ - * Correction de l'interface en paysage #2198 #2200 (@chenxiaolong) +* Correction de l'interface en paysage #2198 #2200 (@chenxiaolong) * Correction du démarrage en boucle et de l'écran clignotant #2201 - * Petites corrections \ No newline at end of file + * Petites corrections diff --git a/fastlane/metadata/android/fr-FR/changelogs/144.txt b/fastlane/metadata/android/fr-FR/changelogs/144.txt index 5ff5e38a3..cbdb6348d 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/144.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/144.txt @@ -1,6 +1,6 @@ - * Gestion de Passkeys #1421 (Thx @cali-95) +* Gestion de Passkeys #1421 (Thx @cali-95) * Paramètres de recherche #2112 #2181 * Paramètre de fermeture de la base après une sélection de Passkey #2187 * Mise en garde lors de l'écrasement d'un Passkey existant #21124 * Refonte du remplissage automatique #765 #2196 - * Petites corrections #2171 #2150 #2159 #2122 #2180 #2209 \ No newline at end of file + * Petites corrections #2171 #2150 #2159 #2122 #2180 #2209 diff --git a/fastlane/metadata/android/fr-FR/changelogs/145.txt b/fastlane/metadata/android/fr-FR/changelogs/145.txt index 7fe80fe23..0c5de2afc 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/145.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/145.txt @@ -1,8 +1,8 @@ - * Gestion de Passkeys #1421 #2097 (@cali-95) +* Gestion de Passkeys #1421 #2097 (@cali-95) * Confirmation de l'usage de Passkey #2165 #2124 * Dialogue pour la gestion des signatures manquantes #2152 #2155 #2161 #2160 * Capture des erreurs #2159 #2215 * Configuration de Passkey Backup Eligibility & Backup State #2135 #2150 #2212 * Paramètres de recherche #2112 #2181 #2187 #2204 * Refactorisation du remplissage automatique #765 #2196 - * Corrections mineures #2157 #2164 #2171 #2122 #2180 #2209 #2214 \ No newline at end of file + * Corrections mineures #2157 #2164 #2171 #2122 #2180 #2209 #2214 diff --git a/fastlane/metadata/android/fr-FR/changelogs/146.txt b/fastlane/metadata/android/fr-FR/changelogs/146.txt new file mode 100644 index 000000000..4a0b50ca6 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/146.txt @@ -0,0 +1,5 @@ + * Correction de la recherche auto pour le Magikeyboard #2233 + * Correction de la fusion de bases de données #2223 + * Correction de l'action de la base de données #2234 + * Correction de la selection du remplissage automatique #2238 #2235 + * Petites corrections \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/short_description.txt b/fastlane/metadata/android/fr-FR/short_description.txt index 2b1a131e2..be827b8ba 100644 --- a/fastlane/metadata/android/fr-FR/short_description.txt +++ b/fastlane/metadata/android/fr-FR/short_description.txt @@ -1 +1 @@ -Gestion de vos passkeys / mots de passe dans un coffre-fort local et open-source \ No newline at end of file +Gestion de vos passkeys / mots de passe dans un coffre-fort local et open-source diff --git a/fastlane/metadata/android/fr-FR/title.txt b/fastlane/metadata/android/fr-FR/title.txt index b4a23a795..26d87271c 100644 --- a/fastlane/metadata/android/fr-FR/title.txt +++ b/fastlane/metadata/android/fr-FR/title.txt @@ -1 +1 @@ -KeePassDX - Pass(key/word) Vault \ No newline at end of file +KeePassDX - Coffre-fort local \ No newline at end of file diff --git a/fastlane/metadata/android/hr/full_description.txt b/fastlane/metadata/android/hr/full_description.txt index 6fc26bd2d..5bb6e151e 100644 --- a/fastlane/metadata/android/hr/full_description.txt +++ b/fastlane/metadata/android/hr/full_description.txt @@ -20,4 +20,4 @@ Doniraj ili kupi Pro verziju za bolju uslugu i brži razvoj željenih funkcija: Projekt se neprestano razvija. Slobodno provjeri stanje razvoja sljedećih verzija: https://github.com/Kunzisoft/KeePassDX/projects -Prijavi probleme na: https://github.com/Kunzisoft/KeePassDX/issues \ No newline at end of file +Prijavi probleme na: https://github.com/Kunzisoft/KeePassDX/issues diff --git a/fastlane/metadata/android/hr/short_description.txt b/fastlane/metadata/android/hr/short_description.txt index 31adbdb8e..b52093483 100644 --- a/fastlane/metadata/android/hr/short_description.txt +++ b/fastlane/metadata/android/hr/short_description.txt @@ -1 +1 @@ -Siguran trezor i upravljač za lozinke otvorenog koda \ No newline at end of file +Siguran trezor i upravljač za lozinke otvorenog koda diff --git a/fastlane/metadata/android/hr/title.txt b/fastlane/metadata/android/hr/title.txt index 56c33275e..1c4f55356 100644 --- a/fastlane/metadata/android/hr/title.txt +++ b/fastlane/metadata/android/hr/title.txt @@ -1 +1 @@ -KeePassDX – FOSS trezor za lozinke \ No newline at end of file +KeePassDX – FOSS trezor za lozinke diff --git a/fastlane/metadata/android/hu-HU/full_description.txt b/fastlane/metadata/android/hu-HU/full_description.txt new file mode 100644 index 000000000..a486fa9d9 --- /dev/null +++ b/fastlane/metadata/android/hu-HU/full_description.txt @@ -0,0 +1,25 @@ +A KeePassDX egy nyílt forráskódú jelszókezelő, jelszótároló és -kezelő, amely lehetővé teszi titkosított adatok szerkesztését egyetlen fájlban a nyílt KeePass formátumban, valamint az űrlapok biztonságos kitöltését, nem igényel internetkapcsolatot és integrálja az Android tervezési szabványokat. Az alkalmazás nyílt forráskódú, reklámmentes. + +Jellemzők + +- Jelszavak a hitelesítéshez és a privát kulcsok helyi tárolásához. +- Biometrikus felismerés a gyors feloldáshoz (ujjlenyomat / arcfeloldás / …). +- Egyszeri jelszókezelés (HOTP / TOTP) a kétfaktoros hitelesítéshez (2FA). +- Automatikus kitöltés a jelszavakkal való egyszerű űrlapkitöltéshez. +- Mágikus billentyűzet a mezők hatékony kitöltéséhez. +- Titkosított adatbázis fájlok létrehozása. +- Hitelesítési adatok szervezése bejegyzésenként és csoportfákban. +- Lehetővé teszi a webcímek gyors megnyitását és másolását. +- Dinamikus sablonok minden bejegyzés típushoz. +- Minden bejegyzés előzményei. +- Beállítások pontos kezelése. +- Material témákkal. +- .kdb és .kdbx fájlok (1-4 verzió) támogatása AES - Twofish - ChaCha20 - Argon2 algoritmussal. +- Kompatibilis a legtöbb alternatív programmal (KeePass, KeePassXC, KeeWeb, …). +- Natív nyelveken (Kotlin / Java / JNI / C) írt kód. + +Adományozhat vagy megvásárolhatja a pro verziót a jobb szolgáltatás és a kívánt funkciók gyors fejlesztése érdekében: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro + +A projekt folyamatosan fejlődik. Ne habozzon megnézni a következő frissítések fejlesztési állapotát: https://github.com/Kunzisoft/KeePassDX/projects + +A problémákat itt küldheti be: https://github.com/Kunzisoft/KeePassDX/issues diff --git a/fastlane/metadata/android/hu-HU/short_description.txt b/fastlane/metadata/android/hu-HU/short_description.txt new file mode 100644 index 000000000..c25f150db --- /dev/null +++ b/fastlane/metadata/android/hu-HU/short_description.txt @@ -0,0 +1 @@ +Jelszavak és kulcsok kezelése helyi, nyílt forráskódú tárolóban diff --git a/fastlane/metadata/android/hu-HU/title.txt b/fastlane/metadata/android/hu-HU/title.txt new file mode 100644 index 000000000..55d0438ed --- /dev/null +++ b/fastlane/metadata/android/hu-HU/title.txt @@ -0,0 +1 @@ +KeePassDX jelszótároló diff --git a/fastlane/metadata/android/it-IT/full_description.txt b/fastlane/metadata/android/it-IT/full_description.txt index 8e9548f30..32b15f003 100644 --- a/fastlane/metadata/android/it-IT/full_description.txt +++ b/fastlane/metadata/android/it-IT/full_description.txt @@ -1,23 +1,24 @@ -KeePassDX è un gestore di password che permette di modificare dati crittografati in un unico file nel formato aperto KeePass e di compilare moduli in modo sicuro, non richiede alcuna connessione a internet e integra gli standard di progettazione Android. L'app è open source, senza pubblicità. +KeePassDX è un gestore di password e passkey open source che permette di modificare dati crittografati in un unico file nel formato aperto KeePass e di compilare moduli in modo sicuro, non richiede alcuna connessione a internet e integra gli standard di progettazione Android. L'app è open source, senza pubblicità. Caratteristiche -- Crea file / voci e gruppi di database. -- Supporto ai file .kdb e .kdbx (versione da 1 a 4) con algoritmi AES - Twofish - ChaCha20 - Argon2. -- Compatibile con la maggior parte dei programmi alternativi (KeePass, KeePassXC, KeeWeb, …). -- Consente di aprire e copiare i campi URI / URL rapidamente. -- Riconoscimento biometrico per lo sblocco rapido (impronta digitale / sblocco facciale / …). +- Passkey per autenticazione e conservazione locale di chiavi private. +- Riconoscimento biometrico per uno sblocco rapido (impronta / viso / …). - Gestione di password una tantum (HOTP / TOTP) per l'autenticazione a due fattori (2FA). -- Material design con temi. -- Autocompletamento e integrazione. -- Tastiera con riempimento campi. -- Modelli dinamici. -- Cronologia di ogni voce. +- Completamento automatico per le password nei moduli. +- Magitastiera per riempire efficientemente ogni campo. +- Creazione di database crittografati. +- Organizzazione delle credenziali per voce e strutture ad albero. +- Apertura e copia rapida di campi URI / URL. +- Cronologia di tutte le voci. - Gestione precisa delle impostazioni. -- Codice scritto in lingue native (Kotlin / Java / JNI / C). +- Material design con temi. +- Supporto per file .kdb e .kdbx (versioni dalla 1 alla 4) con algoritmi AES - Twofish - ChaCha20 - Argon2. +- Compatibile con la maggioranza dei programmi alternativi (KeePass, KeePassXC, KeeWeb, …). +- Codice scritto in linguaggi nativi (Kotlin / Java / JNI / C). -È possibile donare o acquistare la versione pro per un servizio migliore e uno sviluppo rapido di funzionalità desiderate: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro +Puoi donare o acquistare la versione pro per un servizio migliore e uno sviluppo rapido di funzionalità desiderate: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro -Il progetto è in continua evoluzione. Non esitate a controllare lo stato di sviluppo dei prossimi aggiornamenti: https://github.com/Kunzisoft/KeePassDX/projects +Il progetto è in continua evoluzione. Non esitare a controllare lo stato dello sviluppo dei prossimi aggiornamenti: https://github.com/Kunzisoft/KeePassDX/projects -Inviare problemi a: https://github.com/Kunzisoft/KeePassDX/issues +Segnala problemi su: https://github.com/Kunzisoft/KeePassDX/issues diff --git a/fastlane/metadata/android/it-IT/short_description.txt b/fastlane/metadata/android/it-IT/short_description.txt index c91e2af44..a2043b661 100644 --- a/fastlane/metadata/android/it-IT/short_description.txt +++ b/fastlane/metadata/android/it-IT/short_description.txt @@ -1 +1 @@ -Gestore di password sicuro e open-source +Gestisci passkey / password in una cassaforte locale e open source diff --git a/fastlane/metadata/android/it-IT/title.txt b/fastlane/metadata/android/it-IT/title.txt index 775fe685d..8a6cd07a4 100644 --- a/fastlane/metadata/android/it-IT/title.txt +++ b/fastlane/metadata/android/it-IT/title.txt @@ -1 +1 @@ -KeePassDX - gestore password +Cassaforte di pass(key/word) KeePassDX diff --git a/fastlane/metadata/android/ja-JP/full_description.txt b/fastlane/metadata/android/ja-JP/full_description.txt index 5bdc9b9f1..8594d80f4 100644 --- a/fastlane/metadata/android/ja-JP/full_description.txt +++ b/fastlane/metadata/android/ja-JP/full_description.txt @@ -1,19 +1,21 @@ -KeePassDXはパスワードセーフ兼マネージャーで、オープンなKeePass形式で暗号化されたデータを単一ファイルとして編集したり、安全な方法でフォームに入力したりできます。インターネット接続が不要で、Androidの標準デザインへ準拠しています。このアプリはオープンソースで広告がありません。 +KeePassDXはオープンソースなpasskey方式のパスワードセーフ兼マネージャーで、オープンなKeePass形式で暗号化されたデータを単一ファイルとして編集したり、安全な方法でフォームに入力したりできます。インターネット接続が不要で、Androidの標準デザインへ準拠しています。このアプリはオープンソースで広告がありません機能 -- データベースファイル / エントリー・グループの作成 -- .kdb、.kdbx ファイル(バージョン1から4)に対応。AES、Twofish、ChaCha20、Argon2 アルゴリズムが使用可能 -- 主流の代替ソフトウェア(KeePass、KeePassXC, KeeWeb など)との互換性あり -- URI / URL フィールドは開くのもコピーするのもすばやく行えます -- 生体認証を使った高速ロック解除 (指紋認証 / 顔認証 / …) -- 2 要素認証(2FA)のためのワンタイムパスワード管理(HOTP / TOTP) -- マテリアルデザインに準拠した複数のテーマ -- 自動入力機能の統合 -- フィールド入力用のキーボード -- ダイナミックテンプレート -- エントリーごとの履歴 -- 設定の細かな管理 +- 認証・秘密鍵のローカル保存向けパスキー。 +- ロックの高速解除の為の生体認証(指紋認証/顔認証/…)。 +- 二要素認証(2FA)の為のワンタイムパスワード管理(HOTP/TOTP)。 +- パスワード入力フォームへの自動入力機能。 +- 効率的にあらゆるフィールドへ入力できるマジックキーボード。 +- 暗号化データベースファイルの作成。 +- エントリ単位・グループツリーによる認証情報の整理。 +- URI/URLフィールドの迅速な展開/コピー操作を可能に。 +- エントリタイプ毎の動的テンプレート。 +- 各エントリの履歴管理。 +- 精密な設定管理。 +- テーマに対応したMaterial Design。 +- AES - Twofish - ChaCha20 - Argon2アルゴリズム対応の.kdbおよび.kdbxファイル(バージョン1~4)をサポート。 +- 主要な代替プログラム(KeePass、KeePassXC、KeeWebなど)との互換性。 - コードはネイティブ言語(Kotlin / Java / JNI / C)で書かれています 寄付または pro バージョンの購入はサービスの改善と必要な機能の迅速な開発につながります: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro diff --git a/fastlane/metadata/android/ja-JP/short_description.txt b/fastlane/metadata/android/ja-JP/short_description.txt index b83240185..a90906fc4 100644 --- a/fastlane/metadata/android/ja-JP/short_description.txt +++ b/fastlane/metadata/android/ja-JP/short_description.txt @@ -1 +1 @@ -安全かつオープンソースのパスワード マネージャー。KeePass ファイル互換 \ No newline at end of file +ローカル・オープンソースのファイル保管でパスキー/パスワードを管理 diff --git a/fastlane/metadata/android/ja-JP/title.txt b/fastlane/metadata/android/ja-JP/title.txt index 91bd5a09d..2cd74ffaa 100644 --- a/fastlane/metadata/android/ja-JP/title.txt +++ b/fastlane/metadata/android/ja-JP/title.txt @@ -1 +1 @@ -KeePassDX - FOSS パスワードセーフ \ No newline at end of file +KeePassDX パスワード管理ツール diff --git a/fastlane/metadata/android/mk-MK/short_description.txt b/fastlane/metadata/android/mk-MK/short_description.txt index b636a3c8a..3fc744138 100644 --- a/fastlane/metadata/android/mk-MK/short_description.txt +++ b/fastlane/metadata/android/mk-MK/short_description.txt @@ -1 +1 @@ -Безбеден менаџер за лозинки со отворен код \ No newline at end of file +Безбеден менаџер за лозинки со отворен код diff --git a/fastlane/metadata/android/mk-MK/title.txt b/fastlane/metadata/android/mk-MK/title.txt index d8905b085..54f4311f3 100644 --- a/fastlane/metadata/android/mk-MK/title.txt +++ b/fastlane/metadata/android/mk-MK/title.txt @@ -1 +1 @@ -KeePassDX - Безбедносен софтвер за лозинки и е слободен софтвер \ No newline at end of file +KeePassDX - Безбедносен софтвер за лозинки и е слободен софтвер diff --git a/fastlane/metadata/android/nl-NL/full_description.txt b/fastlane/metadata/android/nl-NL/full_description.txt index 6da61a44f..1a8475c54 100644 --- a/fastlane/metadata/android/nl-NL/full_description.txt +++ b/fastlane/metadata/android/nl-NL/full_description.txt @@ -1,23 +1,25 @@ -KeePassDX is een wachtwoordkluis en -manager voor het bewerken van versleutelde gegevens in één bestand in het open KeePass-formaat en waarmee je op een veilige manier inlogvelden vult, zonder internetverbinding en geheel volgens de Android ontwerpstandaarden. De app is open source, zonder advertenties. +KeePassDX is een open source passkey- en wachtwoordenkluis en -manager voor het bewerken van versleutelde gegevens in één bestand in het open KeePass-formaat en waarmee je op een veilige manier inlogvelden vult, zonder internetverbinding en geheel volgens de Android ontwerpstandaarden. De app is open source, zonder advertenties. Functies -- Aanmaken van databasebestanden, -items en -groepen. -- Ondersteuning voor .kdb en .kdbx bestanden (version 1 t/m 4) met AES - Twofish - ChaCha20 - Argon2 algoritme. -- Compatibel met de meeste alternatieve programma's (KeePass, KeePassXC, KeeWeb, …). -- Snel openen en kopiëren van URI / URL-velden. -- Biometrische herkenning voor snelle ontgrendeling (vingerafdruk / gezichtsherkenning / …). -- Beheer van eenmalige wachtwoorden (HOTP / TOTP) voor twee-factor-authenticatie (2FA). -- Material design thema's. -- Automatisch invullen en integratie. -- Toestenbord voor invulling van velden. -- Dynamische sjablonen. -- Geschiedenis van elke invoer. +- Passkeys voor authenticatie en lokale opslag van privésleutels. +- Biometrische herkenning voor snel ontgrendelen (vingerafdruk/gezichtsherkenning/ ...). +- Eenmalig wachtwoordbeheer (HOTP / TOTP) voor tweefactorauthenticatie (2FA). +- Autom. aanvullen voor eenvoudig invullen van formulieren met wachtwoorden. +- Magikeyboard om elk veld efficiënt in te vullen. +- Versleutelde databasebestanden aanmaken. +- Organisatie van inloggegevens per item en in groepsbomen. +- Snel openen en kopiëren van URI-/URL-velden. +- Dynamische sjablonen voor elk type item. +- Geschiedenis van elk item. - Nauwkeurig beheer van instellingen. +- Material design. +- Ondersteuning voor .kdb - en .kdbx-bestanden (versie 1 tot 4) met AES - Twofish - ChaCha20 - Argon2-algoritme. +- Compatibel met de meeste alternatieve programma's (KeePass, KeePassXC, KeeWeb, ...). - Code geschreven in moderne programmeertalen (Kotlin / Java / JNI / C). Je kunt doneren of de pro-versie kopen voor betere ondersteuning en een snelle ontwikkeling van de functies die je wilt: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro -Het project is voortdurend in ontwikkeling. Bekijk gerust de ontwikkelingsstatus van de volgende updates op: https://github.com/Kunzisoft/KeePassDX/projects +Het project is voortdurend in ontwikkeling. Bekijk gerust de ontwikkelingsstatus van aankomende updates op: https://github.com/Kunzisoft/KeePassDX/projects Meld problemen bij: https://github.com/Kunzisoft/KeePassDX/issues diff --git a/fastlane/metadata/android/nl-NL/short_description.txt b/fastlane/metadata/android/nl-NL/short_description.txt index 503afbee4..45fa6a7b5 100644 --- a/fastlane/metadata/android/nl-NL/short_description.txt +++ b/fastlane/metadata/android/nl-NL/short_description.txt @@ -1 +1 @@ -Veilige open-source wachtwoordkluis en -beheer \ No newline at end of file +Passkey- en wachtwoordbeheer in een lokale open-source kluis diff --git a/fastlane/metadata/android/nl-NL/title.txt b/fastlane/metadata/android/nl-NL/title.txt index 2bdab3ad7..681472e04 100644 --- a/fastlane/metadata/android/nl-NL/title.txt +++ b/fastlane/metadata/android/nl-NL/title.txt @@ -1 +1 @@ -KeePassDX - FOSS Password Safe \ No newline at end of file +KeePassDX - Wachtwoordbeheer diff --git a/fastlane/metadata/android/pl-PL/full_description.txt b/fastlane/metadata/android/pl-PL/full_description.txt index d05554e0b..529ea613b 100644 --- a/fastlane/metadata/android/pl-PL/full_description.txt +++ b/fastlane/metadata/android/pl-PL/full_description.txt @@ -1,20 +1,22 @@ -KeePassDX to sejf i menedżer haseł, który umożliwia edycję zaszyfrowanych danych w jednym pliku w otwartym formacie KeePass oraz bezpieczne wypełnianie formularzy. Nie wymaga połączenia z internetem, integruje standardy projektowania systemu Android. Aplikacja jest otwartoźródłowa, bez reklam. +KeePassDX to sejf i menedżer haseł, kluczy dostępu, który umożliwia edycję zaszyfrowanych danych w jednym pliku w otwartym formacie KeePass oraz bezpieczne wypełnianie formularzy. Nie wymaga połączenia z internetem, integruje standardy projektowania systemu Android. Aplikacja jest otwartoźródłowa, bez reklam. Funkcje -– Tworzenie plików/wpisów i grup baz danych. -– Obsługa plików .kdb i .kdbx (wersje od 1 do 4) z algorytmami AES, Twofish, ChaCha20 i Argon2. -– Kompatybilność z większością alternatywnych programów (KeePass, KeePassXC, KeeWeb, …). -– Możliwość szybkiego otwierania i kopiowania pól adresów URI/URL. -– Rozpoznawanie biometryczne do szybkiego odblokowywania (odcisk palca / odblokowywanie twarzą / …). -– Zarządzanie hasłami jednorazowymi (HOTP/TOTP) do uwierzytelniania dwuskładnikowego (2FA). -– Material Design z motywami. -– Autouzupełnianie i integracja. -– Klawiatura z funkcją wypełniania pól. -– Dynamiczne szablony. +– Klucze dostępu do uwierzytelniania i lokalne przechowywanie kluczy prywatnych. +– Biometryczne rozpoznawanie do szybkiego odblokowywania (odcisk palca / odblokowywanie twarzą / …). +– Zarządzanie hasłami jednorazowymi (HOTP / TOTP) do uwierzytelniania dwuskładnikowego (2FA). +– Automatyczne wypełnianie formularzy do łatwego wprowadzania haseł. +– Klawiatura Magickeyboard do efektywnego wypełniania dowolnych pól. +– Tworzenie zaszyfrowanych plików bazy danych. +– Organizacja danych uwierzytelniających według wpisów i w drzewach grup. +– Możliwość szybkiego otwierania i kopiowania pól adresów URI / URL. +– Dynamiczne szablony do każdego typu wpisu. – Historia każdego wpisu. – Precyzyjne zarządzanie ustawieniami. -– Kod napisany w językach natywnych (Kotlin/Java/JNI/C). +– Material Design z motywami. +– Obsługa plików .kdb i .kdbx (wersje od 1 do 4) z algorytmami: AES, Twofish, ChaCha20, Argon2. +- Kompatybilność z większością alternatywnych programów (KeePass, KeePassXC, KeeWeb, …). +– Kod napisany w językach natywnych (Kotlin / Java/ JNI / C). Możesz przekazać darowiznę lub kupić wersję profesjonalną, aby uzyskać lepszą obsługę i szybszy rozwój potrzebnych funkcji: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro diff --git a/fastlane/metadata/android/pl-PL/short_description.txt b/fastlane/metadata/android/pl-PL/short_description.txt index 7db89c597..59497019b 100644 --- a/fastlane/metadata/android/pl-PL/short_description.txt +++ b/fastlane/metadata/android/pl-PL/short_description.txt @@ -1 +1 @@ -Bezpieczny, otwartoźródłowy sejf i menedżer haseł +Zarządzaj kluczami dostępu i hasłami w lokalnym i otwartoźródłowy sejfie diff --git a/fastlane/metadata/android/ru-RU/short_description.txt b/fastlane/metadata/android/ru-RU/short_description.txt index a11d6f821..6120b1a44 100644 --- a/fastlane/metadata/android/ru-RU/short_description.txt +++ b/fastlane/metadata/android/ru-RU/short_description.txt @@ -1 +1 @@ -Безопасный и свободный менеджер паролей, совместимый с файлами KeePass +Управление ключами доступа/паролями в локальном хранилище с открытым исходным кодом diff --git a/fastlane/metadata/android/ru-RU/title.txt b/fastlane/metadata/android/ru-RU/title.txt index 92196bff3..bbbc16e86 100644 --- a/fastlane/metadata/android/ru-RU/title.txt +++ b/fastlane/metadata/android/ru-RU/title.txt @@ -1 +1 @@ -KeePassDX - Менеджер паролей +KeePassDX - менеджер паролей/ключей diff --git a/fastlane/metadata/android/tr-TR/full_description.txt b/fastlane/metadata/android/tr-TR/full_description.txt index e0c0b3bbc..c6b7528bb 100644 --- a/fastlane/metadata/android/tr-TR/full_description.txt +++ b/fastlane/metadata/android/tr-TR/full_description.txt @@ -2,18 +2,20 @@ KeePassDX, açık KeePass biçiminde tek bir dosyada şifreli verileri d Özellikler -- Veri tabanı dosyaları / girdileri ve grupları oluşturun. -- AES - Twofish - ChaCha20 - Argon2 algoritması ile .kdb ve .kdbx dosyaları (sürüm 1 ile 4 arası) desteği. -- Birçok farklı programla uyumludur (KeePass, KeePassXC, KeeWeb, …). -- URI / URL alanlarını hızlı bir şekilde açma ve kopyalama imkanı. +- Kimlik doğrulama ve özel anahtarların yerel depolaması için geçiş anahtarları. - Hızlı kilit açma için biyometrik tanıma (parmak izi / yüz tanıma / …). - İki aşamalı kimlik doğrulama (2FA) için tek kullanımlık şifre yönetimi (HOTP / TOTP). -- Temalı Material tasarımı. -- Otomatik doldurma ve bütünleşme. -- Alan doldurma klavyesi. -- Değişken şablonlar. +- Parolalarla formları kolayca doldurmak için otomatik doldurma. +- Herhangi bir alanı verimli bir şekilde doldurmak için Magikeyboard. +- Şifreli veri tabanı dosyaları oluşturun. +- Girdilere ve grup ağaçlarına göre kimlik bilgilerinin düzenlenmesi. +- URI / URL alanlarını hızlı bir şekilde açma ve kopyalama imkanı. +- Her girdi türü için değişken şablonlar. - Her girdinin geçmişi. - Ayarların hassas yönetimi. +- Temalı Material tasarımı. +- AES - Twofish - ChaCha20 - Argon2 algoritması ile .kdb ve .kdbx dosyaları (sürüm 1 ile 4 arası) desteği. +- Birçok farklı programla uyumludur (KeePass, KeePassXC, KeeWeb, …). - Yerel dillerde (Kotlin / Java / JNI / C) yazılmış kod. Daha iyi hizmet ve istediğiniz özelliklerin hızlı bir şekilde geliştirilmesi için bağış yapabilir veya pro sürümü satın alabilirsiniz: https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro diff --git a/fastlane/metadata/android/tr-TR/short_description.txt b/fastlane/metadata/android/tr-TR/short_description.txt index 611a6efc3..aa22f7b60 100644 --- a/fastlane/metadata/android/tr-TR/short_description.txt +++ b/fastlane/metadata/android/tr-TR/short_description.txt @@ -1 +1 @@ -Güvenilir açık kaynaklı parola kasa ve yöneticisi +Yerel ve açık kaynaklı bir kasada geçiş anahtarı / parolalarınızı yönetin diff --git a/fastlane/metadata/android/tr-TR/title.txt b/fastlane/metadata/android/tr-TR/title.txt index e92cb62b0..179c6275d 100644 --- a/fastlane/metadata/android/tr-TR/title.txt +++ b/fastlane/metadata/android/tr-TR/title.txt @@ -1 +1 @@ -KeePassDX - FOSS Parola Kasası +KeePassDX - Parola/Anahtar Kasası diff --git a/fastlane/metadata/android/zh-CN/full_description.txt b/fastlane/metadata/android/zh-CN/full_description.txt new file mode 100644 index 000000000..1344f59c5 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/full_description.txt @@ -0,0 +1,25 @@ +KeePassDX 是一款开源通行密钥、密码管理器,允许以开放的 KeePass 格式编辑单文件中的加密数据,并以安全方式自动填充表单无需互联网连接且遵循 Android 设计标准。本应用开源且无广告。 + +功能特性 + +- 支持通行密钥身份验证,可本地存储私钥。 +- 支持生物识别快速解锁(指纹/人脸解锁等)。 +- 支持一次性密码管理(HOTP/TOTP),可用于双因素身份验证(2FA)。 +- 支持自动填充功能,便捷填写密码表单。 +- 配备魔法键盘,可高效填充任意字段。 +- 可创建加密的数据库文件。 +- 支持按条目及分组树状结构整理凭据。 +- 允许快速打开和复制 URI/URL 字段。 +- 为各类条目提供动态模板。 +- 保留每个条目的历史记录。 +- 支持精细化设置管理。 +- 采用 Material 设计风格,支持主题切换。 +- 支持 .kdb 和 .kdbx 格式文件(版本 1 至 4),兼容的加密算法包括 AES、Twofish、ChaCha20、Argon2。 +- 可与主流替代程序兼容,如 KeePass、KeePassXC、KeeWeb 等。 +- 代码采用原生语言编写,包括 Kotlin、Java、JNI、C。 + +如需获取更优质的服务或希望加快所需功能的开发进度,您可以捐赠或购买专业版:https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro + +本项目持续迭代更新,欢迎随时查看后续版本开发进度:https://github.com/Kunzisoft/KeePassDX/projects + +如果遇到问题,请将问题反馈至:https://github.com/Kunzisoft/KeePassDX/issues diff --git a/fastlane/metadata/android/zh-CN/short_description.txt b/fastlane/metadata/android/zh-CN/short_description.txt new file mode 100644 index 000000000..a44b3547a --- /dev/null +++ b/fastlane/metadata/android/zh-CN/short_description.txt @@ -0,0 +1 @@ +在本地开源密码库中管理通行密钥/密码 diff --git a/fastlane/metadata/android/zh-CN/title.txt b/fastlane/metadata/android/zh-CN/title.txt new file mode 100644 index 000000000..edc472e09 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/title.txt @@ -0,0 +1 @@ +KeePassDX 密码库