From eb4ffebba03576909e3b9d0d8144a2f02bdf5c68 Mon Sep 17 00:00:00 2001 From: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:40:18 -0400 Subject: [PATCH 01/14] PM-14009 Refactor storing first time values to the first time action manager (#4161) --- .../data/auth/repository/AuthRepository.kt | 5 -- .../auth/repository/AuthRepositoryImpl.kt | 5 -- .../manager/FirstTimeActionManager.kt | 17 ++++ .../manager/FirstTimeActionManagerImpl.kt | 24 ++++++ .../platform/repository/SettingsRepository.kt | 34 -------- .../repository/SettingsRepositoryImpl.kt | 22 ----- .../accountsetup/SetupAutoFillViewModel.kt | 4 +- .../accountsetup/SetupUnlockViewModel.kt | 4 +- .../AccountSecurityViewModel.kt | 12 +-- .../settings/autofill/AutoFillViewModel.kt | 12 +-- .../settings/vault/VaultSettingsViewModel.kt | 11 +-- .../ui/vault/feature/vault/VaultViewModel.kt | 11 +-- .../auth/repository/AuthRepositoryTest.kt | 7 -- .../manager/FirstTimeActionManagerTest.kt | 49 +++++++++++ .../repository/SettingsRepositoryTest.kt | 84 ------------------- .../SetupAutoFillViewModelTest.kt | 13 ++- .../accountsetup/SetupUnlockViewModelTest.kt | 10 ++- .../AccountSecurityViewModelTest.kt | 35 ++++---- .../autofill/AutoFillViewModelTest.kt | 34 ++++---- .../vault/VaultSettingsViewModelTest.kt | 20 +++-- .../vault/feature/vault/VaultViewModelTest.kt | 21 +++-- 21 files changed, 196 insertions(+), 238 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt index 7d38f885e..fc316f28d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepository.kt @@ -393,9 +393,4 @@ interface AuthRepository : AuthenticatorProvider, AuthRequestManager { * Update the value of the onboarding status for the user. */ fun setOnboardingStatus(userId: String, status: OnboardingStatus?) - - /** - * Update the value of the showImportLogins status for the user. - */ - fun setShowImportLogins(showImportLogins: Boolean) } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt index 19776db93..88f22b081 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryImpl.kt @@ -1327,11 +1327,6 @@ class AuthRepositoryImpl( authDiskSource.storeOnboardingStatus(userId = userId, onboardingStatus = status) } - override fun setShowImportLogins(showImportLogins: Boolean) { - val userId: String = activeUserId ?: return - authDiskSource.storeShowImportLogins(userId = userId, showImportLogins = showImportLogins) - } - @Suppress("CyclomaticComplexMethod") private suspend fun validatePasswordAgainstPolicy( password: String, diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManager.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManager.kt index bd0356485..c0f2e4ba5 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManager.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManager.kt @@ -44,4 +44,21 @@ interface FirstTimeActionManager { * a default configuration. */ val currentOrDefaultUserFirstTimeState: FirstTimeState + + /** + * Stores the given value for whether or not the active user has signalled they want to + * set up unlock options later, during onboarding. + */ + fun storeShowUnlockSettingBadge(showBadge: Boolean) + + /** + * Stores the given value for whether or not the active user has signalled they want to + * enable autofill later, during onboarding. + */ + fun storeShowAutoFillSettingBadge(showBadge: Boolean) + + /** + * Update the value of the showImportLogins status for the active user. + */ + fun storeShowImportLogins(showImportLogins: Boolean) } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerImpl.kt index 1dfca6378..b817fdb63 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerImpl.kt @@ -183,4 +183,28 @@ class FirstTimeActionManagerImpl @Inject constructor( showSetupUnlockCard = null, showSetupAutofillCard = null, ) + + override fun storeShowUnlockSettingBadge(showBadge: Boolean) { + val activeUserId = authDiskSource.userState?.activeUserId ?: return + settingsDiskSource.storeShowUnlockSettingBadge( + userId = activeUserId, + showBadge = showBadge, + ) + } + + override fun storeShowAutoFillSettingBadge(showBadge: Boolean) { + val activeUserId = authDiskSource.userState?.activeUserId ?: return + settingsDiskSource.storeShowAutoFillSettingBadge( + userId = activeUserId, + showBadge = showBadge, + ) + } + + override fun storeShowImportLogins(showImportLogins: Boolean) { + val activeUserId = authDiskSource.userState?.activeUserId ?: return + authDiskSource.storeShowImportLogins( + userId = activeUserId, + showImportLogins = showImportLogins, + ) + } } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepository.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepository.kt index f838cb646..9ff39fd5d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepository.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepository.kt @@ -254,38 +254,4 @@ interface SettingsRepository { * Record that a user has logged in on this device. */ fun storeUserHasLoggedInValue(userId: String) - - /** - * Gets whether or not the given [userId] has signalled they want to enable autofill - * later, during onboarding. - */ - fun getShowAutoFillSettingBadge(userId: String): Boolean - - /** - * Stores the given value for whether or not the given [userId] has signalled they want to - * enable autofill later, during onboarding. - */ - fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean) - - /** - * Gets whether or not the given [userId] has signalled they want to enable unlock options - * later, during onboarding. - */ - fun getShowUnlockSettingBadge(userId: String): Boolean - - /** - * Stores the given value for whether or not the given [userId] has signalled they want to - * set up unlock options later, during onboarding. - */ - fun storeShowUnlockSettingBadge(userId: String, showBadge: Boolean) - - /** - * Gets whether or not the given [userId] has signalled they want to enable autofill - */ - fun getShowAutofillBadgeFlow(userId: String): Flow - - /** - * Gets whether or not the given [userId] has signalled they want to enable unlock options - */ - fun getShowUnlockBadgeFlow(userId: String): Flow } diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryImpl.kt index be03b157d..a50b524f6 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryImpl.kt @@ -538,28 +538,6 @@ class SettingsRepositoryImpl( settingsDiskSource.storeUseHasLoggedInPreviously(userId) } - override fun getShowAutoFillSettingBadge(userId: String): Boolean = - settingsDiskSource.getShowAutoFillSettingBadge(userId) ?: false - - override fun storeShowAutoFillSettingBadge(userId: String, showBadge: Boolean) { - settingsDiskSource.storeShowAutoFillSettingBadge(userId, showBadge) - } - - override fun getShowUnlockSettingBadge(userId: String): Boolean = - settingsDiskSource.getShowUnlockSettingBadge(userId) ?: false - - override fun storeShowUnlockSettingBadge(userId: String, showBadge: Boolean) { - settingsDiskSource.storeShowUnlockSettingBadge(userId, showBadge) - } - - override fun getShowAutofillBadgeFlow(userId: String): Flow = - settingsDiskSource.getShowAutoFillSettingBadgeFlow(userId) - .map { it ?: false } - - override fun getShowUnlockBadgeFlow(userId: String): Flow = - settingsDiskSource.getShowUnlockSettingBadgeFlow(userId) - .map { it ?: false } - /** * If there isn't already one generated, generate a symmetric sync key that would be used * for communicating via IPC. diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt index 73586bd12..a9575f385 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus import com.x8bit.bitwarden.data.auth.repository.AuthRepository +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.ui.platform.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel @@ -25,6 +26,7 @@ class SetupAutoFillViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val settingsRepository: SettingsRepository, private val authRepository: AuthRepository, + private val firstTimeActionManager: FirstTimeActionManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. @@ -97,7 +99,7 @@ class SetupAutoFillViewModel @Inject constructor( } private fun handleTurnOnLaterConfirmClick() { - settingsRepository.storeShowAutoFillSettingBadge(state.userId, true) + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = true) updateOnboardingStatusToNextStep() } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt index b99639e2d..93e7fb370 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt @@ -7,6 +7,7 @@ import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.platform.manager.BiometricsEncryptionManager +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.data.platform.repository.model.BiometricsKeyResult import com.x8bit.bitwarden.ui.platform.base.BaseViewModel @@ -32,6 +33,7 @@ class SetupUnlockViewModel @Inject constructor( private val authRepository: AuthRepository, private val settingsRepository: SettingsRepository, private val biometricsEncryptionManager: BiometricsEncryptionManager, + private val firstTimeActionManager: FirstTimeActionManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. initialState = savedStateHandle[KEY_STATE] ?: run { @@ -109,7 +111,7 @@ class SetupUnlockViewModel @Inject constructor( } private fun handleSetUpLaterClick() { - settingsRepository.storeShowUnlockSettingBadge(state.userId, true) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = true) updateOnboardingStatusToNextStep() } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt index c92ae4f79..858fa8906 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt @@ -10,6 +10,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.UserFingerprintResult import com.x8bit.bitwarden.data.auth.repository.util.policyInformation import com.x8bit.bitwarden.data.platform.manager.BiometricsEncryptionManager import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository @@ -48,6 +49,7 @@ class AccountSecurityViewModel @Inject constructor( private val environmentRepository: EnvironmentRepository, private val biometricsEncryptionManager: BiometricsEncryptionManager, private val featureFlagManager: FeatureFlagManager, + private val firstTimeActionManager: FirstTimeActionManager, policyManager: PolicyManager, savedStateHandle: SavedStateHandle, ) : BaseViewModel( @@ -114,10 +116,10 @@ class AccountSecurityViewModel @Inject constructor( } .launchIn(viewModelScope) - settingsRepository - .getShowUnlockBadgeFlow(state.userId) + firstTimeActionManager + .firstTimeStateFlow .map { - AccountSecurityAction.Internal.ShowUnlockBadgeUpdated(it) + AccountSecurityAction.Internal.ShowUnlockBadgeUpdated(it.showSetupUnlockCard) } .onEach(::sendAction) .launchIn(viewModelScope) @@ -164,7 +166,6 @@ class AccountSecurityViewModel @Inject constructor( } private fun handleUnlockCardCtaClick() { - dismissUnlockNotificationBadge() sendEvent(AccountSecurityEvent.NavigateToSetupUnlockScreen) } @@ -443,8 +444,7 @@ class AccountSecurityViewModel @Inject constructor( private fun dismissUnlockNotificationBadge() { if (!state.shouldShowUnlockActionCard) return - settingsRepository.storeShowUnlockSettingBadge( - userId = state.userId, + firstTimeActionManager.storeShowUnlockSettingBadge( showBadge = false, ) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt index ec0b091d5..918c8a3d9 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModel.kt @@ -5,6 +5,7 @@ import android.os.Parcelable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope import com.x8bit.bitwarden.data.auth.repository.AuthRepository +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow @@ -29,6 +30,7 @@ class AutoFillViewModel @Inject constructor( authRepository: AuthRepository, private val savedStateHandle: SavedStateHandle, private val settingsRepository: SettingsRepository, + private val firstTimeActionManager: FirstTimeActionManager, ) : BaseViewModel( initialState = savedStateHandle[KEY_STATE] ?: run { @@ -74,9 +76,9 @@ class AutoFillViewModel @Inject constructor( .onEach(::sendAction) .launchIn(viewModelScope) - settingsRepository - .getShowAutofillBadgeFlow(userId = state.activeUserId) - .map { AutoFillAction.Internal.UpdateShowAutofillActionCard(it) } + firstTimeActionManager + .firstTimeStateFlow + .map { AutoFillAction.Internal.UpdateShowAutofillActionCard(it.showSetupAutofillCard) } .onEach(::sendAction) .launchIn(viewModelScope) } @@ -117,7 +119,6 @@ class AutoFillViewModel @Inject constructor( } private fun handleAutoFillActionCardCtClick() { - dismissShowAutofillActionCard() sendEvent(AutoFillEvent.NavigateToSetupAutofill) } @@ -194,8 +195,7 @@ class AutoFillViewModel @Inject constructor( private fun dismissShowAutofillActionCard() { if (!state.showAutofillActionCard) return - settingsRepository.storeShowAutoFillSettingBadge( - userId = state.activeUserId, + firstTimeActionManager.storeShowAutoFillSettingBadge( showBadge = false, ) } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt index 1db7865ed..c27014710 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt @@ -1,7 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.vault import androidx.lifecycle.viewModelScope -import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.model.FlagKey @@ -23,7 +22,6 @@ import javax.inject.Inject class VaultSettingsViewModel @Inject constructor( environmentRepository: EnvironmentRepository, featureFlagManager: FeatureFlagManager, - private val authRepository: AuthRepository, private val firstTimeActionManager: FirstTimeActionManager, ) : BaseViewModel( initialState = run { @@ -80,11 +78,11 @@ class VaultSettingsViewModel @Inject constructor( } private fun handleImportLoginsCardDismissClicked() { - dismissImportLoginsCard() + if (!state.shouldShowImportCard) return + firstTimeActionManager.storeShowImportLogins(showImportLogins = false) } private fun handleImportLoginsCardClicked() { - dismissImportLoginsCard() sendEvent(VaultSettingsEvent.NavigateToImportVault(state.importUrl)) } @@ -121,11 +119,6 @@ class VaultSettingsViewModel @Inject constructor( VaultSettingsEvent.NavigateToImportVault(state.importUrl), ) } - - private fun dismissImportLoginsCard() { - if (!state.shouldShowImportCard) return - authRepository.setShowImportLogins(showImportLogins = false) - } } /** diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt index c03f75d9d..adc27bb6b 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt @@ -10,6 +10,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.SwitchAccountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager @@ -71,6 +72,7 @@ class VaultViewModel @Inject constructor( private val settingsRepository: SettingsRepository, private val vaultRepository: VaultRepository, private val featureFlagManager: FeatureFlagManager, + private val firstTimeActionManager: FirstTimeActionManager, ) : BaseViewModel( initialState = run { val userState = requireNotNull(authRepository.userStateFlow.value) @@ -180,12 +182,12 @@ class VaultViewModel @Inject constructor( } private fun handleImportActionCardClick() { - dismissImportLoginCard() sendEvent(VaultEvent.NavigateToImportLogins) } private fun handleDismissImportActionCard() { - dismissImportLoginCard() + if (!state.showImportActionCard) return + firstTimeActionManager.storeShowImportLogins(false) } private fun handleIconLoadingSettingReceive( @@ -631,11 +633,6 @@ class VaultViewModel @Inject constructor( } //endregion VaultAction Handlers - - private fun dismissImportLoginCard() { - if (!state.showImportActionCard) return - authRepository.setShowImportLogins(false) - } } /** diff --git a/app/src/test/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt index 2f22d25be..2e437eeb6 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/auth/repository/AuthRepositoryTest.kt @@ -6361,13 +6361,6 @@ class AuthRepositoryTest { assertNull(fakeAuthDiskSource.getOnboardingStatus(USER_ID_1)) } - @Test - fun `setShowImportLogins should save the showImportLogins to disk`() { - fakeAuthDiskSource.userState = MULTI_USER_STATE - repository.setShowImportLogins(showImportLogins = true) - assertEquals(true, fakeAuthDiskSource.getShowImportLogins(USER_ID_1)) - } - companion object { private const val UNIQUE_APP_ID = "testUniqueAppId" private const val NAME = "Example Name" diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt index 5129f9c32..fcfffbc77 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/manager/FirstTimeActionManagerTest.kt @@ -20,6 +20,8 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertFalse +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test class FirstTimeActionManagerTest { @@ -184,6 +186,53 @@ class FirstTimeActionManagerTest { firstTimeActionManager.currentOrDefaultUserFirstTimeState, ) } + + @Test + fun `storeShowAutoFillSettingBadge should store value of false to disk`() { + fakeAuthDiskSource.userState = + MOCK_USER_STATE + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = false) + assertFalse(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = USER_ID)!!) + } + + @Test + fun `storeShowAutoFillSettingBadge should store value of true to disk`() { + fakeAuthDiskSource.userState = + MOCK_USER_STATE + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = true) + assertTrue(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = USER_ID)!!) + } + + @Test + fun `getShowAutoFillSettingBadge should return the value saved to disk`() { + fakeAuthDiskSource.userState = + MOCK_USER_STATE + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = true) + assertTrue(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = USER_ID)!!) + } + + @Test + fun `storeShowUnlockSettingBadge should store value of false to disk`() { + fakeAuthDiskSource.userState = + MOCK_USER_STATE + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) + assertFalse(fakeSettingsDiskSource.getShowUnlockSettingBadge(userId = USER_ID)!!) + } + + @Test + fun `storeShowUnlockSettingBadge should store value of true to disk`() { + fakeAuthDiskSource.userState = + MOCK_USER_STATE + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = true) + assertTrue(fakeSettingsDiskSource.getShowUnlockSettingBadge(userId = USER_ID)!!) + } + + @Test + fun `storeShowImportLogins should store value of false to disk`() { + fakeAuthDiskSource.userState = MOCK_USER_STATE + firstTimeActionManager.storeShowImportLogins(showImportLogins = true) + assertTrue(fakeAuthDiskSource.getShowImportLogins(userId = USER_ID)!!) + } } private const val USER_ID: String = "userId" diff --git a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt index 2d8ba01a2..63ec1916e 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/platform/repository/SettingsRepositoryTest.kt @@ -1150,90 +1150,6 @@ class SettingsRepositoryTest { fakeAuthDiskSource.userState = MOCK_USER_STATE assertFalse(settingsRepository.isAuthenticatorSyncEnabled) } - - @Test - fun `storeShowAutoFillSettingBadge should store value of false to disk`() { - val userId = "userId" - settingsRepository.storeShowAutoFillSettingBadge(userId = userId, showBadge = false) - assertFalse(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = userId)!!) - } - - @Test - fun `storeShowAutoFillSettingBadge should store value of true to disk`() { - val userId = "userId" - settingsRepository.storeShowAutoFillSettingBadge(userId = userId, showBadge = true) - assertTrue(fakeSettingsDiskSource.getShowAutoFillSettingBadge(userId = userId)!!) - } - - @Test - fun `getShowAutoFillSettingBadge get value of false if does not exist`() { - val userId = "userId" - assertFalse(settingsRepository.getShowAutoFillSettingBadge(userId = userId)) - } - - @Test - fun `getShowAutoFillSettingBadge should return the value saved to disk`() { - val userId = "userId" - fakeSettingsDiskSource.storeShowAutoFillSettingBadge(userId = userId, showBadge = true) - assertTrue(settingsRepository.getShowAutoFillSettingBadge(userId = userId)) - } - - @Test - fun `storeShowUnlockSettingBadge should store value of false to disk`() { - val userId = "userId" - settingsRepository.storeShowUnlockSettingBadge(userId = userId, showBadge = false) - assertFalse(fakeSettingsDiskSource.getShowUnlockSettingBadge(userId = userId)!!) - } - - @Test - fun `storeShowUnlockSettingBadge should store value of true to disk`() { - val userId = "userId" - settingsRepository.storeShowUnlockSettingBadge(userId = userId, showBadge = true) - assertTrue(fakeSettingsDiskSource.getShowUnlockSettingBadge(userId = userId)!!) - } - - @Test - fun `getUnlockSettingBadge get value of false if does not exist`() { - val userId = "userId" - assertFalse(settingsRepository.getShowUnlockSettingBadge(userId = userId)) - } - - @Test - fun `getShowUnlockSettingBadge should return the value saved to disk`() { - val userId = "userId" - fakeSettingsDiskSource.storeShowUnlockSettingBadge(userId = userId, showBadge = true) - assertTrue(settingsRepository.getShowUnlockSettingBadge(userId = userId)) - } - - @Suppress("MaxLineLength") - @Test - fun `getShowAutoFillBadgeFlow should emit the values saved to disk and update when they change`() = - runTest { - val userId = "userId" - settingsRepository.getShowAutofillBadgeFlow(userId).test { - assertFalse(awaitItem()) - fakeSettingsDiskSource.storeShowAutoFillSettingBadge( - userId = userId, - showBadge = true, - ) - assertTrue(awaitItem()) - } - } - - @Suppress("MaxLineLength") - @Test - fun `getShowUnlockBadgeFlow should emit the values saved to disk and update when they change`() = - runTest { - val userId = "userId" - settingsRepository.getShowUnlockBadgeFlow(userId).test { - assertFalse(awaitItem()) - fakeSettingsDiskSource.storeShowUnlockSettingBadge( - userId = userId, - showBadge = true, - ) - assertTrue(awaitItem()) - } - } } private const val USER_ID: String = "userId" diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt index 885689bc6..725c5a594 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt @@ -5,6 +5,8 @@ import app.cash.turbine.test import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.UserState +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager +import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest import io.mockk.every @@ -26,7 +28,12 @@ class SetupAutoFillViewModelTest : BaseViewModelTest() { private val settingsRepository = mockk { every { isAutofillEnabledStateFlow } returns mutableAutoFillEnabledStateFlow every { disableAutofill() } just runs - every { storeShowAutoFillSettingBadge(any(), any()) } just runs + } + + private val mutableFirstTimeStateFlow = MutableStateFlow(FirstTimeState()) + private val firstTimeActionManager: FirstTimeActionManager = mockk { + every { firstTimeStateFlow } returns mutableFirstTimeStateFlow + every { storeShowAutoFillSettingBadge(any()) } just runs } private val mockUserState = mockk { @@ -153,8 +160,7 @@ class SetupAutoFillViewModelTest : BaseViewModelTest() { val viewModel = createViewModel() viewModel.trySendAction(SetupAutoFillAction.TurnOnLaterConfirmClick) verify { - settingsRepository.storeShowAutoFillSettingBadge( - userId = DEFAULT_USER_ID, + firstTimeActionManager.storeShowAutoFillSettingBadge( showBadge = true, ) } @@ -180,6 +186,7 @@ class SetupAutoFillViewModelTest : BaseViewModelTest() { ), settingsRepository = settingsRepository, authRepository = authRepository, + firstTimeActionManager = firstTimeActionManager, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt index 7031e155a..89f42c1b2 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt @@ -7,6 +7,7 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.platform.manager.BiometricsEncryptionManager +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.data.platform.repository.model.BiometricsKeyResult @@ -41,7 +42,11 @@ class SetupUnlockViewModelTest : BaseViewModelTest() { every { isUnlockWithPinEnabled } returns false every { isUnlockWithBiometricsEnabled } returns false every { isAutofillEnabledStateFlow } returns mutableAutofillEnabledStateFlow - every { storeShowUnlockSettingBadge(any(), any()) } just runs + } + private val mutableFirstTimeStateFlow = MutableStateFlow(FirstTimeState()) + private val firstTimeActionManager: FirstTimeActionManager = mockk { + every { firstTimeStateFlow } returns mutableFirstTimeStateFlow + every { storeShowUnlockSettingBadge(any()) } just runs } private val biometricsEncryptionManager: BiometricsEncryptionManager = mockk { every { getOrCreateCipher(userId = DEFAULT_USER_ID) } returns CIPHER @@ -107,7 +112,7 @@ class SetupUnlockViewModelTest : BaseViewModelTest() { userId = DEFAULT_USER_ID, status = OnboardingStatus.AUTOFILL_SETUP, ) - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_USER_ID, true) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = true) } } @@ -359,6 +364,7 @@ class SetupUnlockViewModelTest : BaseViewModelTest() { authRepository = authRepository, settingsRepository = settingsRepository, biometricsEncryptionManager = biometricsEncryptionManager, + firstTimeActionManager = firstTimeActionManager, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt index 145c1249b..49ee1973c 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt @@ -10,6 +10,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.UserFingerprintResult import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.platform.manager.BiometricsEncryptionManager import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState import com.x8bit.bitwarden.data.platform.manager.model.FlagKey @@ -56,7 +57,6 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { every { userStateFlow } returns mutableUserStateFlow } private val vaultRepository: VaultRepository = mockk(relaxed = true) - private val mutableShowUnlockBadgeFlow = MutableStateFlow(false) private val settingsRepository: SettingsRepository = mockk { every { isAuthenticatorSyncEnabled } returns false every { isUnlockWithBiometricsEnabled } returns false @@ -64,8 +64,12 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { every { vaultTimeout } returns VaultTimeout.ThirtyMinutes every { vaultTimeoutAction } returns VaultTimeoutAction.LOCK coEvery { getUserFingerprint() } returns UserFingerprintResult.Success(FINGERPRINT) - every { getShowUnlockBadgeFlow(any()) } returns mutableShowUnlockBadgeFlow - every { storeShowUnlockSettingBadge(any(), false) } just runs + } + + private val mutableFirstTimeStateFlow = MutableStateFlow(FirstTimeState()) + private val firstTimeActionManager: FirstTimeActionManager = mockk { + every { firstTimeStateFlow } returns mutableFirstTimeStateFlow + every { storeShowUnlockSettingBadge(any()) } just runs } private val mutableActivePolicyFlow = bufferedMutableSharedFlow>() private val biometricsEncryptionManager: BiometricsEncryptionManager = mockk { @@ -367,18 +371,18 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { } verify(exactly = 0) { - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_STATE.userId, false) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } @Test fun `on EnableBiometricsClick should update user show unlock badge status if shown`() { - mutableShowUnlockBadgeFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupUnlockCard = true) } val viewModel = createViewModel() viewModel.trySendAction(AccountSecurityAction.EnableBiometricsClick) verify(exactly = 1) { - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_STATE.userId, false) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } @@ -599,14 +603,14 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { } verify(exactly = 0) { - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_STATE.userId, false) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } @Suppress("MaxLineLength") @Test fun `on UnlockWithPinToggle Enabled should update show unlock badge state if card is visible`() { - mutableShowUnlockBadgeFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupUnlockCard = true) } val initialState = DEFAULT_STATE.copy( isUnlockWithPinEnabled = false, ) @@ -630,7 +634,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { pin = "1234", shouldRequireMasterPasswordOnRestart = true, ) - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_STATE.userId, false) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } @@ -713,18 +717,18 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { val viewModel = createViewModel() viewModel.stateFlow.test { assertEquals(DEFAULT_STATE, awaitItem()) - mutableShowUnlockBadgeFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupUnlockCard = true) } assertEquals(DEFAULT_STATE.copy(shouldShowUnlockActionCard = true), awaitItem()) } } @Test fun `when UnlockActionCardDismiss action received, should dismiss unlock action card`() { - mutableShowUnlockBadgeFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupUnlockCard = true) } val viewModel = createViewModel() viewModel.trySendAction(AccountSecurityAction.UnlockActionCardDismiss) verify { - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_STATE.userId, false) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } @@ -732,7 +736,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { @Test fun `when UnlockActionCardCtaClick action received, should dismiss unlock action card and send NavigateToSetupUnlockScreen event`() = runTest { - mutableShowUnlockBadgeFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupUnlockCard = true) } val viewModel = createViewModel() viewModel.eventFlow.test { viewModel.trySendAction(AccountSecurityAction.UnlockActionCardCtaClick) @@ -741,8 +745,8 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { awaitItem(), ) } - verify { - settingsRepository.storeShowUnlockSettingBadge(DEFAULT_STATE.userId, false) + verify(exactly = 0) { + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } @@ -767,6 +771,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { savedStateHandle = SavedStateHandle().apply { set("state", initialState) }, + firstTimeActionManager = firstTimeActionManager, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt index ea5914624..643ba5f93 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillViewModelTest.kt @@ -4,6 +4,8 @@ import android.os.Build import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import com.x8bit.bitwarden.data.auth.repository.AuthRepository +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager +import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.data.platform.repository.model.UriMatchType import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow @@ -31,7 +33,13 @@ class AutoFillViewModelTest : BaseViewModelTest() { private val authRepository: AuthRepository = mockk { every { userStateFlow.value?.activeUserId } returns "activeUserId" } - private val mutableShowAutofillActionCardFlow = MutableStateFlow(false) + + private val mutableFirstTimeStateFlow = MutableStateFlow(FirstTimeState()) + private val firstTimeActionManager: FirstTimeActionManager = mockk { + every { firstTimeStateFlow } returns mutableFirstTimeStateFlow + every { storeShowAutoFillSettingBadge(any()) } just runs + } + private val settingsRepository: SettingsRepository = mockk { every { isInlineAutofillEnabled } returns true every { isInlineAutofillEnabled = any() } just runs @@ -44,8 +52,6 @@ class AutoFillViewModelTest : BaseViewModelTest() { every { isAccessibilityEnabledStateFlow } returns mutableIsAccessibilityEnabledStateFlow every { isAutofillEnabledStateFlow } returns mutableIsAutofillEnabledStateFlow every { disableAutofill() } just runs - every { getShowAutofillBadgeFlow(any()) } returns mutableShowAutofillActionCardFlow - every { storeShowAutoFillSettingBadge(any(), any()) } just runs } @BeforeEach @@ -207,7 +213,7 @@ class AutoFillViewModelTest : BaseViewModelTest() { @Test fun `on AutoFillServicesClick should update show autofill in repository if card shown`() { - mutableShowAutofillActionCardFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupAutofillCard = true) } val viewModel = createViewModel() assertEquals( DEFAULT_STATE.copy(showAutofillActionCard = true), @@ -215,8 +221,7 @@ class AutoFillViewModelTest : BaseViewModelTest() { ) viewModel.trySendAction(AutoFillAction.AutoFillServicesClick(true)) verify(exactly = 1) { - settingsRepository.storeShowAutoFillSettingBadge( - DEFAULT_STATE.activeUserId, + firstTimeActionManager.storeShowAutoFillSettingBadge( false, ) } @@ -232,8 +237,7 @@ class AutoFillViewModelTest : BaseViewModelTest() { ) viewModel.trySendAction(AutoFillAction.AutoFillServicesClick(true)) verify(exactly = 0) { - settingsRepository.storeShowAutoFillSettingBadge( - DEFAULT_STATE.activeUserId, + firstTimeActionManager.storeShowAutoFillSettingBadge( false, ) } @@ -314,7 +318,7 @@ class AutoFillViewModelTest : BaseViewModelTest() { val viewModel = createViewModel() viewModel.stateFlow.test { assertEquals(DEFAULT_STATE, awaitItem()) - mutableShowAutofillActionCardFlow.emit(true) + mutableFirstTimeStateFlow.update { it.copy(showSetupAutofillCard = true) } assertEquals(DEFAULT_STATE.copy(showAutofillActionCard = true), awaitItem()) } } @@ -323,7 +327,7 @@ class AutoFillViewModelTest : BaseViewModelTest() { @Test fun `when AutoFillActionCardCtaClick action is sent should update show autofill in repository and send NavigateToSetupAutofill event`() = runTest { - mutableShowAutofillActionCardFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupAutofillCard = true) } val viewModel = createViewModel() viewModel.eventFlow.test { viewModel.trySendAction(AutoFillAction.AutoFillActionCardCtaClick) @@ -332,20 +336,19 @@ class AutoFillViewModelTest : BaseViewModelTest() { awaitItem(), ) } - verify { - settingsRepository.storeShowAutoFillSettingBadge(DEFAULT_STATE.activeUserId, false) + verify(exactly = 0) { + firstTimeActionManager.storeShowAutoFillSettingBadge(false) } } @Suppress("MaxLineLength") @Test fun `when DismissShowAutofillActionCard action is sent should update show autofill in repository`() { - mutableShowAutofillActionCardFlow.update { true } + mutableFirstTimeStateFlow.update { it.copy(showSetupAutofillCard = true) } val viewModel = createViewModel() viewModel.trySendAction(AutoFillAction.DismissShowAutofillActionCard) verify { - settingsRepository.storeShowAutoFillSettingBadge( - DEFAULT_STATE.activeUserId, + firstTimeActionManager.storeShowAutoFillSettingBadge( false, ) } @@ -357,6 +360,7 @@ class AutoFillViewModelTest : BaseViewModelTest() { savedStateHandle = SavedStateHandle().apply { set("state", state) }, settingsRepository = settingsRepository, authRepository = authRepository, + firstTimeActionManager = firstTimeActionManager, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt index b53fac425..87792a8fc 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt @@ -1,7 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.vault import app.cash.turbine.test -import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState @@ -28,13 +27,11 @@ class VaultSettingsViewModelTest : BaseViewModelTest() { every { getFeatureFlagFlow(FlagKey.ImportLoginsFlow) } returns mutableImportLoginsFlagFlow every { getFeatureFlag(FlagKey.ImportLoginsFlow) } returns false } - private val authRepository = mockk { - every { setShowImportLogins(any()) } just runs - } private val mutableFirstTimeStateFlow = MutableStateFlow(DEFAULT_FIRST_TIME_STATE) private val firstTimeActionManager = mockk { every { currentOrDefaultUserFirstTimeState } returns DEFAULT_FIRST_TIME_STATE every { firstTimeStateFlow } returns mutableFirstTimeStateFlow + every { storeShowImportLogins(any()) } just runs } @Test @@ -113,15 +110,19 @@ class VaultSettingsViewModelTest : BaseViewModelTest() { awaitItem(), ) } - verify(exactly = 1) { authRepository.setShowImportLogins(false) } + verify(exactly = 0) { + firstTimeActionManager.storeShowImportLogins(showImportLogins = false) + } } @Test fun `ImportLoginsCardDismissClick action should set repository value to false `() = runTest { - val viewModel = createViewModel() mutableImportLoginsFlagFlow.update { true } + val viewModel = createViewModel() viewModel.trySendAction(VaultSettingsAction.ImportLoginsCardDismissClick) - verify(exactly = 1) { authRepository.setShowImportLogins(false) } + verify(exactly = 1) { + firstTimeActionManager.storeShowImportLogins(showImportLogins = false) + } } @Suppress("MaxLineLength") @@ -130,13 +131,14 @@ class VaultSettingsViewModelTest : BaseViewModelTest() { runTest { val viewModel = createViewModel() viewModel.trySendAction(VaultSettingsAction.ImportLoginsCardDismissClick) - verify(exactly = 0) { authRepository.setShowImportLogins(false) } + verify(exactly = 0) { + firstTimeActionManager.storeShowImportLogins(showImportLogins = false) + } } private fun createViewModel(): VaultSettingsViewModel = VaultSettingsViewModel( environmentRepository = environmentRepository, featureFlagManager = featureFlagManager, - authRepository = authRepository, firstTimeActionManager = firstTimeActionManager, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt index 13bacd438..13ebfcb0c 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt @@ -9,6 +9,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.SwitchAccountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.auth.repository.model.ValidatePasswordResult import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager @@ -81,6 +82,12 @@ class VaultViewModelTest : BaseViewModelTest() { private var switchAccountResult: SwitchAccountResult = SwitchAccountResult.NoChange + private val mutableFirstTimeStateFlow = MutableStateFlow(FirstTimeState()) + private val firstTimeActionManager: FirstTimeActionManager = mockk { + every { firstTimeStateFlow } returns mutableFirstTimeStateFlow + every { storeShowImportLogins(any()) } just runs + } + private val authRepository: AuthRepository = mockk { every { userStateFlow } returns mutableUserStateFlow @@ -88,7 +95,6 @@ class VaultViewModelTest : BaseViewModelTest() { every { hasPendingAccountAddition = any() } just runs every { logout(any()) } just runs every { switchAccount(any()) } answers { switchAccountResult } - every { setShowImportLogins(any()) } just runs } private val settingsRepository: SettingsRepository = mockk { @@ -1554,7 +1560,7 @@ class VaultViewModelTest : BaseViewModelTest() { val viewModel = createViewModel() viewModel.trySendAction(VaultAction.DismissImportActionCard) verify(exactly = 1) { - authRepository.setShowImportLogins(false) + firstTimeActionManager.storeShowImportLogins(false) } } @@ -1573,21 +1579,21 @@ class VaultViewModelTest : BaseViewModelTest() { val viewModel = createViewModel() viewModel.trySendAction(VaultAction.DismissImportActionCard) verify(exactly = 0) { - authRepository.setShowImportLogins(false) + firstTimeActionManager.storeShowImportLogins(false) } } @Suppress("MaxLineLength") @Test - fun `when ImportActionCardClick is sent, repository called to set value to false and NavigateToImportLogins event is sent`() = + fun `when ImportActionCardClick is sent, NavigateToImportLogins event is sent`() = runTest { val viewModel = createViewModel() viewModel.eventFlow.test { viewModel.trySendAction(VaultAction.ImportActionCardClick) assertEquals(VaultEvent.NavigateToImportLogins, awaitItem()) } - verify(exactly = 1) { - authRepository.setShowImportLogins(false) + verify(exactly = 0) { + firstTimeActionManager.storeShowImportLogins(false) } } @@ -1606,7 +1612,7 @@ class VaultViewModelTest : BaseViewModelTest() { val viewModel = createViewModel() viewModel.trySendAction(VaultAction.ImportActionCardClick) verify(exactly = 0) { - authRepository.setShowImportLogins(false) + firstTimeActionManager.storeShowImportLogins(false) } } @@ -1620,6 +1626,7 @@ class VaultViewModelTest : BaseViewModelTest() { vaultRepository = vaultRepository, organizationEventManager = organizationEventManager, featureFlagManager = featureFlagManager, + firstTimeActionManager = firstTimeActionManager, ) } From 33a430419ce44216cadcf4d00d1de533637c3b49 Mon Sep 17 00:00:00 2001 From: ifernandezdiaz Date: Fri, 25 Oct 2024 12:53:48 -0300 Subject: [PATCH 02/14] QA-952: Adding test tags for Toggle items (#4153) --- .../ui/platform/components/toggle/BitwardenWideSwitch.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenWideSwitch.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenWideSwitch.kt index 226a618f8..a028a1830 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenWideSwitch.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/toggle/BitwardenWideSwitch.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.toggleableState @@ -82,6 +83,7 @@ fun BitwardenWideSwitch( } else { BitwardenTheme.colorScheme.filledButton.foregroundDisabled }, + modifier = Modifier.testTag("SwitchText"), ) description?.let { Text( @@ -100,7 +102,8 @@ fun BitwardenWideSwitch( Switch( modifier = Modifier - .height(56.dp), + .height(56.dp) + .testTag("SwitchToggle"), enabled = enabled, checked = isChecked, onCheckedChange = null, From 68a834ac142f3a0bdae70db9ab94c17a36dfa75b Mon Sep 17 00:00:00 2001 From: ifernandezdiaz Date: Fri, 25 Oct 2024 13:32:27 -0300 Subject: [PATCH 03/14] QA-955: Adding testTag to About screen rows (#4163) --- .../ui/platform/feature/settings/about/AboutScreen.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt index 4065a9d7a..a86396991 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutScreen.kt @@ -181,6 +181,7 @@ private fun ContentColumn( text = stringResource(id = R.string.bitwarden_help_center), onConfirmClick = onHelpCenterClick, dialogTitle = stringResource(id = R.string.continue_to_help_center), + modifier = Modifier.testTag("BitwardenHelpCenterRow"), dialogMessage = stringResource( id = R.string.learn_more_about_how_to_use_bitwarden_on_the_help_center, ), @@ -189,6 +190,7 @@ private fun ContentColumn( text = stringResource(id = R.string.privacy_policy), onConfirmClick = onPrivacyPolicyClick, dialogTitle = stringResource(id = R.string.continue_to_privacy_policy), + modifier = Modifier.testTag("PrivacyPolicyRow"), dialogMessage = stringResource( id = R.string.privacy_policy_description_long, ), @@ -196,6 +198,7 @@ private fun ContentColumn( BitwardenExternalLinkRow( text = stringResource(id = R.string.web_vault), onConfirmClick = onWebVaultClick, + modifier = Modifier.testTag("BitwardenWebVaultRow"), dialogTitle = stringResource(id = R.string.continue_to_web_app), dialogMessage = stringResource( id = R.string.explore_more_features_of_your_bitwarden_account_on_the_web_app, @@ -205,6 +208,7 @@ private fun ContentColumn( text = stringResource(id = R.string.learn_org), onConfirmClick = onLearnAboutOrgsClick, dialogTitle = stringResource(id = R.string.continue_to_x, "bitwarden.com"), + modifier = Modifier.testTag("LearnAboutOrganizationsRow"), dialogMessage = stringResource( id = R.string.learn_about_organizations_description_long, ), @@ -212,12 +216,14 @@ private fun ContentColumn( BitwardenExternalLinkRow( text = stringResource(R.string.give_feedback), onConfirmClick = onGiveFeedbackClick, + modifier = Modifier.testTag("GiveFeedbackRow"), dialogTitle = stringResource(R.string.continue_to_give_feedback), dialogMessage = stringResource(R.string.continue_to_provide_feedback), ) CopyRow( text = state.version, onClick = onVersionClick, + modifier = Modifier.testTag("CopyAboutInfoRow"), ) Box( modifier = Modifier From 5159258de57785b614965ae4e205884c76ad5219 Mon Sep 17 00:00:00 2001 From: Andrew Haisting <142518658+ahaisting-livefront@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:39:53 -0500 Subject: [PATCH 04/14] Make `isBuildVersionBelow` in authenticatorbridge internal (#4157) --- ...enticatorbridge-0.1.0-SNAPSHOT-release.aar | Bin 81458 -> 81461 bytes .../data/platform/util/AndroidBuildUtils.kt | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/libs/authenticatorbridge-0.1.0-SNAPSHOT-release.aar b/app/libs/authenticatorbridge-0.1.0-SNAPSHOT-release.aar index 9436cdc4e365799b72d808da5370b1e33de5034d..defcb5273d55ebf0ae25f1433082da3d6a2a0b4a 100644 GIT binary patch delta 43896 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 delta 43895 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 bkv#!31Ftv%mNo$>m+w6RKn8s|0RR91?g9nC diff --git a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/AndroidBuildUtils.kt b/app/src/main/java/com/x8bit/bitwarden/data/platform/util/AndroidBuildUtils.kt index cc48b4555..dc5321222 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/platform/util/AndroidBuildUtils.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/platform/util/AndroidBuildUtils.kt @@ -10,4 +10,4 @@ import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage * * @see Build.VERSION_CODES */ -fun isBuildVersionBelow(version: Int): Boolean = version > Build.VERSION.SDK_INT +internal fun isBuildVersionBelow(version: Int): Boolean = version > Build.VERSION.SDK_INT From 93aece75cfebfab22c9bd140611ed948f3d29a07 Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 25 Oct 2024 13:11:54 -0500 Subject: [PATCH 05/14] PM-14036: Update the slider UI (#4164) --- .../components/slider/BitwardenSlider.kt | 21 +++++++++++-------- .../feature/generator/GeneratorScreen.kt | 3 +++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt index fabdf0155..bd3ef006b 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/slider/BitwardenSlider.kt @@ -2,17 +2,16 @@ package com.x8bit.bitwarden.ui.platform.components.slider import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Slider import androidx.compose.material3.SliderDefaults import androidx.compose.material3.Text +import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -21,7 +20,9 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow import androidx.compose.ui.focus.focusProperties +import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent @@ -68,12 +69,9 @@ fun BitwardenSlider( val density = LocalDensity.current Row( verticalAlignment = Alignment.CenterVertically, - modifier = modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) - .semantics(mergeDescendants = true) {}, + modifier = modifier.semantics(mergeDescendants = true) {}, ) { - OutlinedTextField( + TextField( value = sliderValue.toString(), textStyle = BitwardenTheme.typography.bodyLarge, readOnly = true, @@ -90,7 +88,11 @@ fun BitwardenSlider( }, singleLine = true, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), - colors = bitwardenTextFieldColors(), + colors = bitwardenTextFieldColors( + disabledBorderColor = Color.Transparent, + focusedBorderColor = Color.Transparent, + unfocusedBorderColor = Color.Transparent, + ), modifier = Modifier .onPreviewKeyEvent { keyEvent -> when (keyEvent.key) { @@ -125,6 +127,7 @@ fun BitwardenSlider( interactionSource = remember { MutableInteractionSource() }, colors = bitwardenSliderColors(), thumbSize = DpSize(width = 20.dp, height = 20.dp), + modifier = Modifier.shadow(elevation = 2.dp, shape = CircleShape), ) }, track = { sliderState -> diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt index d700d51d5..2072b518c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreen.kt @@ -458,6 +458,9 @@ private fun ColumnScope.PasswordTypeContent( range = passwordTypeState.computedMinimumLength..passwordTypeState.maxLength, sliderTag = "PasswordLengthSlider", valueTag = "PasswordLengthLabel", + modifier = Modifier + .fillMaxWidth() + .padding(end = 16.dp), ) Spacer(modifier = Modifier.height(8.dp)) From f8bf864fc9704c8da2415f9858b73809f11e08aa Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:44:01 -0400 Subject: [PATCH 06/14] Autosync Crowdin Translations (#4159) Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com> Co-authored-by: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> --- app/src/main/res/values-af-rZA/strings.xml | 22 ++++- app/src/main/res/values-ar-rSA/strings.xml | 14 +++ app/src/main/res/values-az-rAZ/strings.xml | 16 +++- app/src/main/res/values-be-rBY/strings.xml | 18 +++- app/src/main/res/values-bg-rBG/strings.xml | 14 +++ app/src/main/res/values-bn-rBD/strings.xml | 78 ++++++++++------- app/src/main/res/values-bs-rBA/strings.xml | 22 ++++- app/src/main/res/values-ca-rES/strings.xml | 14 +++ app/src/main/res/values-cs-rCZ/strings.xml | 26 ++++-- app/src/main/res/values-cy-rGB/strings.xml | 62 ++++++++------ app/src/main/res/values-da-rDK/strings.xml | 38 ++++++--- app/src/main/res/values-de-rDE/strings.xml | 74 +++++++++------- app/src/main/res/values-el-rGR/strings.xml | 14 +++ app/src/main/res/values-en-rGB/strings.xml | 14 +++ app/src/main/res/values-en-rIN/strings.xml | 14 +++ app/src/main/res/values-es-rES/strings.xml | 14 +++ app/src/main/res/values-et-rEE/strings.xml | 18 +++- app/src/main/res/values-eu-rES/strings.xml | 18 +++- app/src/main/res/values-fa-rIR/strings.xml | 18 +++- app/src/main/res/values-fi-rFI/strings.xml | 36 +++++--- app/src/main/res/values-fil-rPH/strings.xml | 22 ++++- app/src/main/res/values-fr-rFR/strings.xml | 16 +++- app/src/main/res/values-gl-rES/strings.xml | 82 ++++++++++-------- app/src/main/res/values-hi-rIN/strings.xml | 44 ++++++---- app/src/main/res/values-hr-rHR/strings.xml | 14 +++ app/src/main/res/values-hu-rHU/strings.xml | 14 +++ app/src/main/res/values-in-rID/strings.xml | 22 ++++- app/src/main/res/values-it-rIT/strings.xml | 36 +++++--- app/src/main/res/values-iw-rIL/strings.xml | 24 ++++-- app/src/main/res/values-ja-rJP/strings.xml | 14 +++ app/src/main/res/values-ka-rGE/strings.xml | 82 ++++++++++-------- app/src/main/res/values-kn-rIN/strings.xml | 26 ++++-- app/src/main/res/values-ko-rKR/strings.xml | 22 ++++- app/src/main/res/values-lt-rLT/strings.xml | 22 ++++- app/src/main/res/values-lv-rLV/strings.xml | 16 +++- app/src/main/res/values-ml-rIN/strings.xml | 26 ++++-- app/src/main/res/values-mr-rIN/strings.xml | 82 ++++++++++-------- app/src/main/res/values-my-rMM/strings.xml | 82 ++++++++++-------- app/src/main/res/values-nb-rNO/strings.xml | 22 ++++- app/src/main/res/values-ne-rNP/strings.xml | 82 ++++++++++-------- app/src/main/res/values-nl-rNL/strings.xml | 70 +++++++++------ app/src/main/res/values-nn-rNO/strings.xml | 52 +++++++----- app/src/main/res/values-or-rIN/strings.xml | 82 ++++++++++-------- app/src/main/res/values-pl-rPL/strings.xml | 14 +++ app/src/main/res/values-pt-rBR/strings.xml | 16 +++- app/src/main/res/values-pt-rPT/strings.xml | 14 +++ app/src/main/res/values-ro-rRO/strings.xml | 18 +++- app/src/main/res/values-ru-rRU/strings.xml | 14 +++ app/src/main/res/values-si-rLK/strings.xml | 80 ++++++++++-------- app/src/main/res/values-sk-rSK/strings.xml | 14 +++ app/src/main/res/values-sl-rSI/strings.xml | 48 +++++++---- app/src/main/res/values-sr-rSP/strings.xml | 94 ++++++++++++--------- app/src/main/res/values-sv-rSE/strings.xml | 18 +++- app/src/main/res/values-ta-rIN/strings.xml | 18 +++- app/src/main/res/values-te-rIN/strings.xml | 82 ++++++++++-------- app/src/main/res/values-th-rTH/strings.xml | 46 ++++++---- app/src/main/res/values-tr-rTR/strings.xml | 24 ++++-- app/src/main/res/values-uk-rUA/strings.xml | 28 ++++-- app/src/main/res/values-vi-rVN/strings.xml | 16 +++- app/src/main/res/values-zh-rCN/strings.xml | 14 +++ app/src/main/res/values-zh-rTW/strings.xml | 18 +++- 61 files changed, 1464 insertions(+), 610 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index e64476bcd..15fd6dcbb 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -195,6 +195,7 @@ Vertalings Items vir %1$s Daar is geen items in u kluis vir %1$s nie. + There are no items in your vault that match “%1$s” Search for a login or add a new login Wanneer u ’n toevoerveld kies en ’n Bitwarden-outovuloorleg sien, kan u daarop tik om die outovuldiens te lanseer. Tik hierdie kennisgewing om ’n item vanuit u kluis outomaties in te vul. @@ -825,8 +826,8 @@ Wil u na die rekening omskakel? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Wil u na die rekening omskakel? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Wil u na die rekening omskakel? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 86c2a8f12..9498417d4 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -195,6 +195,7 @@ ترجمات عناصر لـ %1$s لا توجد عناصر في خزنتك لـ %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login عند تحديد حقل الإدخال ومشاهدة تراكب الملء التلقائي لـ Bitwarden ، يمكنك النقر عليه لتشغيل خدمة الملء التلقائي. اضغط على هذا الإشعار لملء معلومات تسجيل الدخول تلقائيًا من خزنتك. @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index 481f2ae70..6d8a6eab0 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -195,6 +195,7 @@ Tərcümələr %1$s üçün elementlər Seyfinizdə %1$s üçün heç bir element yoxdur. + Seyfinizdə \"%1$s\" ilə uyuşan heç bir element yoxdur Bir giriş axtar və ya yenisini əlavə et Bir giriş xanası seçdikdə və Bitwarden avto-doldurma örtüyünü gördükdə, avto-doldurma xidmətini başlatmaq üçün buna toxuna bilərsiniz. Bir elementi seyfinizdən avto-doldurmaq üçün bu bildirişə toxunun. @@ -1057,5 +1058,18 @@ Bu hesaba keçmək istəyirsiniz? daxilə köçürmə üzrə kömək Xaricə köçürdüyünüz faylı kompüterinizdə rahatlıqla tapa biləcəyiniz yerdə saxlayın. Xaricə köçürülən faylı saxlayın - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Bu, bilinən Bitwarden serveri deyil. Provayderinizi yoxlamağınız və ya serverinizi güncəlləməyiniz lazım gələ bilər. + Girişlər sinxronlaşdırılır... + SSH Key Cipher element növləri + Brauzer uzantısını endir + Daha problemsiz bir təcrübə üçün Bitwarden-i sevimli brauzerinizə inteqrasiya etmək üçün bitwarden.com/download ünvanına gedin. + Veb tətbiqi istifadə et + Hesabınızı asanlıqla idarə etmək və ayarları güncəlləmək üçün bitwarden.com saytında giriş edin. + Parolları avto-doldur + Bütün cihazlarınızda avto-doldurmanı quraraq tək toxunuşla istənilən yerdən giriş edin. + Uğurla daxilə köçürüldü! + Bitwarden-in veb və masaüstü alətləri ilə istənilən yerdən girişlərinizi idarə edin. + Bitwarden Alətləri + Anladım + No logins were imported diff --git a/app/src/main/res/values-be-rBY/strings.xml b/app/src/main/res/values-be-rBY/strings.xml index ea115fdca..974ea4585 100644 --- a/app/src/main/res/values-be-rBY/strings.xml +++ b/app/src/main/res/values-be-rBY/strings.xml @@ -195,6 +195,7 @@ Пераклады Элементы для %1$s У вашым сховішчы адсутнічаюць элементы для %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Калі пры выбары поля ўводу вы бачыце накладанне аўтазапаўнення Bitwarden, вы можаце дакрануцца да яго, каб запусціць службу аўтазапаўнення. Дакраніцеся да гэтага апавяшчэння, каб аўтазапоўніць элемент са свайго сховішча. @@ -904,9 +905,9 @@ Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1058,4 +1059,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 4bda7009d..0bcd52fdf 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -195,6 +195,7 @@ Преводи Елементи за %1$s В трезора липсват елементи за %1$s. + В трезора няма елементи, които отговарят на „%1$s“ Търсене на елемент за вписване или добавяне на нов такъв При избиране на поле за въвеждане на данни ще се появява изскачащо прозорче на Битуорден. Ако го натиснете, ще задействате услугата за автоматично дописване и имената и паролите ще бъдат попълнени. Натиснете известието, за да попълните със запис от трезора. @@ -1059,4 +1060,17 @@ Запазете изнесения файл някъде в компютъра си, така че да може да го намерите лесно. Запазете изнесения файл Това не изглежда да е познат сървър на Битуорден. Може да се наложи да го проверите при доставчика си или да обновите сървъра си. + Синхронизиране на елементите за вписване… + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 9ef7ec573..558ed5852 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -87,14 +87,14 @@ Your new account has been created! একটি আইটেম যোগ করুন App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. অস্পষ্ট বর্ণগুলি বাদ দিয়ে যান Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service আপনার লগইনগুলি স্বয়ংক্রিয়ভাবে পূরণ করতে বিটওয়ার্ডেন অ্যাক্সেসিবিলিটি পরিষেবা ব্যবহার করুন৷ ইমেইল পরিবর্তন করুন আপনি bitwarden.com ওয়েব ভল্টে আপনার ইমেল ঠিকানা পরিবর্তন করতে পারেন। আপনি কি এখনই ওয়েবসাইট ভিজিট করতে চান? @@ -195,9 +195,10 @@ অনুবাদসমূহ Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ বন্ধ চালু অবস্থা - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items অনুসন্ধান - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. ক্যামেরা ছবিসমূহ Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection মিল সনাক্তকরণ Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. আবার চেষ্টা করুন To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. পাসওয়ার্ড হালনাগাদকৃত হালনাগাদকৃত AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -462,11 +463,11 @@ Scanning will happen automatically. কালো Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. অনুমতি Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. পরিষেবার শর্তাদি এবং গোপনীয়তা নীতি স্বীকার করা হয়নি। সেবা পাবার শর্ত গোপনীয়তা নীতি - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. একটি এন্টারপ্রাইজ নীতির কারণে, আপনি আপনার ব্যক্তিগত ভল্টে বস্তুসমূহ সংরক্ষণ করা থেকে সীমাবদ্ধ। একটি প্রতিষ্ঠানের মালিকানা বিকল্পটি পরিবর্তন করুন এবং উপলভ্য সংগ্রহগুলি থেকে চয়ন করুন। একটি প্রতিষ্ঠানের নীতি আপনার মালিকানা বিকল্পগুলিকে প্রভাবিত করছে। @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-bs-rBA/strings.xml b/app/src/main/res/values-bs-rBA/strings.xml index a8dc09310..803e63b75 100644 --- a/app/src/main/res/values-bs-rBA/strings.xml +++ b/app/src/main/res/values-bs-rBA/strings.xml @@ -195,6 +195,7 @@ Prijevodi Stavke za %1$s U Vašem trezoru nema stavki za %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Kada izaberete polje za unos i vidite prekrivač za automatsko popunjavanje Bitwarden-a, možete ga dodirnuti da biste pokrenuli uslugu automatskog popunjavanja. Dodirnite ovo obaveštenje da biste automatski popunili stavku iz trezora. @@ -824,8 +825,8 @@ Skeniranje će biti izvršeno automatski. Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -904,9 +905,9 @@ Skeniranje će biti izvršeno automatski. Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1058,4 +1059,17 @@ Skeniranje će biti izvršeno automatski. Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 07c9ca089..c57afd1ad 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -195,6 +195,7 @@ Traduccions Elements per a %1$s No hi ha elements a la vostra caixa forta per a %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Quan seleccioneu un camp d’entrada i vegeu una superposició d’emplenament automàtic de Bitwarden, podeu tocar-lo per iniciar el servei d’emplenament automàtic. Toqueu aquesta notificació per omplir automàticament un element des de la caixa forta. @@ -1059,4 +1060,17 @@ Voleu canviar a aquest compte? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 71d75d962..938ad0e3c 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -93,9 +93,9 @@ Nepoužívat zaměnitelné znaky Rozšíření aplikace Bitwarden Nejjednodušší způsob přidání nových přihlášení do trezoru je z rozšíření Bitwardenu. Další informace o používání rozšíření Bitwardenu získáte klepnutím na obrazovku Nastavení. - Použijte Bitwarden v Safari a ostatních prohlížečích pro automatické vyplnění přihlašovacích údajů. + Použije Bitwarden v Safari a ostatních prohlížečích pro automatické vyplnění přihlašovacích údajů. Služba automatického vyplňování - Použijte službu přístupnosti pro automatické vyplňování přihlašovacích údajů. + Použije službu přístupnosti pro automatické vyplňování přihlašovacích údajů. Změnit e-mail E-mailovou adresu si můžete změnit na webové stránce bitwarden.com. Chcete tuto stránku nyní otevřít? Změnit hlavní heslo @@ -195,6 +195,7 @@ Překlady Položky pro %1$s Žádné položky ve Vašem trezoru pro %1$s. + Žádné položky ve Vašem trezoru se shodou s \"%1$s\" Hledat přhlášení nebo přidat nové přihlášení Když vyberete vstupní pole a uvidíte překrytí automatického vyplnění, můžete na něj klepnout a spustit službu automatického vyplnění. Klepnutím na toto oznámení automaticky vyplníte přihlašovací údaje z trezoru. @@ -324,7 +325,7 @@ Načtení proběhne automaticky. Zobrazit ikony webových stránek Zobrazí rozeznatelný obrázek vedle každého přihlášení. URL serveru ikon - Automatické vyplnění aplikací Bitwarden + Automatické vyplňování aplikací Bitwarden Trezor je uzamčený Přejít do trezoru Kolekce @@ -477,7 +478,7 @@ Načtení proběhne automaticky. Použít biometrii k ověření Biometrie Použít biometrii k odemknutí - Bitwarden vyžaduje pozornost – Zkontrolujte \"Službu automatického vyplňování\" v nastavení Bitwardenu + Bitwarden vyžaduje pozornost - zkontrolujte \"Službu automatického vyplňování\" v nastavení Bitwardenu 3. V nastavení Android aplikace Bitwarden přejděte v části Rozšířená nastavení do \"Zobrazit přes ostatní aplikace\" a povolte zobrazení přes jiné aplikace. Oprávnění Otevřít nastavení oprávnění překrytí obrazovky @@ -536,7 +537,7 @@ Načtení proběhne automaticky. Podmínky použití a Zásady ochrany osobních údajů nebyly odsouhlaseny. Podmínky použití Zásady ochrany osobních údajů - Bitwarden vyžaduje pozornost – Povolte volbu \"Zobrazit přes ostatní aplikace\" ve \"Službách automatického vyplňování“ v nastavení aplikace Bitwarden + Bitwarden vyžaduje pozornost - Povolte volbu \"Zobrazit přes ostatní aplikace\" ve \"Službách automatického vyplňování“ v nastavení aplikace Bitwarden Správa přístupových klíčů Služby automatického vyplňování Použít automatické vyplňování @@ -549,7 +550,7 @@ Načtení proběhne automaticky. Vyžadováno pro použití v dlaždici rychlé akce automatického vyplňování. Použít vykreslování přes ostatní aplikace Služba přístupnosti aplikace Bitwarden umožní zobrazovat vyskakovací okno při výběru pole s přihlašovacími údaji. - Pokud je povoleno, služba usnadnění Bitwardenu zobrazí vyskakovací okno při výběru přihlašovacích polí pro automatické vyplňování přihlašovacích údajů. + Pokud je povoleno, služba přístupnosti Bitwardenu zobrazí vyskakovací okno při výběru přihlašovacích polí pro automatické vyplňování přihlašovacích údajů. Pokud je povoleno, přístupnost zobrazí vyskakovací okno pro rozšíření služby automatického vyplňování pro starší aplikace, které nepodporují Android Autofill Framework. Z důvodu podnikových zásad nemůžete ukládat položky do svého osobního trezoru. Změňte vlastnictví položky na organizaci a poté si vyberte z dostupných kolekcí. Zásady organizace ovlivňují možnosti vlastnictví. @@ -1058,4 +1059,17 @@ Chcete se přepnout na tento účet? Uložte exportovaný soubor někde na Vašem počítači, kde jej můžete snadno najít. Uložit exportovaný soubor Nejedná se o rozpoznaný server Bitwarden. Možná budete muset zkontrolovat svého poskytovatele nebo aktualizovat svůj server. + Synchronizování přihlášení... + Typy položek klíče SSH Cipher + Stáhnout rozšíření prohlížeče + Přejděte na bitwarden.com/download a integrujte Bitwarden do svého oblíbeného prohlížeče pro bezproblémové používání. + Použít webovou aplikaci + Přihlaste se na bitwarden.com a snadno spravujte svůj účet a aktualizujte nastavení. + Automatické vyplňování hesel + Nastavte automatické vyplňování na všech Vašich zařízeních pro přihlášení jedním klepnutím kdekoliv. + Import byl úspěšný! + Spravujte přihlašovací údaje odkudkoli pomocí nástrojů Bitwarden pro web i počítač. + Nástroje Bitwarden + Rozumím + Nebyla importována žádná přihlášení diff --git a/app/src/main/res/values-cy-rGB/strings.xml b/app/src/main/res/values-cy-rGB/strings.xml index 2f3a1cf3d..1222a610b 100644 --- a/app/src/main/res/values-cy-rGB/strings.xml +++ b/app/src/main/res/values-cy-rGB/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Ychwanegu eitem App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. + Use the Bitwarden accessibility service to autofill your logins across apps and the web. Gwasanaeth llenwi awtomatig Set Bitwarden as your passkey provider in device settings. Osgoi nodau amwys Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. Gwasanaeth llenwi awtomatig Bitwarden - Use the Bitwarden accessibility service to auto-fill your logins. + Use the Bitwarden accessibility service to autofill your logins. Newid ebost You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Newid y prif gyfrinair @@ -195,8 +195,9 @@ Cyfieithiadau Eitemau ar gyfer %1$s Does dim eitemau yn eich cell ar gyfer %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. Tapiwch ar yr hysbysiad hwn i lenwi eitem o\'ch cell yn awtomatig. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. @@ -206,14 +207,14 @@ Wedi diffodd Ymlaen Statws - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. Llenwi\'n awtomatig Hoffech chi lenwi\'n awtomatig neu weld yr eitem hon? Ydych chi\'n siŵr eich bod am lenwi\'r eitem hon? Dyw hi ddim yn cyfateb yn llwyr i \"%1$s\". Eitemau sy\'n cyfateb Eitemau all gyfateb Chwilio - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Dysgu am sefydliadau Methu agor yr ap \"%1$s\". Ap dilysu @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Lluniau Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically Mae angen aelodaeth uwch i ddefnyddio\'r nodwedd hon. Atodiad wedi\'i ychwanegu @@ -331,10 +332,10 @@ Scanning will happen automatically. There are no items in this collection. Does dim eitemau yn y ffolder hon. Does dim eitemau yn y bin sbwriel. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Agor gosodiadau llenwi awtomatig Face ID Use Face ID to verify. @@ -367,7 +368,7 @@ Scanning will happen automatically. Hold your Yubikey near the top of the device. Ceisio eto I barhau, daliwch eich YubiKey NEO ar gefn y ddyfais. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Cyfrinair wedi\'i ddiweddaru Wedi\'i ddiweddaru AutoFill activated! @@ -381,7 +382,7 @@ Scanning will happen automatically. 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Cyfeiriad ebost annilys. Cardiau @@ -449,7 +450,7 @@ Scanning will happen automatically. Clirio\'r clipfwrdd Clirio eitemau a gopïwyd o\'ch clipfwrdd yn awtomatig. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Thema Newid thema liwiau\'r ap Rhagosodiad (system) @@ -462,11 +463,11 @@ Scanning will happen automatically. Du Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Gofyn i ychwanegu manylion mewngofnodi Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Priflythrennu Cynnwys rhif @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification biometreg Defnyddio biometreg i ddatgloi - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Agor There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Cadwyd yr atodiad yn llwyddiannus - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Yn anfon i\'r bin sbwriel... Anfonwyd yr eitem i\'r bin sbwriel. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Telerau gwasanaeth Polisi preifatrwydd - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Gwasanaethau llenwi awtomatig Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -826,7 +827,7 @@ Do you want to switch to this account? Yn mewngofnodi fel %1$s Vault timeout action changed to log out Rhwystro llenwi awtomatig - Auto-fill will not be offered for these URIs. + Autofill will not be offered for these URIs. New blocked URI URI wedi\'i gadw Fformat annilys. Defnyddiwch https://, http://, neu androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 8f665089e..53b2ecdc3 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -87,15 +87,15 @@ Din nye konto er oprettet! Tilføj et emne App-udvidelse - Brug Bitwardens hjælpefunktion til autoudfyldning af logins på tværs af apps og internet. + Brug Bitwardens hjælpefunktion til autoudfyldning af dine logins på tværs af apps og nettet. Autoudfyldningstjeneste Angiv Bitwarden som aktuel adgangsnøgleudbyder i enhedsindstillingerne. Undgå tvetydige tegn Bitwarden app-udvidelse Den letteste måde at tilføje nye logins til boksen er fra Bitwarden app-udvidelsen. Læs mere om brugen af Bitwarden app-udvidelsen ved at gå til skærmen \"Indstillinger\". - Benyt Bitwarden i Safari og andre apps til autoudfyldelse af logins. - Bitwarden Autoudfyldningstjeneste - Benyt Bitwardens tilgængelighedstjeneste til autoudfyldning af logins. + Benyt Bitwarden i Safari og andre apps til autoudfyldelse af dine logins. + Bitwarden autoudfyldningstjeneste + Benyt Bitwardens hjælpefunktion til autoudfyldning af dine logins. Skift e-mail Man kan skifte sin e-mailadresse via bitwarden.com web-boksen. Besøg webstedet nu? Skift hovedadgangskode @@ -195,9 +195,10 @@ Oversættelser Emner til %1$s Der er ingen emner i boksen til %1$s. + Der er ingen emner i boksen matchende \"%1$s\" Søg efter eller tilføj et nyt login - Når et inputfelt vælges, og en Bitwarden-autoudfyldningoverlejring vises, kan der trykkes på den for at starte autoudfyldningstjenesten. - Tryk på denne notifikation for at autoudfylde et emne fra boksen. + Når du vælger et inputfelt og ser en Bitwarden-autoudfyldningoverlejring, kan du trykke på den for at starte autoudfyldningstjenesten. + Tryk på denne notifikation for at autoudfylde med et element fra din boks. Åbn Tilgængelighedsindstillinger 1. I Androids Tilgængelighedsindstillinger, tryk på \"Bitwarden\" under afsnittet Tjenester. 2. Slå kontakten til og tryk på OK for at acceptere. @@ -206,9 +207,9 @@ Fra Til Status - Den letteste måde at føje nye logins til boksen er fra Bitwarden Autoudfyldningstjenesten. Læs mere om brugen af Bitwarden Autoudfyldningstjenesten ved at gå til skærmen \"Indstillinger\". + Den letteste måde at tilføje nye logins til din boks er fra Bitwarden Autoudfyldningstjenesten. Få mere at vide om brugen af Bitwarden Autoudfyldningstjenesten ved at gå til skærmen \"Indstillinger\". Autoudfyld - Skal dette emne autoudfyldes eller vises? + Vil du autoudfylde eller se dette element? Sikker på, at dette emne skal autoudfyldes? Det er ikke et identisk match med \"%1$s\". Matchende emner Mulige matchende emner @@ -375,13 +376,13 @@ Skanning vil ske automatisk. Logins kan nu nemt tilgås direkte fra tastaturet, når der logges ind på apps og websteder. Vi anbefaler, at andre Autoudfyld-apps deaktiveres under Indstillinger, hvis det ikke er planen at bruge dem. Få adgang til boksen direkte fra tastaturet for hurtigt at autoudfylde adgangskoder. - Følg denne vejledning for at aktivere autoudfyldning af adgangskoder på enheden: + Følg disse instruktioner for at aktivere autoudfyldning af adgangskoder på din enhed: 1. Gå til iOS-appen \"Indstillinger\" 2. Tryk på \"Adgangskoder\" 3. Tryk på \"Autoudfyld adgangskoder\" 4. Slå Autoudfyld til 5. Vælg \"Bitwarden\" - Adgangskodeautoudfyldning + Adgangskode autoudfyld Den letteste måde at tilføje nye logins til boksen er ved at bruge Bitwardens Adgangskode Autoudfyldning-udvidelse. Læs mere om brugen af Bitwarden Adgangskode Autoudfyldnig-udvidelsen ved at gå til skærmbilledet \"Indstillinger\". Ugyldig e-mailadresse. Kort @@ -477,7 +478,7 @@ Skanning vil ske automatisk. Biometrisk bekræftelse Biometri Benyt biometri til oplåsning - Bitwarden kræver opmærksomhed - se \"Autoudfyld-tilgængelighedstjeneste\" i Bitwarden-indstillinger + Bitwarden har brug for opmærksomhed - se \"Autoudfyld hjælpefunktion\" i Bitwarden-indstillinger 3. På Android app-indstillingsskærmen for Bitwarden, gå til indstillingen \"Vis oven på andre apps\" (under Avanceret) og tryk på knappen for at aktivere overlejringsunderstøttelse. Tilladelse Åbn Indstillinger for Overlejringstilladelse @@ -500,7 +501,7 @@ Skanning vil ske automatisk. Åbn Et problem opstod med at gemme denne vedhæftning. Fortsætter problemet, gem den i stedet fra web-boksen. Vedhæftning gemt - Aktivér \"Autoudfyld-tilgængelighedstjeneste\" fra Bitwarden-indstillinger for at benytte flisen Autoudfyld. + Aktivér \"Autoudfyld Tilgængelighedstjeneste\" fra Bitwarden-indstillinger for at benytte flisen Autoudfyld. Ingen adgangskodefelter fundet Sender til papirkurven... Emne er sendt til papirkurven. @@ -1059,4 +1060,17 @@ Skift til denne konto? Gem den eksporterede fil et sted på computeren, hvor man nemt kan finde den. Gem den eksporterede fil Dette er ikke en genkendt Bitwarden-server. Man skal muligvis tjekke med sin udbyder eller opdatere sin server. + Synker logins... + SSH-nøglechiffer emnetyper + Download webbrowserudvidelsen + Gå til bitwarden.com/download for at integrere Bitwarden i den foretrukne webbrowser for en problemfri oplevelse. + Brug web-appen + Log ind på bitwarden.com for nemt at håndtere brugerkontoen og opdatere indstillinger. + Autofyld adgangskoder + Opsæt autofyldning på alle enhederne for at logge ind med ét enkelt tryk overalt. + Import udført! + Håndtér logins hvor som helst fra med Bitwarden-værktøjer til web og computer. + Bitwarden-værktøjer + Forstået + Ingen logins blev importeret diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 229e86ea1..1563b55cf 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -195,6 +195,7 @@ Übersetzungen Zugangsdaten für %1$s Es befinden sich keine Zugangsdaten für %1$s in deinem Tresor. + Es gibt keine Einträge in deinem Tresor, die mit “%1$s” übereinstimmen Nach Zugangsdaten suchen oder neue Zugangsdaten hinzufügen Wenn Sie ein Eingabefeld auswählen und ein Auto-Fill-Overlay von Bitwarden sehen, können Sie darauf tippen, um den Dienst zum automatischen Ausfüllen zu starten. Tippe auf diese Benachrichtigung, um automatisch Zugangsdaten aus deinem Tresor einzufügen. @@ -1027,35 +1028,48 @@ Möchtest du zu diesem Konto wechseln? Zugangsdaten importieren Folge diesen Anweisungen von deinem Computer aus, um gespeicherte Passwörter aus deinem Browser oder einem anderen Passwort-Manager zu exportieren. Importiere sie dann sicher in Bitwarden. Gib deinem Tresor einen Vorsprung - Unlock with biometrics requires strong biometric authentication and may not be compatible with all biometric options on this device. - Unlock with biometrics requires strong biometric authentication and is not compatible with the biometrics options available on this device. - On your computer, log in to your current browser or password manager. - log in to your current browser or password manager. - Export your passwords. This option is usually found in your settings. - Export your passwords. - Select Import data in the web app, then Done to finish syncing. - Select Import data - Step 1 of 3 - Export your saved logins - You’ll delete this file after import is complete. - On your computer, open a new browser tab and go to vault.bitwarden.com - go to vault.bitwarden.com - Log in to the Bitwarden web app. - Step 2 of 3 - Log in to Bitwarden - Step 3 of 3 - Import logins to Bitwarden - In the Bitwarden navigation, find the Tools option and select Import data. - find the Tools - select Import data. - Fill out the form and import your saved password file. - import your saved password file. + Das Entsperren mit Biometrie erfordert eine starke biometrische Authentifizierung und ist möglicherweise nicht mit allen biometrischen Optionen auf diesem Gerät kompatibel. + Das Entsperren mit Biometrie erfordert eine starke biometrische Authentifizierung und ist nicht mit den biometrischen Optionen auf diesem Gerät kompatibel. + Melde dich auf deinem Computer bei deinem aktuellen Browser oder Passwortmanager an. + melde dich bei deinem aktuellen Browser oder Passwortmanager an. + Exportiere deine Passwörter. Diese Option findest du normalerweise in deinen Einstellungen. + Exportiere deine Passwörter. + Wähle Daten importieren in der Web-App aus, dann Fertig um die Synchronisierung abzuschließen. + Daten importieren auswählen + Schritt 1 von 3 + Deine gespeicherten Zugangsdaten exportieren + Du musst diese Datei nach Abschluss des Imports löschen. + Öffne auf deinem Computer einen neuen Browser-Tab und gehe zu vault.bitwarden.com + gehe zu vault.bitwarden.com + Melde dich bei der Bitwarden Web-App an. + Schritt 2 von 3 + Bei Bitwarden anmelden + Schritt 3 von 3 + Zugangsdaten in Bitwarden importieren + Suche in der Bitwarden-Navigation die Werkzeuge-Option und wähle Daten importieren aus. + finde die Werkzeuge + wähle Daten importieren aus. + Fülle das Formular aus und importiere deine gespeicherte Passwortdatei. + importiere deine gespeicherte Passwortdatei then Done - For your security, be sure to delete your saved password file. - delete your saved password file. - Need help? Checkout out import help. - import help - Save the exported file somewhere on your computer you can find easily. - Save the exported file - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Zu deiner eigenen Sicherheit solltest du deine gespeicherte Passwortdatei löschen. + lösche deine gespeicherte Passwortdatei. + Brauchst du Hilfe? Schau dir die Importhilfe an. + Importhilfe + Speichere die exportierte Datei irgendwo auf deinem Computer, so dass du sie leicht wiederfinden kannst. + Speichere die exportierte Datei + Dies ist kein anerkannter Bitwarden-Server. Möglicherweise musst du dich bei deinem Anbieter erkundigen oder deinen Server aktualisieren. + Synchronisiere Zugangsdaten... + SSH Key Cipher Item Types + Die Browser-Erweiterung herunterladen + Gehe zu bitwarden.com/download, um Bitwarden für eine nahtlose Benutzererfahrung in deinen bevorzugten Browser zu integrieren. + Verwende die Web-App + Melde dich bei bitwarden.com an, um dein Konto einfach zu verwalten und Einstellungen zu aktualisieren. + Passwörter automatisch ausfüllen + Richte Auto-Ausfüllen auf all deinen Geräten ein, um dich mit einem einzigen Fingertipp überall anzumelden. + Import erfolgreich! + Verwalte deine Zugangsdaten von überall aus mit Bitwarden-Werkzeugen für Web und Desktop. + Bitwarden-Werkzeuge + Verstanden + Es wurden keine Zugangsdaten importiert diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index ecea27822..d51826e03 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -195,6 +195,7 @@ Μεταφράσεις Στοιχεία για %1$s Δεν υπάρχουν στοιχεία στην λίστα σας για %1$s. + There are no items in your vault that match “%1$s” Αναζητήστε μια σύνδεση ή προσθέστε μια νέα σύνδεση Όταν επιλέξετε ένα πεδίο εισαγωγής και δείτε μια επικάλυψη αυτόματης συμπλήρωσης Bitwarden, μπορείτε να πατήσετε για να ξεκινήσει η υπηρεσία αυτόματης συμπλήρωσης. Πατήστε στην ειδοποίηση για να συμπληρώσετε αυτόματα ένα στοιχείο από το vault σας. @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Συγχρονισμός συνδέσεων... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 54e90d1e8..5c5b8363a 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -195,6 +195,7 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. Tap this notification to auto-fill an item from your vault. @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognised Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favourite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-en-rIN/strings.xml b/app/src/main/res/values-en-rIN/strings.xml index babc112de..ad362346a 100644 --- a/app/src/main/res/values-en-rIN/strings.xml +++ b/app/src/main/res/values-en-rIN/strings.xml @@ -195,6 +195,7 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. Tap this notification to auto-fill an item from your vault. @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognised Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favourite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 8f9b8ecf8..84ca4ba60 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -195,6 +195,7 @@ Traducciones Elementos para %1$s No hay elementos en tu caja fuerte para %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Cuando seleccione un campo de entrada y vea una superposición de autocompletado de Bitwarden, puede pulsarla para iniciar el servicio de autocompletado. Pulsa en esta notificación para autorellenar una entrada desde tu caja fuerte. @@ -1060,4 +1061,17 @@ seleccione Agregar TOTP para almacenar la clave de forma segura Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index 3ee7c48fd..8b9f65388 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -195,6 +195,7 @@ Tõlkijad %1$s kontoandmed Hoidlas puuduvad %1$s kontod. + There are no items in your vault that match “%1$s” Search for a login or add a new login Kui vajutad sisendväljale ning näed Bitwardeni akent, saad sellele vajutada ning kontoandmeid ja paroole sisestada. Vajuta andmete automaatseks sisestamiseks. @@ -905,9 +906,9 @@ Soovid selle konto peale lülituda? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Soovid selle konto peale lülituda? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-eu-rES/strings.xml b/app/src/main/res/values-eu-rES/strings.xml index 2582cdf44..b4ec404bc 100644 --- a/app/src/main/res/values-eu-rES/strings.xml +++ b/app/src/main/res/values-eu-rES/strings.xml @@ -195,6 +195,7 @@ Itzulpenak %1$s-entzako elementuak Kutxa gotorrean ez dago elementurik %1$s-entzako. + There are no items in your vault that match “%1$s” Search for a login or add a new login Sarrera-eremu bat hautatu eta Bitwardenen automatikoki betetzerako gainjartze bat ikusten duzunean, bere kasa betetzeko erabil dezakezu. Sakatu jakinarazpen hau kutxa gotorreko elementu bat automatikoki betetzeko. @@ -903,9 +904,9 @@ Kontu honetara aldatu nahi duzu? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1057,4 +1058,17 @@ Kontu honetara aldatu nahi duzu? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 0d8d2afe8..8b8dab534 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -195,6 +195,7 @@ ترجمه‌ها موارد برای %1$s هیج موردی در گاوصندوقتان برای %1$s موجود نیست. + There are no items in your vault that match “%1$s” Search for a login or add a new login هنگامی که یک فیلد ورودی را انتخاب می‌کنید و یک لایه‌ی پر کردن خودکار Bitwarden را مشاهده کردید، می‌توانید برای راه اندازی سرویس پر کردن خودکار روی آن ضربه بزنید. برای پر کردن خودکار یک مورد در گاوصندوقتان روی این اعلان ضربه بزنید. @@ -905,9 +906,9 @@ Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 76a56dfa6..ce0f10ead 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -195,6 +195,7 @@ Käännökset Kohteet palvelulle %1$s Holvissasi ei ole kohteita osoitteelle \"%1$s\". + There are no items in your vault that match “%1$s” Hae kirjautumistietoa tai lisää uusi Kun valitset syöttökentän ja näet Bitwardenin ponnahdusvalinnan, voit sitä napauttamalla avata automaattitäytön palvelun. Täytä kohde holvistasi automaattisesti napauttamalla tätä ilmoitusta. @@ -1033,19 +1034,19 @@ Haluatko vaihtaa tähän tiliin? On your computer, log in to your current browser or password manager. log in to your current browser or password manager. Export your passwords. This option is usually found in your settings. - Export your passwords. + Vie salasanasi. Select Import data in the web app, then Done to finish syncing. - Select Import data - Step 1 of 3 - Export your saved logins - You’ll delete this file after import is complete. + Valitse tuotavat tiedot + Vaihe 1/3 + Vie tallennetut kirjautumistietosi + Poistat tämän tiedoston, kun tuonti on valmis. On your computer, open a new browser tab and go to vault.bitwarden.com - go to vault.bitwarden.com - Log in to the Bitwarden web app. - Step 2 of 3 - Log in to Bitwarden - Step 3 of 3 - Import logins to Bitwarden + mene osoitteeseen vault.bitwarden.com + Kirjaudu Bitwarden-verkkosovellukseen. + Vaihe 2/3 + Kirjaudu Bitwardeniin + Vaihe 3/3 + Tuo kirjautumistiedot Bitwardeniin In the Bitwarden navigation, find the Tools option and select Import data. find the Tools select Import data. @@ -1059,4 +1060,17 @@ Haluatko vaihtaa tähän tiliin? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index ca2fc1a70..b89531e10 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -195,6 +195,7 @@ Mga Pagsasalin Mga item para sa %1$s Walang item para sa %1$s sa vault mo. + There are no items in your vault that match “%1$s” Search for a login or add a new login Pwede mong pindutin ang overlay sa pag-autofill ng Bitwarden pagpindot mo sa isang input field para buksan ang serbisyo pang-autofill. Pindutin ang notipikasyong ito para i-autofill ang isang item mula sa vault mo. @@ -825,8 +826,8 @@ Gusto mo bang pumunta sa account na ito? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Gusto mo bang pumunta sa account na ito? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Gusto mo bang pumunta sa account na ito? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 820fe05b1..2c1489787 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -195,6 +195,7 @@ Traductions Éléments pour %1$s Il n\'y a aucun élément dans votre coffre pour %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Lorsque vous sélectionnez un champ de saisie et que vous voyez une superposition de saisie automatique Bitwarden, vous pouvez le toucher pour lancer le service de saisie automatique. Touchez cette notification pour saisir automatiquement un élément depuis votre coffre. @@ -905,7 +906,7 @@ Voulez-vous basculer vers ce compte ? Vérification de l\'identité... Mots de passe Compte inconnu - Set up auto-fill + Set up autofill Obtenez un accès instantané à vos mots de passe et vos clés d\'accès ! Pour configurer la saisie automatique du mot de passe et la gestion des clés d\'accès, définissez Bitwarden comme votre fournisseur préféré dans les paramètres iOS. 1. Go to your device\'s Settings > Passwords > Password Options @@ -1059,4 +1060,17 @@ Voulez-vous basculer vers ce compte ? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index 5e72cacb6..5de27233e 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 3b95cca8d..c206ca976 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -195,6 +195,7 @@ अनुवाद %1$s के लिए आइटम %1$s के लिए आपकी तिजोरी में कोई आइटम नहीं हैं। + There are no items in your vault that match “%1$s” Search for a login or add a new login इनपुट फील्ड को चुनने पर अगर एक बिटवार्डन ऑटो-फिल स्क्रीन दिखता हैं, तो उसपर टैप करके ऑटो-फिल सर्विस लॉन्च किया जा सकता है। अपने तिजोरी से आइटम ऑटो-फिल करने के लिए इस नोटिफिकेशन पर टैप करें। @@ -361,12 +362,12 @@ युआरआई मैच डिटेक्शन मैच डिटेक्शन हां, और सेव करें - Auto-fill and save + Autofill and save ग्रुप Hold your Yubikey near the top of the device. वापस कोशिश करें To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. पासवर्ड अपडेट किया गया अपडेट किया गया AutoFill activated! @@ -448,7 +449,7 @@ क्लिपबोर्ड साफ करें Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. थीम ऐप का थीम बदलें। डिफॉल्ट (सिस्टम) @@ -461,11 +462,11 @@ काला नॉर्ड सोलराइज़्ड डार्क - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. ऐप रिस्टार्ट पर - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. कैपिटलाइज़ करें नंबर शामिल करें @@ -476,7 +477,7 @@ बायोमेट्रिक सत्यापन बायोमेट्रिक Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. परमिशन Open Overlay Permission Settings @@ -499,7 +500,7 @@ खोलें There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... आइटम कचरे में डाला गया। @@ -535,20 +536,20 @@ सेवा की शर्ते और प्राइवसी पॉलिसी माने नहीं गए हैं। सेवा की शर्ते प्राइवसी पॉलिसी - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. ड्रॉ-ओवर इस्तेमाल करें Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -824,8 +825,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI यूआरआई सेव किया Invalid format. Use https://, http://, or androidapp:// @@ -904,9 +905,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1058,4 +1059,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-hr-rHR/strings.xml b/app/src/main/res/values-hr-rHR/strings.xml index 5f4071471..5e68727bd 100644 --- a/app/src/main/res/values-hr-rHR/strings.xml +++ b/app/src/main/res/values-hr-rHR/strings.xml @@ -195,6 +195,7 @@ Prijevodi Stavke za %1$s U tvom trezoru nema stavki za %1$s + There are no items in your vault that match “%1$s” Potraži ili dodaj novu prijavu Kada odabereš polje za unos i vidiš Bitwarden sloj auto-ispune, možeš ga dodirnuti za pokretanje auto-ispune. Dodirni ovu obavijest za auto-ispunu iz tvog trezora. @@ -1057,4 +1058,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 822abb587..fe96cc9db 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -195,6 +195,7 @@ Fordítások %1$s elemei Nincs elem a széfben: %1$s. + Nincs elem a széfben \"%1$s\" egyezéssel. Keressünk egy bejelentkezést vagy adjunk hozzá új bejelentkezést. Egy beviteli mezőt kiválasztva és megjelenik a Bitwarden automatikus kitöltési ablaka, arra rákoppintva elindítható az automatikus kitöltési szolgáltatás. Erre az értesítésre koppintva automatikusan kitölthető egy elem a széfből. @@ -1058,4 +1059,17 @@ Szeretnénk átváltani erre a fiókra? Mentsük el az exportált fájlt olyan helyre a számítógépen, ahol könnyen megtalálhatjuk. Exportált fájl mentése Ez nem egy felismert Bitwarden szerver. Konzultálhatunk a szolgáltatóval vagy frissítsük a szervert. + Bejelentkezések szinkronizálása... + SSH Key Cipher Item Types + Böngésző bővítmény letöltése + Keressük fel a bitwarden.com/download webhelyet és integráljuk a Bitwardent kedvenc böngészőbe a zökkenőmentes élmény érdekében. + Webalkalmazás használata + Jelentkezzünk be a bitwarden.com webhelyen, hogy egyszerűen kezeljük a fiókot és frissítsük a beállításokat. + Jelszavak automatikus kitöltése + Állítsuk be az automatikus kitöltést az összes eszközön, hogy bárhol egyetlen érintéssel bejelentkezhessünk. + Az Importálás sikeres volt. + Állítsuk be az automatikus kitöltést az összes eszközön, hogy bárhol egyetlen érintéssel bejelentkezhessünk. + Bitwarden eszközök + Rendben + Nem lett bejelentkezés importáva. diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 069a7a1dd..847917e98 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -195,6 +195,7 @@ Terjemahan Item untuk %1$s Tidak ada item di brankas Anda untuk %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Saat Anda memilih kolom input dan melihat overlay pengisian otomatis Bitwarden, Anda dapat mengetuknya untuk meluncurkan layanan pengisian otomatis. Ketuk notifikasi ini untuk mengisi info masuk secara otomatis dari brankas Anda. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 0740f0d04..400eb15d3 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -195,18 +195,19 @@ Traduzioni Elementi per %1$s Nessun elemento per %1$s + There are no items in your vault that match “%1$s” Search for a login or add a new login Quando selezioni un campo di login e vedi un pop-up di riempimento automatico di Bitwarden, puoi cliccarlo per aprire il servizio di riempimento automatico. Clicca questa notifica per riempire automaticamente un login dalla tua cassaforte. Apri impostazioni di accessibilità 1. Nelle impostazioni di accessibilità di Android, clicca \"Bitwarden\" sotto Servizi. - 2. Attiva l\'interruttore e clicca Consenti per accettare. + 2. Attiva Bitwarden e clicca Consenti per accettare. Disabilitato Attivo No Stato - Puoi aggiungere facilmente nuovi login alla cassaforte con il servizio di riempimento automatico di Bitwarden. Scopri di più su come usare il riempimento automatico nelle impostazioni dell\'applicazione. + Puoi aggiungere facilmente nuovi login alla cassaforte con il servizio di riempimento automatico di Bitwarden. Scopri di più su come usare il riempimento automatico nelle impostazioni dell\'app. Riempimento automatico Vuoi riempire automaticamente o vedere questo elemento? Questo elemento non è una corrispondenza completa per \"%1$s\". Sei sicuro di voler riempire automaticamente questo elemento? @@ -271,7 +272,7 @@ La scansione è automatica. Inserisci l\'URL principale dell\'installazione Bitwarden self-hosted. URL del server URL della cassaforte web - Tocca qui per visualizzare gli elementi della cassaforte + Clicca qui per visualizzare gli elementi della tua cassaforte. Campi personalizzati Copia il numero Copia il CVC @@ -332,7 +333,7 @@ La scansione è automatica. Nessun elemento in questa cartella Nessun elemento nel cestino Servizio di accessibilità di riempimento automatico - Assistere con il riempimento dei campi nome utente e password in altre applicazioni e sul web. + Assiste con il riempimento dei campi nome utente e password in altre applicazioni e nei siti web. Il servizio di riempimento automatico di Bitwarden usa la struttura di riempimento automatico di Android per aiutare a inserire le tue credenziali su altre app nel tuo dispositivo. Usa il servizio di riempimento automatico di Bitwarden per riempire le informazioni su login, carte di credito e identità su altre app. Apri impostazioni di riempimento automatico @@ -382,7 +383,7 @@ La scansione è automatica. 4. Attiva il riempimento automatico 5. Seleziona \"Bitwarden\" Riempimento automatico password - Puoi aggiungere facilmente nuovi login alla cassaforte con l\'estensione per browser di Bitwarden. Scopri di più su come usare il riempimento automatico nelle impostazioni dell\'applicazione. + Il modo più semplice per aggiungere nuovi login alla tua cassaforte è usare l\'estensione di riempimento automatico di Bitwarden. Scopri di più su come usare l\'estensione di riempimento automatico di Bitwarden nelle impostazioni. Inserisci un indirizzo email valido Carte Identità @@ -480,8 +481,8 @@ La scansione è automatica. Bitwarden richiede la tua attenzione - Vedi \"Servizio di accessibilità di riempimento automatico\" dalle impostazioni di Bitwarden 3. Nelle Impostazioni di Android per Bitwarden, vai alle opzioni \"Mostra sopra altre app\" (sotto \"Avanzate\") e abilita il supporto della sovrapposizione. Permessi - Apri le impostazioni di permesso alla sovrapposizione - 3. Nelle Impostazioni di Android per Bitwarden, seleziona \"Mostra sopra altre app\" (sotto \"Avanzate\") e abilitalo per consentire la sovrapposizione. + Apri \"Mostra sopra altre app\" in Impostazioni + 3. Nelle Impostazioni di Android per Bitwarden, seleziona \"Mostra sopra altre app\" (sotto \"Avanzate\") e attivalo per consentire la sovrapposizione. Negato Concesso Formato file @@ -546,7 +547,7 @@ La scansione è automatica. Usa il servizio di accessibilità di Bitwarden per riempire automaticamente i tuoi login su siti web e app (anche \"Mostra sopra altre app\" deve essere abilitato). Abilita il servizio di accessibilità di Bitwarden per usare il riquadro di riempimento automatico rapido, e/o mostra un pop-up se \"Mostra sopra altre app\" è abilitato. Necessario per usare il riquadro di riempimento automatico rapido o per migliorare il servizio di riempimento automatico se \"Mostra sopra altre app\" è abilitato. - Required to use the Autofill Quick-Action Tile. + Necessario per usare il riquadro di azione rapida di riempimento automatico. Usa \"Mostra sopra altre app\" Permette al servizio di accessibilità di Bitwarden di mostrare un pop-up quando i campi di login sono selezionati. Se abilitato, il servizio di accessibilità di Bitwarden mostrerà un pop-up per aiutarti a riempire automaticamente i tuoi login quando selezioni dei campi di login. @@ -952,7 +953,7 @@ Vuoi passare a questo account? Ottieni consigli, annunci e opportunità di ricerca da Bitwarden nella tua casella di posta. Disiscriviti in qualsiasi momento. Privacy, al primo posto Salva login, carte e identità nella tua cassaforte sicura. Bitwarden usa la crittografia end-to-end e zero-knowledge per proteggere ciò che è importante. - Imposta lo sblocco con la biometria e il riempimento automatico per accedere istantaneamente agli account. + Imposta lo sblocco biometrico e il riempimento automatico per accedere ai tuoi account senza digitare una sola lettera. Accesso facile e veloce Porta i login a un altro livello Usa il generatore per creare e salvare password forti e uniche per tutti gli account. @@ -974,7 +975,7 @@ Vuoi passare a questo account? Imposta lo sblocco più tardi Sei sicuro di voler impostare lo sblocco dell\'app più tardi? Potrai farlo nelle impostazioni di sicurezza dell\'account. Conferma - Imposta un codice PIN o la biometria per accedere alla cassaforte e riempire automaticamente i login in un istante. + Imposta la biometria o scegli un codice PIN per accedere rapidamente alla tua cassaforte e riempire automaticamente i tuoi login. Non perdere l\'accesso alla cassaforte Il miglior modo per assicurarti di poter sempre accedere all\'account è configurare tutto dall\'inizio. Crea un suggerimento @@ -1002,7 +1003,7 @@ Vuoi passare a questo account? Permetti il sync di Bitwarden Authenticator There was an issue validating the registration token. Attiva il riempimento automatico - Usa riempimento automatico per accedere ai tuoi account con un solo tocco. + Usa il riempimento automatico per accedere ai tuoi account con un solo tocco. Attiva più tardi Attivare il riempimento automatico più tardi? Puoi completare questo passaggio in qualsiasi momento tornando nelle Impostazioni. @@ -1058,4 +1059,17 @@ Vuoi passare a questo account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index f1daeb3a1..debc4c8fd 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -195,6 +195,7 @@ תרגומים פריטים עבור %1$s אין פריטים בכספת שלך עבור %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login כשלוחצים על שדה להזנה ורואים את ההצעה להשלמה אוטומטית של Bitwarden, ניתן ללחוץ על ההצעה בכדי להפעיל את שירות ההשלמה האוטומטית. לחץ על הודעה זו בכדי למלא את הטופס לפי הפרטים השמורים בכספת שלך. @@ -464,7 +465,7 @@ Bitwarden בעזרת פתיחת חלון \"הגדרות\". שחור Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. באתחול האפליקציה @@ -828,8 +829,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -908,9 +909,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1062,4 +1063,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 9d972dfb4..c58f0bc3c 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -195,6 +195,7 @@ 翻訳 %1$s用のアイテム 保管庫に%1$s用のアイテムはありません。 + There are no items in your vault that match “%1$s” ログイン情報を検索するか、新しいログイン情報を追加します 入力欄を選んだときにBitwardenの自動入力のメッセージが見えたら、それをタップすれば自動入力が起動します。 この通知をタップすると保管庫から自動入力します。 @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index c041754fc..8df7b6fa1 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index dc2e34aea..9379b27ad 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -195,6 +195,7 @@ ಅನುವಾದಗಳು %1$sಗಾಗಿ ಐಟಂಗಳು %1$s ಗೆ ನಿಮ್ಮ ವಾಲ್ಟ್‌ನಲ್ಲಿ ಯಾವುದೇ ಐಟಂಗಳಿಲ್ಲ. + There are no items in your vault that match “%1$s” Search for a login or add a new login ನೀವು ಇನ್ಪುಟ್ ಕ್ಷೇತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡಿದಾಗ ಮತ್ತು ಬಿಟ್ವಾರ್ಡೆನ್ ಸ್ವಯಂ-ಭರ್ತಿ ಓವರ್ಲೇ ಅನ್ನು ನೋಡಿದಾಗ, ಸ್ವಯಂ-ಭರ್ತಿ ಸೇವೆಯನ್ನು ಪ್ರಾರಂಭಿಸಲು ನೀವು ಅದನ್ನು ಟ್ಯಾಪ್ ಮಾಡಬಹುದು. ನಿಮ್ಮ ವಾಲ್ಟ್‌ನಿಂದ ಐಟಂ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತುಂಬಲು ಈ ಅಧಿಸೂಚನೆಯನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ. @@ -246,7 +247,7 @@ Scanning will happen automatically. ಕ್ಯಾಮರಾ ಫೋಟೋಗಳು TOTP ಅನ್ನು ನಕಲಿಸಿ - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲು ಪ್ರೀಮಿಯಂ ಸದಸ್ಯತ್ವ ಅಗತ್ಯವಿದೆ. ಲಗತ್ತು ಸೇರಿಸಲಾಗಿದೆ @@ -462,7 +463,7 @@ Scanning will happen automatically. ಕಪ್ಪು Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. ಅಪ್ಲಿಕೇಶನ್ ಮರುಪ್ರಾರಂಭದಲ್ಲಿ @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index a270fc547..6ac153be9 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -195,6 +195,7 @@ 번역 %1$s에 대한 항목 보관함에 %1$s에 대한 항목이 없습니다. + There are no items in your vault that match “%1$s” Search for a login or add a new login 입력 필드를 선택할 때 Bitwarden 자동 입력 오버레이가 보인다면 탭해서 자동 입력 서비스를 실행할 수 있습니다. 보관함에 있는 항목으로 자동 완성을 사용하려면 이 알림을 누르세요. @@ -825,8 +826,8 @@ Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index f57a2aa7e..a1b3ddd0f 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -195,6 +195,7 @@ Vertimai Elementai %1$s Jūsų saugykloje nėra jokių elementų %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Kai pasirenkate įvesties lauką ir matote „Bitwarden“ automatinio pildymo perdangą, galite ją paliesti, kad paleistumėte automatinio pildymo paslaugą. Bakstelėkite šį pranešimą, kad automatiškai užpildytumėte elementą iš saugyklos. @@ -825,8 +826,8 @@ Ar norite pereiti prie šios paskyros? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Ar norite pereiti prie šios paskyros? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Ar norite pereiti prie šios paskyros? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-lv-rLV/strings.xml b/app/src/main/res/values-lv-rLV/strings.xml index 9214cf621..c1dbeec30 100644 --- a/app/src/main/res/values-lv-rLV/strings.xml +++ b/app/src/main/res/values-lv-rLV/strings.xml @@ -195,6 +195,7 @@ Tulkojumi %1$s vienumi Glabātavā nav %1$s vienumu. + Glabātavā nav vienumu, kas atbilst \"%1$s\" Meklēt pieteikšanās vienumu vai pievienot jaunu Kad tiek atlasīts ievades lauks un parādās Bitwarden automātiskās aizpildes lodziņš, jāpiesit tam, lai palaistu automātiskās aizpildes pakalpojumu. Jāpiesit šim paziņojumam, lai automātiski aizpildītu ar vienumu no glabātavas. @@ -1058,5 +1059,18 @@ Vai pārslēgties uz šo kontu? ievietošanas palīdzība Izgūtā datne jāsaglabā kaut kur viegli atrodamā vietā datorā. Izgūtā datne jāsaglabā - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Šis nav atzīts Bitwarden serveris. Var būt nepieciešams vērsties pie nodrošinātāja, lai pārbaudītu, vai atjaunināt savu serveri. + Sinhronizē pieteikšanās vienumus... + SSH atslēgas šifra vienumu veidi + Lejupielādēt pārlūka paplašinājumu + Jādodas uz bitwarden.com/download, lai iekļautu Bitwarden savā iecienītākajā pārlūkā, lai iegūtu nevainojamu pieredzi. + Izmantot tīmekļa lietotni + Piesakies bitwarden.com, lai viegli pārvaldītu savu kontu un atjauninātu iestatījumus! + Automātiski aizpildīt paroles + Iestati automātisko aizpildi visās savās ierīcēs, lai visur pieteiktos ar vienu piesitienu! + Ievietošana veiksmīga. + Pārvaldi savus pieteikšanās vienumus no jebkurienes ar Bitwarden tīmekļa un darbvirsmas rīkiem! + Bitwarden rīki + Sapratu + Netika ievietots neviens pieteikšanās vienums diff --git a/app/src/main/res/values-ml-rIN/strings.xml b/app/src/main/res/values-ml-rIN/strings.xml index 04e4808d3..2d070aa59 100644 --- a/app/src/main/res/values-ml-rIN/strings.xml +++ b/app/src/main/res/values-ml-rIN/strings.xml @@ -195,6 +195,7 @@ വിവർത്തനങ്ങൾ %1$sഎന്നതിനായുള്ള ഇനങ്ങൾ നിങ്ങളുടെ വാൾട്ടിൽ %1$sന് ഇനങ്ങളൊന്നുമില്ല. + There are no items in your vault that match “%1$s” Search for a login or add a new login ഓട്ടോഫിൽ സേവനം പ്രവർത്തനമാക്കാൻ, നിങ്ങൾ ഒരു ഇൻപുട്ട് ഫീൽഡ് തിരഞ്ഞ്ഞെടുത്തതിന് ശേഷം കാണുന്ന Bitwarden ഓട്ടോഫിൽ ഓവർലേയിൽ ടാപ്പുചെയ്യുക. നിങ്ങളുടെ വാൾട്ടിൽ നിന്ന് ഒരു ഇനം ഓട്ടോഫിൽ ചെയ്യാൻ ഈ അറിയിപ്പ് ടാപ്പുചെയ്യുക. @@ -246,7 +247,7 @@ ക്യാമറ ഫോട്ടോകൾ TOTP പകർത്തുക - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically ഈ സവിശേഷത ഉപയോഗിക്കുന്നതിന് പ്രീമിയം അംഗത്വം ആവശ്യമാണ്. അറ്റാച്ചുമെന്റ് ചേർത്തു @@ -462,7 +463,7 @@ കറുപ്പ് Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. അപ്ലിക്കേഷൻ പുനരാരംഭിക്കുമ്പോൾ @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-mr-rIN/strings.xml b/app/src/main/res/values-mr-rIN/strings.xml index a495515c3..0a24ad5b4 100644 --- a/app/src/main/res/values-mr-rIN/strings.xml +++ b/app/src/main/res/values-mr-rIN/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault संग्रह ह्या संग्रहात एकही वस्तू नाही. There are no items in this folder. कचराकुंडी रिकामी आहे. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. कार्ड @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. पहिले अक्षर मोठे करा अंक समविष्ट करा @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-my-rMM/strings.xml b/app/src/main/res/values-my-rMM/strings.xml index c041754fc..8df7b6fa1 100644 --- a/app/src/main/res/values-my-rMM/strings.xml +++ b/app/src/main/res/values-my-rMM/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index d81793950..cb30f13ff 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -195,6 +195,7 @@ Oversettelser Gjenstander for %1$s Det er ingen gjenstander i hvelvet ditt for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Når du velger et inntastingsfelt og ser Bitwardens autofylltjeneste, kan du trykke på den for å starte autofylltjenesten. Trykk på denne beskjeden for å auto-utfylle en gjenstand fra ditt hvelv. @@ -825,8 +826,8 @@ Vil du bytte til denne kontoen? Problemer med å logge inn? Logger inn som %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Vil du bytte til denne kontoen? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Vil du bytte til denne kontoen? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ne-rNP/strings.xml b/app/src/main/res/values-ne-rNP/strings.xml index c041754fc..8df7b6fa1 100644 --- a/app/src/main/res/values-ne-rNP/strings.xml +++ b/app/src/main/res/values-ne-rNP/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 8e2a9df07..4df2132e2 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -195,6 +195,7 @@ Vertalingen Items voor %1$s Er zijn geen items in je kluis voor %1$s. + Er zijn geen items in je kluis die overeenkomen met \"%1$s\" Zoeken naar een login of een login toevoegen Wanneer je een invoerveld selecteert, dan kun je de overlay van Bitwarden aantikken om automatisch aanvullen te starten. Tik deze melding voor het automatisch invullen van een item uit je kluis. @@ -1030,33 +1031,46 @@ Wilt u naar dit account wisselen? Geef je kluis een snelle start Ontgrendelen met biometrische gegevens vereist een sterke biometrische authenticatie en is mogelijk niet compatibel met alle biometrische opties op dit apparaat. Ontgrendelen met biometrische gegevens vereist sterke biometrische authenticatie en is niet compatibel met de biometrische opties die beschikbaar zijn op dit apparaat. - On your computer, log in to your current browser or password manager. - log in to your current browser or password manager. - Export your passwords. This option is usually found in your settings. - Export your passwords. - Select Import data in the web app, then Done to finish syncing. - Select Import data - Step 1 of 3 - Export your saved logins - You’ll delete this file after import is complete. - On your computer, open a new browser tab and go to vault.bitwarden.com - go to vault.bitwarden.com - Log in to the Bitwarden web app. - Step 2 of 3 - Log in to Bitwarden - Step 3 of 3 - Import logins to Bitwarden - In the Bitwarden navigation, find the Tools option and select Import data. - find the Tools - select Import data. - Fill out the form and import your saved password file. - import your saved password file. - then Done - For your security, be sure to delete your saved password file. - delete your saved password file. - Need help? Checkout out import help. - import help - Save the exported file somewhere on your computer you can find easily. - Save the exported file + Op je computer, **log in op je huidige browser of wachtwoordmanager.**. + log in op je huidige browser of wachtwoordmanager. + Exporteer je wachtwoorden. Deze optie vind je meestal in je instellingen. + Je wachtwoord exporteren. + Selecteer Importgegevens in de webapp, dan Klaar om de synchronisatie af te ronden. + Importgegevens selecteren + Stap 1 van 3 + Opgeslagen inloggegevens exporteren + Je verwijdert dit bestand zodra de import is afgerond. + Open op je computer een nieuw browsertabblad en ga naar vault.bitwarden.com + ga naar vault.bitwarden.com + Inloggen op de Bitwarden-webapp. + Stap 2 van 3 + Inloggen op Bitwarden + Stap 3 van 3 + Inloggegevens naar Bitwarden importeren + Zoek in de de Bitwarden-navigatie de optie Hulpmiddelen en selecteer Importgegevens. + vind Hulpmiddelen + en selecteer Importgegevens. + Vul het formulier in en importeer je opgeslagen wachtwoordbestand. + importeer je opgeslagen wachtwoordbestand. + dan Klaar + Voor je eigen veiligheid, verwijder je opgeslagen wachtwoordbestand. + verwijder je opgeslagen wachtwoordbestand. + Hulp nodig? Bekijk importhulp. + importhulp + Sla het geëxporteerde bestand ergens op je computer waar je deze gemakkelijk kunt vinden. + Exportbestand opslaan Dit is geen herkende Bitwarden-server. Je moet mogelijk controleren met je provider of je server bijwerken. + Inloggegevens synchroniseren... + SSH Key Cipher Item Types + Browserextensie downloaden + Ga naar bitwarden.com/download om Bitwarden in je favoriete browser te integreren voor een naadloze werking. + Webapp gebruiken + Inloggen op bitwarden.com om je account en instellingen te beheren. + Wachtwoorden automatisch invullen + Stel automatisch invullen in op al je apparaten zodat je overal met enkele tik kunt inloggen. + Importeren gelukt! + Beheer je logins waar je ook bent met Bitwarden-hulpmiddelen voor web en desktop. + Bitwarden-hulpmiddelen + Ik snap het + Er zijn geen logins geïmporteerd diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 87fa425bd..05d3c947b 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -195,6 +195,7 @@ Omsetjingar Oppføringar for %1$s Det er ingen oppføringar i kvelvet ditt for %1$s + There are no items in your vault that match “%1$s” Search for a login or add a new login Når du vel eit innskrivingsområde og ser sjølvutfyllingsoverlegget til Bitwarden, kan du trykkja på det for å byrja sjølvutfyllingstenesta. Trykk på denne meldinga for å ubede fylla ut ei oppføring i kvelvet ditt. @@ -206,7 +207,7 @@ Av Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. Fyll ut ubede Vil du fylla ut ubede eller sjå på oppføringa? Er du trygg på at du vil fylla ut denne oppføringa ubede? Det samsvarar ikkje heilt med \"%1$s\". @@ -246,7 +247,7 @@ Skanning skjer automatisk. Kamera Bilete Skriv av TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Kopier TOTP-en automatisk Ei Premium-tinging er påkravd for å bruka denne funksjonen. Vedlegg lagd til @@ -331,10 +332,10 @@ Skanning skjer automatisk. Det er ingen oppføringar i denne samlinga. Det er ingen oppføringar i denne mappa. Det er ingen oppføringar i papirkorga. - Auto-fill Accessibility Service + Autofill Accessibility Service Hjelp med å fylle ut brukarnamn og passordfelt i andre appar og på nettet. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Bruk Face ID for å stadfeste. @@ -362,12 +363,12 @@ Skanning skjer automatisk. URI match detection Match detection Ja, og lagra - Auto-fill and save + Autofill and save Samskipnad Hold your Yubikey near the top of the device. Prøv igjen To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Passordet er oppdatert Retta Autoutfylling aktivert! @@ -449,7 +450,7 @@ Skanning skjer automatisk. Tøm utklippstavla Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Tema Brigda fargetemaet på appen Standard (System) @@ -462,11 +463,11 @@ Skanning skjer automatisk. Svart Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Spør om å leggje til innlogging Ask to add an item if one isn\'t found in your vault. Ved oppstart av app å nyo - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Stor førebokstav Inkluder tal @@ -477,7 +478,7 @@ Skanning skjer automatisk. Biometrisk stadfesting Biometri Bruka biometri for å låsa opp - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Løyve Open Overlay Permission Settings @@ -500,7 +501,7 @@ Skanning skjer automatisk. Opna Noko gjekk gale ved lagring av dette vedlegget. Om det framleis går gale, kan du lagra det gjennom nettkvelvet. Vedlegget vart lagra - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. Ingen passordfelt oppdaga Sender til papirkorga... Oppføringa vart sendt til papirkorga. @@ -536,14 +537,14 @@ Skanning skjer automatisk. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Last ned nettlesarutvidinga + Gå til bitwarden.com/download for å integrere Bitwarden i din favorittnettlesar for ei saumlaus oppleving. + Bruk nettappen + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-or-rIN/strings.xml b/app/src/main/res/values-or-rIN/strings.xml index 36e60c742..e8bc4d7dd 100644 --- a/app/src/main/res/values-or-rIN/strings.xml +++ b/app/src/main/res/values-or-rIN/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 13048ed17..493b56ab0 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -195,6 +195,7 @@ Tłumaczenia Elementy dla %1$s Brak elementów dla %1$s w sejfie. Dotknij, aby je dodać. + There are no items in your vault that match “%1$s” Search for a login or add a new login Kiedy wybierzesz pole formularza i zobaczysz usługę autouzupełniania Bitwarden, dotknij ją, aby ją uruchomić. Dotknij to powiadomienie, aby automatycznie uzupełnić dane z sejfu. @@ -1059,4 +1060,17 @@ Czy chcesz przełączyć się na to konto? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f8207e9f5..521bd17bb 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -195,6 +195,7 @@ Traduções Itens para %1$s Não existem itens no seu cofre para %1$s. + There are no items in your vault that match “%1$s” Pesquise por um login ou adicione um novo login Quando você selecionar um campo de entrada e ver uma sobreposição de autopreenchimento no Bitwarden, você pode tocar nele para iniciar o serviço de autopreenchimento. Toque nesta notificação para autopreencher um item a partir do seu cofre. @@ -1033,7 +1034,7 @@ Você deseja mudar para esta conta? On your computer, log in to your current browser or password manager. log in to your current browser or password manager. Export your passwords. This option is usually found in your settings. - Export your passwords. + Exporte suas senhas. Select Import data in the web app, then Done to finish syncing. Select Import data Etapa 1 de 3 @@ -1059,4 +1060,17 @@ Você deseja mudar para esta conta? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index c90c57652..eee168eb9 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -195,6 +195,7 @@ Traduções Itens para %1$s Não existem itens no seu cofre para %1$s. + Não existem itens no seu cofre que correspondam a \"%1$s\" Procure uma credencial ou adicione uma nova Quando seleciona um campo de entrada e vê uma sobreposição de preenchimento automático do Bitwarden, pode tocar nela para iniciar o serviço de preenchimento automático. Toque nesta notificação para preencher automaticamente um item do seu cofre. @@ -1059,4 +1060,17 @@ Anule a subscrição em qualquer altura. Guarde o ficheiro exportado num local do seu computador que possa encontrar facilmente. Guarde o ficheiro exportado Este não é um servidor Bitwarden reconhecido. Poderá ter de verificar com o seu fornecedor ou atualizar o seu servidor. + A sincronizar credenciais... + Tipos de itens de cifra de chave SSH + Descarregue a extensão do navegador + Vá a bitwarden.com/download para integrar o Bitwarden no seu navegador favorito para uma experiência perfeita. + Utilize a aplicação Web + Inicie sessão em bitwarden.com para gerir facilmente a sua conta e atualizar as definições. + Preenchimento automático de palavras-passe + Configure o preenchimento automático em todos os seus dispositivos para iniciar sessão com um simples toque em qualquer lugar. + Importação bem-sucedida! + Gira as suas credenciais a partir de qualquer lugar com as ferramentas do Bitwarden para a Web e computador. + Ferramentas do Bitwarden + Percebido + Não foram importadas credenciais diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 4cf82423a..bde2629ba 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -195,6 +195,7 @@ Traduceri Autentificări pentru %1$s Nu sunt autentificări pentru %1$s în seiful dvs. + There are no items in your vault that match “%1$s” Caută o autentificare sau adaugă o nouă autentificare Când selectați un câmp de intrare și vedeți o propunere de auto-completare, atingeți-l ca să lansați serviciu de auto-completare. Atingeți această notificare pentru a auto-completa o autentificare din seiful dvs. @@ -825,8 +826,8 @@ Doriți să comutați la acest cont? Trouble logging in? Autentificare ca %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -1059,4 +1060,17 @@ Doriți să comutați la acest cont? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 2ebb0cf60..639039fd1 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -195,6 +195,7 @@ Локализации Элементы для %1$s В вашем хранилище нет элементов для %1$s. + В вашем хранилище нет элементов, совпадающих с \"%1$s\" Поиск или добавление нового логина Если при выборе поля ввода вы видите панель автозаполнения Bitwarden, вы можете нажать на нее, чтобы запустить службу автозаполнения. Коснитесь этого уведомления для автоматического заполнения. @@ -1061,4 +1062,17 @@ Сохраните экспортированный файл на компьютере, где его можно будет легко найти. Сохранить экспортированный файл Этот сервер Bitwarden не распознан. Возможно вам следует связаться с провайдером или изменить свой сервер. + Синхронизация логинов... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index 7fd582d6e..c94b50eb0 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ පරිවර්තන Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On තත්වය - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. ස්වයං-පිරවීම - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items සොයන්න - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 35030b2c0..453b44720 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -195,6 +195,7 @@ Preklady Položky pre %1$s V trezore sa nenachádzajú žiadne položky pre %1$s. + Vo vašom trezore nie sú žiadne položky, ktoré zodpovedajú \"%1$s\" Vyhľadať alebo pridať nové prihlasovacie údaje Keď aktivujute vstupné pole a uvidíte tlačidlo pre automatické vyplnenie cez Bitwarden, môžete ho stlačiť a spustiť službu automatického vypĺňania. Ťuknite na túto notifikáciu pre automatické vyplnenie prihlasovacích údajov z vášho trezora. @@ -1059,4 +1060,17 @@ Chcete prepnúť na tento účet? Uložte exportovaný súbor na miesto v počítači, ktoré ľahko nájdete. Uložte exportovaný súbor Toto nie je známy Bitwarden server. Možno bude potrebné overiť si to u svojho poskytovateľa alebo aktualizovať server. + Synchronizácia prihlásení... + Typy šifrovania pre SSH kľúče + Stiahnuť rozšírenie pre prehliadač + Pre pohodlné použivanie prejdite na stránku bitwarden.com/download a integrujte Bitwarden do svojho obľúbeného prehliadača. + Použiť webovú aplikáciu + Pre jednoduchú správu vášho účtu a aktualizáciu nastavení sa prihláste na bitwarden.com. + Automatické vypĺňanie hesiel + Nastavte si automatické vypĺňanie na všetkých svojich zariadeniach a prihláste sa jediným ťuknutím kdekoľvek. + Import bol úspešný! + Spravujte svoje prihlasovacie údaje kdekoľvek s nástrojmi Bitwardenu pre web a desktop. + Nástroje Bitwardenu + Chápem + Neboli importované žiadne prihlasovacie údaje diff --git a/app/src/main/res/values-sl-rSI/strings.xml b/app/src/main/res/values-sl-rSI/strings.xml index 0cf5a2bcd..41060c01b 100644 --- a/app/src/main/res/values-sl-rSI/strings.xml +++ b/app/src/main/res/values-sl-rSI/strings.xml @@ -195,6 +195,7 @@ Prevodi Elementi za %1$s V vašem trezorju ni elementov za %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login Ko izberete vnosno polje in vidite prekrivni element samodejnega izpolnjevanja Bitwarden, pritisnite nanj, da zaženete storitev samodejnega izpolnjevanja. Pritisnite na to obvestilo, da samodejno izpolnite element iz svojega trezorja. @@ -206,7 +207,7 @@ Ne Da Stanje - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. Samodejno izpolnjevanje Želite samodejno izpolniti ali prikazati ta element? Ali ste prepričani, da želite samodejno izpolniti ta element? Ujemanje ni popolno za \"%1$s\". @@ -246,7 +247,7 @@ Scanning will happen automatically. Fotoaparat Fotografije Kopiraj TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Samodejno kopiraj TOTP Premium članstvo je potrebno za uporabo te funkcije. Priloga dodana @@ -333,8 +334,8 @@ Scanning will happen automatically. Koš je prazen. Storitev za samodejno izpolnjevanje Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Nastavitve samodejnega izpolnjevanja obraznim ID Uporabi obrazni ID za preverjanje @@ -367,7 +368,7 @@ Scanning will happen automatically. Držite vaš Yubikey ob vrhu naprave. Poskusite znova Za nadaljevanje držite YubiKey NEO ob hrbtni strani naprave. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Geslo je bilo posodobljeno Posodobljeno Samodejno izpolnjevanje aktivirano! @@ -375,7 +376,7 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Pojdite v nastavitve iOS aplikacije 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" @@ -466,7 +467,7 @@ Scanning will happen automatically. Ponudi shranjevanje prijav Ponudi, da se shrani nova prijava, če je v trezorju še ni. Ob ponovnem zagonu aplikacije - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Zapiši z veliko začetnico Vključi številko @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometrična avtentikacija biometričnim preverjanjem Uporabi biometrično preverjanje za odklep - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Dovoljenje Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Odpri There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Priloga je bila uspešno shranjena. - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Pošiljanje v koš... Predmet je bil premaknjen v smeti. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Pogoji uporabe Politika zasebnosti - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Storitve samodejnega izpolnjevanja Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 41b5b9d96..fb7f9cc92 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -195,6 +195,7 @@ Преводи Ставке за %1$s У вашем сефу нема ставке за %1$s. + There are no items in your vault that match “%1$s” Потражите лозинку или додајте нову лозинку Када одаберете поље за унос и видите Bitwarden прозор за аутоматско попуњавање, можете да га додирнете да бисте покренули услугу ауто-попуњавања. Додирните ово обавештење да бисте аутоматски попунили ставку из сефа. @@ -1019,45 +1020,58 @@ Ново пријављивање Делите датотеке и податке безбедно са било ким, на било којој платформи. Ваше информације ће остати шифроване од почетка-до-краја уз ограничење изложености. Шаљите осетљиве информације, безбедно - Import saved logins + Увезите сачуване пријаве Use a computer to import logins from an existing password manager - You can return to complete this step anytime in Vault Settings. - Import logins later - Import logins later? - Do you have a computer available? - The following instructions will guide you through importing logins from your desktop or laptop computer - Import Logins - From your computer, follow these instructions to export saved passwords from your browser or other password manager. Then, safely import them to Bitwarden. - Give your vault a head start - Unlock with biometrics requires strong biometric authentication and may not be compatible with all biometric options on this device. - Unlock with biometrics requires strong biometric authentication and is not compatible with the biometrics options available on this device. - On your computer, log in to your current browser or password manager. - log in to your current browser or password manager. - Export your passwords. This option is usually found in your settings. - Export your passwords. - Select Import data in the web app, then Done to finish syncing. - Select Import data - Step 1 of 3 - Export your saved logins - You’ll delete this file after import is complete. - On your computer, open a new browser tab and go to vault.bitwarden.com - go to vault.bitwarden.com - Log in to the Bitwarden web app. - Step 2 of 3 - Log in to Bitwarden - Step 3 of 3 - Import logins to Bitwarden - In the Bitwarden navigation, find the Tools option and select Import data. - find the Tools - select Import data. - Fill out the form and import your saved password file. - import your saved password file. - then Done - For your security, be sure to delete your saved password file. - delete your saved password file. - Need help? Checkout out import help. - import help - Save the exported file somewhere on your computer you can find easily. - Save the exported file - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Можете се вратити да бисте завршили овај корак у било ком тренутку у подешавањима. сефа. + Увезите пријаве касније + Желите ли касније да увезете пријаве? + Да ли имате рачунар на располагању? + Следећа упутства ће вас водити кроз увоз података за пријављивање са вашег десктоп или лаптоп рачунара + Увезите пријаве + Са рачунара пратите ова упутства да бисте извезли сачуване лозинке из прегледача или другог менаџера лозинки. Затим их безбедно увезите у Bitwarden. + Дајте предност свом сефу + Откључавање биометријом захтева снажну биометријску аутентификацију и можда неће бити компатибилно са свим биометријским опцијама на овом уређају. + Откључавање биометријом захтева снажну биометријску аутентификацију и није компатибилно са биометријским опцијама доступним на овом уређају. + На рачунару, пријавите се у свој тренутни прегледач или менаџер лозинки. + пријавите се у свој тренутни прегледач или менаџер лозинки. + Извезите своје лозинке. Ова опција се обично налази у вашим подешавањима. + Извезите своје лозинке. + Изаберите Увези податке у веб апликацији, а затим Готово да бисте завршили синхронизацију. + Изаберите Увези податке + Корак 1 од 3 + Извезите сачуване пријаве + Ову датотеку ћете избрисати након што се увоз заврши. + На рачунару отворите нову картицу прегледача и идите на vault.bitwarden.com + идите на vault.bitwarden.com + Пријавите се на веб-апликацију Bitwarden. + Корак 2 од 3 + Пријавите се на Bitwarden + Корак 3 од 3 + Увезите пријаве у Bitwarden + У Bitwarden навигацији, пронађите опцију Алатке и изаберите Увези податке. + пронађите Алатке + изаберите Увези податке. + Попуните образац и увезите своју сачувану датотеку лозинке. + увезите своју сачувану датотеку лозинке. + и после Заврши + Ради ваше безбедности, обавезно избришите своју сачувану датотеку лозинке. + избришите своју сачувану датотеку лозинке. + Треба вам помоћ? Проверите помоћ за увоз. + помоћ за увоз + Сачувајте извезену датотеку негде на рачунару где можете лако да пронађете. + Сачувајте извезену датотеку + Ово није признати Bitwarden сервер. Можда ћете морати да проверите код свог провајдера или да ажурирате сервер. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 803d284e2..b1d6ae0bd 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -195,6 +195,7 @@ Översättningar Objekt för %1$s Det finns inga objekt i ditt valv för %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login När du väljer ett inmatningsfält och ser en ruta för automatisk ifyllnad från Bitwarden, kan du trycka på den för att starta tjänsten för automatisk ifyllnad. Tryck på den här aviseringen för att automatiskt fylla i en inloggning från ditt valv. @@ -906,9 +907,9 @@ Vill du byta till detta konto? Verifierar identitet... Lösenord Okänt konto - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Gå till din enhets Inställningar > Lösenord > Lösenordsalternativ 2. Slå på AutoFyll 3. Välj att använda \"Bitwarden\" för lösenord och passkeys @@ -1060,4 +1061,17 @@ Vill du byta till detta konto? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-ta-rIN/strings.xml b/app/src/main/res/values-ta-rIN/strings.xml index 2d4057902..35414cf18 100644 --- a/app/src/main/res/values-ta-rIN/strings.xml +++ b/app/src/main/res/values-ta-rIN/strings.xml @@ -195,6 +195,7 @@ மொழிபெயர்ப்புகள் %1$s க்கான உருப்படிகள் உம் பெட்டகத்தில் %1$s க்கான உருப்படிகள் ஏதுமில்லை. + There are no items in your vault that match “%1$s” Search for a login or add a new login நீங்கள் ஓர் உள்ளீடு புலத்தை தேர்ந்து Bitwarden தன்னிரப்பி மேலடுக்கை பார்க்கும்போது, தன்னிரப்பி சேவையை தொடங்க நீங்கள் அதை தட்டலாம். உங்கள் பெட்டகத்திலிருந்து உருப்படியைத் தானாக-நிரப்ப இந்த அறிவிப்பைத் தட்டவும். @@ -905,9 +906,9 @@ Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index c041754fc..8df7b6fa1 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -87,15 +87,15 @@ Your new account has been created! Add an Item App extension - Use the Bitwarden accessibility service to auto-fill your logins across apps and the web. - Auto-fill service + Use the Bitwarden accessibility service to autofill your logins across apps and the web. + Autofill service Set Bitwarden as your passkey provider in device settings. Avoid ambiguous characters Bitwarden app extension The easiest way to add new logins to your vault is from the Bitwarden app extension. Learn more about using the Bitwarden app extension by navigating to the \"Settings\" screen. - Use Bitwarden in Safari and other apps to auto-fill your logins. - Bitwarden Auto-fill Service - Use the Bitwarden accessibility service to auto-fill your logins. + Use Bitwarden in Safari and other apps to autofill your logins. + Bitwarden Autofill Service + Use the Bitwarden accessibility service to autofill your logins. Change email You can change your email address on the bitwarden.com web vault. Do you want to visit the website now? Change master password @@ -195,9 +195,10 @@ Translations Items for %1$s There are no items in your vault for %1$s. + There are no items in your vault that match “%1$s” Search for a login or add a new login - When you select an input field and see a Bitwarden auto-fill overlay, you can tap it to launch the auto-fill service. - Tap this notification to auto-fill an item from your vault. + When you select an input field and see a Bitwarden autofill overlay, you can tap it to launch the autofill service. + Tap this notification to autofill an item from your vault. Open Accessibility Settings 1. On the Android Accessibility Settings screen, touch \"Bitwarden\" under the Services heading. 2. Switch on the toggle and press OK to accept. @@ -206,14 +207,14 @@ Off On Status - The easiest way to add new logins to your vault is from the Bitwarden Auto-fill Service. Learn more about using the Bitwarden Auto-fill Service by navigating to the \"Settings\" screen. - Auto-fill - Do you want to auto-fill or view this item? - Are you sure you want to auto-fill this item? It is not a complete match for \"%1$s\". + The easiest way to add new logins to your vault is from the Bitwarden Autofill Service. Learn more about using the Bitwarden Autofill Service by navigating to the \"Settings\" screen. + Autofill + Do you want to autofill or view this item? + Are you sure you want to autofill this item? It is not a complete match for \"%1$s\". Matching items Possible matching items Search - You are searching for an auto-fill item for \"%1$s\". + You are searching for an autofill item for \"%1$s\". Learn about organizations Cannot open the app \"%1$s\". Authenticator app @@ -246,7 +247,7 @@ Scanning will happen automatically. Camera Photos Copy TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically A premium membership is required to use this feature. Attachment added @@ -324,17 +325,17 @@ Scanning will happen automatically. Show website icons Show a recognizable image next to each login. Icons server URL - Auto-fill with Bitwarden + Autofill with Bitwarden Vault is locked Go to my vault Collections There are no items in this collection. There are no items in this folder. There are no items in the trash. - Auto-fill Accessibility Service + Autofill Accessibility Service Assist with filling username and password fields in other apps and on the web. - The Bitwarden auto-fill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. - Use the Bitwarden auto-fill service to fill login information into other apps. + The Bitwarden autofill service uses the Android Autofill Framework to assist in filling login information into other apps on your device. + Use the Bitwarden autofill service to fill login information into other apps. Open Autofill Settings Face ID Use Face ID to verify. @@ -362,12 +363,12 @@ Scanning will happen automatically. URI match detection Match detection Yes, and save - Auto-fill and save + Autofill and save Organization Hold your Yubikey near the top of the device. Try again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. Password updated Updated AutoFill activated! @@ -375,13 +376,13 @@ Scanning will happen automatically. Your logins are now easily accessible right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" 4. Turn on AutoFill 5. Select \"Bitwarden\" - Password auto-fill + Password autofill The easiest way to add new logins to your vault is by using the Bitwarden Password AutoFill extension. Learn more about using the Bitwarden Password AutoFill extension by navigating to the \"Settings\" screen. Invalid email address. Cards @@ -449,7 +450,7 @@ Scanning will happen automatically. Clear clipboard Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. Theme Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. Black Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification Biometrics Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. Permission Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. Open There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. Terms of Service Privacy Policy - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management Autofill services Use inline autofill Use inline autofill if your selected IME (keyboard) supports it. If your configuration is not supported (or this option is turned off), the default Autofill overlay will be used. Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. Use draw-over Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index dc609c281..5ab26038e 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -195,6 +195,7 @@ การแปลภาษา รายการสำหรับ %1$s ไม่มีรายการ %1$s ในห้องนิรภัยของคุณ + There are no items in your vault that match “%1$s” Search for a login or add a new login เมื่อคุณเลือกช่องป้อนข้อมูล และเห็นเมนูซ้อนทับป้อนอัตโนมัติของ Bitwarden คุณสามารถแตะเพื่อเปิดบริการป้อนอัตโนมัติได้ Tap this notification to auto-fill a login from your vault. @@ -246,7 +247,7 @@ Scanning will happen automatically. กล้องถ่ายรูป รูปภาพ คัดลอก TOTP - If a login has an authenticator key, copy the TOTP verification code to your clipboard when you auto-fill the login. + If a login has an authenticator key, copy the TOTP verification code to your clipboard when you autofill the login. Copy TOTP automatically จำเป็นต้องมีสมาชิกระดับพรีเมียมเพื่อใช้คุณลักษณะนี้ เพิ่มสิ่งที่แนบมา @@ -367,7 +368,7 @@ Scanning will happen automatically. ถือ Yubikey ไว้ใกล้ ๆ ด้านบนอุปกรณ์ของคุณ Try Again To continue, hold your YubiKey NEO against the back of the device. - The accessibility service may be helpful to use when apps do not support the standard auto-fill service. + The accessibility service may be helpful to use when apps do not support the standard autofill service. ปรับปรุงรหัสผ่านแล้ว ปรับปรุง กรอกข้อมูลอัตโนมัติเปิดใช้งานแล้ว! @@ -375,7 +376,7 @@ Scanning will happen automatically. Your logins are now easily accessable right from your keyboard while logging into apps and websites. We recommend disabling any other AutoFill apps under Settings if you do not plan to use them. Access your vault directly from your keyboard to quickly autofill passwords. - To set up password auto-fill on your device, follow these instructions: + To set up password autofill on your device, follow these instructions: 1. Go to the iOS \"Settings\" app 2. Tap \"Passwords\" 3. Tap \"AutoFill Passwords\" @@ -449,7 +450,7 @@ Scanning will happen automatically. ล้างคลิปบอร์ด Automatically clear copied values from your clipboard. Default URI match detection - Choose the default way that URI match detection is handled for logins when performing actions such as auto-fill. + Choose the default way that URI match detection is handled for logins when performing actions such as autofill. ธีม Change the application\'s color theme. Default (System) @@ -462,11 +463,11 @@ Scanning will happen automatically. ดำ Nord Solarized Dark - Auto-fill blocked URIs + Autofill blocked URIs Ask to add login Ask to add an item if one isn\'t found in your vault. On app restart - Auto-fill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an auto-fill service for Bitwarden. Set up auto-fill for Bitwarden from the \"Settings\" screen. + Autofill makes it easy to securely access your Bitwarden vault from other websites and apps. It looks like you have not set up an autofill service for Bitwarden. Set up autofill for Bitwarden from the \"Settings\" screen. Your theme changes will apply when the app is restarted. Capitalize Include number @@ -477,7 +478,7 @@ Scanning will happen automatically. Biometric verification ไบโอเมทริกซ์ Use biometrics to unlock - Bitwarden needs attention - See \"Auto-fill Accessibility Service\" from Bitwarden settings + Bitwarden needs attention - See \"Autofill Accessibility Service\" from Bitwarden settings 3. On the Android App Settings screen for Bitwarden, go to the \"Display over other apps\" options (under Advanced) and tap the toggle to allow overlay support. สิทธิ์การใช้งาน Open Overlay Permission Settings @@ -500,7 +501,7 @@ Scanning will happen automatically. เปิด There was a problem saving this attachment. If the problem persists, you can save it from the web vault. Attachment saved successfully - Please turn on \"Auto-fill Accessibility Service\" from Bitwarden Settings to use the Auto-fill tile. + Please turn on \"Autofill Accessibility Service\" from Bitwarden Settings to use the Autofill tile. No password fields detected Sending to trash... Item has been sent to trash. @@ -536,20 +537,20 @@ Scanning will happen automatically. Terms of Service and Privacy Policy have not been acknowledged. เงื่อนไขการใช้บริการ นโยบายความเป็นส่วนตัว - Bitwarden needs attention - Turn on \"Draw-Over\" in \"Auto-fill Services\" from Bitwarden Settings + Bitwarden needs attention - Turn on \"Draw-Over\" in \"Autofill Services\" from Bitwarden Settings Passkey management บริการกรอกข้อมูลอัตโนมัติ ใช้งานกรอกข้อมูลอัตโนมัติแบบอินไลน์ ใช้การกรอกข้อมูลอัตโนมัติแบบอินไลน์หาก IME (แป้นพิมพ์) ที่คุณเลือกรองรับ หากไม่รองรับการกำหนดค่าของคุณ (หรือปิดใช้ตัวเลือกนี้) ระบบจะใช้การวางซ้อนการป้อนอัตโนมัติเริ่มต้น Use accessibility - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. - Use the Bitwarden Accessibility Service to auto-fill your logins across apps and the web. (Requires Draw-Over to be turned on as well) + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. When set up, we\'ll display a popup when login fields are selected. + Use the Bitwarden Accessibility Service to autofill your logins across apps and the web. (Requires Draw-Over to be turned on as well) Use the Bitwarden Accessibility Service to use the Autofill Quick-Action Tile, and/or show a popup using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile, or to augment the Autofill Service by using Draw-Over (if turned on). Required to use the Autofill Quick-Action Tile. ใช้งานการวางซ้อนการ Allows the Bitwarden Accessibility Service to display a popup when login fields are selected. - If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with auto-filling your logins. + If turned on, the Bitwarden Accessibility Service will display a popup when login fields are selected to assist with autofilling your logins. If turned on, accessibility will show a popup to augment the Autofill Service for older apps that don\'t support the Android Autofill Framework. Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections. An organization policy is affecting your ownership options. @@ -825,8 +826,8 @@ Do you want to switch to this account? Trouble logging in? Logging in as %1$s Vault timeout action changed to log out - Block auto-fill - Auto-fill will not be offered for these URIs. + Block autofill + Autofill will not be offered for these URIs. New blocked URI URI saved Invalid format. Use https://, http://, or androidapp:// @@ -905,9 +906,9 @@ Do you want to switch to this account? Verifying identity... Passwords Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. Turn on AutoFill 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Do you want to switch to this account? Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 395589251..981406d4e 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -195,6 +195,7 @@ Çeviriler %1$s kayıtları Kasanızda hiç %1$s kaydı bulunmuyor. + Kasanızda “%1$s” ile eşleşen kayıt yok Hesap ara veya yeni hesap ekle Bir giriş alanını seçip Bitwarden otomatik doldurma kutusunu gördüğünüzde otomatik doldurmayı başlatmak için kutuya dokunabilirsiniz. Formu kasanızdaki bilgilerle otomatik doldurmak için bu bildirime dokunun. @@ -331,7 +332,7 @@ Kod otomatik olarak taranacaktır. Bu koleksiyonda hiç kayıt yok. Bu klasörde hiç kayıt yok. Çöp kutusunda hiç kayıt yok. - Otomatik doldur erişilebilirlik hizmeti + Otomatik Doldurma Erişilebilirlik Hizmeti Diğer uygulamalarda ve web\'de kullanıcı adlarını ve parolaları doldurmaya yardımcı ol. Bitwarden otomatik doldurma hizmeti, cihazınızdaki diğer uygulamalarda hesap bilgilerini doldurmak için Android Otomatik Doldurma Sistemi\'ni kullanır. Diğer uygulamalarda hesap bilgilerinizi doldurmak için Bitwarden otomatik doldurma hizmetini kullanabilirsiniz. @@ -353,7 +354,7 @@ Kod otomatik olarak taranacaktır. Kaldır Yeni URI URI %1$s - Taban alan adı + Ana alan adı Varsayılan Tam Sunucu @@ -426,7 +427,7 @@ Kod otomatik olarak taranacaktır. Üreteç Listelenecek klasör yok. Parmak izi ifadesi - Hesabınızın parmak izi kelimeleri + Hesabınızın parmak izi ifadesi Bitwarden, kuruluş hesabı kullanarak kasanızdaki kayıtları başkalarıyla paylaşmanıza olanak verir. Daha fazla bilgi için bitwarden.com sitesini ziyaret etmek ister misiniz? Kasayı dışa aktar Şimdi kilitle @@ -516,8 +517,8 @@ Kod otomatik olarak taranacaktır. Otomatik doldurma biyometrik kilit açma devre dışı. Ana parolanın doğrulanması bekleniyor. Yenileme sırasında eşitlemeye izin ver Parmağımla aşağı çektiğimde kasayı eşitle. - Kurumsal tek oturum açma - Kuruluşunuzun tek oturum açma portalını kullanarak hızlıca giriş yapabilirsiniz. Başlamak için lütfen kuruluşunuzun tanımlayıcısını girin. + Kurumsal çoklu oturum açma + Kuruluşunuzun çoklu oturum açma portalını kullanarak hızlıca giriş yapabilirsiniz. Başlamak için lütfen kuruluşunuzun tanımlayıcısını girin. Kuruluş tanımlayıcı Şu anda SSO ile giriş yapılamıyor Ana parolayı belirle @@ -1058,4 +1059,17 @@ Bu hesaba geçmek ister misiniz? Save the exported file somewhere on your computer you can find easily. Save the exported file Bu Bitwarden sunucusu tanınmıyor. Servis sağlayıcınızdan bilgi alın veya sunucunuzu güncelleyin. + Hesaplar eşitleniyor... + SSH Key Cipher Item Types + Tarayıcı uzantısını indirin + Daha rahat kullanım için Bitwarden\'ı en sevdiğiniz tarayıcınıza entegre etmek isterseniz bitwarden.com/download adresine gidin. + Web uygulamasını kullanın + Hesabınızı kolayca yönetmek ve ayarlarınızı güncellemek isterseniz bitwarden.com adresine giriş yapın. + Parolaları otomatik doldurun + Her yere tek dokunuşla giriş yapmak için tüm cihazlarınızda otomatik doldurmayı etkinleştirin. + İçe aktarma başarılı! + Hesaplarınızı Bitwarden web ve masaüstü araçlarıyla her yerden yönetebilirsiniz. + Bitwarden Araçları + Anladım + Hiç hesap aktarılmadı diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 35e7ce342..3ff61b3c5 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -87,7 +87,7 @@ Ваш обліковий запис створено! Додати запис Розширення програми - Використовуйте службу спеціальних можливостей Bitwarden, щоб автоматично вводити паролі в програмах та на вебсайтах. + Використовуйте службу доступності Bitwarden, щоб автоматично заповнювати паролі в програмах і на вебсайтах. Служба автозаповнення Зробіть Bitwarden своїм провайдером ключів доступу в налаштуваннях пристрою. Уникати неоднозначних символів @@ -95,7 +95,7 @@ Найлегшим способом додавання нових записів у сховище є використання розширення Bitwarden. Дізнайтеся більше про використання розширення Bitwarden в меню \"Налаштування\". Використовуйте Bitwarden у Safari та інших програмах для автоматичного заповнення паролів. Служба автозаповнення Bitwarden - Використовуйте службу спеціальних можливостей Bitwarden, щоб автоматично вводити паролі. + Використовуйте службу доступності Bitwarden, щоб автоматично заповнювати паролі. Змінити е-пошту Ви можете змінити адресу е-пошти в сховищі на bitwarden.com. Хочете перейти на вебсайт зараз? Змінити головний пароль @@ -195,6 +195,7 @@ Переклади Записи для %1$s У вашому сховищі немає записів для %1$s. + У вашому сховищі немає записів, які відповідають “%1$s” Пошукати запис або додати новий Вибравши поле введення, ви побачите накладання автозаповнення Bitwarden, до якого ви можете торкнутися, щоб запустити службу автозаповнення. Торкніться цього сповіщення, щоб автоматично заповнити дані. @@ -1028,8 +1029,8 @@ Імпорт записів Дотримуйтеся цих інструкцій на своєму комп\'ютері, щоб експортувати збережені паролі з браузера чи іншого менеджера паролів. Потім безпечно імпортуйте їх у Bitwarden. Розпочніть роботу зі своїм сховищем - Unlock with biometrics requires strong biometric authentication and may not be compatible with all biometric options on this device. - Unlock with biometrics requires strong biometric authentication and is not compatible with the biometrics options available on this device. + Для розблокування з біометрією потрібна надійна біометрична автентифікація, яка може бути несумісною з усіма біометричними функціями на цьому пристрої. + Для розблокування з біометрією потрібна надійна біометрична автентифікація, яка несумісна з біометричними функціями на цьому пристрої. На вашому комп\'ютері відкрийте свій браузер або менеджер паролів. відкрийте свій браузер або менеджер паролів. Експортуйте свої паролі. Цю функцію зазвичай можна знайти в налаштуваннях. @@ -1056,7 +1057,20 @@ видаліть збережений файл із паролями. Потрібна допомога? Перегляньте довідку щодо імпорту. довідка щодо імпорту - Save the exported file somewhere on your computer you can find easily. - Save the exported file - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Збережіть експортований файл у легкодоступному місці на цьому комп\'ютері. + Збережіть експортований файл + Це не розпізнаний сервер Bitwarden. Можливо, вам необхідно перевірити параметри свого провайдера або оновити свій сервер. + Синхронізація записів... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 8c70ca66c..b66ad1bc6 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -195,6 +195,7 @@ Bản dịch Mục cho %1$s Không có mục nào trong kho của bạn thích hợp với %1$s. + Không có mục nào trong kho của bạn khớp với “%1$s” Tìm mật khẩu đăng nhập hoặc thêm mới Khi bạn chọn một ô nhập liệu và thấy thông báo điền tự động của Bitwarden, hãy nhấn vào nó để bắt đầu dịch vụ điền tự động. Chạm vào thông báo này để tự động điền thông tin đăng nhập từ kho của bạn. @@ -1058,5 +1059,18 @@ Bạn có muốn chuyển sang tài khoản này không? trợ giúp nhập Lưu file đã xuất trên máy tính để tìm dễ hơn. Lưu file đã xuất - This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Đây là một máy chủ Bitwarden chưa rõ. Bạn có thể cần kiểm tra với nhà cung cấp hoặc cập nhật máy chủ của mình. + Đang đồng bộ... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6598a2707..4e8d5b9d3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -195,6 +195,7 @@ 翻译 %1$s 的项目 您的密码库中没有可用于 %1$s 的项目。 + 您的密码库中没有匹配 \"%1$s\" 的项目 搜索登录或添加新的登录 当您选择一个输入字段并看到一个 Bitwarden 自动填充叠加层时,您可以点击它来启动自动填充服务。 点击此通知以自动填充密码库中的项目。 @@ -1059,4 +1060,17 @@ 将导出的文件保存到您可以在计算机上轻松找到的地方。 保存导出的文件 This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + 正在同步登录信息... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 982fc100e..a091e0b43 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -195,6 +195,7 @@ 譯者 %1$s 的項目 您的密碼庫中沒有用於 %1$s 的項目。 + There are no items in your vault that match “%1$s” Search for a login or add a new login 當您選擇輸入欄位,看到 Bitwarden 的自動填入疊加層時,可以點選該提示以啟動自動填入服務。 按此通知以自動填入存在密碼庫的登入資料。 @@ -905,9 +906,9 @@ Verifying identity... 密碼 Unknown account - Set up auto-fill + Set up autofill Get instant access to your passwords and passkeys! - To set up password auto-fill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. + To set up password autofill and passkey management, set Bitwarden as your preferred provider in the iOS Settings. 1. Go to your device\'s Settings > Passwords > Password Options 2. 啟用自動填寫 3. Select \"Bitwarden\" to use for passwords and passkeys @@ -1059,4 +1060,17 @@ Save the exported file somewhere on your computer you can find easily. Save the exported file This is not a recognized Bitwarden server. You may need to check with your provider or update your server. + Syncing logins... + SSH Key Cipher Item Types + Download the browser extension + Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience. + Use the web app + Log in at bitwarden.com to easily manage your account and update settings. + Autofill passwords + Set up autofill on all your devices to login with a single tap anywhere. + Import Successful! + Manage your logins from anywhere with Bitwarden tools for web and desktop. + Bitwarden Tools + Got it + No logins were imported From 0960f61c376ab0c2cb6ff9e3072cab40840d5931 Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 25 Oct 2024 14:50:43 -0500 Subject: [PATCH 07/14] Simplify usages of turbineScope (#4167) --- .../vault/repository/VaultRepositoryTest.kt | 29 +++------ .../CompleteRegistrationViewModelTest.kt | 5 +- .../CreateAccountViewModelTest.kt | 5 +- .../EnterpriseSignOnViewModelTest.kt | 11 +--- .../StartRegistrationViewModelTest.kt | 5 +- .../addedit/VaultAddEditViewModelTest.kt | 65 +++++++------------ .../importlogins/ImportLoginsViewModelTest.kt | 5 +- .../feature/item/VaultItemViewModelTest.kt | 5 +- 8 files changed, 40 insertions(+), 90 deletions(-) diff --git a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt index d7678350f..159ed4dd2 100644 --- a/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryTest.kt @@ -4309,18 +4309,11 @@ class VaultRepositoryTest { ) } returns Throwable().asFailure() - turbineScope { - val expected = DecryptFido2CredentialAutofillViewResult.Error - val result = vaultRepository - .getDecryptedFido2CredentialAutofillViews( - cipherViewList = cipherViewList, - ) + val result = vaultRepository.getDecryptedFido2CredentialAutofillViews( + cipherViewList = cipherViewList, + ) - assertEquals( - expected, - result, - ) - } + assertEquals(DecryptFido2CredentialAutofillViewResult.Error, result) coVerify { vaultSdkSource.decryptFido2CredentialAutofillViews( userId = MOCK_USER_STATE.activeUserId, @@ -4346,17 +4339,11 @@ class VaultRepositoryTest { ) } returns autofillViewList.asSuccess() - turbineScope { - val result = vaultRepository - .getDecryptedFido2CredentialAutofillViews( - cipherViewList = cipherViewList, - ) + val result = vaultRepository.getDecryptedFido2CredentialAutofillViews( + cipherViewList = cipherViewList, + ) - assertEquals( - expected, - result, - ) - } + assertEquals(expected, result) coVerify { vaultSdkSource.decryptFido2CredentialAutofillViews( userId = MOCK_USER_STATE.activeUserId, diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationViewModelTest.kt index 82748359c..4d2d75b9c 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/completeregistration/CompleteRegistrationViewModelTest.kt @@ -2,7 +2,6 @@ package com.x8bit.bitwarden.ui.auth.feature.completeregistration import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_0 import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_1 @@ -154,9 +153,7 @@ class CompleteRegistrationViewModelTest : BaseViewModelTest() { ) } returns RegisterResult.Success(captchaToken = CAPTCHA_BYPASS_TOKEN) val viewModel = createCompleteRegistrationViewModel(VALID_INPUT_STATE) - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> assertEquals(VALID_INPUT_STATE, stateFlow.awaitItem()) viewModel.trySendAction(CompleteRegistrationAction.CallToActionClick) assertEquals( diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountViewModelTest.kt index 0801b442e..39a69be61 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountViewModelTest.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.ui.auth.feature.createaccount import android.net.Uri import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_0 import com.x8bit.bitwarden.data.auth.datasource.sdk.model.PasswordStrength.LEVEL_1 @@ -243,9 +242,7 @@ class CreateAccountViewModelTest : BaseViewModelTest() { savedStateHandle = validInputHandle, authRepository = repo, ) - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> assertEquals(VALID_INPUT_STATE, stateFlow.awaitItem()) viewModel.trySendAction(CreateAccountAction.SubmitClick) assertEquals( diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt index 0ffffe07b..0b8497bdf 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnViewModelTest.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.ui.auth.feature.enterprisesignon import android.net.Uri import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.LoginResult @@ -511,10 +510,7 @@ class EnterpriseSignOnViewModelTest : BaseViewModelTest() { ) val ssoCallbackResult = SsoCallbackResult.Success(state = "abc", code = "lmn") - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) - + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> assertEquals(initialState, stateFlow.awaitItem()) mutableSsoCallbackResultFlow.tryEmit(ssoCallbackResult) @@ -566,10 +562,7 @@ class EnterpriseSignOnViewModelTest : BaseViewModelTest() { ) val ssoCallbackResult = SsoCallbackResult.Success(state = "abc", code = "lmn") - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) - + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> assertEquals(initialState, stateFlow.awaitItem()) mutableSsoCallbackResultFlow.tryEmit(ssoCallbackResult) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt index c558c9403..76d6d88b1 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.ui.auth.feature.startregistration import android.net.Uri import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.SendVerificationEmailResult @@ -177,9 +176,7 @@ class StartRegistrationViewModelTest : BaseViewModelTest() { environmentRepository = fakeEnvironmentRepository, featureFlagManager = featureFlagManager, ) - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> assertEquals(VALID_INPUT_STATE, stateFlow.awaitItem()) viewModel.trySendAction(ContinueClick) assertEquals( diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index e4091d261..5169d97d9 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.ui.vault.feature.addedit import android.content.pm.SigningInfo import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.bitwarden.send.SendView import com.bitwarden.vault.CipherView import com.bitwarden.vault.CollectionView @@ -611,25 +610,22 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { vaultRepository.createCipherInOrganization(any(), any()) } returns CreateCipherResult.Success - turbineScope { - val stateTurbine = viewModel.stateFlow.testIn(backgroundScope) - val eventTurbine = viewModel.eventFlow.testIn(backgroundScope) - + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) - assertEquals(stateWithName, stateTurbine.awaitItem()) - assertEquals(stateWithDialog, stateTurbine.awaitItem()) - assertEquals(stateWithName, stateTurbine.awaitItem()) + assertEquals(stateWithName, stateFlow.awaitItem()) + assertEquals(stateWithDialog, stateFlow.awaitItem()) + assertEquals(stateWithName, stateFlow.awaitItem()) assertEquals( VaultAddEditEvent.ShowToast( R.string.new_item_created.asText(), ), - eventTurbine.awaitItem(), + eventFlow.awaitItem(), ) assertEquals( VaultAddEditEvent.NavigateBack, - eventTurbine.awaitItem(), + eventFlow.awaitItem(), ) } coVerify(exactly = 1) { @@ -680,19 +676,16 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { vaultRepository.createCipherInOrganization(any(), any()) } returns CreateCipherResult.Success - turbineScope { - val stateTurbine = viewModel.stateFlow.testIn(backgroundScope) - val eventTurbine = viewModel.eventFlow.testIn(backgroundScope) - + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) - assertEquals(stateWithName, stateTurbine.awaitItem()) - assertEquals(stateWithDialog, stateTurbine.awaitItem()) - assertEquals(stateWithName, stateTurbine.awaitItem()) + assertEquals(stateWithName, stateFlow.awaitItem()) + assertEquals(stateWithDialog, stateFlow.awaitItem()) + assertEquals(stateWithName, stateFlow.awaitItem()) assertEquals( VaultAddEditEvent.ExitApp, - eventTurbine.awaitItem(), + eventFlow.awaitItem(), ) } assertNull(specialCircumstanceManager.specialCircumstance) @@ -821,17 +814,14 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } returns mockAttestationOptions every { authRepository.activeUserId } returns "mockUserId" - turbineScope { - val stateTurbine = viewModel.stateFlow.testIn(backgroundScope) - val eventTurbine = viewModel.eventFlow.testIn(backgroundScope) - + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) - assertEquals(stateWithNewLogin, stateTurbine.awaitItem()) - assertEquals(stateWithSavingDialog, stateTurbine.awaitItem()) + assertEquals(stateWithNewLogin, stateFlow.awaitItem()) + assertEquals(stateWithSavingDialog, stateFlow.awaitItem()) assertEquals( VaultAddEditEvent.Fido2UserVerification(isRequired = true), - eventTurbine.awaitItem(), + eventFlow.awaitItem(), ) } } @@ -899,22 +889,19 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } returns mockAttestationOptions every { authRepository.activeUserId } returns mockUserId - turbineScope { - val stateTurbine = viewModel.stateFlow.testIn(backgroundScope) - val eventTurbine = viewModel.eventFlow.testIn(backgroundScope) - + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) - assertEquals(stateWithName, stateTurbine.awaitItem()) - assertEquals(stateWithSavingDialog, stateTurbine.awaitItem()) + assertEquals(stateWithName, stateFlow.awaitItem()) + assertEquals(stateWithSavingDialog, stateFlow.awaitItem()) assertEquals( VaultAddEditEvent.ShowToast(R.string.item_updated.asText()), - eventTurbine.awaitItem(), + eventFlow.awaitItem(), ) - assertEquals(stateWithName, stateTurbine.awaitItem()) + assertEquals(stateWithName, stateFlow.awaitItem()) assertEquals( VaultAddEditEvent.CompleteFido2Registration(mockCreateResult), - eventTurbine.awaitItem(), + eventFlow.awaitItem(), ) coVerify(exactly = 1) { fido2CredentialManager.registerFido2Credential( @@ -1059,11 +1046,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) - turbineScope { - val eventTurbine = viewModel.eventFlow.testIn(backgroundScope) + viewModel.eventFlow.test { assertEquals( VaultAddEditEvent.Fido2UserVerification(isRequired = false), - eventTurbine.awaitItem(), + awaitItem(), ) } } @@ -1105,11 +1091,10 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) - turbineScope { - val eventTurbine = viewModel.eventFlow.testIn(backgroundScope) + viewModel.eventFlow.test { assertEquals( VaultAddEditEvent.Fido2UserVerification(isRequired = true), - eventTurbine.awaitItem(), + awaitItem(), ) } } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt index 6885b6544..a53be8adc 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt @@ -1,7 +1,6 @@ package com.x8bit.bitwarden.ui.vault.feature.importlogins import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.SyncVaultDataResult @@ -95,9 +94,7 @@ class ImportLoginsViewModelTest : BaseViewModelTest() { @Test fun `ConfirmImportLater sets dialog state to null and sends NavigateBack event`() = runTest { val viewModel = createViewModel() - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> // Initial state assertEquals(DEFAULT_STATE, stateFlow.awaitItem()) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt index 607a19227..160e78575 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt @@ -3,7 +3,6 @@ package com.x8bit.bitwarden.ui.vault.feature.item import android.net.Uri import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test -import app.cash.turbine.turbineScope import com.bitwarden.vault.CipherView import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.datasource.disk.model.OnboardingStatus @@ -653,9 +652,7 @@ class VaultItemViewModelTest : BaseViewModelTest() { val loginState = DEFAULT_STATE.copy(viewState = loginViewState) val viewModel = createViewModel(state = loginState) - turbineScope { - val stateFlow = viewModel.stateFlow.testIn(backgroundScope) - val eventFlow = viewModel.eventFlow.testIn(backgroundScope) + viewModel.stateEventFlow(backgroundScope) { stateFlow, eventFlow -> assertEquals(loginState, stateFlow.awaitItem()) viewModel.trySendAction( VaultItemAction.Common.MasterPasswordSubmit( From 164cc09f1968e1002ccb602736f9d55a32662170 Mon Sep 17 00:00:00 2001 From: Andrew Haisting <142518658+ahaisting-livefront@users.noreply.github.com> Date: Fri, 25 Oct 2024 16:27:59 -0500 Subject: [PATCH 08/14] BITAU-182 BITAU-107 Don't show authetnicator sync toggle below API 31 (#4156) --- .../AccountSecurityViewModel.kt | 12 +++-- app/src/main/res/values/strings.xml | 2 +- .../AccountSecurityScreenTest.kt | 4 +- .../AccountSecurityViewModelTest.kt | 52 ++++++++++++++++++- .../util/AndroidBuildUtils.kt | 2 +- 5 files changed, 63 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt index 858fa8906..bdfc46af1 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModel.kt @@ -1,5 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity +import android.os.Build import android.os.Parcelable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope @@ -19,6 +20,7 @@ import com.x8bit.bitwarden.data.platform.repository.model.BiometricsKeyResult import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction import com.x8bit.bitwarden.data.platform.repository.util.baseWebVaultUrlOrDefault +import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow import com.x8bit.bitwarden.data.vault.datasource.network.model.PolicyTypeJson import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.ui.platform.base.BaseViewModel @@ -71,9 +73,9 @@ class AccountSecurityViewModel @Inject constructor( ?.activeAccount ?.hasMasterPassword != false, isUnlockWithPinEnabled = settingsRepository.isUnlockWithPinEnabled, - shouldShowEnableAuthenticatorSync = featureFlagManager.getFeatureFlag( - key = FlagKey.AuthenticatorSync, - ), + shouldShowEnableAuthenticatorSync = + featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) && + !isBuildVersionBelow(Build.VERSION_CODES.S), userId = userId, vaultTimeout = settingsRepository.vaultTimeout, vaultTimeoutAction = settingsRepository.vaultTimeoutAction, @@ -372,9 +374,11 @@ class AccountSecurityViewModel @Inject constructor( private fun handleAuthenticatorSyncFeatureFlagUpdate( action: AccountSecurityAction.Internal.AuthenticatorSyncFeatureFlagUpdate, ) { + val shouldShowAuthenticatorSync = + action.isEnabled && !isBuildVersionBelow(Build.VERSION_CODES.S) mutableStateFlow.update { it.copy( - shouldShowEnableAuthenticatorSync = action.isEnabled, + shouldShowEnableAuthenticatorSync = shouldShowAuthenticatorSync, ) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 50e9c553b..ce0057b3f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1001,7 +1001,7 @@ Do you want to switch to this account? Please restart registration or try logging in. You may already have an account. Restart registration Authenticator Sync - Allow Bitwarden Authenticator Syncing + Allow authenticator syncing There was an issue validating the registration token. Turn on autofill Use autofill to log into your accounts with a single tap. diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreenTest.kt index b1692e0da..09b2ba040 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityScreenTest.kt @@ -1465,7 +1465,7 @@ class AccountSecurityScreenTest : BaseComposeTest() { @Test fun `sync with Bitwarden authenticator UI should be displayed according to state`() { - val toggleText = "Allow Bitwarden Authenticator Syncing" + val toggleText = "Allow authenticator syncing" composeTestRule.onNodeWithText(toggleText).assertDoesNotExist() mutableStateFlow.update { DEFAULT_STATE.copy(shouldShowEnableAuthenticatorSync = true) } @@ -1486,7 +1486,7 @@ class AccountSecurityScreenTest : BaseComposeTest() { fun `sync with Bitwarden authenticator click should send AuthenticatorSyncToggle action`() { mutableStateFlow.update { DEFAULT_STATE.copy(shouldShowEnableAuthenticatorSync = true) } composeTestRule - .onNodeWithText("Allow Bitwarden Authenticator Syncing") + .onNodeWithText("Allow authenticator syncing") .performScrollTo() .performClick() verify { viewModel.trySendAction(AccountSecurityAction.AuthenticatorSyncToggle(true)) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt index 49ee1973c..3128445d5 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityViewModelTest.kt @@ -1,5 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity +import android.os.Build import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import com.x8bit.bitwarden.R @@ -22,6 +23,7 @@ import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow +import com.x8bit.bitwarden.data.platform.util.isBuildVersionBelow import com.x8bit.bitwarden.data.vault.datasource.network.model.PolicyTypeJson import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockPolicy @@ -35,7 +37,9 @@ import io.mockk.coVerify import io.mockk.every import io.mockk.just import io.mockk.mockk +import io.mockk.mockkStatic import io.mockk.runs +import io.mockk.unmockkStatic import io.mockk.verify import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.emptyFlow @@ -44,7 +48,9 @@ import kotlinx.coroutines.test.runTest import kotlinx.serialization.json.Json import kotlinx.serialization.json.encodeToJsonElement import kotlinx.serialization.json.jsonObject +import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import javax.crypto.Cipher @@ -91,6 +97,16 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { every { getFeatureFlag(FlagKey.AuthenticatorSync) } returns false } + @BeforeEach + fun setup() { + mockkStatic(::isBuildVersionBelow) + } + + @AfterEach + fun teardown() { + unmockkStatic(::isBuildVersionBelow) + } + @Test fun `initial state should be correct when saved state is set`() { val viewModel = createViewModel(initialState = DEFAULT_STATE) @@ -679,7 +695,8 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { @Suppress("MaxLineLength") @Test - fun `when featureFlagManger returns true for AuthenticatorSync, should show authenticator sync UI`() { + fun `when featureFlagManger returns true for AuthenticatorSync, and version is at least 31 should show authenticator sync UI`() { + every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns false val vm = createViewModel( initialState = null, featureFlagManager = mockk { @@ -693,8 +710,22 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { ) } + @Suppress("MaxLineLength") + @Test + fun `when featureFlagManger returns true for AuthenticatorSync, and version is under 31 should not show authenticator sync UI`() { + every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns true + every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true + every { featureFlagManager.getFeatureFlagFlow(FlagKey.AuthenticatorSync) } returns emptyFlow() + val vm = createViewModel(initialState = null) + assertEquals( + DEFAULT_STATE, + vm.stateFlow.value, + ) + } + @Test fun `when featureFlagManger updates value AuthenticatorSync, should update UI`() = runTest { + every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns false val featureFlagFlow = MutableStateFlow(false) val vm = createViewModel( initialState = null, @@ -712,6 +743,25 @@ class AccountSecurityViewModelTest : BaseViewModelTest() { } } + @Test + @Suppress("MaxLineLength") + fun `when featureFlagManger updates value AuthenticatorSync, authenticator sync row should never show if below API 31`() = + runTest { + every { isBuildVersionBelow(Build.VERSION_CODES.S) } returns true + val featureFlagFlow = MutableStateFlow(false) + every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns false + every { + featureFlagManager.getFeatureFlagFlow(FlagKey.AuthenticatorSync) + } returns featureFlagFlow + val vm = createViewModel(initialState = null) + vm.stateFlow.test { + assertEquals(DEFAULT_STATE, awaitItem()) + featureFlagFlow.value = true + featureFlagFlow.value = false + expectNoEvents() + } + } + @Test fun `when showUnlockBadgeFlow updates value, should update state`() = runTest { val viewModel = createViewModel() diff --git a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/util/AndroidBuildUtils.kt b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/util/AndroidBuildUtils.kt index 3372d99c1..08f7b812b 100644 --- a/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/util/AndroidBuildUtils.kt +++ b/authenticatorbridge/src/main/java/com/bitwarden/authenticatorbridge/util/AndroidBuildUtils.kt @@ -7,4 +7,4 @@ import android.os.Build * * @see Build.VERSION_CODES */ -fun isBuildVersionBelow(version: Int): Boolean = version > Build.VERSION.SDK_INT +internal fun isBuildVersionBelow(version: Int): Boolean = version > Build.VERSION.SDK_INT From b64175ff6ee275bcaa8a6c3925d29d5c17d5b074 Mon Sep 17 00:00:00 2001 From: David Perez Date: Fri, 25 Oct 2024 16:29:16 -0500 Subject: [PATCH 09/14] Update fab design (#4168) --- .../platform/components/fab/BitwardenFloatingActionButton.kt | 1 + .../x8bit/bitwarden/ui/platform/theme/shape/BitwardenShapes.kt | 3 ++- .../java/com/x8bit/bitwarden/ui/platform/theme/shape/Shapes.kt | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt index ae018d371..a4afa6c90 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/components/fab/BitwardenFloatingActionButton.kt @@ -26,6 +26,7 @@ fun BitwardenFloatingActionButton( containerColor = BitwardenTheme.colorScheme.filledButton.background, contentColor = BitwardenTheme.colorScheme.filledButton.foreground, onClick = onClick, + shape = BitwardenTheme.shapes.fab, modifier = modifier, ) { Icon( diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/BitwardenShapes.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/BitwardenShapes.kt index 7edaa014d..97d0a1e8e 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/BitwardenShapes.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/BitwardenShapes.kt @@ -9,14 +9,15 @@ import androidx.compose.runtime.Immutable @Immutable data class BitwardenShapes( val actionCard: CornerBasedShape, + val bottomSheet: CornerBasedShape, val coachmark: CornerBasedShape, val content: CornerBasedShape, val contentBottom: CornerBasedShape, val contentTop: CornerBasedShape, val dialog: CornerBasedShape, + val fab: CornerBasedShape, val infoCallout: CornerBasedShape, val menu: CornerBasedShape, val segmentedControl: CornerBasedShape, val snackbar: CornerBasedShape, - val bottomSheet: CornerBasedShape, ) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/Shapes.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/Shapes.kt index 5af465e7e..adf32c8c2 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/Shapes.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/shape/Shapes.kt @@ -9,14 +9,15 @@ import androidx.compose.ui.unit.dp */ val bitwardenShapes: BitwardenShapes = BitwardenShapes( actionCard = RoundedCornerShape(size = 12.dp), + bottomSheet = RoundedCornerShape(topStart = 24.dp, topEnd = 24.dp), coachmark = RoundedCornerShape(size = 8.dp), content = RoundedCornerShape(size = 8.dp), contentBottom = RoundedCornerShape(bottomStart = 8.dp, bottomEnd = 8.dp), contentTop = RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp), dialog = RoundedCornerShape(size = 28.dp), + fab = CircleShape, infoCallout = RoundedCornerShape(size = 8.dp), menu = RoundedCornerShape(size = 4.dp), segmentedControl = CircleShape, snackbar = RoundedCornerShape(size = 8.dp), - bottomSheet = RoundedCornerShape(topStart = 24.dp, topEnd = 24.dp), ) From 7ea7d78e66bc9474882c9458962c9d274f22f019 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:19:02 -0500 Subject: [PATCH 10/14] [deps]: Lock file maintenance (#4174) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2a766c081..b0516967f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,20 +10,20 @@ GEM artifactory (3.0.17) atomos (0.1.3) aws-eventstream (1.3.0) - aws-partitions (1.989.0) - aws-sdk-core (3.209.1) + aws-partitions (1.996.0) + aws-sdk-core (3.211.0) aws-eventstream (~> 1, >= 1.3.0) - aws-partitions (~> 1, >= 1.651.0) + aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) jmespath (~> 1, >= 1.6.1) - aws-sdk-kms (1.94.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-kms (1.95.0) + aws-sdk-core (~> 3, >= 3.210.0) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.167.0) - aws-sdk-core (~> 3, >= 3.207.0) + aws-sdk-s3 (1.169.0) + aws-sdk-core (~> 3, >= 3.210.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) - aws-sigv4 (1.10.0) + aws-sigv4 (1.10.1) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) base64 (0.2.0) @@ -69,7 +69,7 @@ GEM faraday_middleware (1.2.1) faraday (~> 1.0) fastimage (2.3.1) - fastlane (2.224.0) + fastlane (2.225.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) @@ -85,6 +85,7 @@ GEM faraday-cookie_jar (~> 0.0.6) faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) + fastlane-sirp (>= 1.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-apis-androidpublisher_v3 (~> 0.3) google-apis-playcustomapp_v1 (~> 0.1) @@ -113,6 +114,8 @@ GEM fastlane-plugin-firebase_app_distribution (0.9.1) google-apis-firebaseappdistribution_v1 (~> 0.3.0) google-apis-firebaseappdistribution_v1alpha (~> 0.2.0) + fastlane-sirp (1.0.0) + sysrandom (~> 1.0) gh_inspector (1.1.3) google-apis-androidpublisher_v3 (0.54.0) google-apis-core (>= 0.11.0, < 2.a) @@ -159,14 +162,14 @@ GEM domain_name (~> 0.5) httpclient (2.8.3) jmespath (1.6.2) - json (2.7.2) + json (2.7.4) jwt (2.9.3) base64 mini_magick (4.13.2) mini_mime (1.1.5) multi_json (1.15.0) multipart-post (2.4.1) - nanaimo (0.3.0) + nanaimo (0.4.0) naturally (2.2.1) nkf (0.2.0) optparse (0.5.0) @@ -179,7 +182,7 @@ GEM trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) retriable (3.1.2) - rexml (3.3.8) + rexml (3.3.9) rouge (2.0.7) ruby2_keywords (0.0.5) rubyzip (2.3.2) @@ -192,6 +195,7 @@ GEM simctl (1.6.10) CFPropertyList naturally + sysrandom (1.0.5) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -205,12 +209,12 @@ GEM uber (0.1.0) unicode-display_width (2.6.0) word_wrap (1.0.0) - xcodeproj (1.25.1) + xcodeproj (1.26.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) - nanaimo (~> 0.3.0) + nanaimo (~> 0.4.0) rexml (>= 3.3.6, < 4.0) xcpretty (0.3.0) rouge (~> 2.0.7) From b060b70a6be8bc4cf8f8b6f48ff30aa2d2bd0676 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:26:16 +0000 Subject: [PATCH 11/14] [deps]: Update gh minor (#4173) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 30 +++++++++++++++--------------- .github/workflows/crowdin-pull.yml | 4 ++-- .github/workflows/crowdin-push.yml | 4 ++-- .github/workflows/scan.yml | 6 +++--- .github/workflows/test.yml | 10 +++++----- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae6156f18..0d8e90152 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,13 +37,13 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0 - name: Cache Gradle files - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ~/.gradle/caches @@ -53,7 +53,7 @@ jobs: ${{ runner.os }}-gradle-v2- - name: Cache build output - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ${{ github.workspace }}/build-cache @@ -62,13 +62,13 @@ jobs: ${{ runner.os }}-build- - name: Configure JDK - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: "temurin" java-version: ${{ env.JAVA_VERSION }} - name: Configure Ruby - uses: ruby/setup-ruby@f26937343756480a8cb3ae1f623b9c8d89ed6984 # v1.196.0 + uses: ruby/setup-ruby@7bae1d00b5db9166f4f0fc47985a3a5702cb58f0 # v1.197.0 with: bundler-cache: true @@ -103,10 +103,10 @@ jobs: artifact: ["apk", "aab"] steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Configure Ruby - uses: ruby/setup-ruby@f26937343756480a8cb3ae1f623b9c8d89ed6984 # v1.196.0 + uses: ruby/setup-ruby@7bae1d00b5db9166f4f0fc47985a3a5702cb58f0 # v1.197.0 with: bundler-cache: true @@ -160,7 +160,7 @@ jobs: uses: gradle/actions/wrapper-validation@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0 - name: Cache Gradle files - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ~/.gradle/caches @@ -170,7 +170,7 @@ jobs: ${{ runner.os }}-gradle-v2- - name: Cache build output - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ${{ github.workspace }}/build-cache @@ -179,7 +179,7 @@ jobs: ${{ runner.os }}-build- - name: Configure JDK - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: "temurin" java-version: ${{ env.JAVA_VERSION }} @@ -391,10 +391,10 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Configure Ruby - uses: ruby/setup-ruby@f26937343756480a8cb3ae1f623b9c8d89ed6984 # v1.196.0 + uses: ruby/setup-ruby@7bae1d00b5db9166f4f0fc47985a3a5702cb58f0 # v1.197.0 with: bundler-cache: true @@ -434,7 +434,7 @@ jobs: uses: gradle/actions/wrapper-validation@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0 - name: Cache Gradle files - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ~/.gradle/caches @@ -444,7 +444,7 @@ jobs: ${{ runner.os }}-gradle-v2- - name: Cache build output - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ${{ github.workspace }}/build-cache @@ -453,7 +453,7 @@ jobs: ${{ runner.os }}-build- - name: Configure JDK - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: "temurin" java-version: ${{ env.JAVA_VERSION }} diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml index 9d9431c60..68c6b3474 100644 --- a/.github/workflows/crowdin-pull.yml +++ b/.github/workflows/crowdin-pull.yml @@ -14,7 +14,7 @@ jobs: _CROWDIN_PROJECT_ID: "269690" steps: - name: Checkout repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to Azure - CI Subscription uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 @@ -29,7 +29,7 @@ jobs: secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase" - name: Download translations - uses: crowdin/github-action@95d6e895e871c3c7acf0cfb962f296baa41e63c6 # v2.2.0 + uses: crowdin/github-action@2d540f18b0a416b1fbf2ee5be35841bd380fc1da # v2.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/crowdin-push.yml b/.github/workflows/crowdin-push.yml index 0098a3d1b..1151c065d 100644 --- a/.github/workflows/crowdin-push.yml +++ b/.github/workflows/crowdin-push.yml @@ -14,7 +14,7 @@ jobs: _CROWDIN_PROJECT_ID: "269690" steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Log in to Azure uses: Azure/login@cb79c773a3cfa27f31f25eb3f677781210c9ce3d # v1.6.1 @@ -29,7 +29,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload sources - uses: crowdin/github-action@95d6e895e871c3c7acf0cfb962f296baa41e63c6 # v2.2.0 + uses: crowdin/github-action@2d540f18b0a416b1fbf2ee5be35841bd380fc1da # v2.3.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index 32e6b9b26..aa34b3933 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ github.event.pull_request.head.sha }} @@ -48,7 +48,7 @@ jobs: --output-path . ${{ env.INCREMENTAL }} - name: Upload Checkmarx results to GitHub - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0 with: sarif_file: cx_result.sarif @@ -62,7 +62,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9cb8b4d6b..ffab7a68e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: ref: ${{ github.event.pull_request.head.sha }} @@ -41,7 +41,7 @@ jobs: uses: gradle/actions/wrapper-validation@d156388eb19639ec20ade50009f3d199ce1e2808 # v4.1.0 - name: Cache Gradle files - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ~/.gradle/caches @@ -51,7 +51,7 @@ jobs: ${{ runner.os }}-gradle-v2- - name: Cache build output - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | ${{ github.workspace }}/build-cache @@ -60,12 +60,12 @@ jobs: ${{ runner.os }}-build- - name: Configure Ruby - uses: ruby/setup-ruby@f26937343756480a8cb3ae1f623b9c8d89ed6984 # v1.196.0 + uses: ruby/setup-ruby@7bae1d00b5db9166f4f0fc47985a3a5702cb58f0 # v1.197.0 with: bundler-cache: true - name: Configure JDK - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: "temurin" java-version: ${{ env.JAVA_VERSION }} From 3e2f10a5b96aadd1829d2c3036c5b3ed31f4dd28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 14:27:53 +0000 Subject: [PATCH 12/14] [deps]: Update com.google.devtools.ksp to v2.0.21-1.0.26 (#4172) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa7e113e1..ca783f41e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -39,7 +39,7 @@ kotlinxCollectionsImmutable = "0.3.8" kotlinxCoroutines = "1.9.0" kotlinxSerialization = "1.7.3" kotlinxKover = "0.8.3" -ksp = "2.0.21-1.0.25" +ksp = "2.0.21-1.0.26" mockk = "1.13.13" okhttp = "4.12.0" retrofitBom = "2.11.0" From c47f8606cd90edf0e811a1e739ddbcb6bee4c809 Mon Sep 17 00:00:00 2001 From: ifernandezdiaz Date: Mon, 28 Oct 2024 11:28:07 -0300 Subject: [PATCH 13/14] QA-953: Adding testTag to elements in Add TOTP screen (#4160) --- .../feature/manualcodeentry/ManualCodeEntryScreen.kt | 12 +++++++++--- .../ui/vault/feature/qrcodescan/QrCodeScanScreen.kt | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt index a022618c4..9fff98335 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/manualcodeentry/ManualCodeEntryScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel @@ -126,7 +127,9 @@ fun ManualCodeEntryScreen( Text( text = stringResource(id = R.string.enter_key_manually), style = BitwardenTheme.typography.titleMedium, - modifier = Modifier.padding(horizontal = 16.dp), + modifier = Modifier + .padding(horizontal = 16.dp) + .testTag("EnterKeyManuallyButton"), ) Spacer(modifier = Modifier.height(8.dp)) @@ -143,7 +146,8 @@ fun ManualCodeEntryScreen( }, modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp), + .padding(horizontal = 16.dp) + .testTag("AddManualTOTPField"), ) Spacer(modifier = Modifier.height(16.dp)) @@ -154,7 +158,8 @@ fun ManualCodeEntryScreen( }, modifier = Modifier .fillMaxWidth() - .padding(horizontal = 16.dp), + .padding(horizontal = 16.dp) + .testTag("AddManualTOTPButton"), ) Text( @@ -191,6 +196,7 @@ fun ManualCodeEntryScreen( } }, style = BitwardenTheme.typography.bodyMedium, + modifier = Modifier.testTag("ScanQRCodeButton"), ) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt index db4307cf1..2e14935b9 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/qrcodescan/QrCodeScanScreen.kt @@ -44,6 +44,7 @@ import androidx.compose.ui.graphics.drawscope.drawIntoCanvas import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp @@ -426,6 +427,7 @@ private fun BottomClickableText( style = BitwardenTheme.typography.labelLarge, innerPadding = PaddingValues(vertical = 4.dp, horizontal = 12.dp), onClick = onEnterCodeManuallyClick, + modifier = Modifier.testTag("EnterKeyManuallyButton"), ) } } From 064db9fb6afb22aae9edf3598a3a1347ff5ed124 Mon Sep 17 00:00:00 2001 From: Dave Severns <149429124+dseverns-livefront@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:38:17 -0400 Subject: [PATCH 14/14] =?UTF-8?q?PM-13698=20only=20dismiss=20the=20card=20?= =?UTF-8?q?if=20the=20user=20dismisses=20or=20completes=20the=E2=80=A6=20(?= =?UTF-8?q?#4165)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accountsetup/SetupAutoFillViewModel.kt | 1 + .../accountsetup/SetupUnlockViewModel.kt | 1 + .../importlogins/ImportLoginsViewModel.kt | 3 ++ .../SetupAutoFillViewModelTest.kt | 42 +++++++++++-------- .../accountsetup/SetupUnlockViewModelTest.kt | 11 +++-- .../importlogins/ImportLoginsViewModelTest.kt | 18 +++++++- 6 files changed, 53 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt index a9575f385..742faa262 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModel.kt @@ -104,6 +104,7 @@ class SetupAutoFillViewModel @Inject constructor( } private fun handleContinueClick() { + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = false) if (state.isInitialSetup) { updateOnboardingStatusToNextStep() } else { diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt index 93e7fb370..1e61245af 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModel.kt @@ -80,6 +80,7 @@ class SetupUnlockViewModel @Inject constructor( } private fun handleContinueClick() { + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) if (state.isInitialSetup) { updateOnboardingStatusToNextStep() } else { diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt index 04c5731af..ee6699900 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt @@ -2,6 +2,7 @@ package com.x8bit.bitwarden.ui.vault.feature.importlogins import androidx.lifecycle.viewModelScope import com.x8bit.bitwarden.R +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.SyncVaultDataResult import com.x8bit.bitwarden.ui.platform.base.BaseViewModel @@ -19,6 +20,7 @@ import javax.inject.Inject @HiltViewModel class ImportLoginsViewModel @Inject constructor( private val vaultRepository: VaultRepository, + private val firstTimeActionManager: FirstTimeActionManager, ) : BaseViewModel( initialState = ImportLoginsState( @@ -94,6 +96,7 @@ class ImportLoginsViewModel @Inject constructor( is SyncVaultDataResult.Success -> { if (result.itemsAvailable) { + firstTimeActionManager.storeShowImportLogins(showImportLogins = false) mutableStateFlow.update { it.copy( showBottomSheet = true, diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt index 725c5a594..0098a4c6b 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupAutoFillViewModelTest.kt @@ -125,35 +125,43 @@ class SetupAutoFillViewModelTest : BaseViewModelTest() { } } + @Suppress("MaxLineLength") @Test - fun `handleContinueClick sets onboarding status to FINAL_STEP`() { + fun `handleContinueClick sets onboarding status to FINAL_STEP and sets first time flag to false`() { val viewModel = createViewModel() viewModel.trySendAction(SetupAutoFillAction.ContinueClick) - verify { + verify(exactly = 1) { authRepository.setOnboardingStatus( DEFAULT_USER_ID, OnboardingStatus.FINAL_STEP, ) + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = false) } } + @Suppress("MaxLineLength") @Test - fun `handleContinueClick send NavigateBack event when not initial setup`() = runTest { - val viewModel = createViewModel(initialState = DEFAULT_STATE.copy(isInitialSetup = false)) - viewModel.eventFlow.test { - viewModel.trySendAction(SetupAutoFillAction.ContinueClick) - assertEquals( - SetupAutoFillEvent.NavigateBack, - awaitItem(), - ) + fun `handleContinueClick send NavigateBack event when not initial setup and sets first time flag to false`() = + runTest { + val viewModel = + createViewModel(initialState = DEFAULT_STATE.copy(isInitialSetup = false)) + viewModel.eventFlow.test { + viewModel.trySendAction(SetupAutoFillAction.ContinueClick) + assertEquals( + SetupAutoFillEvent.NavigateBack, + awaitItem(), + ) + } + verify(exactly = 1) { + firstTimeActionManager.storeShowAutoFillSettingBadge(showBadge = false) + } + verify(exactly = 0) { + authRepository.setOnboardingStatus( + DEFAULT_USER_ID, + OnboardingStatus.FINAL_STEP, + ) + } } - verify(exactly = 0) { - authRepository.setOnboardingStatus( - DEFAULT_USER_ID, - OnboardingStatus.FINAL_STEP, - ) - } - } @Test fun `handleTurnOnLaterConfirmClick sets showAutoFillSettingBadge to true`() { diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt index 89f42c1b2..03ecc23e8 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/auth/feature/accountsetup/SetupUnlockViewModelTest.kt @@ -86,14 +86,16 @@ class SetupUnlockViewModelTest : BaseViewModelTest() { @Suppress("MaxLineLength") @Test - fun `ContinueClick should send NavigateBack event if this is not the initial setup`() = + fun `ContinueClick should send NavigateBack event if this is not the initial setup and set first time value to false`() = runTest { val viewModel = createViewModel(DEFAULT_STATE.copy(isInitialSetup = false)) viewModel.eventFlow.test { viewModel.trySendAction(SetupUnlockAction.ContinueClick) assertEquals(SetupUnlockEvent.NavigateBack, awaitItem()) } - + verify(exactly = 1) { + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) + } verify(exactly = 0) { authRepository.setOnboardingStatus( userId = DEFAULT_USER_ID, @@ -118,15 +120,16 @@ class SetupUnlockViewModelTest : BaseViewModelTest() { @Suppress("MaxLineLength") @Test - fun `ContinueClick should call setOnboardingStatus and set to FINAL_STEP if AutoFill is already enabled`() { + fun `ContinueClick should call setOnboardingStatus and set to FINAL_STEP if AutoFill is already enabled and set first time value to false`() { mutableAutofillEnabledStateFlow.update { true } val viewModel = createViewModel() viewModel.trySendAction(SetupUnlockAction.ContinueClick) - verify { + verify(exactly = 1) { authRepository.setOnboardingStatus( userId = DEFAULT_USER_ID, status = OnboardingStatus.FINAL_STEP, ) + firstTimeActionManager.storeShowUnlockSettingBadge(showBadge = false) } } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt index a53be8adc..4f02d30dd 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt @@ -2,13 +2,18 @@ package com.x8bit.bitwarden.ui.vault.feature.importlogins import app.cash.turbine.test import com.x8bit.bitwarden.R +import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.SyncVaultDataResult import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest import com.x8bit.bitwarden.ui.platform.base.util.asText import io.mockk.coEvery import io.mockk.coVerify +import io.mockk.every +import io.mockk.just import io.mockk.mockk +import io.mockk.runs +import io.mockk.verify import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNotNull @@ -17,10 +22,14 @@ import org.junit.jupiter.api.Test class ImportLoginsViewModelTest : BaseViewModelTest() { - private val vaultRepository: VaultRepository = mockk() { + private val vaultRepository: VaultRepository = mockk { coEvery { syncForResult() } returns SyncVaultDataResult.Success(itemsAvailable = true) } + private val firstTimeActionManager: FirstTimeActionManager = mockk { + every { storeShowImportLogins(any()) } just runs + } + @Test fun `initial state is correct`() { val viewModel = createViewModel() @@ -295,8 +304,9 @@ class ImportLoginsViewModelTest : BaseViewModelTest() { coVerify { vaultRepository.syncForResult() } } + @Suppress("MaxLineLength") @Test - fun `SyncVaultDataResult success should update state to show bottom sheet`() { + fun `SyncVaultDataResult success should update state to show bottom sheet and set first time values to false`() { val viewModel = createViewModel() viewModel.trySendAction(ImportLoginsAction.MoveToSyncInProgress) assertEquals( @@ -308,6 +318,9 @@ class ImportLoginsViewModelTest : BaseViewModelTest() { ), viewModel.stateFlow.value, ) + verify { + firstTimeActionManager.storeShowImportLogins(showImportLogins = false) + } } @Suppress("MaxLineLength") @@ -429,6 +442,7 @@ class ImportLoginsViewModelTest : BaseViewModelTest() { private fun createViewModel(): ImportLoginsViewModel = ImportLoginsViewModel( vaultRepository = vaultRepository, + firstTimeActionManager = firstTimeActionManager, ) }