Merge branch 'main' into QA-1126b/adding-native-sanity-test

This commit is contained in:
ifernandezdiaz
2025-07-14 12:35:57 -03:00
53 changed files with 1108 additions and 1320 deletions

View File

@@ -1,8 +1,11 @@
package com.x8bit.bitwarden
import android.app.ComponentCaller
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.bitwarden.annotation.OmitFromCoverage
import com.bitwarden.ui.platform.util.validate
/**
* An activity to be launched and then immediately closed so that the OS Shade can be collapsed
@@ -11,7 +14,16 @@ import com.bitwarden.annotation.OmitFromCoverage
@OmitFromCoverage
class AccessibilityActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
intent = intent.validate()
super.onCreate(savedInstanceState)
finish()
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent.validate())
}
override fun onNewIntent(intent: Intent, caller: ComponentCaller) {
super.onNewIntent(intent.validate(), caller)
}
}

View File

@@ -1,10 +1,12 @@
package com.x8bit.bitwarden
import android.app.ComponentCaller
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import com.bitwarden.annotation.OmitFromCoverage
import com.bitwarden.ui.platform.util.validate
import dagger.hilt.android.AndroidEntryPoint
/**
@@ -21,6 +23,7 @@ class AuthCallbackActivity : AppCompatActivity() {
private val viewModel: AuthCallbackViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
intent = intent.validate()
super.onCreate(savedInstanceState)
viewModel.trySendAction(AuthCallbackAction.IntentReceive(intent = intent))
@@ -35,4 +38,12 @@ class AuthCallbackActivity : AppCompatActivity() {
startActivity(intent)
finish()
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent.validate())
}
override fun onNewIntent(intent: Intent, caller: ComponentCaller) {
super.onNewIntent(intent.validate(), caller)
}
}

View File

@@ -1,10 +1,13 @@
package com.x8bit.bitwarden
import android.app.ComponentCaller
import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.bitwarden.annotation.OmitFromCoverage
import com.bitwarden.ui.platform.util.validate
import com.x8bit.bitwarden.data.autofill.manager.AutofillCompletionManager
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
@@ -26,6 +29,7 @@ class AutofillTotpCopyActivity : AppCompatActivity() {
private val autofillTotpCopyViewModel: AutofillTotpCopyViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
intent = intent.validate()
super.onCreate(savedInstanceState)
observeViewModelEvents()
@@ -37,6 +41,14 @@ class AutofillTotpCopyActivity : AppCompatActivity() {
)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent.validate())
}
override fun onNewIntent(intent: Intent, caller: ComponentCaller) {
super.onNewIntent(intent.validate(), caller)
}
private fun observeViewModelEvents() {
autofillTotpCopyViewModel
.eventFlow

View File

@@ -1,5 +1,6 @@
package com.x8bit.bitwarden
import android.app.ComponentCaller
import android.content.Intent
import android.os.Build
import android.os.Bundle
@@ -23,6 +24,7 @@ import com.bitwarden.annotation.OmitFromCoverage
import com.bitwarden.ui.platform.base.util.EventsEffect
import com.bitwarden.ui.platform.theme.BitwardenTheme
import com.bitwarden.ui.platform.util.setupEdgeToEdge
import com.bitwarden.ui.platform.util.validate
import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilityCompletionManager
import com.x8bit.bitwarden.data.autofill.manager.AutofillActivityManager
import com.x8bit.bitwarden.data.autofill.manager.AutofillCompletionManager
@@ -67,6 +69,7 @@ class MainActivity : AppCompatActivity() {
lateinit var debugLaunchManager: DebugMenuLaunchManager
override fun onCreate(savedInstanceState: Bundle?) {
intent = intent.validate()
var shouldShowSplashScreen = true
installSplashScreen().setKeepOnScreenCondition { shouldShowSplashScreen }
super.onCreate(savedInstanceState)
@@ -114,8 +117,15 @@ class MainActivity : AppCompatActivity() {
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
mainViewModel.trySendAction(action = MainAction.ReceiveNewIntent(intent = intent))
val newIntent = intent.validate()
super.onNewIntent(newIntent)
mainViewModel.trySendAction(action = MainAction.ReceiveNewIntent(intent = newIntent))
}
override fun onNewIntent(intent: Intent, caller: ComponentCaller) {
val newIntent = intent.validate()
super.onNewIntent(newIntent, caller)
mainViewModel.trySendAction(action = MainAction.ReceiveNewIntent(intent = newIntent))
}
override fun onResume() {

View File

@@ -4,7 +4,7 @@ import android.content.Context
import android.content.Intent
import com.x8bit.bitwarden.MainActivity
import com.x8bit.bitwarden.data.platform.manager.model.PasswordlessRequestData
import com.x8bit.bitwarden.data.platform.util.getSafeParcelableExtra
import com.bitwarden.ui.platform.util.getSafeParcelableExtra
private const val NOTIFICATION_DATA: String = "notificationData"

View File

@@ -18,7 +18,7 @@ import com.x8bit.bitwarden.data.autofill.model.AutofillAppInfo
import com.x8bit.bitwarden.data.autofill.model.AutofillSaveItem
import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData
import com.x8bit.bitwarden.data.autofill.model.AutofillTotpCopyData
import com.x8bit.bitwarden.data.platform.util.getSafeParcelableExtra
import com.bitwarden.ui.platform.util.getSafeParcelableExtra
import kotlin.random.Random
private const val AUTOFILL_SAVE_ITEM_DATA_KEY = "autofill-save-item-data"

View File

@@ -138,13 +138,11 @@ object PlatformManagerModule {
addTotpItemFromAuthenticatorManager: AddTotpItemFromAuthenticatorManager,
@ApplicationContext context: Context,
dispatcherManager: DispatcherManager,
featureFlagManager: FeatureFlagManager,
): AuthenticatorBridgeProcessor = AuthenticatorBridgeProcessorImpl(
authenticatorBridgeRepository = authenticatorBridgeRepository,
addTotpItemFromAuthenticatorManager = addTotpItemFromAuthenticatorManager,
context = context,
dispatcherManager = dispatcherManager,
featureFlagManager = featureFlagManager,
)
@Provides

View File

@@ -21,7 +21,6 @@ sealed class FlagKey<out T : Any> {
*/
val activeFlags: List<FlagKey<*>> by lazy {
listOf(
AuthenticatorSync,
EmailVerification,
ImportLoginsFlow,
CredentialExchangeProtocolImport,
@@ -40,14 +39,6 @@ sealed class FlagKey<out T : Any> {
}
}
/**
* Data object holding the key for syncing with the Bitwarden Authenticator app.
*/
data object AuthenticatorSync : FlagKey<Boolean>() {
override val keyName: String = "enable-pm-bwa-sync"
override val defaultValue: Boolean = false
}
/**
* Data object holding the key for Email Verification feature.
*/

View File

@@ -18,8 +18,6 @@ import com.bitwarden.authenticatorbridge.util.toSymmetricEncryptionKeyData
import com.bitwarden.core.util.isBuildVersionAtLeast
import com.bitwarden.data.manager.DispatcherManager
import com.x8bit.bitwarden.data.auth.manager.AddTotpItemFromAuthenticatorManager
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
import com.x8bit.bitwarden.data.platform.repository.AuthenticatorBridgeRepository
import com.x8bit.bitwarden.data.platform.util.createAddTotpItemFromAuthenticatorIntent
import com.x8bit.bitwarden.ui.vault.util.getTotpDataOrNull
@@ -33,7 +31,6 @@ import timber.log.Timber
class AuthenticatorBridgeProcessorImpl(
private val authenticatorBridgeRepository: AuthenticatorBridgeRepository,
private val addTotpItemFromAuthenticatorManager: AddTotpItemFromAuthenticatorManager,
private val featureFlagManager: FeatureFlagManager,
dispatcherManager: DispatcherManager,
context: Context,
) : AuthenticatorBridgeProcessor {
@@ -44,12 +41,9 @@ class AuthenticatorBridgeProcessorImpl(
override val binder: IAuthenticatorBridgeService.Stub?
get() {
return if (
!featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) ||
!isBuildVersionAtLeast(Build.VERSION_CODES.S)
) {
// If the feature flag is not enabled, OR if version is below Android 12,
// return a null binder which will no-op all service calls
return if (!isBuildVersionAtLeast(Build.VERSION_CODES.S)) {
// If version is below Android 12, return a null binder which will no-op all
// service calls
null
} else {
// Otherwise, return real binder implementation:

View File

@@ -25,7 +25,6 @@ fun <T : Any> FlagKey<T>.ListItemContent(
Unit
}
FlagKey.AuthenticatorSync,
FlagKey.EmailVerification,
FlagKey.ImportLoginsFlow,
FlagKey.CredentialExchangeProtocolImport,
@@ -82,7 +81,6 @@ private fun <T : Any> FlagKey<T>.getDisplayLabel(): String = when (this) {
FlagKey.DummyString,
-> this.keyName
FlagKey.AuthenticatorSync -> stringResource(R.string.authenticator_sync)
FlagKey.EmailVerification -> stringResource(R.string.email_verification)
FlagKey.ImportLoginsFlow -> stringResource(R.string.import_logins_flow)
FlagKey.CredentialExchangeProtocolImport -> stringResource(R.string.cxp_import)

View File

@@ -17,10 +17,8 @@ import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
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
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
import com.x8bit.bitwarden.data.platform.repository.model.BiometricsKeyResult
@@ -51,7 +49,6 @@ class AccountSecurityViewModel @Inject constructor(
private val settingsRepository: SettingsRepository,
private val environmentRepository: EnvironmentRepository,
private val biometricsEncryptionManager: BiometricsEncryptionManager,
private val featureFlagManager: FeatureFlagManager,
private val firstTimeActionManager: FirstTimeActionManager,
policyManager: PolicyManager,
savedStateHandle: SavedStateHandle,
@@ -74,9 +71,7 @@ class AccountSecurityViewModel @Inject constructor(
?.activeAccount
?.hasMasterPassword != false,
isUnlockWithPinEnabled = settingsRepository.isUnlockWithPinEnabled,
shouldShowEnableAuthenticatorSync =
featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) &&
isBuildVersionAtLeast(Build.VERSION_CODES.S),
shouldShowEnableAuthenticatorSync = isBuildVersionAtLeast(Build.VERSION_CODES.S),
userId = userId,
vaultTimeout = settingsRepository.vaultTimeout,
vaultTimeoutAction = settingsRepository.vaultTimeoutAction,
@@ -123,13 +118,6 @@ class AccountSecurityViewModel @Inject constructor(
.onEach(::sendAction)
.launchIn(viewModelScope)
featureFlagManager
.getFeatureFlagFlow(FlagKey.AuthenticatorSync)
.onEach {
trySendAction(AccountSecurityAction.Internal.AuthenticatorSyncFeatureFlagUpdate(it))
}
.launchIn(viewModelScope)
firstTimeActionManager
.firstTimeStateFlow
.map {
@@ -374,10 +362,6 @@ class AccountSecurityViewModel @Inject constructor(
private fun handleInternalAction(action: AccountSecurityAction.Internal) {
when (action) {
is AccountSecurityAction.Internal.AuthenticatorSyncFeatureFlagUpdate -> {
handleAuthenticatorSyncFeatureFlagUpdate(action)
}
is AccountSecurityAction.Internal.BiometricsKeyResultReceive -> {
handleBiometricsKeyResultReceive(action)
}
@@ -448,18 +432,6 @@ class AccountSecurityViewModel @Inject constructor(
}
}
private fun handleAuthenticatorSyncFeatureFlagUpdate(
action: AccountSecurityAction.Internal.AuthenticatorSyncFeatureFlagUpdate,
) {
val shouldShowAuthenticatorSync =
action.isEnabled && isBuildVersionAtLeast(Build.VERSION_CODES.S)
mutableStateFlow.update {
it.copy(
shouldShowEnableAuthenticatorSync = shouldShowAuthenticatorSync,
)
}
}
private fun handleBiometricsKeyResultReceive(
action: AccountSecurityAction.Internal.BiometricsKeyResultReceive,
) {
@@ -778,13 +750,6 @@ sealed class AccountSecurityAction {
*/
sealed class Internal : AccountSecurityAction() {
/**
* The feature flag value for authenticator syncing was updated.
*/
data class AuthenticatorSyncFeatureFlagUpdate(
val isEnabled: Boolean,
) : Internal()
/**
* A biometrics key result has been received.
*/

View File

@@ -382,7 +382,7 @@ El escaneo se realizará automáticamente.</string>
<string name="code_sent">¡Código Enviado!</string>
<string name="confirm_your_identity">Confirme su identidad para continuar.</string>
<string name="export_vault_warning">Ésta exportación contiene sus datos de la caja fuerte en un formato no cifrado. No debería almacenar o enviar el archivo exportado por canales no seguros (como el correo electrónico). Elimínelo inmediatamente cuando termine de utilizarlo.</string>
<string name="export_vault_file_pw_protect_info">This file export will be password protected and require the file password to decrypt.</string>
<string name="export_vault_file_pw_protect_info">Esta exportación de archivo estará protegida por contraseña, y requerirá la contraseña del archivo para descifrarla.</string>
<string name="export_vault_confirmation_title">Confirmar exportación de la caja fuerte</string>
<string name="warning">Advertencia</string>
<string name="export_vault_failure">Hubo un problema al exportar su caja fuerte. Si el problema persiste, deberá exportar desde la caja fuerte en la web.</string>
@@ -432,7 +432,7 @@ El escaneo se realizará automáticamente.</string>
<string name="accessibility_description5">Required to use the Autofill Quick-Action Tile.</string>
<string name="personal_ownership_policy_in_effect">Una política de organización está afectando sus opciones de propiedad.</string>
<string name="send">Send</string>
<string name="send_details">Send Details</string>
<string name="send_details">Detalles del Send</string>
<string name="all_sends">Todos los Sends</string>
<string name="text">Texto</string>
<string name="text_to_share">Texto a compartir</string>
@@ -456,20 +456,20 @@ El escaneo se realizará automáticamente.</string>
<string name="password_info">Opcionalmente requieren una contraseña para que los usuarios accedan al Send.</string>
<string name="remove_password">Eliminar contraseña</string>
<string name="removing_send_password">Eliminando contraseña</string>
<string name="password_removed">Password removed</string>
<string name="password_removed">Contraseña eliminada</string>
<string name="add_a_send">Añadir un Send</string>
<string name="copy_link">Copiar enlace</string>
<string name="share_link">Compartir enlace</string>
<string name="send_link">Enlace Send</string>
<string name="search_sends">Buscar Sends</string>
<string name="edit_send">Editar Send</string>
<string name="edit_file_send">Edit file Send</string>
<string name="edit_text_send">Edit text Send</string>
<string name="add_file_send">New file Send</string>
<string name="add_text_send">New text Send</string>
<string name="edit_file_send">Editar Send de archivo</string>
<string name="edit_text_send">Editar Send de texto</string>
<string name="add_file_send">Nuevo Send de archivo</string>
<string name="add_text_send">Nuevo Send de texto</string>
<string name="are_you_sure_delete_send">¿Seguro que quieres eliminar este Send?</string>
<string name="send_deleted">Send eliminado</string>
<string name="send_updated">Send updated</string>
<string name="send_updated">Send actualizado</string>
<string name="one_day">1 día</string>
<string name="two_days">2 días</string>
<string name="three_days">3 días</string>
@@ -631,7 +631,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="approve_with_master_password">Aprobar con contraseña maestra</string>
<string name="turn_off_using_public_device">Deshabilitar usando un dispositivo público</string>
<string name="remember_this_device">Recordar este dispositivo</string>
<string name="passkey">Passkey</string>
<string name="passkey">Clave de acceso</string>
<string name="passkey_will_not_be_copied">La contraseña maestra no será copiada</string>
<string name="the_passkey_will_not_be_copied_to_the_cloned_item_do_you_want_to_continue_cloning_this_item">La contraseña maestra no será copiada al elemento clonado.
¿Deseas continuar clonando este elemento?</string>
@@ -695,15 +695,15 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="passkey_operation_failed_because_app_could_not_be_verified">La operación de la clave de acceso falló porque la aplicación no pudo ser verificada</string>
<string name="confirm_file_password">Confirmar contraseña del archivo</string>
<string name="file_password">Contraseña del archivo</string>
<string name="password_protected">Password Protected</string>
<string name="password_protected">Protegido con Contraseña</string>
<string name="password_used_to_export">Esta contraseña se usará para exportar e importar este archivo</string>
<string name="autofill_suggestion">Sugerencias de autocompletado</string>
<string name="continue_to_complete_web_authn_verification">Continue to complete WebAuthn verification.</string>
<string name="launch_web_authn">Launch WebAuthn</string>
<string name="there_was_an_error_starting_web_authn_two_factor_authentication">There was an error starting WebAuthn two factor authentication</string>
<string name="launch_web_authn">Iniciar WebAuthn</string>
<string name="there_was_an_error_starting_web_authn_two_factor_authentication">Hubo un error al iniciar autenticación de doble factor WebAuthn</string>
<string name="self_hosted_server_url">Self-hosted server URL</string>
<string name="passkey_operation_failed_because_user_could_not_be_verified">La operación de la clave de acceso falló porque el usuario no pudo ser verificado.</string>
<string name="user_verification_direction">User verification</string>
<string name="user_verification_direction">Verificación de usuario</string>
<string name="create_account_on">Crea una cuenta en</string>
<string name="create_account_on_with_colon">Crea una cuenta en:</string>
<string name="we_sent_an_email_to">Hemos enviado un correo electrónico a <annotation emphasis="bold"><annotation arg="0">%1$s</annotation></annotation>.</string>
@@ -719,13 +719,13 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="welcome_message_2">Set up biometric unlock and autofill to log into your accounts without typing a single letter.</string>
<string name="quick_and_easy_login">Quick and easy login</string>
<string name="level_up_your_logins">Level up your logins</string>
<string name="welcome_message_3">Use the generator to create and save strong, unique passwords for all your accounts.</string>
<string name="welcome_message_3">Usa el generador para crear contraseñas seguras y únicas para todas tus cuentas.</string>
<string name="your_data_when_and_where_you_need_it">Your data, when and where you need it</string>
<string name="welcome_message_4">Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps.</string>
<string name="remove_passkey">Eliminar clave de acceso</string>
<string name="passkey_removed">Clave de acceso eliminada</string>
<string name="what_makes_a_password_strong">What makes a password strong?</string>
<string name="a_secure_memorable_password">A secure, memorable password</string>
<string name="what_makes_a_password_strong">¿Qué hace segura una contraseña?</string>
<string name="a_secure_memorable_password">Una contraseña segura y memorable</string>
<string name="account_setup">Configuración de la cuenta</string>
<string name="set_up_unlock">Set up unlock</string>
<string name="set_up_later">Configurar más tarde</string>
@@ -767,12 +767,12 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="turn_on_later">Activar más tarde</string>
<string name="turn_on_autofill_later">¿Activar autocompletado más tarde?</string>
<string name="return_to_complete_this_step_anytime_in_settings">You can return to complete this step anytime in Settings.</string>
<string name="what_bitwarden_has_to_offer">You can now explore everything Bitwarden has to offer and start managing your passwords securely.</string>
<string name="youre_all_set">You\'re all set!</string>
<string name="what_bitwarden_has_to_offer">Ahora puedes explorar todo lo que Bitwarden ofrece y empezar a gestionar tus contraseñas de forma segura.</string>
<string name="youre_all_set">¡Todo listo!</string>
<string name="error_connecting_with_the_duo_service_use_a_different_two_step_login_method_or_contact_duo_for_assistance">Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance.</string>
<string name="master_password_hint_not_specified">Master password hint</string>
<string name="new_master_password_hint">New master password hint</string>
<string name="get_started">Get started</string>
<string name="master_password_hint_not_specified">Pista de la contraseña maestra</string>
<string name="new_master_password_hint">Nueva pista de la contraseña maestra</string>
<string name="get_started">Empezar</string>
<string name="save_and_protect_your_data">Save and protect your data</string>
<string name="the_vault_protects_more_than_just_passwords">The vault protects more than just passwords. Store secure logins, IDs, cards and notes securely here.</string>
<string name="new_login">Nuevo inicio de sesión</string>
@@ -794,7 +794,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="export_your_passwords_this_option_is_usually_found_in_your_settings"><annotation emphasis="bold">Export your passwords.</annotation> This option is usually found in your settings.</string>
<string name="select_import_data_in_the_web_app_then_done_to_finish_syncing"><annotation emphasis="bold">Select Import data</annotation> in the web app, then Done below to finish syncing.</string>
<string name="step_1_of_3">Paso 1 de 3</string>
<string name="export_your_saved_logins">Export your saved logins</string>
<string name="export_your_saved_logins">Exportar tus inicios de sesión guardados</string>
<string name="delete_this_file_after_import_is_complete">Youll delete this file after import is complete.</string>
<string name="on_your_computer_open_a_new_browser_tab_and_go_to_vault_bitwarden_com">On your computer, open a new browser tab and <annotation emphasis="bold">go to <annotation arg="0">%1$s</annotation></annotation></string>
<string name="log_in_to_the_bitwarden_web_app">Inicia sesión en la aplicación web de Bitwarden.</string>
@@ -821,7 +821,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="got_it">Entendido</string>
<string name="no_logins_were_imported">No se importaron inicios de sesión</string>
<string name="import_error">Error de importación</string>
<string name="logins_imported">Logins imported</string>
<string name="logins_imported">Inicios de sesión importados</string>
<string name="remember_to_delete_your_imported_password_file_from_your_computer">Recuerda eliminar tu archivo de contraseñas importado de tu ordenador</string>
<string name="type_ssh_key">Clave SSH</string>
<string name="public_key">Clave pública</string>
@@ -849,7 +849,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="cxp_export">CXP Export</string>
<string name="choose_three_or_four_random_words">Elige tres o cuatro palabras aleatorias</string>
<string name="pick_three_or_four_random_unrelated_words">Elige tres o cuatro palabras aleatorias sin relación que puedas memorizar fácilmente. Piensa en <annotation emphasis="bold">objetos, lugares o cosas</annotation> que te gusten.</string>
<string name="combine_those_words_together">Combine those words together</string>
<string name="combine_those_words_together">Combinar estas palabras juntas</string>
<string name="put_the_words_together_in_any_order_to_form_your_passphrase">Put the words together in any order to form your passphrase. <annotation emphasis="bold">Use hyphens, spaces, or leave them as one long word</annotation>—your choice!</string>
<string name="make_it_yours">Hazlo tuyo</string>
<string name="add_a_number_or_symbol_to_make_it_even_stronger"><annotation emphasis="bold">Add a number or symbol</annotation> to make it even stronger. Now you have a unique, secure, and memorable passphrase!</string>
@@ -872,7 +872,7 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="learn_about_new_logins">Learn about new logins</string>
<string name="we_ll_walk_you_through_the_key_features_to_add_a_new_login">We\'ll walk you through the key features to add a new login.</string>
<string name="explore_the_generator">Explore the generator</string>
<string name="learn_more_about_generating_secure_login_credentials_with_guided_tour">Learn more about generating secure login credentials with a guided tour.</string>
<string name="learn_more_about_generating_secure_login_credentials_with_guided_tour">Saber más acerca de generar credenciales seguras de inicio de sesión con un tour guiado.</string>
<string name="import_client_certificate">Importar certificado de cliente</string>
<string name="enter_the_client_certificate_password_and_alias">Introduce la contraseña del certificado de cliente y el alias deseado para este certificado.</string>
<string name="alias">Alias</string>
@@ -959,14 +959,14 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="app_settings">Ajustes de la aplicación</string>
<string name="replace_existing_certificate">¿Reemplazar certificado existente?</string>
<string name="a_certificate_with_the_alias_x_already_exists_do_you_want_to_replace_it">A certificate with the alias \"%s\" already exists. Do you want to replace it?\nReplacing the certificate may impact your connection to any environments currently using it.</string>
<string name="replace_certificate">Replace certificate</string>
<string name="replace_certificate">Reemplazar certificado</string>
<string name="unable_to_read_certificate">No se puede leer el certificado.</string>
<string name="cannot_delete_your_account">No se puede eliminar tu cuenta</string>
<string name="cannot_delete_your_account_explanation">Esta acción no se puede completar porque tu cuenta es de propiedad de una organización. Contacta con el administrador de tu organización para más detalles.</string>
<string name="this_account_will_soon_be_deleted_log_in_at_x_to_continue_using_bitwarden">This account will soon be deleted. Log in at %1$s to continue using Bitwarden.</string>
<string name="view_file_send">View file Send</string>
<string name="view_text_send">View text Send</string>
<string name="delete_send">Delete Send</string>
<string name="view_file_send">Ver Send de archivo</string>
<string name="view_text_send">Ver Send de texto</string>
<string name="delete_send">Eliminar Send</string>
<string name="missing_send_resync_your_vault">Missing Send re-sync your vault</string>
<string name="dynamic_colors">Colores dinámicos</string>
<string name="dynamic_colors_description">Aplicar colores dinámicos en base a tu fondo de pantalla</string>
@@ -982,12 +982,12 @@ seleccione Agregar TOTP para almacenar la clave de forma segura</string>
<string name="trusted_by_google">Confiado por Google</string>
<string name="privileged_apps_description">To protect users from phishing attempts, by default, Bitwarden only completes passkey operations through applications or web browsers trusted by Google or the Bitwarden community.</string>
<string name="about_privileged_applications">Acerca de las aplicaciones privilegiadas</string>
<string name="learn_more_about_privileged_apps">Learn more about privileged apps</string>
<string name="learn_more_about_privileged_apps">Saber más acerca de las aplicaciones privilegiadas</string>
<string name="privileged_apps">Aplicaciones privilegiadas</string>
<string name="unrecognized_browser">Navegador no reconocido</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Learn more about using passkeys with Bitwarden.</string>
<string name="all_trusted_apps">All trusted apps</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Are you sure you want to stop trusting %s?</string>
<string name="installed_apps">Installed apps</string>
<string name="delete_x">Delete %s</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Saber más acerca del uso de claves de acceso en Bitwarden.</string>
<string name="all_trusted_apps">Todas las aplicaciones de confianza</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">¿Estás seguro de que quieres dejar de confiar en %s?</string>
<string name="installed_apps">Aplicaciones instaladas</string>
<string name="delete_x">Eliminar %s</string>
</resources>

View File

@@ -296,9 +296,9 @@
<string name="autofill_and_save">پر کردن خودکار و ذخیره</string>
<string name="organization">سازمان</string>
<string name="try_again">دوباره تلاش کن</string>
<string name="created">Created: %1$s</string>
<string name="password_last_updated">Password last updated: %1$s</string>
<string name="last_edited">Last edited: %1$s</string>
<string name="created">ساخته شده: %1$s</string>
<string name="password_last_updated">کلمه عبور آخرین بار به‌روزرسانی شده: %1$s</string>
<string name="last_edited">آخرین ویرایش: %1$s</string>
<string name="invalid_email">نشانی ایمیل نامعتبر است.</string>
<string name="cards">کارت‌ها</string>
<string name="identities">هویت‌ها</string>
@@ -425,9 +425,9 @@
<string name="privacy_policy">سیاست حفظ حریم خصوصی</string>
<string name="passkey_management">مدیریت کلید عبور</string>
<string name="autofill_services">سرویس‌های پر کردن خودکار</string>
<string name="display_autofill_suggestions">Display autofill suggestions</string>
<string name="autofill_suggestions_inline">Inline (shows in keyboard)</string>
<string name="autofill_suggestions_popup">Popup (shows over input field)</string>
<string name="display_autofill_suggestions">نمایش پیشنهادهای پر کردن خودکار</string>
<string name="autofill_suggestions_inline">درون‌خطی (روی صفحه‌کلید نمایش داده می‌شود)</string>
<string name="autofill_suggestions_popup">پنجره‌ی بازشونده (بالای فیلد ورودی نمایش داده می‌شود)</string>
<string name="accessibility">از قابلیت دسترسی استفاده کنید</string>
<string name="accessibility_description5">برای استفاده از کاشی اقدام سریع پر کردن خودکار لازم است.</string>
<string name="personal_ownership_policy_in_effect">سیاست سازمانی بر تنظیمات مالکیت شما تأثیر می‌گذارد.</string>
@@ -456,7 +456,7 @@
<string name="password_info">به صورت اختیاری برای دسترسی کاربران به این ارسال به یک کلمه عبور نیاز دارید.</string>
<string name="remove_password">حذف کلمه عبور</string>
<string name="removing_send_password">حذف کلمه عبور</string>
<string name="password_removed">Password removed</string>
<string name="password_removed">کلمه عبور حذف شد</string>
<string name="add_a_send">افزودن یک ارسال</string>
<string name="copy_link">کپی پیوند</string>
<string name="share_link">اشتراک گذاری پیوند</string>
@@ -469,7 +469,7 @@
<string name="add_text_send">متن جدید ارسال</string>
<string name="are_you_sure_delete_send">آیا مطمئن هستید که می‌خواهید این ارسال را حذف کنید؟</string>
<string name="send_deleted">ارسال حذف شد</string>
<string name="send_updated">Send updated</string>
<string name="send_updated">ارسال به‌روزرسانی شد</string>
<string name="one_day">۱ روز</string>
<string name="two_days">۲ روز</string>
<string name="three_days">۳ روز</string>
@@ -551,8 +551,8 @@
<string name="device_type">نوع دستگاه</string>
<string name="ip_address">نشانی IP</string>
<string name="time">زمان</string>
<string name="select_time">Select time</string>
<string name="switch_input_mode">Switch input mode</string>
<string name="select_time">انتخاب زمان</string>
<string name="switch_input_mode">تغییر حالت ورودی</string>
<string name="confirm_log_in">تأیید ورود</string>
<string name="deny_log_in">رد ورود</string>
<string name="log_in_denied">ورود رد شد</string>
@@ -677,7 +677,7 @@
<string name="privacy_policy_description_long">سیاست حفظ حریم خصوصی ما را در bitwarden.com بررسی کنید.</string>
<string name="explore_more_features_of_your_bitwarden_account_on_the_web_app">ویژگی‌های بیشتر حساب کاربری Bitwarden خود را در برنامه وب کاوش کنید.</string>
<string name="learn_about_organizations_description_long">Bitwarden به شما اجازه می‌دهد تا با استفاده از یک سازمان، موارد گاوصندوق خود را با دیگران به اشتراک بگذارید. در وب سایت bitwarden.com بیشتر بیاموزید.</string>
<string name="created_x">Created %1$s</string>
<string name="created_x">ساخته شده: %1$s</string>
<string name="your_organization_requires_you_to_set_a_master_password">سازمان‌تان از شما می‌خواهد که یک کلمه عبور اصلی تنظیم کنید.</string>
<string name="set_up_an_unlock_option_to_change_your_vault_timeout_action">یک گزینه باز کردن قفل برای پایان زمان مجاز راه‌اندازی کنید.</string>
<string name="save_passkey_as_new_login">کلید عبور را به عنوان ورود جدید ذخیره کن</string>
@@ -910,10 +910,10 @@
<string name="passkey_operation_failed_because_no_item_was_selected">عملیات کلید عبور ناموفق بود زیرا هیچ موردی انتخاب نشده است.</string>
<string name="passkey_operation_failed_because_the_request_is_unsupported">عملیات کلید عبور ناموفق بود زیرا درخواست پشتیبانی نمی‌شود.</string>
<string name="self_host_server_url">نشانی اینترنتی سرور خود میزبان</string>
<string name="use_brave_autofill_integration">Use Brave autofill integration</string>
<string name="use_brave_autofill_integration">استفاده از قابلیت پر کردن خودکار Brave</string>
<string name="use_chrome_autofill_integration">استفاده از قابلیت پر کردن خودکار کروم</string>
<string name="use_chrome_beta_autofill_integration">استفاده از قابلیت پرکردن خودکار کروم (نسخه بتا)</string>
<string name="improves_login_filling_for_supported_websites_on_selected_browsers">Improves login filling for supported websites on selected browsers. Once enabled, youll be directed to browser settings to enable third-party autofill.</string>
<string name="improves_login_filling_for_supported_websites_on_selected_browsers">پر کردن خودکار ورود به حساب برای وب‌سایت‌های پشتیبانی شده در مرورگرهای انتخاب شده را بهبود می‌بخشد. پس از فعال‌سازی، به تنظیمات مرورگر هدایت می‌شوید تا پر کردن خودکار از سوی شخص ثالث را فعال کنید.</string>
<string name="show_more">نمایش بیشتر</string>
<string name="no_folder">بدون پوشه</string>
<string name="show_less">نمایش کمتر</string>
@@ -973,20 +973,20 @@
<string name="passkey_operation_failed_because_browser_x_is_not_trusted">عملیات کلید عبور ناموفق بود زیرا مرورگر (%1$s) مورد اعتماد نیست. گزینه \"اعتماد\" را انتخاب کنید تا %1$s به فهرست برنامه‌های مورد اعتماد افزوده شود یا \"لغو\" را برای توقف عملیات انتخاب کنید.</string>
<string name="passkey_operation_failed_because_the_browser_is_not_trusted">عملیات کلید عبور ناموفق بود زیرا مرورگر مورد اعتماد نیست.</string>
<string name="trust">اعتماد</string>
<string name="trusted_by_you_learn_more">These are applications or browsers that Bitwarden does not trust by default, but you trust to perform passkey operations.</string>
<string name="trusted_by_community_learn_more">These are applications not included in the Google Play Store, but Bitwarden trusts to perform passkey operations after community members use and report them as safe.</string>
<string name="trusted_by_google_learn_more">These are applications Google considers safe and are available in Google\'s Play Store.</string>
<string name="trusted_by_you">Trusted by You</string>
<string name="trusted_by_the_community">Trusted by the Community</string>
<string name="trusted_by_google">Trusted by Google</string>
<string name="privileged_apps_description">To protect users from phishing attempts, by default, Bitwarden only completes passkey operations through applications or web browsers trusted by Google or the Bitwarden community.</string>
<string name="about_privileged_applications">About privileged applications</string>
<string name="learn_more_about_privileged_apps">Learn more about privileged apps</string>
<string name="privileged_apps">Privileged apps</string>
<string name="unrecognized_browser">Unrecognized browser</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Learn more about using passkeys with Bitwarden.</string>
<string name="all_trusted_apps">All trusted apps</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Are you sure you want to stop trusting %s?</string>
<string name="installed_apps">Installed apps</string>
<string name="delete_x">Delete %s</string>
<string name="trusted_by_you_learn_more">این‌ها برنامه‌ها یا مرورگرهایی هستند که Bitwarden به طور پیش‌فرض به آن‌ها اعتماد ندارد، اما شما به آن‌ها برای انجام عملیات کلید عبور اعتماد دارید.</string>
<string name="trusted_by_community_learn_more">این‌ها برنامه‌هایی هستند که در فروشگاه Google Play وجود ندارند، اما پس از استفاده اعضای جامعه و گزارش امن بودن، Bitwarden به آن‌ها برای انجام عملیات کلید عبور اعتماد می‌کند.</string>
<string name="trusted_by_google_learn_more">این‌ها برنامه‌هایی هستند که گوگل آن‌ها را ایمن می‌داند و در فروشگاه Google Play موجود هستند.</string>
<string name="trusted_by_you">مورد اعتماد شما</string>
<string name="trusted_by_the_community">مورد اعتماد جامعه</string>
<string name="trusted_by_google">مورد اعتماد گوگل</string>
<string name="privileged_apps_description">برای محافظت از کاربران در برابر تلاش‌های فیشینگ، به‌صورت پیش‌فرض، Bitwarden فقط عملیات مربوط به کلیدهای عبور را از طریق برنامه‌ها یا مرورگرهای وبی انجام می‌دهد که مورد اعتماد گوگل یا جامعه‌ی Bitwarden باشند.</string>
<string name="about_privileged_applications">درباره‌ی برنامه‌های دارای امتیاز ویژه</string>
<string name="learn_more_about_privileged_apps">اطلاعات بیشتر درباره‌ی برنامه‌های دارای امتیاز ویژه</string>
<string name="privileged_apps">برنامه‌های دارای امتیاز ویژه</string>
<string name="unrecognized_browser">مرورگر شناسایی نشده</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">اطلاعات بیشتر درباره‌ی استفاده از کلیدهای عبور با Bitwarden.</string>
<string name="all_trusted_apps">تمام برنامه‌های مورد اعتماد</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">آیا مطمئن هستید که می‌خواهید دیگر به %s اعتماد نکنید؟</string>
<string name="installed_apps">برنامه‌های نصب شده</string>
<string name="delete_x">حذف %s</string>
</resources>

View File

@@ -11,42 +11,42 @@
<string name="copy_password">Copia la password</string>
<string name="copy_username">Copia il nome utente</string>
<string name="delete">Elimina l\'elemento</string>
<string name="deleting">Eliminazione in corso...</string>
<string name="do_you_really_want_to_delete">Vuoi davvero eliminare questo elemento? L\'azione è irreversibile.</string>
<string name="deleting">Eliminazione in corso</string>
<string name="do_you_really_want_to_delete">Vuoi davvero eliminare questo elemento? Questa azione è irreversibile.</string>
<string name="edit">Modifica l\'elemento</string>
<string name="edit_folder">Modifica la cartella</string>
<string name="email">Indirizzo email</string>
<string name="email_address">Indirizzo email</string>
<string name="enter_pin">Inserisci il PIN</string>
<string name="enter_pin">Inserisci il codice PIN</string>
<string name="favorites">Importanti</string>
<string name="folder">Cartella</string>
<string name="folder_created">Nuova cartella creata</string>
<string name="folder_created">Cartella creata</string>
<string name="folder_deleted">Cartella eliminata</string>
<string name="folder_none">Nessuna cartella</string>
<string name="folders">Cartelle</string>
<string name="folder_updated">Cartella salvata</string>
<string name="hide">Nascondi</string>
<string name="internet_connection_required_message">Connettiti a internet prima di continuare.</string>
<string name="internet_connection_required_message">Verifica la connessione a internet prima di continuare</string>
<string name="internet_connection_required_title">Connessione a internet necessaria</string>
<string name="invalid_master_password">Inserisci la password corretta</string>
<string name="invalid_pin">Inserisci il PIN corretto</string>
<string name="invalid_master_password">Password principale non valida</string>
<string name="invalid_pin">Codice PIN non valido</string>
<string name="launch">Avvia</string>
<string name="log_in_verb">Accedi</string>
<string name="log_in_noun">Login</string>
<string name="log_out">Esci</string>
<string name="logout_confirmation">Vuoi davvero disconnetterti da questo account?</string>
<string name="logout_confirmation">Vuoi davvero uscire da questo account?</string>
<string name="remove_account">Rimuovi l\'account</string>
<string name="remove_account_confirmation">Vuoi davvero rimuovere questo account?</string>
<string name="account_already_added">Account già aggiunto</string>
<string name="switch_to_already_added_account_confirmation">Vuoi passare a questo account?</string>
<string name="master_password">Password principale</string>
<string name="master_password_required">Password principale (obbligatoria)</string>
<string name="new_master_password_required">Nuova parola d\'accesso principale (obbligatoria)</string>
<string name="master_password_required">Password principale (necessaria)</string>
<string name="new_master_password_required">Nuova password principale (necessaria)</string>
<string name="more">Altro</string>
<string name="my_vault">Cassaforte</string>
<string name="name">Nome</string>
<string name="item_name_required">Nome dell\'elemento (obbligatorio)</string>
<string name="send_name_required">"Nome per l'invio (richiesto)"</string>
<string name="item_name_required">Nome dell\'elemento (necessario)</string>
<string name="send_name_required">"Nome del Send (necessario)"</string>
<string name="no">No</string>
<string name="notes">Note</string>
<string name="private_notes">Note private</string>
@@ -54,27 +54,27 @@
<string name="password">Password</string>
<string name="save">Salva</string>
<string name="move">Sposta</string>
<string name="saving">Salvataggio in corso...</string>
<string name="saving">Salvataggio in corso</string>
<string name="settings">Impostazioni</string>
<string name="show">Mostra</string>
<string name="item_deleted">Elemento eliminato</string>
<string name="submit">Continua</string>
<string name="sync">Sincronizza</string>
<string name="uri">URL</string>
<string name="website_uri">Sito web (URI)</string>
<string name="website_uri">Sito web (URL)</string>
<string name="username">Nome utente</string>
<string name="validation_field_required">Compila il campo \"%1$s\"</string>
<string name="you_must_attach_a_file_to_save_this_send">È necessario allegare un file per salvare questo Send.</string>
<string name="validation_field_required">Campo \"%1$s\" necessario</string>
<string name="you_must_attach_a_file_to_save_this_send">Allega un file per salvare questo Send</string>
<string name="value_has_been_copied">%1$s copiato/a</string>
<string name="verify_master_password">Sblocca la cassaforte</string>
<string name="verify_pin">Verifica PIN</string>
<string name="verify_pin">Sblocca la cassaforte</string>
<string name="version">Versione</string>
<string name="view">Visualizza l\'elemento</string>
<string name="yes"></string>
<string name="yes">Conferma</string>
<string name="account">Account</string>
<string name="account_created_success">Il tuo nuovo account è stato creato!</string>
<string name="set_bitwarden_as_passkey_manager_description">Imposta Bitwarden come il tuo fornitore delle passkey nelle impostazioni del dispositivo.</string>
<string name="avoid_ambiguous_characters">Evita i caratteri ambigui</string>
<string name="set_bitwarden_as_passkey_manager_description">Imposta Bitwarden come fornitore di passkey nelle impostazioni del dispositivo</string>
<string name="avoid_ambiguous_characters">Nessun carattere ambiguo</string>
<string name="bitwarden_autofill_service">Servizio di riempimento automatico di Bitwarden</string>
<string name="change_master_password">Cambio della password principale</string>
<string name="close">Chiudi</string>
@@ -82,18 +82,18 @@
<string name="create_account">Crea un account</string>
<string name="create_an_account">Crea un account</string>
<string name="edit_item">Modifica l\'elemento</string>
<string name="edit_login">Modifica login</string>
<string name="edit_card">Modifica carta</string>
<string name="edit_identity">Modifica identità</string>
<string name="edit_note">Modifica nota</string>
<string name="edit_passkey">Modifica passkey</string>
<string name="enter_email_for_hint">Inserisci l\'indirizzo email dell\'account per ricevere il suggerimento per la password principale.</string>
<string name="edit_login">Modifica il login</string>
<string name="edit_card">Modifica la carta</string>
<string name="edit_identity">Modifica l\'identità</string>
<string name="edit_note">Modifica la nota</string>
<string name="edit_passkey">Modifica la passkey</string>
<string name="enter_email_for_hint">Inserisci l\'indirizzo email dell\'account per ricevere il suggerimento per la password principale</string>
<string name="favorite">Segna come importante</string>
<string name="unfavorite">Non preferito</string>
<string name="unfavorite">Segna come non importante</string>
<string name="fingerprint">Impronta digitale</string>
<string name="generate_password">Genera password</string>
<string name="generate_password">Genera una password</string>
<string name="get_password_hint">Invia il suggerimento per la password principale</string>
<string name="import_items">Importa elementi</string>
<string name="import_items">Importa degli elementi</string>
<string name="last_sync">Ultima sincronizzazione:</string>
<string name="length">Lunghezza</string>
<string name="lock">Blocca</string>
@@ -101,124 +101,124 @@
<string name="one_hour">1 ora</string>
<string name="one_minute">1 minuto</string>
<string name="four_hours">4 ore</string>
<string name="immediately">Immediato</string>
<string name="vault_timeout_log_out_confirmation">La disconnessione dall\'account rimuoverà tutti gli accessi alla tua cassaforte e richiederà l\'accesso online dopo il periodo di timeout. Vuoi davvero procedere?</string>
<string name="logging_in">Accesso in corso...</string>
<string name="immediately">Immediata</string>
<string name="vault_timeout_log_out_confirmation">Dopo la scadenza della sessione verrà rimosso l\'accesso alla cassaforte e sarà necessario l\'accesso online. Vuoi davvero impostare questa azione?</string>
<string name="logging_in">Accesso in corso</string>
<string name="login_to_bitwarden">Accedi a Bitwarden</string>
<string name="master_password_confirmation_val_message">Conferma correttamente la password</string>
<string name="master_password_description">La password principale ti serve per accedere alla tua cassaforte. È molto importante non dimenticarla. Non possiamo aiutarti a recuperare questa password se la dimentichi.</string>
<string name="master_password_confirmation_val_message">Password principale non corrispondente</string>
<string name="master_password_description">La password principale è necessaria per accedere alla cassaforte. È molto importante non dimenticarla. Non è possibile recuperare questa password nel caso in cui la dimenticassi.</string>
<string name="master_password_hint">Suggerimento per la password principale (opzionale)</string>
<string name="master_password_hint_description">Questo suggerimento può aiutarti a ricordare la password nel caso in cui la dimenticassi.</string>
<string name="master_password_length_val_message_x">Inserisci una password lunga almeno %1$s caratteri</string>
<string name="master_password_hint_description">Questo suggerimento può aiutarti a ricordare la password principale nel caso in cui la dimenticassi.</string>
<string name="master_password_length_val_message_x">Inserisci una password con almeno %1$s caratteri</string>
<string name="min_numbers">Numero minimo di numeri</string>
<string name="min_special">Numero minimo di caratteri speciali</string>
<string name="never">Nessuno</string>
<string name="new_item_created">Elemento aggiunto</string>
<string name="no_cards">Non ci sono carte nella tua cassaforte.</string>
<string name="new_card">Nuova carta</string>
<string name="no_logins">Non ci sono accessi nella tua cassaforte.</string>
<string name="no_identities">Non ci sono identità nella tua cassaforte.</string>
<string name="new_identity">Nuova identità</string>
<string name="no_notes">Non ci sono note nella tua cassaforte.</string>
<string name="new_note">Nuova nota</string>
<string name="new_passkey">Nuova passkey</string>
<string name="new_item">Nuovo elemento</string>
<string name="new_ssh_key">Nuova chiave SSH</string>
<string name="no_text_sends">Non ci sono messaggi inviati nella tua cassaforte.</string>
<string name="no_file_sends">Non ci sono file Send nella tua cassaforte.</string>
<string name="no_ssh_keys">Non ci sono chiavi SSH nella tua cassaforte.</string>
<string name="new_text_send">Nuovo testo Send</string>
<string name="new_file_send">Nuovo file Send</string>
<string name="never">Mai</string>
<string name="new_item_created">Elemento creato</string>
<string name="no_cards">Nessuna carta nella cassaforte</string>
<string name="new_card">Crea una carta</string>
<string name="no_logins">Nessun login nella cassaforte</string>
<string name="no_identities">Nessuna identità nella cassaforte</string>
<string name="new_identity">Crea un\'identità</string>
<string name="no_notes">Nessuna nota nella cassaforte</string>
<string name="new_note">Crea una nota</string>
<string name="new_passkey">Crea una passkey</string>
<string name="new_item">Crea un nuovo elemento</string>
<string name="new_ssh_key">Crea una chiave SSH</string>
<string name="no_text_sends">Nessun testo Send nella cassaforte</string>
<string name="no_file_sends">Nessun file Send nella cassaforte</string>
<string name="no_ssh_keys">Nessuna chiave SSH nella cassaforte</string>
<string name="new_text_send">Crea un testo Send</string>
<string name="new_file_send">Crea un file Send</string>
<string name="no_username">Nessun nome utente</string>
<string name="options">Opzioni</string>
<string name="other">Altro</string>
<string name="password_generator">Generatore di password</string>
<string name="password_hint">Suggerimento per la password</string>
<string name="password_hint_alert">Abbiamo inviato un\'email con il suggerimento per la password principale.</string>
<string name="password_override_alert">Vuoi davvero sovrascrivere la password?</string>
<string name="retype_master_password">Conferma la password principale</string>
<string name="retype_new_master_password_required">Ridigita la nuova parola d\'accesso principale (obbligatoria)</string>
<string name="retype_master_password_required">Ridigita la password principale (obbligatorio)</string>
<string name="password_hint_alert">Abbiamo inviato un\'email con il suggerimento per la password principale</string>
<string name="password_override_alert">Vuoi davvero sovrascrivere questa password?</string>
<string name="retype_master_password">Conferma della password principale</string>
<string name="retype_new_master_password_required">Conferma della nuova password (necessaria)</string>
<string name="retype_master_password_required">Conferma della password principale (necessaria)</string>
<string name="search_vault">Cerca nella cassaforte</string>
<string name="select">Seleziona</string>
<string name="item_details">Dettagli elemento</string>
<string name="item_updated">Elemento salvato</string>
<string name="submitting">Invio in corso...</string>
<string name="syncing">Sincronizzazione in corso...</string>
<string name="item_details">Dettagli dell\'elemento</string>
<string name="item_updated">Elemento aggiornato</string>
<string name="submitting">Invio in corso</string>
<string name="syncing">Sincronizzazione in corso</string>
<string name="syncing_complete">Sincronizzazione completata</string>
<string name="two_step_login">Configurazione 2FA (accesso in due passaggi)</string>
<string name="two_step_login">Configurazione 2FA (autenticazione a due fattori)</string>
<string name="unlock_with">Sblocco con %1$s</string>
<string name="unlock_with_pin">Sblocco con Codice PIN</string>
<string name="verification_code">Codice di verifica</string>
<string name="view_login">Visualizza login</string>
<string name="view_card">Visualizza carta</string>
<string name="view_identity">Visualizza identità</string>
<string name="view_note">Visualizza nota</string>
<string name="view_passkey">Visualizza passkey</string>
<string name="view_login">Visualizza il login</string>
<string name="view_card">Visualizza la carta</string>
<string name="view_identity">Visualizza l\'identità</string>
<string name="view_note">Visualizza la nota</string>
<string name="view_passkey">Visualizza la passkey</string>
<string name="web_vault">Cassaforte web di Bitwarden</string>
<string name="items">Elementi</string>
<string name="items_for_uri">Elementi per %1$s</string>
<string name="no_items_for_uri">Nessun elemento per %1$s</string>
<string name="no_items_for_vault">Nessun elemento nella cassaforte corrispondente a \"%1$s\"</string>
<string name="search_for_a_login_or_add_a_new_login">Cerca un login o aggiungi un nuovo login</string>
<string name="no_items_for_vault">Nessun elemento corrispondente a \"%1$s\"</string>
<string name="search_for_a_login_or_add_a_new_login">Cerca o crea un login</string>
<string name="disabled">Disabilitato</string>
<string name="bitwarden_autofill_service_alert2">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.</string>
<string name="autofill">Riempimento automatico</string>
<string name="autofill_or_view">Vuoi riempire automaticamente o vedere questo elemento?</string>
<string name="autofill_or_view">Seleziona l\'azione</string>
<string name="search">Cerca</string>
<string name="learn_org">Scopri di più sulle organizzazioni</string>
<string name="authenticator_app_title">App di autenticazione</string>
<string name="enter_verification_code_app">Inserisci il codice di verifica a 6 cifre dalla tua app di autenticazione.</string>
<string name="enter_verification_code_email">Inserisci il codice di verifica a 6 cifre inviato all\'indirizzo %1$s.</string>
<string name="enter_verification_code_new_device">Non riconosciamo questo dispositivo. Inserisci il codice di verifica a 8 cifre che è stato inviato via e-mail a %1$s.</string>
<string name="enter_verification_code_app">Inserisci il codice di verifica a 6 cifre dell\'app di autenticazione</string>
<string name="enter_verification_code_email">Inserisci il codice di verifica a 6 cifre inviato a %1$s</string>
<string name="enter_verification_code_new_device">Dispositivo non riconosciuto. Inserisci il codice di verifica a 8 cifre inviato a %1$s.</string>
<string name="recovery_code_title">Codice di recupero</string>
<string name="remember">Ricorda</string>
<string name="remember_email">Ricorda e-mail</string>
<string name="send_verification_code_again">Invia email con codice di verifica di nuovo</string>
<string name="verification_email_not_sent">Impossibile inviare l\'email con il codice di verifica. Riprova.</string>
<string name="remember_email">Ricorda l\'indirizzo email</string>
<string name="send_verification_code_again">Invia un nuovo codice di verifica</string>
<string name="verification_email_not_sent">Invio dell\'email di verifica non riuscito</string>
<string name="verification_email_sent">Email di verifica inviata</string>
<string name="yubi_key_instruction">Per continuare, appoggia la tua YubiKey NEO sul retro del dispositivo o inserisci la tua Yubikey nella porta USB, poi premi il suo pulsante.</string>
<string name="yubi_key_instruction">Appoggia la YubiKey NEO sul retro del dispositivo o inserisci la Yubikey nella porta USB e premi il pulsante</string>
<string name="yubi_key_title">Chiave di sicurezza YubiKey</string>
<string name="add_new_attachment">Aggiungi un allegato</string>
<string name="attachments">File allegati</string>
<string name="unable_to_download_file">Impossibile scaricare il file.</string>
<string name="downloading">Download in corso...</string>
<string name="attachment_large_warning">La dimensione di questo allegato è %1$s. Vuoi scaricarlo?</string>
<string name="unable_to_download_file">Scaricamento del file non riuscito</string>
<string name="downloading">Scaricamento in corso</string>
<string name="attachment_large_warning">La dimensione di questo allegato è %1$s. Vuoi davvero scaricare questo file?</string>
<string name="authenticator_key">Chiave 2FA (TOTP)</string>
<string name="verification_code_totp">Codice 2FA (TOTP)</string>
<string name="authenticator_key_added">Chiave 2FA aggiunta</string>
<string name="authenticator_key_read_error">Lettura della chiave 2FA non riuscita</string>
<string name="point_your_camera_at_the_qr_code">Inquadra il codice QR con la fotocamera.
<string name="point_your_camera_at_the_qr_code">Posiziona il codice QR all\'interno del quadrato.
La scansione è automatica.</string>
<string name="copy_totp">Copia il codice 2FA</string>
<string name="copy_totp_automatically_description">Se un login ha una chiave di autenticazione, copia automaticamente il codice 2FA negli appunti quando riempi automaticamente il login.</string>
<string name="copy_totp_automatically">Copia codice 2FA automaticamente</string>
<string name="copy_totp_automatically_description">Copia automaticamente il codice 2FA negli appunti quando riempi automaticamente un login</string>
<string name="copy_totp_automatically">Copia automatica del codice 2FA</string>
<string name="premium_required">Passa a un abbonamento premium per utilizzare questa funzionalità</string>
<string name="attachment_deleted">Allegato eliminato</string>
<string name="choose_file">Seleziona il file</string>
<string name="file">File</string>
<string name="no_file_chosen">Nessun file selezionato</string>
<string name="no_attachments">Nessun file allegato</string>
<string name="file_source">Sorgente file</string>
<string name="max_file_size">Seleziona un file inferiore o uguale a 100 MB.</string>
<string name="required_max_file_size">Richiesto. La dimensione massima del file è 100 MB.</string>
<string name="file_source">Origine del file</string>
<string name="max_file_size">Seleziona un file inferiore o uguale a 100 MB</string>
<string name="required_max_file_size">Limite di 100 MB superato</string>
<string name="learn_more">Scopri di più</string>
<string name="api_url">URL del server API</string>
<string name="client_certificate_mtls">Certificato client (mTLS)</string>
<string name="certificate_used_for_client_authentication">Certificato usato per l\'autenticazione del client.</string>
<string name="certificate_used_for_client_authentication">Certificato usato per l\'autenticazione del client</string>
<string name="custom_environment">Ambiente personalizzato (opzionale)</string>
<string name="custom_environment_footer">Per utenti avanzati. Puoi specificare l\'URL di base di ogni servizio indipendentemente.</string>
<string name="environment_saved">URL dell\'ambiente salvati</string>
<string name="identity_url">URL del server di identità</string>
<string name="self_hosted_environment">Ambiente self-hosted</string>
<string name="self_hosted_environment_footer">Inserisci l\'URL principale dell\'installazione Bitwarden self-hosted.</string>
<string name="self_hosted_environment_footer">Inserisci l\'URL principale dell\'installazione Bitwarden self-hosted</string>
<string name="server_url">URL del server</string>
<string name="web_vault_url">URL della cassaforte web</string>
<string name="custom_fields">Campi personalizzati</string>
<string name="copy_number">Copia il numero</string>
<string name="copy_security_code">Copia il CVC</string>
<string name="number">Numero</string>
<string name="security_code">Codice di sicurezza</string>
<string name="copy_number">Copia il numero della carta</string>
<string name="copy_security_code">Copia il codice di sicurezza</string>
<string name="number">Numero della carta</string>
<string name="security_code">Codice di sicurezza (CVC/CVV)</string>
<string name="type_card">Carta</string>
<string name="type_identity">Identità</string>
<string name="type_login">Login</string>
@@ -228,12 +228,12 @@ La scansione è automatica.</string>
<string name="address3">Indirizzo 3</string>
<string name="april">Aprile</string>
<string name="august">Agosto</string>
<string name="brand">Marca</string>
<string name="card_details">Dettagli carta</string>
<string name="brand">Circuito</string>
<string name="card_details">Dettagli della carta</string>
<string name="cardholder_name">Titolare della carta</string>
<string name="city_town">Città / Comune</string>
<string name="city_town">Città o comune</string>
<string name="company">Azienda</string>
<string name="country">Nazione</string>
<string name="country">Paese</string>
<string name="december">Dicembre</string>
<string name="dr">Dott</string>
<string name="expiration_month">Mese di scadenza</string>
@@ -244,8 +244,8 @@ La scansione è automatica.</string>
<string name="july">Luglio</string>
<string name="june">Giugno</string>
<string name="last_name">Cognome</string>
<string name="full_name">Nome e cognome</string>
<string name="license_number">Numero patente</string>
<string name="full_name">Nome completo</string>
<string name="license_number">Numero della patente</string>
<string name="march">Marzo</string>
<string name="may">Maggio</string>
<string name="middle_name">Secondo nome</string>
@@ -255,17 +255,17 @@ La scansione è automatica.</string>
<string name="mx">Neutro</string>
<string name="november">Novembre</string>
<string name="october">Ottobre</string>
<string name="passport_number">Numero passaporto</string>
<string name="phone">Telefono</string>
<string name="passport_number">Numero del passaporto</string>
<string name="phone">Numero di telefono</string>
<string name="september">Settembre</string>
<string name="ssn">Codice fiscale/Previdenza sociale</string>
<string name="state_province">Stato / Provincia</string>
<string name="ssn">Codice fiscale</string>
<string name="state_province">Stato o regione</string>
<string name="title">Titolo</string>
<string name="zip_postal_code">CAP</string>
<string name="address">Indirizzo</string>
<string name="expiration">Scadenza</string>
<string name="show_website_icons">Mostra icone dei siti</string>
<string name="show_website_icons_description">Mostra un piccolo logo riconoscibile accanto a ogni login.</string>
<string name="show_website_icons">Visualizza le icone dei siti web</string>
<string name="show_website_icons_description">Visualizza un piccolo logo riconoscibile accanto a ogni login</string>
<string name="icons_url">URL del server di icone</string>
<string name="vault_is_locked">La cassaforte è bloccata</string>
<string name="go_to_my_vault">Vai alla cassaforte</string>
@@ -274,32 +274,32 @@ La scansione è automatica.</string>
<string name="no_items_folder">Nessun elemento in questa cartella</string>
<string name="no_items_trash">Nessun elemento nel cestino</string>
<string name="autofill_accessibility_summary">Assiste con il riempimento dei campi nome utente e password in altre applicazioni e nei siti web.</string>
<string name="autofill_service_description">Il riempimento automatico di Bitwarden usa il servizio di riempimento di sistema per inserire facilmente le credenziali di accesso nei campi di autenticazione di pagine Web e altre app.</string>
<string name="autofill_service_description">Il riempimento automatico di Bitwarden usa il servizio di riempimento automatico di sistema per compilare i campi con le credenziali salvate</string>
<string name="bitwarden_autofill_go_to_settings">Non siamo riusciti ad aprire le impostazioni del riempimento automatico di Android per te. Puoi navigare manualmente nelle impostazioni di riempimento automatico dalle Impostazioni di Android &gt; Cerca Impostazioni &gt; Cerca \"Password e autofill\"</string>
<string name="custom_field_name">Nome del campo</string>
<string name="field_type_boolean">Booleano</string>
<string name="field_type_boolean">On/Off</string>
<string name="field_type_hidden">Nascosto</string>
<string name="field_type_linked">Collegato</string>
<string name="field_type_text">Testo</string>
<string name="select_type_field">Tipo di campo personalizzato</string>
<string name="remove">Rimuovi</string>
<string name="new_uri">Aggiungi un URL</string>
<string name="add_website">Aggiungi sito web</string>
<string name="add_website">Aggiungi un sito web</string>
<string name="base_domain">Dominio di base</string>
<string name="default_text">Predefinito</string>
<string name="exact">Esatto</string>
<string name="host">Host</string>
<string name="reg_ex">Espressione regolare</string>
<string name="reg_ex">Espressione regolare (regex)</string>
<string name="starts_with">Inizio</string>
<string name="uri_match_detection">Metodo di corrispondenza dell\'URL</string>
<string name="match_detection">Metodo di corrispondenza</string>
<string name="autofill_and_save">Riempi automaticamente e salva</string>
<string name="autofill_and_save">Riempimento automatico e associamento</string>
<string name="organization">Organizzazione</string>
<string name="try_again">Riprova</string>
<string name="created">Creato: %1$s</string>
<string name="password_last_updated">Ultimo aggiornamento password: %1$s</string>
<string name="created">Creazione: %1$s</string>
<string name="password_last_updated">Ultimo aggiornamento della password: %1$s</string>
<string name="last_edited">Ultima modifica: %1$s</string>
<string name="invalid_email">Inserisci un indirizzo email valido</string>
<string name="invalid_email">Indirizzo email non valido</string>
<string name="cards">Carte</string>
<string name="identities">Identità</string>
<string name="identification">Identificazione</string>
@@ -307,28 +307,28 @@ La scansione è automatica.</string>
<string name="secure_notes">Note sicure</string>
<string name="personal_details">Dettagli personali</string>
<string name="contact_info">Informazioni di contatto</string>
<string name="check_password_for_data_breaches">Controlla la parola d\'accesso per le violazioni dei dati</string>
<string name="password_exposed">Questa password è stata esposta %1$s volta/e nelle violazioni di dati note. Cambiala con una più sicura.</string>
<string name="check_password_for_data_breaches">Cerca la password nelle violazioni di dati</string>
<string name="password_exposed">Questa password è stata esposta %1$s volta/e nelle violazioni di dati note. Cambiala subito.</string>
<string name="password_safe">Questa password non è stata trovata in alcuna violazione di dati nota</string>
<string name="identity_name">Nome dell\'identità</string>
<string name="value">Valore</string>
<string name="password_history">Cronologia delle password</string>
<string name="password_history_count"><annotation link="passwordHistory">Cronologia parole d\'accesso: <annotation arg="0">%1$s</annotation></annotation></string>
<string name="password_history_count"><annotation link="passwordHistory">Cronologia delle password: <annotation arg="0">%1$s</annotation></annotation></string>
<string name="types">Tipo</string>
<string name="no_passwords_to_list">Nessuna password</string>
<string name="search_file_sends">Cerca Send di tipo file</string>
<string name="search_text_sends">Cerca Send di testo</string>
<string name="search_file_sends">Cerca nei file Send</string>
<string name="search_text_sends">Cerca nei testi Send</string>
<string name="type">Scegli il tipo di elemento</string>
<string name="move_down">Sposta in basso</string>
<string name="move_up">Sposta in alto</string>
<string name="owner">Propriet.</string>
<string name="no_collections_to_list">Nessuna raccolta</string>
<string name="moved_item_to_org">%1$s spostato in %2$s</string>
<string name="select_one_collection">Devi selezionare almeno una raccolta.</string>
<string name="select_one_collection">Seleziona almeno una raccolta</string>
<string name="share">Condividi</string>
<string name="move_to_organization">Sposta in organizzazione</string>
<string name="no_orgs_to_list">Nessuna organizzazione</string>
<string name="move_to_org_desc">Scegli un\'organizzazione in cui vuoi spostare questo elemento. Spostarlo in un\'organizzazione trasferisce la proprietà dell\'elemento all\'organizzazione. Una volta spostato, non sarai più il proprietario diretto di questo elemento.</string>
<string name="move_to_org_desc">Scegli l\'organizzazione in cui vuoi spostare questo elemento. Ciò rimuove a te la proprietà dell\'elemento e la trasferisce all\'organizzazione.</string>
<string name="number_of_words">Numero di parole</string>
<string name="passphrase">Passphrase</string>
<string name="word_separator">Separatore delle parole</string>
@@ -336,14 +336,14 @@ La scansione è automatica.</string>
<string name="generator">Generatore</string>
<string name="no_folders_to_list">Nessuna cartella</string>
<string name="fingerprint_phrase">Frase impronta</string>
<string name="your_accounts_fingerprint">Frase impronta del tuo account</string>
<string name="export_vault">Esporta cassaforte</string>
<string name="your_accounts_fingerprint">Frase impronta dell\'account</string>
<string name="export_vault">Esporta la cassaforte</string>
<string name="lock_now">Blocca</string>
<string name="pin">PIN</string>
<string name="pin">Codice PIN</string>
<string name="unlock">Sblocca</string>
<string name="thirty_minutes">30 minuti</string>
<string name="set_pin_description">Imposta il codice PIN che sarà richiesto per sbloccare Bitwarden. Lo sblocco con PIN sarà rimosso se ti disconnetti dall\'account.</string>
<string name="logged_in_as_on">Accesso effettuato come %1$s su %2$s.</string>
<string name="set_pin_description">Imposta il codice PIN necessario per sbloccare Bitwarden. Lo sblocco con PIN verrà rimosso se esci dall\'account.</string>
<string name="logged_in_as_on">Accesso effettuato come %1$s a %2$s.</string>
<string name="vault_locked_master_password">La cassaforte è bloccata. Inserisci la password principale.</string>
<string name="vault_locked_pin">La cassaforte è bloccata. Inserisci il codice PIN.</string>
<string name="dark">Scuro</string>
@@ -353,8 +353,8 @@ La scansione è automatica.</string>
<string name="thirty_seconds">30 secondi</string>
<string name="twenty_seconds">20 secondi</string>
<string name="two_minutes">2 minuti</string>
<string name="clear_clipboard">Cancella gli appunti</string>
<string name="clear_clipboard_description">Cancella automaticamente i valori copiati dagli appunti.</string>
<string name="clear_clipboard">Cancellazione automatica degli appunti</string>
<string name="clear_clipboard_description">Cancella automaticamente i valori copiati negli appunti dopo un determinato periodo di tempo</string>
<string name="default_uri_match_detection">Metodo di corrispondenza degli URL predefinito</string>
<string name="default_uri_match_detection_description">Scegli il modo predefinito in cui il rilevamento della corrispondenza URI è gestito per i login quando si eseguono azioni come il riempimento automatico.</string>
<string name="theme">Tema</string>
@@ -425,9 +425,9 @@ La scansione è automatica.</string>
<string name="privacy_policy">Informativa sulla Privacy</string>
<string name="passkey_management">Gestione delle passkey</string>
<string name="autofill_services">Servizi di riempimento automatico</string>
<string name="display_autofill_suggestions">Display autofill suggestions</string>
<string name="autofill_suggestions_inline">Inline (shows in keyboard)</string>
<string name="autofill_suggestions_popup">Popup (shows over input field)</string>
<string name="display_autofill_suggestions">Suggerimenti riempimento automatico</string>
<string name="autofill_suggestions_inline">In linea (incluso nella tastiera)</string>
<string name="autofill_suggestions_popup">Popup (sopra il campo da compilare)</string>
<string name="accessibility">Usa il servizio di accessibilità</string>
<string name="accessibility_description5">Necessario per usare il riquadro di azione rapida di riempimento automatico.</string>
<string name="personal_ownership_policy_in_effect">Una politica dell\'organizzazione sta influenzando le tue opzioni di proprietà.</string>
@@ -658,7 +658,7 @@ Vuoi passare a questo account?</string>
<string name="bitwarden_help_center">Centro assistenza Bitwarden</string>
<string name="sync_now">Sincronizza</string>
<string name="unlock_options">Opzioni di sblocco</string>
<string name="session_timeout">Timeout della sessione</string>
<string name="session_timeout">Scadenza della sessione</string>
<string name="session_timeout_action">Azione programmata</string>
<string name="account_fingerprint_phrase">Frase impronta dell\'account</string>
<string name="passkey_management_explanation_long">Usa Bitwarden per salvare nuove passkey ed accedere con le passkey memorizzate nella tua cassaforte.</string>
@@ -984,9 +984,9 @@ Vuoi passare a questo account?</string>
<string name="learn_more_about_privileged_apps">Scopri di più sulle app privilegiate</string>
<string name="privileged_apps">App privilegiate</string>
<string name="unrecognized_browser">Browser non riconosciuto</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Learn more about using passkeys with Bitwarden.</string>
<string name="all_trusted_apps">All trusted apps</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Are you sure you want to stop trusting %s?</string>
<string name="installed_apps">Installed apps</string>
<string name="delete_x">Delete %s</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Scopri di più sull\'utilizzo delle passkey con Bitwarden</string>
<string name="all_trusted_apps">Tutte le app affidabili</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Sei sicuro di voler segnare %s come non affidabile?</string>
<string name="installed_apps">App installate</string>
<string name="delete_x">Elimina %s</string>
</resources>

View File

@@ -41,16 +41,16 @@
<string name="switch_to_already_added_account_confirmation">今すぐ切り替えますか?</string>
<string name="master_password">マスターパスワード</string>
<string name="master_password_required">マスターパスワード (必須)</string>
<string name="new_master_password_required">New master password (required)</string>
<string name="new_master_password_required">新しいマスターパスワード (必須)</string>
<string name="more">詳細</string>
<string name="my_vault">保管庫</string>
<string name="name">名前</string>
<string name="item_name_required">Item name (required)</string>
<string name="send_name_required">"Send name (required)"</string>
<string name="item_name_required">アイテム名 (必須)</string>
<string name="send_name_required">"Send の名前 (必須)"</string>
<string name="no">いいえ</string>
<string name="notes">メモ</string>
<string name="private_notes">Private notes</string>
<string name="okay">Okay</string>
<string name="private_notes">プライベートノート</string>
<string name="okay">OK</string>
<string name="password">パスワード</string>
<string name="save">保存</string>
<string name="move">移動</string>
@@ -61,10 +61,10 @@
<string name="submit">送信</string>
<string name="sync">同期</string>
<string name="uri">URI</string>
<string name="website_uri">Website (URI)</string>
<string name="website_uri">ウェブサイト (URI)</string>
<string name="username">ユーザー名</string>
<string name="validation_field_required">%1$s は必須です。</string>
<string name="you_must_attach_a_file_to_save_this_send">You must attach a file to save this send.</string>
<string name="you_must_attach_a_file_to_save_this_send">このSendを保存するにはファイルを添付する必要があります。</string>
<string name="value_has_been_copied">%1$s をコピーしました。</string>
<string name="verify_master_password">マスターパスワードの確認</string>
<string name="verify_pin">PIN の確認</string>
@@ -80,16 +80,16 @@
<string name="close">閉じる</string>
<string name="continue_text">続行</string>
<string name="create_account">アカウントの作成</string>
<string name="create_an_account">Create an account</string>
<string name="create_an_account">アカウントを作成</string>
<string name="edit_item">アイテムの編集</string>
<string name="edit_login">Edit login</string>
<string name="edit_card">Edit card</string>
<string name="edit_identity">Edit identity</string>
<string name="edit_note">Edit note</string>
<string name="edit_passkey">Edit passkey</string>
<string name="edit_login">ログイン情報の編集</string>
<string name="edit_card">カードの編集</string>
<string name="edit_identity">身分証の編集</string>
<string name="edit_note">メモの編集</string>
<string name="edit_passkey">パスキーを編集</string>
<string name="enter_email_for_hint">マスターパスワードのヒントを受信するため、アカウントのメールアドレスを入力してください。</string>
<string name="favorite">お気に入り</string>
<string name="unfavorite">Unfavorite</string>
<string name="unfavorite">お気に入り解除</string>
<string name="fingerprint">指紋認証</string>
<string name="generate_password">パスワードの自動生成</string>
<string name="get_password_hint">マスターパスワードのヒントを取得</string>
@@ -104,7 +104,7 @@
<string name="immediately">即時</string>
<string name="vault_timeout_log_out_confirmation">ログアウトすると保管庫へのすべてのアクセスが制限され、タイムアウト期間後にオンライン認証が必要になります。 この設定を使用してもよろしいですか?</string>
<string name="logging_in">ログイン中...</string>
<string name="login_to_bitwarden">Log in to Bitwarden</string>
<string name="login_to_bitwarden">Bitwarden にログイン</string>
<string name="master_password_confirmation_val_message">パスワードの確認が正しくありません。</string>
<string name="master_password_description">マスターパスワードは、パスワード保管庫へのアクセスに使用するパスワードです。マスターパスワードを忘れないように注意してください。忘れた場合、パスワードを回復する方法はありません。</string>
<string name="master_password_hint">マスターパスワードのヒント (省略可能)</string>
@@ -114,21 +114,21 @@
<string name="min_special">最低限必要な記号の個数</string>
<string name="never">なし</string>
<string name="new_item_created">新しいアイテムを作成しました。</string>
<string name="no_cards">There are no cards in your vault.</string>
<string name="new_card">New card</string>
<string name="no_logins">There are no logins in your vault.</string>
<string name="no_identities">There are no identities in your vault.</string>
<string name="new_identity">New identity</string>
<string name="no_notes">There are no notes in your vault.</string>
<string name="new_note">New note</string>
<string name="new_passkey">New passkey</string>
<string name="new_item">New item</string>
<string name="new_ssh_key">New SSH key</string>
<string name="no_text_sends">There are no text Sends in your vault.</string>
<string name="no_file_sends">There are no file Sends in your vault.</string>
<string name="no_ssh_keys">There are no SSH keys in your vault.</string>
<string name="new_text_send">New text Send</string>
<string name="new_file_send">New file Send</string>
<string name="no_cards">保管庫にカードがありません</string>
<string name="new_card">新しいカード</string>
<string name="no_logins">保管庫にログイン情報がありません</string>
<string name="no_identities">保管庫に身分証はありません</string>
<string name="new_identity">新しい身分証</string>
<string name="no_notes">保管庫にメモがありません</string>
<string name="new_note">新しいメモ</string>
<string name="new_passkey">新しいパスキー</string>
<string name="new_item">新しいアイテム</string>
<string name="new_ssh_key">新しいSSHキー</string>
<string name="no_text_sends">保管庫にテキスト入のSendはありません</string>
<string name="no_file_sends">保管庫にファイル入のSendはありません</string>
<string name="no_ssh_keys">保管庫に SSH キーがありません</string>
<string name="new_text_send">新しいテキスト入のSend</string>
<string name="new_file_send">新しいファイル入のSend</string>
<string name="no_username">ユーザー名なし</string>
<string name="options">オプション</string>
<string name="other">その他</string>
@@ -137,11 +137,11 @@
<string name="password_hint_alert">マスターパスワードのヒントを記載したメールを送信しました。</string>
<string name="password_override_alert">現在のパスワードを上書きしてよろしいですか?</string>
<string name="retype_master_password">マスターパスワードを再入力</string>
<string name="retype_new_master_password_required">Re-type new master password (required)</string>
<string name="retype_new_master_password_required">新しいマスターパスワードを再入力 (必須)</string>
<string name="retype_master_password_required">マスターパスワードを再入力 (必須)</string>
<string name="search_vault">保管庫を検索</string>
<string name="select">選択</string>
<string name="item_details">Item details</string>
<string name="item_details">アイテムの詳細</string>
<string name="item_updated">アイテムを更新しました。</string>
<string name="submitting">送信中...</string>
<string name="syncing">同期中...</string>
@@ -150,16 +150,16 @@
<string name="unlock_with">%1$sでロック解除</string>
<string name="unlock_with_pin">PIN コードでロック解除</string>
<string name="verification_code">認証コード</string>
<string name="view_login">View login</string>
<string name="view_card">View card</string>
<string name="view_identity">View identity</string>
<string name="view_note">View note</string>
<string name="view_passkey">View passkey</string>
<string name="view_login">ログイン情報を表示</string>
<string name="view_card">カードを表示</string>
<string name="view_identity">身分証を表示</string>
<string name="view_note">メモを表示</string>
<string name="view_passkey">パスキーを表示</string>
<string name="web_vault">Bitwarden ウェブ保管庫</string>
<string name="items">アイテム</string>
<string name="items_for_uri">%1$s用のアイテム</string>
<string name="no_items_for_uri">保管庫に%1$s用のアイテムはありません。</string>
<string name="no_items_for_vault">There are no items in your vault that match “%1$s”</string>
<string name="no_items_for_vault">\"%1$s\" に一致するアイテムは保管庫にありません</string>
<string name="search_for_a_login_or_add_a_new_login">ログイン情報を検索するか、新しいログイン情報を追加します</string>
<string name="disabled">無効</string>
<string name="bitwarden_autofill_service_alert2">ログイン情報を保管庫に追加する一番簡単な方法はBitwardenの自動入力機能を使うことです。詳しくは「設定」画面に進んでください。</string>
@@ -170,10 +170,10 @@
<string name="authenticator_app_title">認証アプリ</string>
<string name="enter_verification_code_app">認証アプリに表示された6桁の認証コードを入力してください。</string>
<string name="enter_verification_code_email">%1$s に送信された6桁の認証コードを入力してください。</string>
<string name="enter_verification_code_new_device">We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.</string>
<string name="enter_verification_code_new_device">このデバイスは未確認です。本人確認のため、 %1$s に送信されたメールに書かれている 8 桁の認証コードを入力してください。</string>
<string name="recovery_code_title">リカバリーコード</string>
<string name="remember">Remember</string>
<string name="remember_email">Remember email</string>
<string name="remember">ログイン状態を記憶</string>
<string name="remember_email">メールアドレスを記録</string>
<string name="send_verification_code_again">確認コードをメールで再送</string>
<string name="verification_email_not_sent">確認メールを送信できませんでした。やり直してください。</string>
<string name="verification_email_sent">確認メールを送信しました。</string>
@@ -201,10 +201,10 @@
<string name="no_attachments">添付ファイルがありません。</string>
<string name="file_source">ファイルソース</string>
<string name="max_file_size">最大ファイルサイズは100MBです。</string>
<string name="required_max_file_size">Required. Maximum file size is 100 MB.</string>
<string name="required_max_file_size">最大ファイルサイズは100MBです。</string>
<string name="learn_more">詳細情報</string>
<string name="api_url">API サーバー URL</string>
<string name="client_certificate_mtls">Client certificate (mTLS)</string>
<string name="client_certificate_mtls">クライアント証明書 (mTLS)</string>
<string name="certificate_used_for_client_authentication">Certificate used for client authentication.</string>
<string name="custom_environment">カスタム環境</string>
<string name="custom_environment_footer">上級者向けです。各サービスのベース URL を個別に指定できます。</string>

View File

@@ -177,7 +177,7 @@
<string name="send_verification_code_again">Wyślij ponownie kod</string>
<string name="verification_email_not_sent">Nie można wysłać wiadomości weryfikacyjnej. Spróbuj ponownie.</string>
<string name="verification_email_sent">Wiadomość weryfikacyjna została wysłana</string>
<string name="yubi_key_instruction">Aby kontynuować, przytrzymaj klucz YubiKey NEO z tyłu urządzenia lub włóż go do portu USB urządzenia, a następnie dotknij jego przycisku.</string>
<string name="yubi_key_instruction">Przyłóż klucz YubiKey NEO z tyłu urządzenia lub włóż go do portu USB urządzenia, a następnie dotknij jego przycisku.</string>
<string name="yubi_key_title">Klucz bezpieczeństwa YubiKey</string>
<string name="add_new_attachment">Dodaj nowy załącznik</string>
<string name="attachments">Załączniki</string>
@@ -191,7 +191,7 @@
<string name="point_your_camera_at_the_qr_code">Skieruj aparat na kod QR.
Skanowanie nastąpi automatycznie.</string>
<string name="copy_totp">Kopiuj kod TOTP</string>
<string name="copy_totp_automatically_description">Automatycznie kopiuje kod TOTP do schowka podczas autouzupełniania, jeśli jest dostępny.</string>
<string name="copy_totp_automatically_description">Automatycznie kopiuje kod TOTP do schowka podczas autouzupełniania.</string>
<string name="copy_totp_automatically">Kopiuj kod TOTP automatycznie</string>
<string name="premium_required">Konto premium jest wymagane, aby skorzystać z tej funkcji.</string>
<string name="attachment_deleted">Załącznik został usunięty</string>
@@ -529,7 +529,7 @@ Skanowanie nastąpi automatycznie.</string>
<string name="all">Wszystko</string>
<string name="totp">TOTP</string>
<string name="verification_codes">Kody weryfikacyjne</string>
<string name="premium_subscription_required">Wymagana jest subskrypcja premium</string>
<string name="premium_subscription_required">Konto premium jest wymagane</string>
<string name="cannot_add_authenticator_key_scan_qr_code">Nie możesz dodać klucza uwierzytelniającego? <annotation link="scanQrCode">Zeskanuj kod QR</annotation></string>
<string name="scan_qr_code">Zeskanuj kod QR</string>
<string name="cannot_scan_qr_code_enter_key_manually">Nie możesz zeskanować kodu QR? <annotation link="enterKeyManually">Wpisz klucz ręcznie</annotation></string>
@@ -539,7 +539,7 @@ Skanowanie nastąpi automatycznie.</string>
<string name="add_totp">Dodaj TOTP</string>
<string name="set_up_authenticator_key">Ustaw klucz uwierzytelniający</string>
<string name="once_the_key_is_successfully_entered">Po wpisaniu klucza kliknij Dodaj TOTP, aby bezpiecznie zapisać klucz</string>
<string name="never_lock_warning">Ustawienie blokady aplikacji na „Nigdy” sprawi, że sejf będzie dostępny dla każdego użytkownika urządzenia. Upewnij się, że urządzenie jest odpowiednio chronione.</string>
<string name="never_lock_warning">Ustawienie blokady na „Nigdy” sprawi, że sejf będzie dostępny dla każdego użytkownika urządzenia. Upewnij się, że urządzenie jest odpowiednio chronione.</string>
<string name="environment_page_urls_error">Co najmniej jeden z adresów URL jest nieprawidłowy. Popraw je.</string>
<string name="generic_error_message">Nie mogliśmy przetworzyć żądania. Spróbuj ponownie lub skontaktuj się z nami.</string>
<string name="allow_screen_capture">Wykonywanie zrzutów ekranu</string>
@@ -611,7 +611,7 @@ Czy chcesz przełączyć się na to konto?</string>
<string name="important">Ważne</string>
<string name="your_master_password_cannot_be_recovered_if_you_forget_it_x_characters_minimum">Zapomniane hasło główne nie może zostać odzyskane! Hasło musi składać się z co najmniej %1$s znaków.</string>
<string name="weak_master_password">Hasło główne jest słabe</string>
<string name="weak_password_identified_use_a_strong_password_to_protect_your_account">Hasło jest słabe. Użyj unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć słabego hasła?</string>
<string name="weak_password_identified_use_a_strong_password_to_protect_your_account">Hasło jest słabe. Użyj silnego hasła, aby chronić konto. Czy na pewno chcesz użyć słabego hasła?</string>
<string name="weak">Słabe</string>
<string name="good">Dobre</string>
<string name="strong">Silne</string>
@@ -619,8 +619,8 @@ Czy chcesz przełączyć się na to konto?</string>
<string name="exposed_master_password">Hasło główne zostało ujawnione</string>
<string name="password_found_in_a_data_breach_alert_description">Hasło zostało ujawnione w wycieku danych. Użyj unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć ujawnionego hasła?</string>
<string name="weak_and_exposed_master_password">Hasło główne jest słabe i ujawnione</string>
<string name="weak_password_identified_and_found_in_a_data_breach_alert_description">Hasło jest słabe i zostało ujawnione w wycieku danych. Użyj unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć tego hasła?</string>
<string name="there_are_no_items_that_match_the_search">Brak elementów, które pasują do wyszukiwania</string>
<string name="weak_password_identified_and_found_in_a_data_breach_alert_description">Hasło jest słabe i zostało ujawnione w wycieku danych. Użyj mocnego i unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć tego hasła?</string>
<string name="there_are_no_items_that_match_the_search">Brak elementów pasujących do wyszukiwania</string>
<string name="self_hosted">Samodzielnie hostowany</string>
<string name="region">Region</string>
<string name="update_weak_master_password_warning">Hasło główne nie spełnia co najmniej jednej zasady organizacji. Aby uzyskać dostęp do sejfu, zaktualizuj hasło główne. Kontynuowanie spowoduje wylogowanie z obecnej sesji i konieczność ponownego zalogowania się. Aktywne sesje na innych urządzeniach mogą pozostać aktywne przez maksymalnie godzinę.</string>
@@ -671,7 +671,7 @@ Czy chcesz przełączyć się na to konto?</string>
<string name="continue_to_device_settings">Przejść do ustawień urządzenia?</string>
<string name="two_step_login_description_long">Zwiększ bezpieczeństwo konta, konfigurując logowanie dwustopniowe w aplikacji internetowej Bitwarden.</string>
<string name="change_master_password_description_long">Możesz zmienić hasło główne w aplikacji internetowej Bitwarden.</string>
<string name="you_can_import_data_to_your_vault_on_x">Możesz zaimportować dane do swojego sejfu na %1$s.</string>
<string name="you_can_import_data_to_your_vault_on_x">Zaimportuj dane do sejfu na stronie %1$s.</string>
<string name="learn_more_about_how_to_use_bitwarden_on_the_help_center">Dowiedz się więcej o tym, jak korzystać z centrum pomocy Bitwarden.</string>
<string name="privacy_policy_description_long">Sprawdź naszą politykę prywatności na bitwarden.com.</string>
<string name="explore_more_features_of_your_bitwarden_account_on_the_web_app">Odkryj więcej funkcji konta Bitwarden w aplikacji internetowej.</string>

View File

@@ -41,16 +41,16 @@
<string name="switch_to_already_added_account_confirmation">Vill du byta till det nu?</string>
<string name="master_password">Huvudlösenord</string>
<string name="master_password_required">Huvudlösenord (obligatoriskt)</string>
<string name="new_master_password_required">New master password (required)</string>
<string name="new_master_password_required">Nytt huvudlösenord (krävs)</string>
<string name="more">Mer</string>
<string name="my_vault">Mitt valv</string>
<string name="name">Namn</string>
<string name="item_name_required">Item name (required)</string>
<string name="send_name_required">"Send name (required)"</string>
<string name="item_name_required">Objektnamn (krävs)</string>
<string name="send_name_required">"Skicka namn (krävs)"</string>
<string name="no">Nej</string>
<string name="notes">Anteckningar</string>
<string name="private_notes">Private notes</string>
<string name="okay">Okay</string>
<string name="okay">Okej</string>
<string name="password">Lösenord</string>
<string name="save">Spara</string>
<string name="move">Flytta</string>
@@ -61,10 +61,10 @@
<string name="submit">Skicka</string>
<string name="sync">Synkronisering</string>
<string name="uri">URI</string>
<string name="website_uri">Website (URI)</string>
<string name="website_uri">Webbplats (URI)</string>
<string name="username">Användarnamn</string>
<string name="validation_field_required">%1$s-fältet krävs.</string>
<string name="you_must_attach_a_file_to_save_this_send">You must attach a file to save this send.</string>
<string name="you_must_attach_a_file_to_save_this_send">Du måste bifoga en fil för att spara denna send.</string>
<string name="value_has_been_copied">%1$s har kopierats</string>
<string name="verify_master_password">Bekräfta huvudlösenord</string>
<string name="verify_pin">Bekräfta PIN-kod</string>
@@ -80,12 +80,12 @@
<string name="close">Stäng</string>
<string name="continue_text">Fortsätt</string>
<string name="create_account">Skapa konto</string>
<string name="create_an_account">Create an account</string>
<string name="create_an_account">Skapa ett konto</string>
<string name="edit_item">Redigera objekt</string>
<string name="edit_login">Edit login</string>
<string name="edit_card">Edit card</string>
<string name="edit_identity">Edit identity</string>
<string name="edit_note">Edit note</string>
<string name="edit_login">Redigera inloggning</string>
<string name="edit_card">Redigera kort</string>
<string name="edit_identity">Redigera identitet</string>
<string name="edit_note">Redigera anteckning</string>
<string name="edit_passkey">Edit passkey</string>
<string name="enter_email_for_hint">Ange ditt kontos e-postadress för att hämta din huvudlösenordsledtråd.</string>
<string name="favorite">Favorit</string>
@@ -104,7 +104,7 @@
<string name="immediately">Omedelbart</string>
<string name="vault_timeout_log_out_confirmation">Genom att logga ut upphör all åtkomst till valvet och onlineautentisering krävs efter att tidsgränsen överskridits. Är du säker på att du vill använda denna inställning?</string>
<string name="logging_in">Loggar in...</string>
<string name="login_to_bitwarden">Log in to Bitwarden</string>
<string name="login_to_bitwarden">Logga in Bitwarden</string>
<string name="master_password_confirmation_val_message">Bekräftelsen för huvudlösenordet stämde ej.</string>
<string name="master_password_description">Huvudlösenordet är det lösenord som du använder för att komma åt ditt valv. Det är väldigt viktigt att du inte glömmer bort ditt huvudlösenord, eftersom det inte går att återställa lösenordet om du skulle glömma bort det.</string>
<string name="master_password_hint">Huvudlösenordsledtråd (valfri)</string>
@@ -114,19 +114,19 @@
<string name="min_special">Minsta antal speciella tecken</string>
<string name="never">Aldrig</string>
<string name="new_item_created">Nytt objekt skapat</string>
<string name="no_cards">There are no cards in your vault.</string>
<string name="new_card">New card</string>
<string name="no_logins">There are no logins in your vault.</string>
<string name="no_identities">There are no identities in your vault.</string>
<string name="new_identity">New identity</string>
<string name="no_notes">There are no notes in your vault.</string>
<string name="new_note">New note</string>
<string name="no_cards">Det finns inga kort i ditt valv.</string>
<string name="new_card">Nytt kort</string>
<string name="no_logins">Det finns inga inloggningar i ditt valv.</string>
<string name="no_identities">Det finns inga identiteter i ditt valv.</string>
<string name="new_identity">Ny identitet</string>
<string name="no_notes">Det finns inga anteckningar i ditt valv.</string>
<string name="new_note">Ny anteckning</string>
<string name="new_passkey">New passkey</string>
<string name="new_item">New item</string>
<string name="new_ssh_key">New SSH key</string>
<string name="new_item">Nytt objekt</string>
<string name="new_ssh_key">Ny SSH-nyckel</string>
<string name="no_text_sends">There are no text Sends in your vault.</string>
<string name="no_file_sends">There are no file Sends in your vault.</string>
<string name="no_ssh_keys">There are no SSH keys in your vault.</string>
<string name="no_ssh_keys">Det finns inga SSH-nycklar i ditt valv.</string>
<string name="new_text_send">New text Send</string>
<string name="new_file_send">New file Send</string>
<string name="no_username">Inget användarnamn</string>
@@ -141,7 +141,7 @@
<string name="retype_master_password_required">Re-type master password (required)</string>
<string name="search_vault">Sök i valvet</string>
<string name="select">Välj</string>
<string name="item_details">Item details</string>
<string name="item_details">Objektinformation</string>
<string name="item_updated">Objektet uppdaterades</string>
<string name="submitting">Skickar...</string>
<string name="syncing">Synkroniserar...</string>
@@ -150,16 +150,16 @@
<string name="unlock_with">Lås upp med %1$s</string>
<string name="unlock_with_pin">Lås upp med PIN-kod</string>
<string name="verification_code">Verifieringskod</string>
<string name="view_login">View login</string>
<string name="view_card">View card</string>
<string name="view_identity">View identity</string>
<string name="view_note">View note</string>
<string name="view_login">Visa inloggning</string>
<string name="view_card">Visa kort</string>
<string name="view_identity">Visa identitet</string>
<string name="view_note">Visa anteckning</string>
<string name="view_passkey">View passkey</string>
<string name="web_vault">Bitwarden webbvalv</string>
<string name="items">Objekt</string>
<string name="items_for_uri">Objekt för %1$s</string>
<string name="no_items_for_uri">Det finns inga objekt i ditt valv för %1$s.</string>
<string name="no_items_for_vault">There are no items in your vault that match “%1$s”</string>
<string name="no_items_for_vault">Det finns inga objekt i ditt valv som matchar “%1$s”</string>
<string name="search_for_a_login_or_add_a_new_login">Sök efter eller lägg till en ny inloggning</string>
<string name="disabled">Inaktiverad</string>
<string name="bitwarden_autofill_service_alert2">Det lättaste sättet att lägga till nya inloggningar till ditt valv är från Bitwardens hjälpmedelsservice för automatisk ifyllnad. Läs mer om hur man använder Bitwardens hjälpmedelsservice för automatisk ifyllnad genom att navigera till fliken \"Inställningar\".</string>
@@ -170,10 +170,10 @@
<string name="authenticator_app_title">Autentiseringsapp</string>
<string name="enter_verification_code_app">Ange den 6-siffriga verifieringskoden från din autentiseringsapp.</string>
<string name="enter_verification_code_email">Ange den 6-siffriga verifieringskoden som skickades till %1$s.</string>
<string name="enter_verification_code_new_device">We don\'t recognize this device. Enter the 8 digit verification code that was emailed to %1$s.</string>
<string name="enter_verification_code_new_device">Vi känner inte igen den här enheten. Ange den 8-siffriga verifieringskoden som skickades till %1$s.</string>
<string name="recovery_code_title">Återställningskod</string>
<string name="remember">Remember</string>
<string name="remember_email">Remember email</string>
<string name="remember">Kom ihåg</string>
<string name="remember_email">Kom ihåg e-post</string>
<string name="send_verification_code_again">Skicka verifieringskod-mejlet igen</string>
<string name="verification_email_not_sent">Kunde inte skicka verifierings-mejl. Försök igen.</string>
<string name="verification_email_sent">Verifieringsmeddelande har skickats</string>
@@ -201,10 +201,10 @@ Skanningen sker automatiskt.</string>
<string name="no_attachments">Det finns inga bilagor.</string>
<string name="file_source">Filkälla</string>
<string name="max_file_size">Filen får vara maximalt 100 MB.</string>
<string name="required_max_file_size">Required. Maximum file size is 100 MB.</string>
<string name="required_max_file_size">Krävs. Maximal filstorlek är 100 MB.</string>
<string name="learn_more">Läs mer</string>
<string name="api_url">API-server-URL</string>
<string name="client_certificate_mtls">Client certificate (mTLS)</string>
<string name="client_certificate_mtls">Klientcertifikat (mTLS)</string>
<string name="certificate_used_for_client_authentication">Certificate used for client authentication.</string>
<string name="custom_environment">Anpassad miljö</string>
<string name="custom_environment_footer">För avancerade användare. Du kan ange bas-URL:en för varje tjänst oberoende av varandra.</string>
@@ -229,7 +229,7 @@ Skanningen sker automatiskt.</string>
<string name="april">April</string>
<string name="august">Augusti</string>
<string name="brand">Märke</string>
<string name="card_details">Card Details</string>
<string name="card_details">Kortuppgifter</string>
<string name="cardholder_name">Kortinnehavarens namn</string>
<string name="city_town">Ort</string>
<string name="company">Företag</string>
@@ -284,7 +284,7 @@ Skanningen sker automatiskt.</string>
<string name="select_type_field">Vilken typ av anpassat fält vill du lägga till?</string>
<string name="remove">Ta bort</string>
<string name="new_uri">Ny URI</string>
<string name="add_website">Add website</string>
<string name="add_website">Lägg till webbplats</string>
<string name="base_domain">Basdomän</string>
<string name="default_text">Standard</string>
<string name="exact">Exakt</string>
@@ -298,15 +298,15 @@ Skanningen sker automatiskt.</string>
<string name="try_again">Försök igen</string>
<string name="created">Created: %1$s</string>
<string name="password_last_updated">Password last updated: %1$s</string>
<string name="last_edited">Last edited: %1$s</string>
<string name="last_edited">Senast redigerad: %1$s</string>
<string name="invalid_email">Ogiltig e-postadress.</string>
<string name="cards">Kort</string>
<string name="identities">Identiteter</string>
<string name="identification">Identification</string>
<string name="identification">Identifiering</string>
<string name="logins">Inloggningar</string>
<string name="secure_notes">Säkra anteckningar</string>
<string name="personal_details">Personal Details</string>
<string name="contact_info">Contact Info</string>
<string name="personal_details">Personlig information</string>
<string name="contact_info">Kontaktuppgifter</string>
<string name="check_password_for_data_breaches">Check password for data breaches</string>
<string name="password_exposed">Detta lösenord har avslöjats %1$s gång(er) i dataintrång. Du bör ändra det.</string>
<string name="password_safe">Detta lösenord hittades inte i några kända dataintrång. Det bör vara säkert att använda.</string>
@@ -321,7 +321,7 @@ Skanningen sker automatiskt.</string>
<string name="type">Typ</string>
<string name="move_down">Flytta ner</string>
<string name="move_up">Flytta upp</string>
<string name="owner">Owner</string>
<string name="owner">Ägare</string>
<string name="no_collections_to_list">Det finns inga samlingar att visa.</string>
<string name="moved_item_to_org">%1$s flyttades till %2$s.</string>
<string name="select_one_collection">Du måste markera minst en samling.</string>
@@ -362,7 +362,7 @@ Skanningen sker automatiskt.</string>
<string name="copy_notes">Kopiera anteckning</string>
<string name="exit">Avsluta</string>
<string name="exit_confirmation">Är du säker på att du vill avsluta Bitwarden?</string>
<string name="require_master_password_on_app_restart">Require master password on app restart?</string>
<string name="require_master_password_on_app_restart">Kräv huvudlösenord vid omstart av appen?</string>
<string name="pin_require_master_password_restart">Vill du behöva låsa upp med ditt huvudlösenord när programmet startas om?</string>
<string name="ask_to_add_login">Be om att lägga till inloggning</string>
<string name="ask_to_add_login_description">Be om att lägga till ett objekt om det inte finns i ditt valv.</string>
@@ -373,8 +373,8 @@ Skanningen sker automatiskt.</string>
<string name="login_expired">Din inloggningssession har upphört.</string>
<string name="biometrics_direction">Biometrisk verifiering</string>
<string name="biometrics">Biometri</string>
<string name="biometrics_failed">Biometrics Failed</string>
<string name="biometrics_decoding_failure">Log in with your Master Password or PIN then re-enable biometric login in Settings.</string>
<string name="biometrics_failed">Biometri misslyckades</string>
<string name="biometrics_decoding_failure">Logga in med ditt huvudlösenord eller PIN-kod och aktivera sedan biometriska inloggningar i Inställningar.</string>
<string name="use_biometrics_to_unlock">Använd biometri för att låsa upp</string>
<string name="file_format">Filformat</string>
<string name="export_vault_master_password_description">Ange ditt huvudlösenord för att exportera ditt valv.</string>
@@ -432,10 +432,10 @@ Skanningen sker automatiskt.</string>
<string name="accessibility_description5">Required to use the Autofill Quick-Action Tile.</string>
<string name="personal_ownership_policy_in_effect">En organisationspolicy påverkar dina ägarskapsalternativ.</string>
<string name="send">Send</string>
<string name="send_details">Send Details</string>
<string name="send_details">Skicka detaljer</string>
<string name="all_sends">Alla Sends</string>
<string name="text">Text</string>
<string name="text_to_share">Text to share</string>
<string name="text_to_share">Text att dela</string>
<string name="type_text">Text</string>
<string name="hide_text_by_default">Dölj texten som standard när denna Send öppnas</string>
<string name="type_file">Fil</string>
@@ -444,9 +444,9 @@ Skanningen sker automatiskt.</string>
<string name="deletion_date_info">Denna Send kommer att raderas permanent på angivet datum och klockslag.</string>
<string name="pending_delete">Väntar på radering</string>
<string name="expired">Upphört</string>
<string name="expires_at">Expires at %s</string>
<string name="expires_tomorrow">Expires tomorrow</string>
<string name="expires_on">Expires on %s</string>
<string name="expires_at">Går ut den %s</string>
<string name="expires_tomorrow">Går ut imorgon</string>
<string name="expires_on">Går ut den %s</string>
<string name="stops_logging_on">Stops logging on %1$s at %2$s</string>
<string name="maximum_access_count">Maximalt antal åtkomster</string>
<string name="maximum_access_count_info">Om angivet kommer användare inte längre kunna komma åt denna Send när det maximala antalet åtkomster har uppnåtts.</string>
@@ -456,7 +456,7 @@ Skanningen sker automatiskt.</string>
<string name="password_info">Kräv valfritt ett lösenord för att användare ska komma åt denna Send.</string>
<string name="remove_password">Ta bort lösenord</string>
<string name="removing_send_password">Tar bort lösenord</string>
<string name="password_removed">Password removed</string>
<string name="password_removed">Lösenordet togs bort</string>
<string name="add_a_send">Ny Send</string>
<string name="copy_link">Kopiera länk</string>
<string name="share_link">Dela länk</string>
@@ -476,7 +476,7 @@ Skanningen sker automatiskt.</string>
<string name="seven_days">7 dagar</string>
<string name="thirty_days">30 dagar</string>
<string name="custom">Anpassad</string>
<string name="add_this_authenticator_key_to_a_login">Add this authenticator key to an existing login, or create a new login.</string>
<string name="add_this_authenticator_key_to_a_login">Lägg till denna authenticator-nyckel till en befintlig inloggning eller skapa en ny inloggning.</string>
<string name="send_disabled_warning">På grund av en företagspolicy kan du bara radera en befintlig Send.</string>
<string name="about_send">Om Send</string>
<string name="hide_email">Dölj min e-postadress för mottagare</string>
@@ -530,9 +530,9 @@ Skanningen sker automatiskt.</string>
<string name="totp">TOTP</string>
<string name="verification_codes">Verifieringskoder</string>
<string name="premium_subscription_required">Premium-prenumeration krävs</string>
<string name="cannot_add_authenticator_key_scan_qr_code">Cannot add authenticator key? <annotation link="scanQrCode">Scan QR Code</annotation></string>
<string name="cannot_add_authenticator_key_scan_qr_code">Kan inte lägga till authenticator-nyckel? <annotation link="scanQrCode">Skanna QR-kod</annotation></string>
<string name="scan_qr_code">Skanna QR-kod</string>
<string name="cannot_scan_qr_code_enter_key_manually">Cannot scan QR code? <annotation link="enterKeyManually">Enter key manually</annotation></string>
<string name="cannot_scan_qr_code_enter_key_manually">Kan inte skanna QR-koden? <annotation link="enterKeyManually">Ange nyckeln manuellt</annotation></string>
<string name="authenticator_key_scanner">Autentiseringsnyckel</string>
<string name="authenticator_key_help">Authenticator key help</string>
<string name="enter_key_manually">Ange nyckel manuellt</string>
@@ -551,8 +551,8 @@ välj Lägg till TOTP för att lagra nyckeln på ett säkert sätt</string>
<string name="device_type">Enhetstyp</string>
<string name="ip_address">IP-adress</string>
<string name="time">Tid</string>
<string name="select_time">Select time</string>
<string name="switch_input_mode">Switch input mode</string>
<string name="select_time">Välj tid</string>
<string name="switch_input_mode">Växla inmatningsläge</string>
<string name="confirm_log_in">Bekräfta inloggning</string>
<string name="deny_log_in">Neka inloggning</string>
<string name="log_in_denied">Inloggning nekad</string>
@@ -565,9 +565,9 @@ välj Lägg till TOTP för att lagra nyckeln på ett säkert sätt</string>
<string name="forwarded_email_alias">Vidarebefordrat e-postalias</string>
<string name="random_word">Slumpmässigt ord</string>
<string name="email_required_parenthesis">E-post (obligatoriskt)</string>
<string name="domain_name">domain name</string>
<string name="domain_name">domännamn</string>
<string name="domain_name_required_parenthesis">Domännamn (obligatoriskt)</string>
<string name="api_key">API key</string>
<string name="api_key">API-nyckel</string>
<string name="api_key_required_parenthesis">API-nyckel (obligatoriskt)</string>
<string name="service">Tjänst</string>
<string name="addy_io">addy.io</string>
@@ -591,7 +591,7 @@ välj Lägg till TOTP för att lagra nyckeln på ett säkert sätt</string>
<string name="login_attempt_from_x_do_you_want_to_switch_to_this_account">Inloggningsförsök från:
%1$s
Vill du byta till detta konto?</string>
<string name="new_to_bitwarden">New to Bitwarden?</string>
<string name="new_to_bitwarden">Ny i Bitwarden?</string>
<string name="get_master_passwordword_hint">Hämta huvudlösenordsledtråd</string>
<string name="logging_in_as_x_on_y">Loggar in som %1$s på %2$s</string>
<string name="not_you">Är det inte du?</string>
@@ -625,7 +625,7 @@ Vill du byta till detta konto?</string>
<string name="self_hosted">Lokalt installerad</string>
<string name="region">Region</string>
<string name="update_weak_master_password_warning">Ditt huvudlösenord följer inte ett eller flera av din organisations regler. För att komma åt ditt valv så måste du ändra ditt huvudlösenord nu. Om du gör det kommer du att loggas du ut ur din nuvarande session så du måste logga in på nytt. Aktiva sessioner på andra enheter kommer fortsatt vara aktiva i upp till en timme.</string>
<string name="current_master_password_required">Current master password (required)</string>
<string name="current_master_password_required">Aktuellt huvudlösenord (krävs)</string>
<string name="approve_with_my_other_device">Godkänn med min andra enhet</string>
<string name="request_admin_approval">Be om godkännande från administratör</string>
<string name="approve_with_master_password">Godkänn med huvudlösenord</string>
@@ -651,7 +651,7 @@ Vill du byta till detta konto?</string>
<string name="log_in_with_device_must_be_set_up_in_the_settings_of_the_bitwarden_app_need_another_option">\"Logga in med enhet\" måste ställas in i inställningarna i Bitwardens app. Behöver du ett annat alternativ?</string>
<string name="log_in_with_device">Logga in med enhet</string>
<string name="logging_in_on">Logga in på</string>
<string name="logging_in_on_with_colon">Logging in on:</string>
<string name="logging_in_on_with_colon">Loggar in :</string>
<string name="vault">Valv</string>
<string name="appearance">Utseende</string>
<string name="account_security">Kontosäkerhet</string>
@@ -677,12 +677,12 @@ Vill du byta till detta konto?</string>
<string name="privacy_policy_description_long">Kolla in vår integritetspolicy på bitwarden.com.</string>
<string name="explore_more_features_of_your_bitwarden_account_on_the_web_app">Utforska fler funktioner i ditt Bitwarden-konto i webbappen.</string>
<string name="learn_about_organizations_description_long">Bitwarden låter dig dela objekt i ditt valv med andra med hjälp av en organisation. Läs mer på webbplatsen bitwarden.com.</string>
<string name="created_x">Created %1$s</string>
<string name="created_x">Skapade %1$s</string>
<string name="your_organization_requires_you_to_set_a_master_password">Din organisation kräver att du anger ett huvudlösenord.</string>
<string name="set_up_an_unlock_option_to_change_your_vault_timeout_action">Ställ in ett upplåsningsalternativ för att ändra vad som händer när tidsgränsen uppnås.</string>
<string name="save_passkey_as_new_login">Spara nyckel som ny inloggning</string>
<string name="overwrite_passkey">Skriv över passkey?</string>
<string name="this_item_already_contains_a_passkey_are_you_sure_you_want_to_overwrite_the_current_passkey">This item already contains a passkey. Are you sure you want to overwrite the current passkey?</string>
<string name="this_item_already_contains_a_passkey_are_you_sure_you_want_to_overwrite_the_current_passkey">Detta objekt innehåller redan en passnyckel. Är du säker på att du vill skriva över den aktuella passnyckeln?</string>
<string name="duo_two_step_login_is_required_for_your_account">Duo tvåstegsverifiering krävs för ditt konto.</string>
<string name="follow_the_steps_from_duo_to_finish_logging_in">Följ stegen från Duo för att slutföra inloggningen.</string>
<string name="launch_duo">Starta Duo</string>
@@ -698,34 +698,34 @@ Vill du byta till detta konto?</string>
<string name="password_used_to_export">This password will be used to export and import this file</string>
<string name="autofill_suggestion">Autofill suggestion</string>
<string name="continue_to_complete_web_authn_verification">Continue to complete WebAuthn verification.</string>
<string name="launch_web_authn">Launch WebAuthn</string>
<string name="launch_web_authn">Starta WebAuthn</string>
<string name="there_was_an_error_starting_web_authn_two_factor_authentication">There was an error starting WebAuthn two factor authentication</string>
<string name="self_hosted_server_url">Self-hosted server URL</string>
<string name="passkey_operation_failed_because_user_could_not_be_verified">Passkey operation failed because user could not be verified.</string>
<string name="user_verification_direction">User verification</string>
<string name="create_account_on">Create account on</string>
<string name="create_account_on_with_colon">Create account on:</string>
<string name="user_verification_direction">Användarverifiering</string>
<string name="create_account_on">Skapa konto på</string>
<string name="create_account_on_with_colon">Skapa konto på:</string>
<string name="we_sent_an_email_to">Vi har skickat ett e-postmeddelande till %1$s.</string>
<string name="by_continuing_you_agree_to_the_terms_of_service_and_privacy_policy">By continuing, you agree to the <annotation link="termsOfService">Terms of Service</annotation> and <annotation link="privacyPolicy">Privacy Policy</annotation></string>
<string name="by_activating_this_switch_you_agree_to_the_terms_of_service_and_privacy_policy">By activating this switch, you agree to the <annotation link="termsOfService">Terms of Service</annotation> and <annotation link="privacyPolicy">Privacy Policy</annotation></string>
<string name="unsubscribe">Unsubscribe</string>
<string name="by_continuing_you_agree_to_the_terms_of_service_and_privacy_policy">Genom att fortsätta godkänner du <annotation link="termsOfService">användarvillkoren</annotation> och <annotation link="privacyPolicy">integritetspolicyn</annotation></string>
<string name="by_activating_this_switch_you_agree_to_the_terms_of_service_and_privacy_policy">Genom att aktivera denna knapp godkänner du <annotation link="termsOfService">användarvillkoren</annotation> och <annotation link="privacyPolicy">integritetspolicyn</annotation></string>
<string name="unsubscribe">Avsluta prenumeration</string>
<string name="check_your_email">Kontrollera din e-post</string>
<string name="open_email_app">Open email app</string>
<string name="email_verified">Email verified</string>
<string name="get_emails_from_bitwarden_for_announcements_advices_and_research_opportunities_unsubscribe_any_time">Get emails from Bitwarden for announcements, advice, and research opportunities. <annotation link="unsubscribe">Unsubscribe</annotation> at any time.</string>
<string name="open_email_app">Öppna e-postappen</string>
<string name="email_verified">E-postadress verifierad</string>
<string name="get_emails_from_bitwarden_for_announcements_advices_and_research_opportunities_unsubscribe_any_time">Få e-postmeddelanden från Bitwarden med meddelanden, råd och forskningsmöjligheter. <annotation link="unsubscribe">Avsluta prenumerationen</annotation> när som helst.</string>
<string name="security_prioritized">Säkerhet, prioriterat</string>
<string name="welcome_message_1">Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect whats important to you.</string>
<string name="welcome_message_2">Set up biometric unlock and autofill to log into your accounts without typing a single letter.</string>
<string name="quick_and_easy_login">Quick and easy login</string>
<string name="level_up_your_logins">Level up your logins</string>
<string name="welcome_message_3">Use the generator to create and save strong, unique passwords for all your accounts.</string>
<string name="your_data_when_and_where_you_need_it">Your data, when and where you need it</string>
<string name="welcome_message_4">Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps.</string>
<string name="welcome_message_1">Spara inloggningar, kort och identiteter i ditt säkra valv. Bitwarden använder nollkunskaps- och totalsträckskryptering för att skydda det som är viktigt för dig.</string>
<string name="welcome_message_2">Ställ in biometrisk upplåsning och automatisk ifyllning för att logga in på dina konton utan att skriva ett enda bokstav.</string>
<string name="quick_and_easy_login">Snabb och enkel inloggning</string>
<string name="level_up_your_logins">Förbättra dina inloggningar</string>
<string name="welcome_message_3">Använd generatorn för att skapa och spara starka, unika lösenord för alla dina konton.</string>
<string name="your_data_when_and_where_you_need_it">Dina data, när och var du behöver dem</string>
<string name="welcome_message_4">Spara obegränsat antal lösenord på obegränsat antal enheter med Bitwarden-appar för mobiler, webbläsare och datorer.</string>
<string name="remove_passkey">Ta bort nyckel</string>
<string name="passkey_removed">Passkey removed</string>
<string name="what_makes_a_password_strong">What makes a password strong?</string>
<string name="a_secure_memorable_password">A secure, memorable password</string>
<string name="account_setup">Account setup</string>
<string name="a_secure_memorable_password">Ett säkert lösenord som är lätt att komma ihåg</string>
<string name="account_setup">Kontoinställningar</string>
<string name="set_up_unlock">Ställ in upplåsning</string>
<string name="set_up_later">Ställ in senare</string>
<string name="set_up_unlock_later">Ställ in upplåsning senare?</string>
@@ -739,10 +739,10 @@ Vill du byta till detta konto?</string>
<string name="your_hint_will_be_send_to_you_via_email_when_you_request_it">Your hint will be sent to you via email when you request it.</string>
<string name="write_your_password_down">Skriv ner ditt lösenord</string>
<string name="keep_it_secret_keep_it_safe">Var noga med att förvara ditt skriftliga lösenord på en hemlig och säker plats.</string>
<string name="prevent_account_lockout">Prevent account lockout</string>
<string name="prevent_account_lockout">Förhindra kontoutlåsning</string>
<string name="generate_master_password">Generera huvudlösenord</string>
<string name="generate_button_label">Generera</string>
<string name="write_this_password_down_and_keep_it_somewhere_safe">Write this password down and keep it somewhere safe.</string>
<string name="write_this_password_down_and_keep_it_somewhere_safe">Skriv ner detta lösenord och håll det säkert någonstans.</string>
<string name="learn_about_other_ways_to_prevent_account_lockout">Learn about other ways to prevent account lockout</string>
<string name="learn_about_ways_to_prevent_account_lockout"><annotation link="onPreventAccountLockout">Learn about ways to prevent account lockout</annotation></string>
<string name="help_with_server_geolocations">Help with server geolocations.</string>
@@ -751,13 +751,13 @@ Vill du byta till detta konto?</string>
<string name="change_email_address">Ändra e-postadress</string>
<string name="next">Nästa</string>
<string name="bitwarden_cannot_recover_a_lost_or_forgotten_master_password">Bitwarden kan inte återställa ett förlorat eller glömt huvudlösenord.</string>
<string name="bitwarden_cannot_reset_a_lost_or_forgotten_master_password">Bitwarden cannot reset a lost or forgotten master password.</string>
<string name="bitwarden_cannot_reset_a_lost_or_forgotten_master_password">Bitwarden kan inte återställa ett förlorat eller glömt huvudlösenord.</string>
<string name="choose_your_master_password">Välj ditt huvudlösenord</string>
<string name="choose_a_unique_and_strong_password_to_keep_your_information_safe">Choose a unique and strong password to keep your information safe.</string>
<string name="choose_a_unique_and_strong_password_to_keep_your_information_safe">Välj ett unikt och starkt lösenord för att hålla din information säker.</string>
<string name="minimum_characters">%1$s tecken</string>
<string name="expired_link">Expired link</string>
<string name="expired_link">Utgången länk</string>
<string name="please_restart_registration_or_try_logging_in">Please restart registration or try logging in. You may already have an account.</string>
<string name="restart_registration">Restart registration</string>
<string name="restart_registration">Starta om registrering</string>
<string name="authenticator_sync">Authenticator Sync</string>
<string name="allow_bitwarden_authenticator_syncing">Allow authenticator syncing</string>
<string name="there_was_an_issue_validating_the_registration_token">There was an issue validating the registration token.</string>
@@ -767,18 +767,18 @@ Vill du byta till detta konto?</string>
<string name="turn_on_autofill_later">Slå på autofyll senare?</string>
<string name="return_to_complete_this_step_anytime_in_settings">You can return to complete this step anytime in Settings.</string>
<string name="what_bitwarden_has_to_offer">You can now explore everything Bitwarden has to offer and start managing your passwords securely.</string>
<string name="youre_all_set">You\'re all set!</string>
<string name="youre_all_set">Du är klar!</string>
<string name="error_connecting_with_the_duo_service_use_a_different_two_step_login_method_or_contact_duo_for_assistance">Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance.</string>
<string name="master_password_hint_not_specified">Huvudlösenordsledtråd</string>
<string name="new_master_password_hint">New master password hint</string>
<string name="get_started">Kom igång</string>
<string name="save_and_protect_your_data">Spara och skydda din data</string>
<string name="the_vault_protects_more_than_just_passwords">The vault protects more than just passwords. Store secure logins, IDs, cards and notes securely here.</string>
<string name="the_vault_protects_more_than_just_passwords">Valvet skyddar mer än bara lösenord. Lagra säkra inloggningar, identiteter, kort och anteckningar säkert här.</string>
<string name="new_login">Ny inloggning</string>
<string name="share_files_and_data_securely_with_anyone_on_any_platform">Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.</string>
<string name="send_sensitive_information_safely">Send sensitive information, safely</string>
<string name="share_files_and_data_securely_with_anyone_on_any_platform">Dela filer och data säkert med vem som helst, på vilken plattform som helst. Din information förblir krypterad från början till slut vid begränsad exponering.</string>
<string name="send_sensitive_information_safely">Skicka känslig information, säkert</string>
<string name="import_saved_logins">Importera sparade inloggningar</string>
<string name="use_a_computer_to_import_logins">Use a computer to import logins from an existing password manager</string>
<string name="use_a_computer_to_import_logins">Använd en dator för att importera inloggningar från en befintlig lösenordshanterare</string>
<string name="you_can_return_to_complete_this_step_anytime_from_settings">You can return to complete this step anytime in Vault Settings.</string>
<string name="import_logins_later">Importera inloggningar senare</string>
<string name="import_logins_later_dialog_title">Importera inloggningar senare?</string>
@@ -793,8 +793,8 @@ Vill du byta till detta konto?</string>
<string name="export_your_passwords_this_option_is_usually_found_in_your_settings"><annotation emphasis="bold">Export your passwords.</annotation> This option is usually found in your settings.</string>
<string name="select_import_data_in_the_web_app_then_done_to_finish_syncing"><annotation emphasis="bold">Select Import data</annotation> in the web app, then Done below to finish syncing.</string>
<string name="step_1_of_3">Steg 1 av 3</string>
<string name="export_your_saved_logins">Export your saved logins</string>
<string name="delete_this_file_after_import_is_complete">Youll delete this file after import is complete.</string>
<string name="export_your_saved_logins">Exportera dina sparade inloggningar</string>
<string name="delete_this_file_after_import_is_complete">Du kan ta bort denna fil efter importen är färdig.</string>
<string name="on_your_computer_open_a_new_browser_tab_and_go_to_vault_bitwarden_com">Öppna en ny webbläsarflik på din dator och gå till %1$s</string>
<string name="log_in_to_the_bitwarden_web_app">Logga in på Bitwardens webbapp.</string>
<string name="step_2_of_3">Steg 2 av 3</string>
@@ -807,17 +807,17 @@ Vill du byta till detta konto?</string>
<string name="need_help_check_out_import_help">Need help? Check out <annotation link="importHelp">import help</annotation>.</string>
<string name="save_the_exported_file_somewhere_on_your_computer_you_can_find_easily"><annotation emphasis="bold">Save the exported file</annotation> somewhere on your computer you can find easily.</string>
<string name="this_is_not_a_recognized_bitwarden_server_you_may_need_to_check_with_your_provider_or_update_your_server">This is not a recognized Bitwarden server. You may need to check with your provider or update your server.</string>
<string name="syncing_logins_loading_message">Syncing logins...</string>
<string name="download_the_browser_extension">Download the browser extension</string>
<string name="go_to_bitwarden_com_download_to_integrate_bitwarden_into_browser">Go to bitwarden.com/download to integrate Bitwarden into your favorite browser for a seamless experience.</string>
<string name="use_the_web_app">Use the web app</string>
<string name="log_in_at_bitwarden_com_to_easily_manage_your_account">Log in at bitwarden.com to easily manage your account and update settings.</string>
<string name="syncing_logins_loading_message">Synkroniserar inloggningar...</string>
<string name="download_the_browser_extension">Hämta ner webbläsartillägget</string>
<string name="go_to_bitwarden_com_download_to_integrate_bitwarden_into_browser">Gå till bitwarden.com/download för att integrera Bitwarden i din favoritwebbläsare och få en smidig upplevelse.</string>
<string name="use_the_web_app">Använd webbappen</string>
<string name="log_in_at_bitwarden_com_to_easily_manage_your_account">Logga in bitwarden.com för att enkelt hantera ditt konto och uppdatera inställningarna.</string>
<string name="autofill_passwords">Autofyll lösenord</string>
<string name="set_up_autofill_on_all_your_devices">Set up autofill on all your devices to login with a single tap anywhere.</string>
<string name="import_successful">Import Successful!</string>
<string name="manage_your_logins_from_anywhere_with_bitwarden_tools">Manage your logins from anywhere with Bitwarden tools for web and desktop.</string>
<string name="bitwarden_tools">Bitwarden-verktyg</string>
<string name="got_it">Got it</string>
<string name="got_it">Jag fattar</string>
<string name="no_logins_were_imported">Inga inloggningar importerades</string>
<string name="import_error">Import error</string>
<string name="logins_imported">Logins imported</string>
@@ -831,7 +831,7 @@ Vill du byta till detta konto?</string>
<string name="enable_notifications">Enable notifications</string>
<string name="log_in_quickly_and_easily_across_devices">Log in quickly and easily across devices</string>
<string name="bitwarden_can_notify_you_each_time_you_receive_a_new_login_request_from_another_device">Bitwarden can notify you each time you receive a new login request from another device.</string>
<string name="skip_for_now">Skip for now</string>
<string name="skip_for_now">Hoppa över nu</string>
<string name="done_text">Klar</string>
<string name="page_number_x_of_y">%1$s av %2$s</string>
<string name="copy_identity_name">Copy identity name</string>
@@ -856,48 +856,48 @@ Vill du byta till detta konto?</string>
<string name="check_out_the_passphrase_generator">"Check out the passphrase generator"</string>
<string name="we_couldnt_verify_the_servers_certificate">We couldnt verify the servers certificate. The certificate chain or proxy settings on your device or your Bitwarden server may not be set up correctly.</string>
<string name="review_flow_launched">Review flow launched!</string>
<string name="copy_private_key">Copy private key</string>
<string name="login_credentials">Login Credentials</string>
<string name="autofill_options">Autofill Options</string>
<string name="use_this_button_to_generate_a_new_unique_password">Use this button to generate a new unique password.</string>
<string name="coachmark_1_of_3">1 OF 3</string>
<string name="coachmark_2_of_3">2 OF 3</string>
<string name="copy_private_key">Kopiera privat nyckel</string>
<string name="login_credentials">Inloggningsuppgifter</string>
<string name="autofill_options">Alternativ för autofyll</string>
<string name="use_this_button_to_generate_a_new_unique_password">Använd denna knapp för att generera ett nytt unikt lösenord.</string>
<string name="coachmark_1_of_3">1 AV 3</string>
<string name="coachmark_2_of_3">2 AV 3</string>
<string name="you_ll_only_need_to_set_up_authenticator_key">Youll only need to set up Authenticator Key for logins that require two-factor authentication with a code. The key will continuously generate six-digit codes you can use to log in.</string>
<string name="coachmark_3_of_3">3 OF 3</string>
<string name="coachmark_3_of_3">3 AV 3</string>
<string name="you_must_add_a_web_address_to_use_autofill_to_access_this_account">You must add a web address to use autofill to access this account.</string>
<string name="mutual_tls">Mutual TLS</string>
<string name="mutual_tls">Ömsesidig TLS</string>
<string name="single_tap_passkey_creation">Single tap passkey creation</string>
<string name="single_tap_passkey_authentication">Single tap passkey sign-on</string>
<string name="learn_about_new_logins">Learn about new logins</string>
<string name="we_ll_walk_you_through_the_key_features_to_add_a_new_login">We\'ll walk you through the key features to add a new login.</string>
<string name="explore_the_generator">Explore the generator</string>
<string name="explore_the_generator">Utforska generatorn</string>
<string name="learn_more_about_generating_secure_login_credentials_with_guided_tour">Learn more about generating secure login credentials with a guided tour.</string>
<string name="import_client_certificate">Import client certificate</string>
<string name="import_client_certificate">Importera klientcertifikat</string>
<string name="enter_the_client_certificate_password_and_alias">Enter the client certificate password and the desired alias for this certificate.</string>
<string name="alias">Alias</string>
<string name="use_the_generator_to_create_secure_passwords_passphrases_and_usernames">"Use the generator to create secure passwords, passphrases and usernames. "</string>
<string name="passphrases_are_strong_passwords_that_are_often_easier_to_remember_and_type_than_random_passwords">Passphrases are strong passwords that are often easier to remember and type than random passwords. They are helpful for logging into accounts where Autofill is not available, like a streaming service on your TV.</string>
<string name="unique_usernames_add_an_extra_layer_of_security_and_can_help_prevent_hackers_from_finding_your_accounts">Unique usernames add an extra layer of security and can help prevent hackers from finding your accounts.</string>
<string name="coachmark_1_of_6">1 OF 6</string>
<string name="coachmark_2_of_6">2 OF 6</string>
<string name="coachmark_3_of_6">3 OF 6</string>
<string name="coachmark_4_of_6">4 OF 6</string>
<string name="coachmark_5_of_6">5 OF 6</string>
<string name="coachmark_6_of_6">6 OF 6</string>
<string name="coachmark_1_of_6">1 AV 6</string>
<string name="coachmark_2_of_6">2 AV 6</string>
<string name="coachmark_3_of_6">3 AV 6</string>
<string name="coachmark_4_of_6">4 AV 6</string>
<string name="coachmark_5_of_6">5 AV 6</string>
<string name="coachmark_6_of_6">6 AV 6</string>
<string name="use_these_options_to_adjust_your_password_to_your_account_requirements">Use these options to adjust your password to meet your account website\'s requirements.</string>
<string name="after_you_save_your_new_password_to_bitwarden_don_t_forget_to_update_it_on_your_account_website">"After you save your new password to Bitwarden, dont forget to update it on your account website. "</string>
<string name="verify_your_identity">Verify your identity</string>
<string name="error_loading_certificate">Error loading certificate</string>
<string name="verify_your_identity">Verifiera din identitet</string>
<string name="error_loading_certificate">Fel vid inläsning av certifikat</string>
<string name="certificate_alias">Certificate alias</string>
<string name="import_certificate">Import certificate</string>
<string name="choose_system_certificate">Choose system certificate</string>
<string name="certificate_installed">Certificate installed</string>
<string name="certificate_installation_failed">Certificate installation failed</string>
<string name="unsupported_certificate_type">Unsupported certificate type</string>
<string name="certificate_password_incorrect">Certificate password incorrect</string>
<string name="invalid_certificate_chain">Invalid certificate chain</string>
<string name="import_certificate">Importera certifikat</string>
<string name="choose_system_certificate">Välj systemcertifikat</string>
<string name="certificate_installed">Certifikat installerat</string>
<string name="certificate_installation_failed">Certifikatinstallation misslyckades</string>
<string name="unsupported_certificate_type">Certifikattypen stöds inte</string>
<string name="certificate_password_incorrect">Certifikatets lösenord är felaktigt</string>
<string name="invalid_certificate_chain">Ogiltig certifikatkedja</string>
<string name="system_certificates_are_not_as_secure_as_importing_certificates_to_bitwarden">Using a system certificate is less secure than storing the certificate with Bitwarden. Continuing will display a list of available system certificates if one is already installed.</string>
<string name="link">Link</string>
<string name="link">Länk</string>
<string name="passkey_operation_failed_because_host_url_is_not_present_in_request">Passkey operation failed because host URL is not present in request.</string>
<string name="passkey_operation_failed_because_app_signature_is_invalid">Passkey operation failed because app signature is invalid.</string>
<string name="passkey_registration_failed_due_to_an_internal_error">Passkey registration failed due to an internal error.</string>
@@ -914,7 +914,7 @@ Vill du byta till detta konto?</string>
<string name="use_chrome_autofill_integration">Use Chrome autofill integration</string>
<string name="use_chrome_beta_autofill_integration">Use Chrome autofill integration (Beta)</string>
<string name="improves_login_filling_for_supported_websites_on_selected_browsers">Improves login filling for supported websites on selected browsers. Once enabled, youll be directed to browser settings to enable third-party autofill.</string>
<string name="show_more">Show more</string>
<string name="show_more">Visa mer</string>
<string name="no_folder">No folder</string>
<string name="show_less">Show less</string>
<string name="add_field">Add field</string>
@@ -932,33 +932,33 @@ Vill du byta till detta konto?</string>
<string name="logs_will_be_automatically_deleted_after_30_days">Logs will be automatically deleted after 30 days. Bitwarden is only able to access your log data when you share it.</string>
<string name="for_details_on_what_is_and_isnt_logged">For details on what is and isnt logged, visit the\n<annotation link="helpCenter">Bitwarden help center.</annotation></string>
<string name="logging_duration">Logging duration</string>
<string name="flight_recorder_one_hour">1 hour</string>
<string name="flight_recorder_eight_hours">8 hours</string>
<string name="flight_recorder_twenty_four_hours">24 hours</string>
<string name="flight_recorder_one_week">1 week</string>
<string name="delete_all">Delete all</string>
<string name="share_all">Share all</string>
<string name="unable_to_share">Unable to share</string>
<string name="flight_recorder_one_hour">1 timme</string>
<string name="flight_recorder_eight_hours">8 timmar</string>
<string name="flight_recorder_twenty_four_hours">24 timmar</string>
<string name="flight_recorder_one_week">1 vecka</string>
<string name="delete_all">Radera alla</string>
<string name="share_all">Dela alla</string>
<string name="unable_to_share">Kunde inte dela</string>
<string name="please_try_again_or_select_a_different_log">Please try again or select a different log.</string>
<string name="the_log_file_you_are_trying_to_share_has_been_removed">The log file you are trying to share has been removed.</string>
<string name="delete_log">Delete log</string>
<string name="delete_log">Ta bort logg</string>
<string name="do_you_really_want_to_delete_this_log">Do you really want to delete this log?</string>
<string name="delete_logs">Delete logs</string>
<string name="delete_logs">Radera loggar</string>
<string name="do_you_really_want_to_delete_all_recorded_logs">Do you really want to delete all recorded logs?</string>
<string name="confirm_key_connector_domain">Confirm Key Connector domain</string>
<string name="key_connector_domain">Key Connector domain:</string>
<string name="key_connector_organization">Organization:</string>
<string name="key_connector_organization">Organisation:</string>
<string name="password_no_longer_required_confirm_domain">A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator.</string>
<string name="please_confirm_domain_with_admin">Please confirm the domain below with your organization administrator.\n\nKey Connector domain:\n%1$s</string>
<string name="flight_recorder_banner_title">Flight recorder on</string>
<string name="flight_recorder_banner_message">Flight recorder will be active until %1$s at %2$s. Return to settings to deactivate now.</string>
<string name="go_to_settings">Go to settings</string>
<string name="go_to_settings">Gå till inställningar</string>
<string name="all_logs_deleted">All logs deleted</string>
<string name="log_deleted">Log deleted</string>
<string name="app_settings">App settings</string>
<string name="replace_existing_certificate">Replace existing certificate?</string>
<string name="app_settings">Appinställningar</string>
<string name="replace_existing_certificate">Ersätt befintligt certifikat?</string>
<string name="a_certificate_with_the_alias_x_already_exists_do_you_want_to_replace_it">A certificate with the alias \"%s\" already exists. Do you want to replace it?\nReplacing the certificate may impact your connection to any environments currently using it.</string>
<string name="replace_certificate">Replace certificate</string>
<string name="replace_certificate">Ersätt certifikat</string>
<string name="unable_to_read_certificate">Unable to read certificate.</string>
<string name="cannot_delete_your_account">Cannot delete your account</string>
<string name="cannot_delete_your_account_explanation">This action cannot be completed because your account is owned by an organization. Contact your organization administrator for additional details.</string>
@@ -967,7 +967,7 @@ Vill du byta till detta konto?</string>
<string name="view_text_send">View text Send</string>
<string name="delete_send">Delete Send</string>
<string name="missing_send_resync_your_vault">Missing Send re-sync your vault</string>
<string name="dynamic_colors">Dynamic colors</string>
<string name="dynamic_colors">Dynamiska färger</string>
<string name="dynamic_colors_description">Apply dynamic colors based on your wallpaper</string>
<string name="dynamic_colors_may_not_adhere_to_accessibility_guidelines">Dynamic colors uses the system colors and may not meet all accessibility guidelines.</string>
<string name="passkey_operation_failed_because_browser_x_is_not_trusted">Passkey operation failed because browser (%1$s) is not recognized. Select \"Trust\" to add %1$s to the list of locally trusted applications.</string>
@@ -975,15 +975,15 @@ Vill du byta till detta konto?</string>
<string name="trust">Trust</string>
<string name="trusted_by_you_learn_more">These are applications or browsers that Bitwarden does not trust by default, but you trust to perform passkey operations.</string>
<string name="trusted_by_community_learn_more">These are applications not included in the Google Play Store, but Bitwarden trusts to perform passkey operations after community members use and report them as safe.</string>
<string name="trusted_by_google_learn_more">These are applications Google considers safe and are available in Google\'s Play Store.</string>
<string name="trusted_by_you">Trusted by You</string>
<string name="trusted_by_the_community">Trusted by the Community</string>
<string name="trusted_by_google">Trusted by Google</string>
<string name="trusted_by_google_learn_more">Det här är program som Google anser vara säkra och finns tillgängliga i Googles Play Store.</string>
<string name="trusted_by_you">Betrodd av dig</string>
<string name="trusted_by_the_community">Betrodd av gemenskapen</string>
<string name="trusted_by_google">Betrodd av Google</string>
<string name="privileged_apps_description">To protect users from phishing attempts, by default, Bitwarden only completes passkey operations through applications or web browsers trusted by Google or the Bitwarden community.</string>
<string name="about_privileged_applications">About privileged applications</string>
<string name="learn_more_about_privileged_apps">Learn more about privileged apps</string>
<string name="privileged_apps">Privileged apps</string>
<string name="unrecognized_browser">Unrecognized browser</string>
<string name="unrecognized_browser">Okänd webbläsare</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Learn more about using passkeys with Bitwarden.</string>
<string name="all_trusted_apps">All trusted apps</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Are you sure you want to stop trusting %s?</string>

View File

@@ -289,7 +289,7 @@
<string name="default_text">Типово</string>
<string name="exact">Точно</string>
<string name="host">Вузол</string>
<string name="reg_ex">Звичайний вираз</string>
<string name="reg_ex">Регулярний вираз</string>
<string name="starts_with">Починається з</string>
<string name="uri_match_detection">Виявлення збігів URI</string>
<string name="match_detection">Виявлення збігів</string>
@@ -425,9 +425,9 @@
<string name="privacy_policy">Політика приватності</string>
<string name="passkey_management">Керування ключами доступу</string>
<string name="autofill_services">Служби автозаповнення</string>
<string name="display_autofill_suggestions">Display autofill suggestions</string>
<string name="autofill_suggestions_inline">Inline (shows in keyboard)</string>
<string name="autofill_suggestions_popup">Popup (shows over input field)</string>
<string name="display_autofill_suggestions">Показувати пропозиції автозаповнення</string>
<string name="autofill_suggestions_inline">Вбудовано (на клавіатурі)</string>
<string name="autofill_suggestions_popup">Спливне (над полем введення)</string>
<string name="accessibility">Використовувати спеціальні можливості</string>
<string name="accessibility_description5">Необхідно використовувати плитку швидких дій для автозаповнення.</string>
<string name="personal_ownership_policy_in_effect">Політика організації впливає на ваші параметри власності.</string>
@@ -662,8 +662,8 @@
<string name="session_timeout_action">Дія після часу очікування сеансу</string>
<string name="account_fingerprint_phrase">Фраза відбитка облікового запису</string>
<string name="passkey_management_explanation_long">Використовуйте Bitwarden для збереження нових ключів доступу та виконуйте вхід за допомогою збережених у сховищі ключів доступу.</string>
<string name="autofill_services_explanation_long">Для автозаповнення даних входу в інших програмах на вашому пристрої використовується Android Autofill Framework.</string>
<string name="use_inline_autofill_explanation_long">Використовуйте вбудоване автозаповнення, якщо його підтримує ваша клавіатура. Інакше, використовуйте типову функцію накладання.</string>
<string name="autofill_services_explanation_long">Дозволити Bitwarden використовувати вашу збережену інформацію для входу в інші програми на вашому пристрої.</string>
<string name="use_inline_autofill_explanation_long">Виберіть спосіб відображення пропозицій автозаповнення під час входу в інших програмах на вашому пристрої.</string>
<string name="additional_options">Додаткові налаштування</string>
<string name="continue_to_web_app">Продовжити у вебпрограмі?</string>
<string name="continue_to_x">Продовжити у %1$s?</string>
@@ -910,10 +910,10 @@
<string name="passkey_operation_failed_because_no_item_was_selected">Не вдалося виконати операцію з ключем доступу, тому що не вибрано жодного елемента.</string>
<string name="passkey_operation_failed_because_the_request_is_unsupported">Не вдалося виконати операцію з ключем доступу, оскільки запит не підтримується.</string>
<string name="self_host_server_url">URL-адреса власного сервера</string>
<string name="use_brave_autofill_integration">Use Brave autofill integration</string>
<string name="use_brave_autofill_integration">Використовувати інтеграцію автозаповнення з Brave</string>
<string name="use_chrome_autofill_integration">Використовувати інтеграцію автозаповнення з Chrome</string>
<string name="use_chrome_beta_autofill_integration">Використовувати інтеграцію автозаповнення з Chrome (бета-версія)</string>
<string name="improves_login_filling_for_supported_websites_on_selected_browsers">Improves login filling for supported websites on selected browsers. Once enabled, youll be directed to browser settings to enable third-party autofill.</string>
<string name="improves_login_filling_for_supported_websites_on_selected_browsers">Покращення заповнення даних входу на підтримуваних вебсайтах у вибраних браузерах. Після увімкнення вас буде спрямовано в налаштування браузера для активації автозаповнення третіх сторін.</string>
<string name="show_more">Розгорнути</string>
<string name="no_folder">Без теки</string>
<string name="show_less">Згорнути</string>
@@ -975,20 +975,20 @@
<string name="passkey_operation_failed_because_browser_x_is_not_trusted">Не вдалося виконати операцію з ключем доступу, оскільки браузер (%1$s) не розпізнано. Виберіть \"Довіряти\", щоб додати %1$s до списку локальних довірених програм.</string>
<string name="passkey_operation_failed_because_the_browser_is_not_trusted">Не вдалося виконати операцію з ключем доступу, оскільки браузер не є довіреним.</string>
<string name="trust">Довіряти</string>
<string name="trusted_by_you_learn_more">Цим програмам або браузерам Bitwarden не довіряє, але ВИ довіряєте їм виконання операцій з ключами доступу.</string>
<string name="trusted_by_you_learn_more">Цим програмам або браузерам Bitwarden не довіряє, але ви довіряєте їм виконання операцій з ключами доступу.</string>
<string name="trusted_by_community_learn_more">Цих програм немає в магазині Google Play, але Bitwarden довіряє їм виконання операцій з ключами доступу, оскільки учасники спільноти користуються ними та вважають їх безпечними.</string>
<string name="trusted_by_google_learn_more">Ці програми доступні в магазині Google Play і вважаються безпечними.</string>
<string name="trusted_by_you">Довірені вами</string>
<string name="trusted_by_the_community">Довірені спільнотою</string>
<string name="trusted_by_google">Довірені Google</string>
<string name="privileged_apps_description">Щоб захистити користувачів від шахрайства, Bitwarden виконує операції з ключами доступу лише у веббраузерах, яким довіряє спільнота Google або Bitwarden.</string>
<string name="privileged_apps_description">Щоб захистити користувачів від шахрайства, Bitwarden виконує операції з ключами доступу лише у програмах чи веббраузерах, яким довіряє спільнота Google або Bitwarden.</string>
<string name="about_privileged_applications">Про привілейовані програми</string>
<string name="learn_more_about_privileged_apps">Докладніше про привілейовані програми</string>
<string name="privileged_apps">Привілейовані програми</string>
<string name="unrecognized_browser">Нерозпізнаний браузер</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Learn more about using passkeys with Bitwarden.</string>
<string name="all_trusted_apps">All trusted apps</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Are you sure you want to stop trusting %s?</string>
<string name="installed_apps">Installed apps</string>
<string name="delete_x">Delete %s</string>
<string name="learn_more_about_using_passkeys_with_bitwarden">Докладніше про ключі доступу в Bitwarden.</string>
<string name="all_trusted_apps">Усі довірені програми</string>
<string name="are_you_sure_you_want_to_stop_trusting_x">Ви дійсно хочете скасувати довіру для %s?</string>
<string name="installed_apps">Встановлені програми</string>
<string name="delete_x">Видалити %s</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@@ -9,10 +9,6 @@ class FlagKeyTest {
@Test
fun `Feature flags have the correct key name set`() {
assertEquals(
FlagKey.AuthenticatorSync.keyName,
"enable-pm-bwa-sync",
)
assertEquals(
FlagKey.EmailVerification.keyName,
"email-verification",
@@ -75,7 +71,6 @@ class FlagKeyTest {
fun `All feature flags have the correct default value set`() {
assertTrue(
listOf(
FlagKey.AuthenticatorSync,
FlagKey.EmailVerification,
FlagKey.ImportLoginsFlow,
FlagKey.CredentialExchangeProtocolImport,

View File

@@ -21,8 +21,6 @@ import com.bitwarden.core.data.util.asSuccess
import com.bitwarden.core.util.isBuildVersionAtLeast
import com.bitwarden.data.datasource.disk.base.FakeDispatcherManager
import com.x8bit.bitwarden.data.auth.manager.AddTotpItemFromAuthenticatorManagerImpl
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.model.FlagKey
import com.x8bit.bitwarden.data.platform.repository.AuthenticatorBridgeRepository
import com.x8bit.bitwarden.data.platform.util.createAddTotpItemFromAuthenticatorIntent
import com.x8bit.bitwarden.ui.vault.model.TotpData
@@ -49,7 +47,6 @@ import org.junit.jupiter.api.Test
class AuthenticatorBridgeProcessorTest {
private val featureFlagManager = mockk<FeatureFlagManager>()
private val addTotpItemFromAuthenticatorManager = AddTotpItemFromAuthenticatorManagerImpl()
private val authenticatorBridgeRepository = mockk<AuthenticatorBridgeRepository>()
private val context = mockk<Context> {
@@ -64,7 +61,6 @@ class AuthenticatorBridgeProcessorTest {
addTotpItemFromAuthenticatorManager = addTotpItemFromAuthenticatorManager,
authenticatorBridgeRepository = authenticatorBridgeRepository,
context = context,
featureFlagManager = featureFlagManager,
dispatcherManager = FakeDispatcherManager(),
)
mockkStatic(::createAddTotpItemFromAuthenticatorIntent)
@@ -91,30 +87,16 @@ class AuthenticatorBridgeProcessorTest {
}
@Test
fun `when AuthenticatorSync feature flag is off, should return null binder`() {
fun `when running Android level greater than S, should return non-null binder`() {
mockkStatic(::isBuildVersionAtLeast)
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns true
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns false
assertNull(bridgeServiceProcessor.binder)
}
@Test
@Suppress("MaxLineLength")
fun `when AuthenticatorSync feature flag is on and running Android level greater than S, should return non-null binder`() {
mockkStatic(::isBuildVersionAtLeast)
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns true
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
assertNotNull(bridgeServiceProcessor.binder)
}
@Test
fun `when below Android level S, should never return a binder regardless of feature flag`() {
fun `when below Android level S, should never return a binder`() {
mockkStatic(::isBuildVersionAtLeast)
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns false
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns false
assertNull(bridgeServiceProcessor.binder)
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
assertNull(bridgeServiceProcessor.binder)
}
@@ -310,7 +292,6 @@ class AuthenticatorBridgeProcessorTest {
private fun getDefaultBinder(): IAuthenticatorBridgeService.Stub {
mockkStatic(::isBuildVersionAtLeast)
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns true
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
return bridgeServiceProcessor.binder!!
}
}

View File

@@ -144,7 +144,6 @@ class DebugMenuViewModelTest : BaseViewModelTest() {
}
private val DEFAULT_MAP_VALUE: ImmutableMap<FlagKey<Any>, Any> = persistentMapOf(
FlagKey.AuthenticatorSync to true,
FlagKey.EmailVerification to true,
FlagKey.ImportLoginsFlow to true,
FlagKey.CredentialExchangeProtocolImport to true,
@@ -162,7 +161,6 @@ private val DEFAULT_MAP_VALUE: ImmutableMap<FlagKey<Any>, Any> = persistentMapOf
)
private val UPDATED_MAP_VALUE: ImmutableMap<FlagKey<Any>, Any> = persistentMapOf(
FlagKey.AuthenticatorSync to false,
FlagKey.EmailVerification to false,
FlagKey.ImportLoginsFlow to false,
FlagKey.CredentialExchangeProtocolImport to false,

View File

@@ -22,11 +22,9 @@ import com.x8bit.bitwarden.data.auth.repository.model.UserFingerprintResult
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.error.NoActiveUserException
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
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
import com.x8bit.bitwarden.data.platform.repository.model.BiometricsKeyResult
@@ -46,7 +44,6 @@ import io.mockk.runs
import io.mockk.unmockkStatic
import io.mockk.verify
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.test.runTest
import kotlinx.serialization.json.Json
@@ -105,9 +102,6 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
getActivePoliciesFlow(type = PolicyTypeJson.REMOVE_UNLOCK_WITH_PIN)
} returns mutableRemovePinPolicyFlow
}
private val featureFlagManager: FeatureFlagManager = mockk(relaxed = true) {
every { getFeatureFlag(FlagKey.AuthenticatorSync) } returns false
}
@BeforeEach
fun setup() {
@@ -818,29 +812,19 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
}
}
@Suppress("MaxLineLength")
@Test
fun `when featureFlagManger returns true for AuthenticatorSync, and version is at least 31 should show authenticator sync UI`() {
fun `when version is at least 31 should show authenticator sync UI`() {
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns true
val vm = createViewModel(
initialState = null,
featureFlagManager = mockk {
every { getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
every { getFeatureFlagFlow(FlagKey.AuthenticatorSync) } returns emptyFlow()
},
)
val vm = createViewModel(initialState = null)
assertEquals(
DEFAULT_STATE.copy(shouldShowEnableAuthenticatorSync = true),
vm.stateFlow.value,
)
}
@Suppress("MaxLineLength")
@Test
fun `when featureFlagManger returns true for AuthenticatorSync, and version is under 31 should not show authenticator sync UI`() {
fun `when version is under 31 should not show authenticator sync UI`() {
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns false
every { featureFlagManager.getFeatureFlag(FlagKey.AuthenticatorSync) } returns true
every { featureFlagManager.getFeatureFlagFlow(FlagKey.AuthenticatorSync) } returns emptyFlow()
val vm = createViewModel(initialState = null)
assertEquals(
DEFAULT_STATE,
@@ -848,45 +832,6 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
)
}
@Test
fun `when featureFlagManger updates value AuthenticatorSync, should update UI`() = runTest {
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns true
val featureFlagFlow = MutableStateFlow(false)
val vm = createViewModel(
initialState = null,
featureFlagManager = mockk {
every { getFeatureFlag(FlagKey.AuthenticatorSync) } returns false
every { getFeatureFlagFlow(FlagKey.AuthenticatorSync) } returns featureFlagFlow
},
)
vm.stateFlow.test {
assertEquals(DEFAULT_STATE, awaitItem())
featureFlagFlow.value = true
assertEquals(DEFAULT_STATE.copy(shouldShowEnableAuthenticatorSync = true), awaitItem())
featureFlagFlow.value = false
assertEquals(DEFAULT_STATE, awaitItem())
}
}
@Test
@Suppress("MaxLineLength")
fun `when featureFlagManger updates value AuthenticatorSync, authenticator sync row should never show if below API 31`() =
runTest {
every { isBuildVersionAtLeast(Build.VERSION_CODES.S) } returns false
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()
@@ -951,7 +896,6 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
private fun createViewModel(
initialState: AccountSecurityState? = DEFAULT_STATE,
authRepository: AuthRepository = this.authRepository,
featureFlagManager: FeatureFlagManager = this.featureFlagManager,
vaultRepository: VaultRepository = this.vaultRepository,
environmentRepository: EnvironmentRepository = this.fakeEnvironmentRepository,
settingsRepository: SettingsRepository = this.settingsRepository,
@@ -959,7 +903,6 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
policyManager: PolicyManager = this.policyManager,
): AccountSecurityViewModel = AccountSecurityViewModel(
authRepository = authRepository,
featureFlagManager = featureFlagManager,
vaultRepository = vaultRepository,
settingsRepository = settingsRepository,
environmentRepository = environmentRepository,

View File

@@ -1,5 +1,6 @@
package com.bitwarden.authenticator
import android.app.ComponentCaller
import android.content.Intent
import android.os.Bundle
import android.view.KeyEvent
@@ -14,13 +15,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.bitwarden.authenticator.data.platform.util.isSuspicious
import com.bitwarden.authenticator.ui.platform.composition.LocalManagerProvider
import com.bitwarden.authenticator.ui.platform.feature.debugmenu.manager.DebugMenuLaunchManager
import com.bitwarden.authenticator.ui.platform.feature.debugmenu.navigateToDebugMenuScreen
import com.bitwarden.authenticator.ui.platform.feature.rootnav.RootNavScreen
import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme
import com.bitwarden.ui.platform.util.setupEdgeToEdge
import com.bitwarden.ui.platform.util.validate
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
@@ -39,7 +40,7 @@ class MainActivity : AppCompatActivity() {
lateinit var debugLaunchManager: DebugMenuLaunchManager
override fun onCreate(savedInstanceState: Bundle?) {
sanitizeIntent()
intent = intent.validate()
var shouldShowSplashScreen = true
installSplashScreen().setKeepOnScreenCondition { shouldShowSplashScreen }
super.onCreate(savedInstanceState)
@@ -72,20 +73,15 @@ class MainActivity : AppCompatActivity() {
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
sanitizeIntent()
mainViewModel.trySendAction(
MainAction.ReceiveNewIntent(intent = intent),
)
val newIntent = intent.validate()
super.onNewIntent(newIntent)
mainViewModel.trySendAction(MainAction.ReceiveNewIntent(intent = newIntent))
}
private fun sanitizeIntent() {
if (intent.isSuspicious) {
intent = Intent(
/* packageContext = */ this,
/* cls = */ MainActivity::class.java,
)
}
override fun onNewIntent(intent: Intent, caller: ComponentCaller) {
val newIntent = intent.validate()
super.onNewIntent(newIntent, caller)
mainViewModel.trySendAction(MainAction.ReceiveNewIntent(intent = newIntent))
}
private fun observeViewModelEvents(navController: NavHostController) {

View File

@@ -16,11 +16,9 @@ import com.bitwarden.authenticator.data.authenticator.repository.model.SharedVer
import com.bitwarden.authenticator.data.authenticator.repository.model.TotpCodeResult
import com.bitwarden.authenticator.data.authenticator.repository.util.sortAlphabetically
import com.bitwarden.authenticator.data.authenticator.repository.util.toAuthenticatorItems
import com.bitwarden.authenticator.data.platform.manager.FeatureFlagManager
import com.bitwarden.authenticator.data.platform.manager.imports.ImportManager
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportDataResult
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportFileFormat
import com.bitwarden.authenticator.data.platform.manager.model.FlagKey
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
import com.bitwarden.authenticator.ui.platform.feature.settings.export.model.ExportVaultFormat
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
@@ -64,7 +62,6 @@ private const val STOP_TIMEOUT_DELAY_MS: Long = 5_000L
class AuthenticatorRepositoryImpl @Inject constructor(
private val authenticatorBridgeManager: AuthenticatorBridgeManager,
private val authenticatorDiskSource: AuthenticatorDiskSource,
private val featureFlagManager: FeatureFlagManager,
private val totpCodeManager: TotpCodeManager,
private val fileManager: FileManager,
private val importManager: ImportManager,
@@ -155,17 +152,9 @@ class AuthenticatorRepositoryImpl @Inject constructor(
@OptIn(ExperimentalCoroutinesApi::class)
override val sharedCodesStateFlow: StateFlow<SharedVerificationCodesState> by lazy {
featureFlagManager
.getFeatureFlagFlow(FlagKey.PasswordManagerSync)
.flatMapLatest { isFeatureEnabled ->
if (isFeatureEnabled) {
authenticatorBridgeManager
.accountSyncStateFlow
.flatMapLatest { it.toSharedVerificationCodesStateFlow() }
} else {
flowOf(SharedVerificationCodesState.FeatureNotEnabled)
}
}
authenticatorBridgeManager
.accountSyncStateFlow
.flatMapLatest { it.toSharedVerificationCodesStateFlow() }
.stateIn(
scope = unconfinedScope,
started = SharingStarted.WhileSubscribed(STOP_TIMEOUT_DELAY_MS),

View File

@@ -4,19 +4,14 @@ import android.content.Context
import com.bitwarden.authenticator.BuildConfig
import com.bitwarden.authenticator.data.auth.datasource.disk.AuthDiskSource
import com.bitwarden.authenticator.data.authenticator.repository.util.SymmetricKeyStorageProviderImpl
import com.bitwarden.authenticator.data.platform.manager.FeatureFlagManager
import com.bitwarden.authenticator.data.platform.manager.model.FlagKey
import com.bitwarden.authenticatorbridge.factory.AuthenticatorBridgeFactory
import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager
import com.bitwarden.authenticatorbridge.manager.model.AccountSyncState
import com.bitwarden.authenticatorbridge.provider.SymmetricKeyStorageProvider
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import javax.inject.Singleton
/**
@@ -38,23 +33,11 @@ object AuthenticatorBridgeModule {
fun provideAuthenticatorBridgeManager(
factory: AuthenticatorBridgeFactory,
symmetricKeyStorageProvider: SymmetricKeyStorageProvider,
featureFlagManager: FeatureFlagManager,
): AuthenticatorBridgeManager =
if (featureFlagManager.getFeatureFlag(FlagKey.PasswordManagerSync)) {
factory.getAuthenticatorBridgeManager(
connectionType = BuildConfig.AUTHENTICATOR_BRIDGE_CONNECTION_TYPE,
symmetricKeyStorageProvider = symmetricKeyStorageProvider,
)
} else {
// If feature flag is not enabled, return no-op bridge manager so we never
// connect to bridge service:
object : AuthenticatorBridgeManager {
override val accountSyncStateFlow: StateFlow<AccountSyncState>
get() = MutableStateFlow(AccountSyncState.Loading)
override fun startAddTotpLoginItemFlow(totpUri: String): Boolean = false
}
}
factory.getAuthenticatorBridgeManager(
connectionType = BuildConfig.AUTHENTICATOR_BRIDGE_CONNECTION_TYPE,
symmetricKeyStorageProvider = symmetricKeyStorageProvider,
)
@Provides
fun providesSymmetricKeyStorageProvider(

View File

@@ -5,7 +5,6 @@ import com.bitwarden.authenticator.data.authenticator.manager.FileManager
import com.bitwarden.authenticator.data.authenticator.manager.TotpCodeManager
import com.bitwarden.authenticator.data.authenticator.repository.AuthenticatorRepository
import com.bitwarden.authenticator.data.authenticator.repository.AuthenticatorRepositoryImpl
import com.bitwarden.authenticator.data.platform.manager.FeatureFlagManager
import com.bitwarden.authenticator.data.platform.manager.imports.ImportManager
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager
@@ -28,7 +27,6 @@ object AuthenticatorRepositoryModule {
fun provideAuthenticatorRepository(
authenticatorBridgeManager: AuthenticatorBridgeManager,
authenticatorDiskSource: AuthenticatorDiskSource,
featureFlagManager: FeatureFlagManager,
dispatcherManager: DispatcherManager,
fileManager: FileManager,
importManager: ImportManager,
@@ -37,7 +35,6 @@ object AuthenticatorRepositoryModule {
): AuthenticatorRepository = AuthenticatorRepositoryImpl(
authenticatorBridgeManager = authenticatorBridgeManager,
authenticatorDiskSource = authenticatorDiskSource,
featureFlagManager = featureFlagManager,
dispatcherManager = dispatcherManager,
fileManager = fileManager,
importManager = importManager,

View File

@@ -22,7 +22,6 @@ sealed class FlagKey<out T : Any> {
val activeFlags: List<FlagKey<*>> by lazy {
listOf(
BitwardenAuthenticationEnabled,
PasswordManagerSync,
)
}
}
@@ -35,14 +34,6 @@ sealed class FlagKey<out T : Any> {
override val defaultValue: Boolean = false
}
/**
* Indicates whether syncing with the main Bitwarden password manager app should be enabled..
*/
data object PasswordManagerSync : FlagKey<Boolean>() {
override val keyName: String = "enable-pm-bwa-sync"
override val defaultValue: Boolean = false
}
/**
* Data object holding the key for a [Boolean] flag to be used in tests.
*/

View File

@@ -1,19 +0,0 @@
package com.bitwarden.authenticator.data.platform.util
import android.content.Intent
/**
* Returns true if this intent contains unexpected or suspicious data.
*/
val Intent.isSuspicious: Boolean
get() {
return try {
val containsSuspiciousExtras = extras?.isEmpty() == false
val containsSuspiciousData = data != null
containsSuspiciousData || containsSuspiciousExtras
} catch (_: Exception) {
// `unparcel()` throws an exception on Android 12 and below if the bundle contains
// suspicious data, so we catch the exception and return true.
true
}
}

View File

@@ -147,7 +147,6 @@ private fun FeatureFlagContent_preview() {
FeatureFlagContent(
featureFlagMap = mapOf(
FlagKey.BitwardenAuthenticationEnabled to true,
FlagKey.PasswordManagerSync to false,
),
onValueChange = { _, _ -> },
onResetValues = { },

View File

@@ -23,7 +23,6 @@ fun <T : Any> FlagKey<T>.ListItemContent(
-> Unit
FlagKey.BitwardenAuthenticationEnabled,
FlagKey.PasswordManagerSync,
-> BooleanFlagItem(
label = flagKey.getDisplayLabel(),
key = flagKey as FlagKey<Boolean>,
@@ -63,6 +62,4 @@ private fun <T : Any> FlagKey<T>.getDisplayLabel(): String = when (this) {
FlagKey.BitwardenAuthenticationEnabled ->
stringResource(R.string.bitwarden_authentication_enabled)
FlagKey.PasswordManagerSync -> stringResource(R.string.password_manager_sync)
}

View File

@@ -351,7 +351,7 @@ private fun VaultSettings(
BitwardenTextRow(
text = stringResource(id = R.string.sync_with_bitwarden_app),
description = annotatedStringResource(
id = R.string.this_feature_is_not_not_yet_available_for_self_hosted_users,
id = R.string.learn_more_link,
style = spanStyleOf(
color = MaterialTheme.colorScheme.onSurfaceVariant,
textStyle = MaterialTheme.typography.bodyMedium,

View File

@@ -10,9 +10,7 @@ import com.bitwarden.authenticator.R
import com.bitwarden.authenticator.data.authenticator.repository.AuthenticatorRepository
import com.bitwarden.authenticator.data.authenticator.repository.model.SharedVerificationCodesState
import com.bitwarden.authenticator.data.authenticator.repository.util.isSyncWithBitwardenEnabled
import com.bitwarden.authenticator.data.platform.manager.FeatureFlagManager
import com.bitwarden.authenticator.data.platform.manager.clipboard.BitwardenClipboardManager
import com.bitwarden.authenticator.data.platform.manager.model.FlagKey
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
import com.bitwarden.authenticator.data.platform.repository.model.BiometricsKeyResult
import com.bitwarden.authenticator.ui.platform.feature.settings.appearance.model.AppLanguage
@@ -49,7 +47,6 @@ class SettingsViewModel @Inject constructor(
private val authenticatorBridgeManager: AuthenticatorBridgeManager,
private val settingsRepository: SettingsRepository,
private val clipboardManager: BitwardenClipboardManager,
featureFlagManager: FeatureFlagManager,
) : BaseViewModel<SettingsState, SettingsEvent, SettingsAction>(
initialState = savedStateHandle[KEY_STATE]
?: createInitialState(
@@ -58,8 +55,6 @@ class SettingsViewModel @Inject constructor(
appTheme = settingsRepository.appTheme,
unlockWithBiometricsEnabled = settingsRepository.isUnlockWithBiometricsEnabled,
isSubmitCrashLogsEnabled = settingsRepository.isCrashLoggingEnabled,
isSyncWithBitwardenFeatureEnabled =
featureFlagManager.getFeatureFlag(FlagKey.PasswordManagerSync),
accountSyncState = authenticatorBridgeManager.accountSyncStateFlow.value,
defaultSaveOption = settingsRepository.defaultSaveOption,
sharedAccountsState = authenticatorRepository.sharedCodesStateFlow.value,
@@ -323,13 +318,12 @@ class SettingsViewModel @Inject constructor(
unlockWithBiometricsEnabled: Boolean,
isSubmitCrashLogsEnabled: Boolean,
accountSyncState: AccountSyncState,
isSyncWithBitwardenFeatureEnabled: Boolean,
sharedAccountsState: SharedVerificationCodesState,
): SettingsState {
val currentYear = Year.now(clock)
val copyrightInfo = "© Bitwarden Inc. 2015-$currentYear".asText()
// Show sync with Bitwarden row if feature is enabled and the OS is supported:
val shouldShowSyncWithBitwarden = isSyncWithBitwardenFeatureEnabled &&
// Show sync with Bitwarden row if the OS is supported:
val shouldShowSyncWithBitwarden =
accountSyncState != AccountSyncState.OsVersionNotSupported
// Show default save options only if the user had enabled sync with Bitwarden:
// (They can enable it via the "Sync with Bitwarden" row.

View File

@@ -142,8 +142,8 @@
<string name="file_could_not_be_processed_message">"Datei konnte nicht verarbeitet werden. Stelle sicher, dass es sich um ein gültiges JSON handelt und versuche es erneut. Benötigst du Hilfe? Besuche bitwarden.com/help"</string>
<string name="get_help">Hilfe erhalten</string>
<string name="expand_advanced_options">Erweiterte Optionen ausklappen</string>
<string name="local_items_are_expanded_click_to_collapse">Local items are expanded, click to collapse.</string>
<string name="local_items_are_collapsed_click_to_expand">Local items are collapsed, click to expand.</string>
<string name="items_expanded_click_to_collapse">Items are expanded, click to collapse.</string>
<string name="items_are_collapsed_click_to_expand">Items are collapsed, click to expand.</string>
<string name="local_items_are_expanded_click_to_collapse">Lokale Einträge sind ausgeklappt, klicke zum Einklappen.</string>
<string name="local_items_are_collapsed_click_to_expand">Lokale Einträge sind eingeklappt, klicke zum Ausklappen.</string>
<string name="items_expanded_click_to_collapse">Einträge sind ausgeklappt, klicke zum Einklappen.</string>
<string name="items_are_collapsed_click_to_expand">Einträge sind eingeklappt, klicke zum Ausklappen.</string>
</resources>

View File

@@ -124,7 +124,7 @@
<string name="take_me_to_app_settings">Llévame a la configuración de la aplicación</string>
<string name="something_went_wrong">Algo salió mal</string>
<string name="please_try_again">Por favor, reinténtalo</string>
<string name="copy_to_bitwarden_vault">Copy to Bitwarden vault</string>
<string name="copy_to_bitwarden_vault">Copiar a caja fuerte de Bitwarden</string>
<string name="default_save_option">Ajuste de guardado por defecto</string>
<string name="save_to_bitwarden">Guardar en Bitwarden</string>
<string name="save_here">Guardar aquí</string>
@@ -141,9 +141,9 @@
<string name="file_could_not_be_processed">"No se pudo procesar el archivo"</string>
<string name="file_could_not_be_processed_message">"No se pudo procesar el archivo. Asegúrate de que sea un JSON válido e inténtalo de nuevo. ¿Necesitas ayuda? Visita bitwarden.com/help"</string>
<string name="get_help">Obtener ayuda</string>
<string name="expand_advanced_options">Expand advanced options</string>
<string name="local_items_are_expanded_click_to_collapse">Local items are expanded, click to collapse.</string>
<string name="local_items_are_collapsed_click_to_expand">Local items are collapsed, click to expand.</string>
<string name="items_expanded_click_to_collapse">Items are expanded, click to collapse.</string>
<string name="items_are_collapsed_click_to_expand">Items are collapsed, click to expand.</string>
<string name="expand_advanced_options">Expandir opciones avanzadas</string>
<string name="local_items_are_expanded_click_to_collapse">Los elementos locales están expandidos, clic para colapsar.</string>
<string name="local_items_are_collapsed_click_to_expand">Los elementos locales están colapsados, clic para expandir.</string>
<string name="items_expanded_click_to_collapse">Los elementos están expandidos, clic para colapsar.</string>
<string name="items_are_collapsed_click_to_expand">Los elementos están colapsados, clic para expandir.</string>
</resources>

View File

@@ -142,8 +142,8 @@
<string name="file_could_not_be_processed_message">"Plik nie może być przetworzony. Upewnij się, że plik JSON jest prawidłowy i spróbuj ponownie. Potrzebujesz pomocy? Odwiedź bitwarden.com/help"</string>
<string name="get_help">Uzyskaj pomoc</string>
<string name="expand_advanced_options">Rozwiń zaawansowane opcje</string>
<string name="local_items_are_expanded_click_to_collapse">Local items are expanded, click to collapse.</string>
<string name="local_items_are_collapsed_click_to_expand">Local items are collapsed, click to expand.</string>
<string name="items_expanded_click_to_collapse">Items are expanded, click to collapse.</string>
<string name="items_are_collapsed_click_to_expand">Items are collapsed, click to expand.</string>
<string name="local_items_are_expanded_click_to_collapse">Lokalne elementy są rozwinięte, kliknij, aby zwinąć.</string>
<string name="local_items_are_collapsed_click_to_expand">Lokalne elementy są zwijane, kliknij, aby rozwinąć.</string>
<string name="items_expanded_click_to_collapse">Elementy są rozwinięte, kliknij, aby zwinąć.</string>
<string name="items_are_collapsed_click_to_expand">Elementy są zwinięte, kliknij, aby rozwinąć.</string>
</resources>

View File

@@ -61,7 +61,7 @@
<string name="secure_your_accounts_with_bitwarden_authenticator">Защитите свои учетные записи с помощью аутентификатора Bitwarden</string>
<string name="get_verification_codes_for_all_your_accounts">Получите коды проверки для всех ваших учетных записей, поддерживающих 2-этапную проверку.</string>
<string name="use_your_device_camera_to_scan_codes">Используйте камеру вашего устройства для сканирования кодов</string>
<string name="scan_the_qr_code_in_your_2_step_verification_settings_for_any_account">Сканируйте QR-код в настройках
<string name="scan_the_qr_code_in_your_2_step_verification_settings_for_any_account">Сканируйте QR-код в настройках
2-этапной верификации для любой учетной записи.</string>
<string name="sign_in_using_unique_codes">Авторизуйтесь с помощью уникальных кодов</string>
<string name="when_using_2_step_verification_youll_enter_your_username_and_password_and_a_code_generated_in_this_app">При использовании 2-этапной верификации вы введете свое имя пользователя, пароль и код, сгенерированный в этом приложении.</string>
@@ -79,7 +79,7 @@
<string name="export_confirmation_title">Подтвердите экспорт</string>
<string name="export_vault_warning">Этот экспорт содержит ваши данные в незашифрованном формате. Не следует хранить или отправлять экспортированный файл по незащищенным каналам (например, по электронной почте). Удалите его сразу после завершения работы.</string>
<string name="file_format">Формат файла</string>
<string name="export_vault_failure">Возникла проблема с экспортом вашего хранилища. Если проблема сохраняется, вам нужно экспортировать из
<string name="export_vault_failure">Возникла проблема с экспортом вашего хранилища. Если проблема сохраняется, вам нужно экспортировать из
веб хранилища.</string>
<string name="export_success">Данные успешно экспортированы</string>
<string name="unlock_with">Разблокируйте с помощью %1$s</string>

View File

@@ -4,52 +4,52 @@
<string name="cancel">Avbryt</string>
<string name="add_item">Lägg till objekt</string>
<string name="an_error_has_occurred">Ett fel har inträffat.</string>
<string name="generic_error_message">We were unable to process your request. Please try again or contact us.</string>
<string name="generic_error_message">Vi kunde inte behandla din begäran. Försök igen eller kontakta oss.</string>
<string name="internet_connection_required_title">Internetanslutning krävs</string>
<string name="internet_connection_required_message">Anslut till internet innan du fortsätter.</string>
<string name="okay">Okay</string>
<string name="okay">Okej</string>
<string name="syncing">Synkroniserar</string>
<string name="copy">Kopiera</string>
<string name="edit_item">Redigera</string>
<string name="close">Stäng</string>
<string name="bitwarden_authenticator">Bitwarden Authenticator</string>
<string name="name">Namn</string>
<string name="add_item_rotation">Add Item Rotation</string>
<string name="add_item_rotation">Lägg till objektrotation</string>
<string name="scan_a_qr_code">Skanna en QR-kod</string>
<string name="scan_qr_code">Skanna QR-kod</string>
<string name="point_your_camera_at_the_qr_code">Rikta din kamera mot QR-koden.</string>
<string name="cannot_scan_qr_code_enter_key_manually">Cannot scan QR code? <annotation link="enterKeyManually">Enter key manually</annotation></string>
<string name="cannot_scan_qr_code_enter_key_manually">Kan inte skanna QR-koden? <annotation link="enterKeyManually">Ange nyckeln manuellt</annotation></string>
<string name="enter_key_manually">Ange nyckel manuellt.</string>
<string name="cannot_add_authenticator_key">Cannot add authenticator key?</string>
<string name="cannot_add_authenticator_key">Kan inte lägga till authenticator-nyckeln?</string>
<string name="no_thanks">Nej tack</string>
<string name="settings">Inställningar</string>
<string name="enable_camera_permission_to_use_the_scanner">Bevilja kamerabehörighet för att använda skannern</string>
<string name="empty_item_list">Empty Item Listing</string>
<string name="empty_item_list">Tom objektlistning</string>
<string name="you_dont_have_items_to_display">Du har inga objekt att visa.</string>
<string name="empty_item_list_instruction">Lägg till en ny kod för att säkra dina konton.</string>
<string name="add_code">Lägg till kod</string>
<string name="authenticator_key_read_error">Cannot read key.</string>
<string name="authenticator_key_read_error">Kan inte läsa nyckel.</string>
<string name="verification_code_added">Verifieringskod har lagts till</string>
<string name="username">Användarnamn</string>
<string name="refresh_period">Refresh period</string>
<string name="refresh_period">Uppdateringstid</string>
<string name="algorithm">Algoritm</string>
<string name="hide">Dölj</string>
<string name="show">Visa</string>
<string name="advanced">Avancerat</string>
<string name="collapse_advanced_options">Collapse advanced options</string>
<string name="collapse_advanced_options">Fäll in avancerade alternativ</string>
<string name="number_of_digits">Antal siffror</string>
<string name="save">Spara</string>
<string name="validation_field_required">The %1$s field is required.</string>
<string name="validation_field_required">Fältet %1$s krävs.</string>
<string name="refresh_period_seconds" tools:ignore="PluralsCandidate">%d sekunder</string>
<string name="saving">Sparar</string>
<string name="item_saved">Objekt sparat</string>
<string name="information">Information</string>
<string name="otp_type">OTP type</string>
<string name="otp_type">OTP-typ</string>
<string name="verification_codes">Verifieringskoder</string>
<string name="there_are_no_items_that_match_the_search">There are no items that match the search</string>
<string name="there_are_no_items_that_match_the_search">Det finns inga objekt som matchar sökningen</string>
<string name="back">Tillbaka</string>
<string name="clear">Rensa</string>
<string name="search_codes">Search codes</string>
<string name="search_codes">Sök koder</string>
<string name="options">Alternativ</string>
<string name="try_again">Försök igen</string>
<string name="appearance">Utseende</string>
@@ -57,19 +57,19 @@
<string name="theme">Tema</string>
<string name="dark">Mörkt</string>
<string name="light">Ljust</string>
<string name="language_change_x_description">The language has been changed to %1$s. Please restart the app to see the change</string>
<string name="language_change_x_description">Språket har ändrats till %1$s. Starta om appen för att aktivera ändringen</string>
<string name="secure_your_accounts_with_bitwarden_authenticator">Säkra dina konton med Bitwarden Authenticator</string>
<string name="get_verification_codes_for_all_your_accounts">Get verification codes for all your accounts that support 2-step verification.</string>
<string name="get_verification_codes_for_all_your_accounts"> verifieringskoder för alla dina konton som stöder tvåstegsverifiering.</string>
<string name="use_your_device_camera_to_scan_codes">Använd enhetens kamera för att skanna koder</string>
<string name="scan_the_qr_code_in_your_2_step_verification_settings_for_any_account">Scan the QR code in your 2-step verification settings for any account.</string>
<string name="scan_the_qr_code_in_your_2_step_verification_settings_for_any_account">Skanna QR-koden i inställningarna för din tvåstegsverifiering för alla konton.</string>
<string name="sign_in_using_unique_codes">Logga in med unika koder</string>
<string name="when_using_2_step_verification_youll_enter_your_username_and_password_and_a_code_generated_in_this_app">When using 2-step verification, you\'ll enter your username and password and a code generated in this app.</string>
<string name="when_using_2_step_verification_youll_enter_your_username_and_password_and_a_code_generated_in_this_app">När du använder tvåstegsverifiering anger du ditt användarnamn och lösenord samt en kod som genereras i den här appen.</string>
<string name="skip">Hoppa över</string>
<string name="help">Hjälp</string>
<string name="launch_tutorial">Launch tutorial</string>
<string name="launch_tutorial">Starta handledning</string>
<string name="value_has_been_copied">%1$s kopierades</string>
<string name="delete_item">Radera objekt</string>
<string name="item_deleted">Item deleted</string>
<string name="item_deleted">Objekt togs bort</string>
<string name="delete">Radera</string>
<string name="do_you_really_want_to_permanently_delete_cipher">Är du säker på att du vill radera permanent? Detta går inte att ångra.</string>
<string name="data">Data</string>
@@ -79,12 +79,12 @@
<string name="export_vault_warning">Denna export innehåller din data i ett okrypterat format. Du bör inte lagra eller skicka den exporterade filen över osäkra kanaler (t.ex. e-post). Radera den omedelbart när du är färdig med den.</string>
<string name="file_format">Filformat</string>
<string name="export_vault_failure">Det gick inte att exportera ditt valv. Om problemet kvarstår måste du exportera från webbvalvet istället.</string>
<string name="export_success">Data exported successfully</string>
<string name="export_success">Dataexporten lyckades</string>
<string name="unlock_with">Lås upp med %1$s</string>
<string name="biometrics">Biometri</string>
<string name="security">Säkerhet</string>
<string name="use_biometrics_to_unlock">Use biometrics to unlock</string>
<string name="too_many_failed_biometric_attempts">Too many failed biometrics attempts.</string>
<string name="use_biometrics_to_unlock">Använd biometri för att låsa upp</string>
<string name="too_many_failed_biometric_attempts">För många misslyckade biometriska försök.</string>
<string name="about">Om</string>
<string name="version">Version</string>
<string name="continue_text">Fortsätt</string>
@@ -96,54 +96,54 @@
<string name="privacy_policy_description_long">Kolla in vår integritetspolicy på bitwarden.com</string>
<string name="key">Nyckel</string>
<string name="create_verification_code">Skapa verifieringskod</string>
<string name="key_is_required">Key is required.</string>
<string name="name_is_required">Name is required.</string>
<string name="key_is_required">Nyckel krävs.</string>
<string name="name_is_required">Namn krävs.</string>
<string name="submit_crash_logs">Skicka kraschloggar</string>
<string name="import_vault_failure">There was a problem importing your vault.</string>
<string name="file_source">File Source</string>
<string name="import_vault_failure">Det uppstod ett problem vid import av ditt valv.</string>
<string name="file_source">Filkälla</string>
<string name="import_vault">Importera</string>
<string name="import_success">Vault import successful</string>
<string name="import_success">Import av valv lyckades</string>
<string name="key_is_invalid">Nyckel är ogiltig.</string>
<string name="favorite">Favorit</string>
<string name="favorites">Favoriter</string>
<string name="backup">Backup</string>
<string name="data_backup_title">Data backup</string>
<string name="backup">Säkerhetskopiera</string>
<string name="data_backup_title">Säkerhetskopierad data</string>
<string name="data_backup_message">Bitwarden Authenticator-data säkerhetskopieras och kan återställas med dina regelbundna schemalagda säkerhetskopior.</string>
<string name="learn_more">Läs mer</string>
<string name="import_2fas_password_protected_not_supported">Importing from 2FAS password protected files is not supported. Try again with an exported file that is not password protected.</string>
<string name="import_2fas_password_protected_not_supported">Importera från 2FAS-lösenordsskyddade filer stöds inte. Försök igen med en exporterad fil som inte är lösenordsskyddad.</string>
<string name="import_bitwarden_unsupported_format">Import av Bitwarden CSV-filer stöds inte. Försök igen med en exporterad JSON-fil.</string>
<string name="download_bitwarden_card_title">Download the Bitwarden app</string>
<string name="download_bitwarden_card_title">Ladda ner Bitwarden-appen</string>
<string name="download_bitwarden_card_message">Spara alla inloggningar och synkronisera verifieringskoder direkt med Authenticator-appen.</string>
<string name="download_now">Download now</string>
<string name="download_now">Ladda ner nu</string>
<string name="sync_with_bitwarden_app">Synkronisera med Bitwarden-appen</string>
<string name="this_feature_is_not_not_yet_available_for_self_hosted_users">This feature is not yet available for self-hosted users. <annotation link="learnMore">Learn more</annotation></string>
<string name="shared_codes_error">Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.</string>
<string name="this_feature_is_not_not_yet_available_for_self_hosted_users">Denna funktion är ännu inte tillgänglig för användare med egen hosting. <annotation link="learnMore">Läs mer</annotation></string>
<string name="shared_codes_error">Det går inte att synkronisera koder från Bitwarden-appen. Se till att båda apparna är uppdaterade. Du kan fortfarande komma åt dina befintliga koder i Bitwarden-appen.</string>
<string name="shared_accounts_header">%1$s | %2$s</string>
<string name="sync_with_the_bitwarden_app">Synkronisera med Bitwarden-appen</string>
<string name="sync_with_bitwarden_action_card_message">In order to view all of your verification codes, youll need to allow for syncing on all of your accounts.</string>
<string name="take_me_to_app_settings">Take me to the app settings</string>
<string name="sync_with_bitwarden_action_card_message">För att kunna se alla dina verifieringskoder måste du tillåta synkronisering alla dina konton.</string>
<string name="take_me_to_app_settings">Ta mig till appinställningarna</string>
<string name="something_went_wrong">Något gick fel</string>
<string name="please_try_again">Försök igen</string>
<string name="copy_to_bitwarden_vault">Copy to Bitwarden vault</string>
<string name="default_save_option">Default save option</string>
<string name="copy_to_bitwarden_vault">Kopiera till Bitwarden-valv</string>
<string name="default_save_option">Standardalternativ</string>
<string name="save_to_bitwarden">Spara på Bitwarden</string>
<string name="save_here">Spara här</string>
<string name="none">Ingen</string>
<string name="default_save_options_subtitle">Select where you would like to save new verification codes.</string>
<string name="default_save_options_subtitle">Välj var du vill spara nya verifieringskoder.</string>
<string name="confirm">Bekräfta</string>
<string name="verification_code_created">Verifieringskod skapades</string>
<string name="choose_save_location_message">Save this authenticator key here, or add it to a login in your Bitwarden app.</string>
<string name="choose_save_location_message">Spara denna autentiseringsnyckel här eller lägg till den i en inloggning i din Bitwarden-app.</string>
<string name="save_option_as_default">Spara alternativ som standard</string>
<string name="account_synced_from_bitwarden_app">Konto synkroniserat från Bitwarden-appen</string>
<string name="local_codes">Lokala koder</string>
<string name="required_information_missing">Required Information Missing</string>
<string name="required_information_missing_message">"Required info is missing (e.g., services or secret). Check your file and try again. Visit bitwarden.com/help for support"</string>
<string name="file_could_not_be_processed">"File Could Not Be Processed"</string>
<string name="file_could_not_be_processed_message">"File could not be processed. Ensure its valid JSON and try again. Need help? Visit bitwarden.com/help"</string>
<string name="get_help">Get Help</string>
<string name="expand_advanced_options">Expand advanced options</string>
<string name="local_items_are_expanded_click_to_collapse">Local items are expanded, click to collapse.</string>
<string name="local_items_are_collapsed_click_to_expand">Local items are collapsed, click to expand.</string>
<string name="items_expanded_click_to_collapse">Items are expanded, click to collapse.</string>
<string name="items_are_collapsed_click_to_expand">Items are collapsed, click to expand.</string>
<string name="required_information_missing">Nödvändig information saknas</string>
<string name="required_information_missing_message">"Nödvändig information saknas (t.ex. ”services” eller secret). Kontrollera din fil och försök igen. Besök bitwarden.com/help för support."</string>
<string name="file_could_not_be_processed">"Filen kunde inte behandlas"</string>
<string name="file_could_not_be_processed_message">"Filen kunde inte bearbetas. Kontrollera att det är giltig JSON och försök igen. Behöver du hjälp? Besök bitwarden.com/help"</string>
<string name="get_help">Få hjälp</string>
<string name="expand_advanced_options">Expandera avancerade alternativ</string>
<string name="local_items_are_expanded_click_to_collapse">Lokala objekt är expanderade, klicka för att fälla in.</string>
<string name="local_items_are_collapsed_click_to_expand">Lokala objekt är infällda, klicka för att expandera.</string>
<string name="items_expanded_click_to_collapse">Objekt är expanderade, klicka för att fälla in.</string>
<string name="items_are_collapsed_click_to_expand">Objekt är infällda, klicka för att expandera.</string>
</resources>

View File

@@ -18,7 +18,7 @@
<string name="scan_a_qr_code">Сканувати QR-код</string>
<string name="scan_qr_code"><annotation link="scanQrCode">Сканувати QR-код</annotation></string>
<string name="point_your_camera_at_the_qr_code">Наведіть камеру на QR-код.</string>
<string name="cannot_scan_qr_code_enter_key_manually">Cannot scan QR code? <annotation link="enterKeyManually">Enter key manually</annotation></string>
<string name="cannot_scan_qr_code_enter_key_manually">Не можете сканувати QR-код? <annotation link="enterKeyManually">Введіть ключ вручну</annotation></string>
<string name="enter_key_manually">Введіть ключ вручну.</string>
<string name="cannot_add_authenticator_key">Не вдається додати ключ автентифікації?</string>
<string name="no_thanks">Ні, дякую</string>
@@ -118,13 +118,13 @@
<string name="sync_with_bitwarden_app">Синхронізувати з програмою Bitwarden</string>
<string name="this_feature_is_not_not_yet_available_for_self_hosted_users">Ця функція ще недоступна користувачам із власним розміщенням сховища. <annotation link="learnMore">Докладніше</annotation></string>
<string name="shared_codes_error">Неможливо синхронізувати коди з програмою Bitwarden. Переконайтеся, що у вас найновіші версії обох програм. Ви все одно можете отримати доступ до наявних кодів у програмі Bitwarden.</string>
<string name="shared_accounts_header">%1$s | %2$s</string>
<string name="shared_accounts_header">%1$s | %2$s (%3$d)</string>
<string name="sync_with_the_bitwarden_app">Синхронізувати з програмою Bitwarden</string>
<string name="sync_with_bitwarden_action_card_message">Щоб переглянути всі коди підтвердження, необхідно дозволити синхронізацію з усіма вашими обліковими записами.</string>
<string name="take_me_to_app_settings">Перейти до налаштувань програми</string>
<string name="something_went_wrong">Щось пішло не так</string>
<string name="please_try_again">Повторіть спробу</string>
<string name="copy_to_bitwarden_vault">Copy to Bitwarden vault</string>
<string name="copy_to_bitwarden_vault">Копіювати в сховище Bitwarden</string>
<string name="default_save_option">Типовий параметр збереження</string>
<string name="save_to_bitwarden">Зберегти в Bitwarden</string>
<string name="save_here">Зберегти тут</string>
@@ -135,15 +135,15 @@
<string name="choose_save_location_message">Збережіть цей ключ автентифікації тут, або додайте його до запису в програмі Bitwarden.</string>
<string name="save_option_as_default">Зробити цю дію типовою</string>
<string name="account_synced_from_bitwarden_app">Обліковий запис синхронізовано з програми Bitwarden</string>
<string name="local_codes">Локальні коди</string>
<string name="local_codes">Локальні коди (%1$d)</string>
<string name="required_information_missing">Відсутня необхідна інформація</string>
<string name="required_information_missing_message">"Необхідна інформація відсутня (наприклад, 'services' або 'secret'). Перевірте свій файл і повторіть спробу. Відвідайте bitwarden.com/help для підтримки"</string>
<string name="file_could_not_be_processed">"Неможливо обробити файл"</string>
<string name="file_could_not_be_processed_message">"Не вдалося обробити файл. Перевірте правильність JSON і повторіть спробу. Потрібна допомога? Відвідайте bitwarden.com/help"</string>
<string name="get_help">Отримати допомогу</string>
<string name="expand_advanced_options">Expand advanced options</string>
<string name="local_items_are_expanded_click_to_collapse">Local items are expanded, click to collapse.</string>
<string name="local_items_are_collapsed_click_to_expand">Local items are collapsed, click to expand.</string>
<string name="items_expanded_click_to_collapse">Items are expanded, click to collapse.</string>
<string name="items_are_collapsed_click_to_expand">Items are collapsed, click to expand.</string>
<string name="expand_advanced_options">Розгорнути додаткові налаштування</string>
<string name="local_items_are_expanded_click_to_collapse">Локальні записи розгорнуто. Натисніть, щоб згорнути.</string>
<string name="local_items_are_collapsed_click_to_expand">Локальні записи згорнуто. Натисніть, щоб розгорнути.</string>
<string name="items_expanded_click_to_collapse">Записи розгорнуто. Натисніть, щоб згорнути.</string>
<string name="items_are_collapsed_click_to_expand">Записи згорнуто. Натисніть, щоб розгорнути.</string>
</resources>

View File

@@ -115,7 +115,7 @@
<string name="download_bitwarden_card_message">Store all of your logins and sync verification codes directly with the Authenticator app.</string>
<string name="download_now">Download now</string>
<string name="sync_with_bitwarden_app">Sync with Bitwarden app</string>
<string name="this_feature_is_not_not_yet_available_for_self_hosted_users">This feature is not yet available for self-hosted users. <annotation link="learnMore">Learn more</annotation></string>
<string name="learn_more_link"><annotation link="learnMore">Learn more</annotation></string>
<string name="shared_codes_error">Unable to sync codes from the Bitwarden app. Make sure both apps are up-to-date. You can still access your existing codes in the Bitwarden app.</string>
<string name="shared_accounts_header">%1$s | %2$s (%3$d)</string>
<string name="sync_with_the_bitwarden_app">Sync with the Bitwarden app</string>

View File

@@ -14,6 +14,5 @@
<string name="debug_menu">Debug Menu</string>
<string name="reset_values">Reset values</string>
<string name="bitwarden_authentication_enabled">Bitwarden authentication enabled</string>
<string name="password_manager_sync">Password manager sync</string>
</resources>

View File

@@ -9,9 +9,7 @@ import com.bitwarden.authenticator.data.authenticator.manager.model.Verification
import com.bitwarden.authenticator.data.authenticator.repository.model.AuthenticatorItem
import com.bitwarden.authenticator.data.authenticator.repository.model.SharedVerificationCodesState
import com.bitwarden.authenticator.data.authenticator.repository.util.toAuthenticatorItems
import com.bitwarden.authenticator.data.platform.manager.FeatureFlagManager
import com.bitwarden.authenticator.data.platform.manager.imports.ImportManager
import com.bitwarden.authenticator.data.platform.manager.model.FlagKey
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager
import com.bitwarden.authenticatorbridge.manager.model.AccountSyncState
@@ -45,15 +43,6 @@ class AuthenticatorRepositoryTest {
private val mockFileManager = mockk<FileManager>()
private val mockImportManager = mockk<ImportManager>()
private val mockDispatcherManager = FakeDispatcherManager()
private val mutablePasswordSyncFlagStateFlow = MutableStateFlow(true)
private val mockFeatureFlagManager = mockk<FeatureFlagManager> {
every {
getFeatureFlagFlow(FlagKey.PasswordManagerSync)
} returns mutablePasswordSyncFlagStateFlow
every {
getFeatureFlag(FlagKey.PasswordManagerSync)
} returns mutablePasswordSyncFlagStateFlow.value
}
private val settingsRepository: SettingsRepository = mockk {
every { previouslySyncedBitwardenAccountIds } returns emptySet()
}
@@ -61,7 +50,6 @@ class AuthenticatorRepositoryTest {
private val authenticatorRepository = AuthenticatorRepositoryImpl(
authenticatorDiskSource = fakeAuthenticatorDiskSource,
authenticatorBridgeManager = mockAuthenticatorBridgeManager,
featureFlagManager = mockFeatureFlagManager,
totpCodeManager = mockTotpCodeManager,
fileManager = mockFileManager,
importManager = mockImportManager,
@@ -89,29 +77,6 @@ class AuthenticatorRepositoryTest {
}
}
@Test
fun `sharedCodesStateFlow value should be FeatureNotEnabled when feature flag is off`() =
runTest {
val repository = AuthenticatorRepositoryImpl(
authenticatorDiskSource = fakeAuthenticatorDiskSource,
authenticatorBridgeManager = mockAuthenticatorBridgeManager,
featureFlagManager = mockFeatureFlagManager,
totpCodeManager = mockTotpCodeManager,
fileManager = mockFileManager,
importManager = mockImportManager,
dispatcherManager = mockDispatcherManager,
settingRepository = settingsRepository,
)
mutablePasswordSyncFlagStateFlow.value = false
mutableAccountSyncStateFlow.value = AccountSyncState.Success(emptyList())
repository.sharedCodesStateFlow.test {
assertEquals(
SharedVerificationCodesState.FeatureNotEnabled,
awaitItem(),
)
}
}
@Test
fun `ciphersStateFlow should emit sorted authenticator items when disk source changes`() =
runTest {
@@ -123,27 +88,6 @@ class AuthenticatorRepositoryTest {
)
}
@Test
fun `sharedCodesStateFlow should emit FeatureNotEnabled when feature flag is off`() = runTest {
val repository = AuthenticatorRepositoryImpl(
authenticatorDiskSource = fakeAuthenticatorDiskSource,
authenticatorBridgeManager = mockAuthenticatorBridgeManager,
featureFlagManager = mockFeatureFlagManager,
totpCodeManager = mockTotpCodeManager,
fileManager = mockFileManager,
importManager = mockImportManager,
dispatcherManager = mockDispatcherManager,
settingRepository = settingsRepository,
)
mutablePasswordSyncFlagStateFlow.value = false
repository.sharedCodesStateFlow.test {
assertEquals(
SharedVerificationCodesState.FeatureNotEnabled,
awaitItem(),
)
}
}
@Suppress("MaxLineLength")
@Test
fun `sharedCodesStateFlow should emit AppNotInstalled when authenticatorBridgeManager emits AppNotInstalled`() =

View File

@@ -73,7 +73,7 @@ class FeatureFlagManagerTest {
)
val flagValue = manager.getFeatureFlag(
key = FlagKey.PasswordManagerSync,
key = FlagKey.DummyBoolean,
forceRefresh = false,
)
assertFalse(flagValue)
@@ -169,7 +169,7 @@ class FeatureFlagManagerTest {
fakeServerConfigRepository.serverConfigValue = null
val flagValue = manager.getFeatureFlag(
key = FlagKey.PasswordManagerSync,
key = FlagKey.DummyBoolean,
forceRefresh = false,
)

View File

@@ -12,10 +12,6 @@ class FlagKeyTest {
FlagKey.BitwardenAuthenticationEnabled.keyName,
"bitwarden-authentication-enabled",
)
assertEquals(
FlagKey.PasswordManagerSync.keyName,
"enable-pm-bwa-sync",
)
}
@Test
@@ -23,7 +19,6 @@ class FlagKeyTest {
assertTrue(
listOf(
FlagKey.BitwardenAuthenticationEnabled,
FlagKey.PasswordManagerSync,
).all {
!it.defaultValue
},

View File

@@ -98,10 +98,6 @@ class DebugMenuRepositoryTest {
runTest {
debugMenuRepository.resetFeatureFlagOverrides()
verify(exactly = 1) {
mockFeatureFlagOverrideDiskSource.saveFeatureFlag(
FlagKey.PasswordManagerSync,
FlagKey.PasswordManagerSync.defaultValue,
)
mockFeatureFlagOverrideDiskSource.saveFeatureFlag(
FlagKey.BitwardenAuthenticationEnabled,
FlagKey.BitwardenAuthenticationEnabled.defaultValue,

View File

@@ -1,64 +0,0 @@
package com.bitwarden.authenticator.data.platform.util
import android.content.Intent
import io.mockk.every
import io.mockk.mockk
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
class IntentExtensionsTest {
@Test
fun `isSuspicious should return true when extras are not empty`() {
val intent = mockk<Intent> {
every { data } returns mockk()
every { extras } returns mockk {
every { isEmpty } returns false
}
}
assertTrue(intent.isSuspicious)
}
@Test
fun `isSuspicious should return true when extras are null`() {
val intent = mockk<Intent> {
every { data } returns mockk()
every { extras } returns null
}
assertTrue(intent.isSuspicious)
}
@Test
fun `isSuspicious should return true when data is not null`() {
val intent = mockk<Intent> {
every { data } returns mockk()
every { extras } returns null
}
assertTrue(intent.isSuspicious)
}
@Test
fun `isSuspicious should return false when data and extras are null`() {
val intent = mockk<Intent> {
every { data } returns null
every { extras } returns null
}
assertFalse(intent.isSuspicious)
}
@Test
fun `isSuspicious should return false when data is null and extras are empty`() {
val intent = mockk<Intent> {
every { data } returns null
every { extras } returns mockk {
every { isEmpty } returns true
}
}
assertFalse(intent.isSuspicious)
}
}

View File

@@ -52,7 +52,7 @@ class DebugMenuScreenTest : AuthenticatorComposeTest() {
@Test
fun `feature flag content should not display if the state is empty`() {
composeTestRule
.onNodeWithText("Password manager sync", ignoreCase = true)
.onNodeWithText("Bitwarden authentication enabled", ignoreCase = true)
.assertDoesNotExist()
}
@@ -61,13 +61,13 @@ class DebugMenuScreenTest : AuthenticatorComposeTest() {
mutableStateFlow.tryEmit(
DebugMenuState(
featureFlags = mapOf(
FlagKey.PasswordManagerSync to true,
FlagKey.BitwardenAuthenticationEnabled to true,
),
),
)
composeTestRule
.onNodeWithText("Password manager sync", ignoreCase = true)
.onNodeWithText("Bitwarden authentication enabled", ignoreCase = true)
.assertExists()
}
@@ -76,18 +76,18 @@ class DebugMenuScreenTest : AuthenticatorComposeTest() {
mutableStateFlow.tryEmit(
DebugMenuState(
featureFlags = mapOf(
FlagKey.PasswordManagerSync to true,
FlagKey.BitwardenAuthenticationEnabled to true,
),
),
)
composeTestRule
.onNodeWithText("Password manager sync", ignoreCase = true)
.onNodeWithText("Bitwarden authentication enabled", ignoreCase = true)
.performClick()
verify {
viewModel.trySendAction(
DebugMenuAction.UpdateFeatureFlag(
FlagKey.PasswordManagerSync,
FlagKey.BitwardenAuthenticationEnabled,
false,
),
)

View File

@@ -64,9 +64,11 @@ class DebugMenuViewModelTest : BaseViewModelTest() {
fun `handleUpdateFeatureFlag should update the feature flag via the repository`() {
val viewModel = createViewModel()
viewModel.trySendAction(
DebugMenuAction.UpdateFeatureFlag(FlagKey.PasswordManagerSync, false),
DebugMenuAction.UpdateFeatureFlag(FlagKey.BitwardenAuthenticationEnabled, false),
)
verify { mockDebugMenuRepository.updateFeatureFlag(FlagKey.PasswordManagerSync, false) }
verify {
mockDebugMenuRepository.updateFeatureFlag(FlagKey.BitwardenAuthenticationEnabled, false)
}
}
private fun createViewModel(): DebugMenuViewModel = DebugMenuViewModel(
@@ -77,12 +79,10 @@ class DebugMenuViewModelTest : BaseViewModelTest() {
private val DEFAULT_MAP_VALUE: Map<FlagKey<Any>, Any> = mapOf(
FlagKey.BitwardenAuthenticationEnabled to true,
FlagKey.PasswordManagerSync to true,
)
private val UPDATED_MAP_VALUE: Map<FlagKey<Any>, Any> = mapOf(
FlagKey.BitwardenAuthenticationEnabled to false,
FlagKey.PasswordManagerSync to false,
)
private val DEFAULT_STATE = DebugMenuState(

View File

@@ -7,9 +7,7 @@ import com.bitwarden.authenticator.R
import com.bitwarden.authenticator.data.authenticator.repository.AuthenticatorRepository
import com.bitwarden.authenticator.data.authenticator.repository.model.SharedVerificationCodesState
import com.bitwarden.authenticator.data.authenticator.repository.util.isSyncWithBitwardenEnabled
import com.bitwarden.authenticator.data.platform.manager.FeatureFlagManager
import com.bitwarden.authenticator.data.platform.manager.clipboard.BitwardenClipboardManager
import com.bitwarden.authenticator.data.platform.manager.model.FlagKey
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
import com.bitwarden.authenticator.ui.platform.feature.settings.appearance.model.AppLanguage
import com.bitwarden.authenticator.ui.platform.feature.settings.data.model.DefaultSaveOption
@@ -58,9 +56,6 @@ class SettingsViewModelTest : BaseViewModelTest() {
every { isCrashLoggingEnabled } returns true
}
private val clipboardManager: BitwardenClipboardManager = mockk()
private val featureFlagManager: FeatureFlagManager = mockk {
every { getFeatureFlag(FlagKey.PasswordManagerSync) } returns true
}
@BeforeEach
fun setup() {
@@ -74,25 +69,7 @@ class SettingsViewModelTest : BaseViewModelTest() {
}
@Test
@Suppress("MaxLineLength")
fun `initialState should be correct when saved state is null and password manager feature flag is off`() {
every {
featureFlagManager.getFeatureFlag(FlagKey.PasswordManagerSync)
} returns false
val viewModel = createViewModel(savedState = null)
val expectedState = DEFAULT_STATE.copy(
showSyncWithBitwarden = false,
showDefaultSaveOptionRow = false,
)
assertEquals(
expectedState,
viewModel.stateFlow.value,
)
}
@Test
@Suppress("MaxLineLength")
fun `initialState should be correct when saved state is null and password manager feature flag is on but OS version is too low`() {
fun `initialState should be correct when saved state is null but OS version is too low`() {
every {
authenticatorBridgeManager.accountSyncStateFlow
} returns MutableStateFlow(AccountSyncState.OsVersionNotSupported)
@@ -108,14 +85,10 @@ class SettingsViewModelTest : BaseViewModelTest() {
}
@Test
@Suppress("MaxLineLength")
fun `initialState should be correct when saved state is null and password manager feature flag is on and OS version is supported`() {
fun `initialState should be correct when saved state is null and OS version is supported`() {
every {
authenticatorBridgeManager.accountSyncStateFlow
} returns MutableStateFlow(AccountSyncState.Loading)
every {
featureFlagManager.getFeatureFlag(FlagKey.PasswordManagerSync)
} returns true
val viewModel = createViewModel(savedState = null)
val expectedState = DEFAULT_STATE.copy(
showSyncWithBitwarden = true,
@@ -233,7 +206,6 @@ class SettingsViewModelTest : BaseViewModelTest() {
authenticatorRepository = authenticatorRepository,
settingsRepository = settingsRepository,
clipboardManager = clipboardManager,
featureFlagManager = featureFlagManager,
)
}

View File

@@ -35,11 +35,11 @@ internal class ServerConfigRepositoryImpl(
override suspend fun getServerConfig(forceRefresh: Boolean): ServerConfig? {
val localConfig = configDiskSource.serverConfig
val needsRefresh = localConfig == null ||
Instant
.ofEpochMilli(localConfig.lastSync)
.isAfter(
clock.instant().plusSeconds(MINIMUM_CONFIG_SYNC_INTERVAL_SEC),
)
clock.instant().isAfter(
Instant
.ofEpochMilli(localConfig.lastSync)
.plusSeconds(MINIMUM_CONFIG_SYNC_INTERVAL_SEC),
)
if (needsRefresh || forceRefresh) {
configService

View File

@@ -119,6 +119,30 @@ class ServerConfigRepositoryTest {
assertEquals(fakeConfigDiskSource.serverConfig, awaitItem())
}
}
@Suppress("MaxLineLength")
@Test
fun `serverConfigStateFlow should fetch new server configurations when minimum config sync interval is reached `() =
runTest {
val testConfig = SERVER_CONFIG.copy(
lastSync = fixedClock.instant().minusSeconds(60 * 60 + 1).toEpochMilli(),
serverData = CONFIG_RESPONSE_JSON.copy(
version = "old version!!",
),
)
fakeConfigDiskSource.serverConfig = testConfig
coEvery {
configService.getConfig()
} returns CONFIG_RESPONSE_JSON.asSuccess()
repository.getServerConfig(forceRefresh = false)
repository.serverConfigStateFlow.test {
assertNotEquals(testConfig, awaitItem())
}
}
}
private val SERVER_CONFIG = ServerConfig(

View File

@@ -1,8 +1,9 @@
@file:OmitFromCoverage
package com.x8bit.bitwarden.data.platform.util
package com.bitwarden.ui.platform.util
import android.content.Intent
import android.os.BadParcelableException
import android.os.Bundle
import android.os.Parcelable
import androidx.core.content.IntentCompat
@@ -24,3 +25,21 @@ inline fun <reified T> Intent.getSafeParcelableExtra(
inline fun <reified T> Bundle.getSafeParcelableExtra(
name: String,
): T? = BundleCompat.getParcelable(this, name, T::class.java)
/**
* Validate if there's anything suspicious with the intent received and returns a new valid intent.
*/
fun Intent.validate(): Intent =
try {
// This will force Android to attempt to fetch each item and verify it is valid
this.extras?.let { bundle ->
bundle.keySet().forEach { @Suppress("DEPRECATION") bundle.get(it) }
}
this
} catch (_: BadParcelableException) {
this.replaceExtras(null as Bundle?)
} catch (_: ClassNotFoundException) {
this.replaceExtras(null as Bundle?)
} catch (@Suppress("TooGenericExceptionCaught") _: RuntimeException) {
this.replaceExtras(null as Bundle?)
}

View File

@@ -0,0 +1,68 @@
package com.bitwarden.ui.platform.util
import android.content.Intent
import android.os.BadParcelableException
import android.os.Bundle
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import io.mockk.unmockkStatic
import io.mockk.verify
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
class IntentExtensionsTest {
@BeforeEach
fun setUp() {
mockkStatic(Intent::class)
}
@AfterEach
fun tearDown() {
unmockkStatic(Intent::class)
}
@Test
fun `validate should not modify the current intent`() {
val intent = mockk<Intent>(relaxed = true) {
every { getStringExtra("token") } returns "myToken"
}
intent.validate()
assertEquals("myToken", intent.getStringExtra("token"))
}
@Test
fun `validate should remove extras if BadParcelableException is thrown`() {
val mockIntent = mockk<Intent>(relaxed = true)
every { mockIntent.extras } throws BadParcelableException("Bad parcel")
mockIntent.validate()
verify { mockIntent.replaceExtras(null as Bundle?) }
}
@Test
fun `validate should remove extras if ClassNotFoundException is thrown`() {
val mockIntent = mockk<Intent>(relaxed = true)
every { mockIntent.extras } throws ClassNotFoundException("Bad parcel")
mockIntent.validate()
verify { mockIntent.replaceExtras(null as Bundle?) }
}
@Test
fun `validate should remove extras if RuntimeException is thrown`() {
val mockIntent = mockk<Intent>(relaxed = true)
every { mockIntent.extras } throws RuntimeException("Bad parcel")
mockIntent.validate()
verify { mockIntent.replaceExtras(null as Bundle?) }
}
}