From 9bbec4b5e98b5dffb53a4e84de5cdc4d85c21f95 Mon Sep 17 00:00:00 2001
From: Bubka <858858+Bubka@users.noreply.github.com>
Date: Wed, 13 Sep 2023 09:18:41 +0200
Subject: [PATCH] Enable Russian & Update translations
---
changelog.md | 1 +
config/2fauth.php | 1 +
resources/lang/es/auth.php | 22 ++--
resources/lang/es/commons.php | 4 +-
resources/lang/es/errors.php | 16 +--
resources/lang/es/groups.php | 2 +-
resources/lang/es/languages.php | 2 +-
resources/lang/es/settings.php | 40 +++---
resources/lang/es/twofaccounts.php | 8 +-
resources/lang/es/validation.php | 56 ++++----
resources/lang/it/auth.php | 124 ++++++++++++++++++
resources/lang/it/commons.php | 74 +++++++++++
resources/lang/it/errors.php | 55 ++++++++
resources/lang/it/groups.php | 40 ++++++
resources/lang/it/languages.php | 20 +++
resources/lang/it/pagination.php | 19 +++
resources/lang/it/passwords.php | 26 ++++
resources/lang/it/settings.php | 155 ++++++++++++++++++++++
resources/lang/it/titles.php | 49 +++++++
resources/lang/it/twofaccounts.php | 162 +++++++++++++++++++++++
resources/lang/it/validation.php | 204 +++++++++++++++++++++++++++++
resources/lang/ro/auth.php | 124 ++++++++++++++++++
resources/lang/ro/commons.php | 74 +++++++++++
resources/lang/ro/errors.php | 55 ++++++++
resources/lang/ro/groups.php | 40 ++++++
resources/lang/ro/languages.php | 20 +++
resources/lang/ro/pagination.php | 19 +++
resources/lang/ro/passwords.php | 26 ++++
resources/lang/ro/settings.php | 155 ++++++++++++++++++++++
resources/lang/ro/titles.php | 49 +++++++
resources/lang/ro/twofaccounts.php | 162 +++++++++++++++++++++++
resources/lang/ro/validation.php | 204 +++++++++++++++++++++++++++++
resources/lang/zh/commons.php | 2 +-
resources/lang/zh/settings.php | 20 +--
resources/lang/zh/twofaccounts.php | 4 +-
35 files changed, 1946 insertions(+), 88 deletions(-)
create mode 100644 resources/lang/it/auth.php
create mode 100644 resources/lang/it/commons.php
create mode 100644 resources/lang/it/errors.php
create mode 100644 resources/lang/it/groups.php
create mode 100644 resources/lang/it/languages.php
create mode 100644 resources/lang/it/pagination.php
create mode 100644 resources/lang/it/passwords.php
create mode 100644 resources/lang/it/settings.php
create mode 100644 resources/lang/it/titles.php
create mode 100644 resources/lang/it/twofaccounts.php
create mode 100644 resources/lang/it/validation.php
create mode 100644 resources/lang/ro/auth.php
create mode 100644 resources/lang/ro/commons.php
create mode 100644 resources/lang/ro/errors.php
create mode 100644 resources/lang/ro/groups.php
create mode 100644 resources/lang/ro/languages.php
create mode 100644 resources/lang/ro/pagination.php
create mode 100644 resources/lang/ro/passwords.php
create mode 100644 resources/lang/ro/settings.php
create mode 100644 resources/lang/ro/titles.php
create mode 100644 resources/lang/ro/twofaccounts.php
create mode 100644 resources/lang/ro/validation.php
diff --git a/changelog.md b/changelog.md
index ac12676b..388aa5da 100644
--- a/changelog.md
+++ b/changelog.md
@@ -37,6 +37,7 @@ So this is now only a user choice as 2FAuth offers both behaviors via a user pre
- An administrator setting to disable user registration ([#170](https://github.com/Bubka/2FAuth/issues/170))
- A `2fauth:install` Artisan command to ease both initial and upgrade installation.
- A spinner, during 2FA password loading - By [@josh-gaby](https://github.com/josh-gaby).
+- Russian translation, but partial. Want to help complete this translation? ➡️ [2FAuth project on Crowdin](https://crowdin.com/project/2fauth).
### Changed
diff --git a/config/2fauth.php b/config/2fauth.php
index df644582..4cf5a855 100644
--- a/config/2fauth.php
+++ b/config/2fauth.php
@@ -54,6 +54,7 @@ return [
'zh',
'es',
'bg',
+ 'ru',
],
/*
diff --git a/resources/lang/es/auth.php b/resources/lang/es/auth.php
index 941288a5..b7746ba6 100644
--- a/resources/lang/es/auth.php
+++ b/resources/lang/es/auth.php
@@ -25,7 +25,7 @@ return [
'sign_in_using_security_device' => 'Iniciar sesión usando un dispositivo de seguridad',
'login_and_password' => 'usuario y contraseña',
'register' => 'Registrarse',
- 'welcome_to_2fauth' => 'Welcome to 2FAuth',
+ 'welcome_to_2fauth' => 'Bienvenido a 2FAuth',
'autolock_triggered' => 'Autobloqueo activado',
'autolock_triggered_punchline' => 'El evento observado por el Auto Bloqueo ha sido activado. Has sido desconectado automáticamente.',
'change_autolock_in_settings' => 'Puedes cambiar el comportamiento de la función Auto Bloqueo en la pestaña Configuración > Opciones.',
@@ -49,30 +49,30 @@ return [
'lost_your_device' => '¿Perdió su dispositivo?',
'recover_your_account' => 'Recuperar su cuenta',
'account_recovery' => 'Recuperación cuenta',
- 'recovery_punchline' => '2FAuth will send you a recovery link to this email address. Click the link in the received email and follow the instructions.
Ensure you open the email on a device you fully own.',
+ 'recovery_punchline' => '2FAuth te enviará un enlace de recuperación a esta dirección de correo electrónico. Haz clic en el enlace en el correo electrónico recibido y sigue las instrucciones.
Asegúrate de abrir el correo electrónico en un dispositivo que sea completamente tuyo.',
'send_recovery_link' => 'Enviar enlace de recuperación',
'account_recovery_email_sent' => '¡Correo de recuperación de cuenta enviado!',
- 'disable_all_security_devices' => 'Disable all security devices',
- 'disable_all_security_devices_help' => 'All your security devices will be revoked. Use this option if you have lost one or its security has been compromised.',
+ 'disable_all_security_devices' => 'Desactivar todos los dispositivos de seguridad',
+ 'disable_all_security_devices_help' => 'Todos sus dispositivos de seguridad serán revocados. Utilice esta opción si ha perdido uno o si su seguridad ha sido comprometida.',
'register_a_new_device' => 'Registrar un nuevo dispositivo',
'register_a_device' => 'Registrar un dispositivo',
'device_successfully_registered' => 'Dispositivo registrado correctamente',
'device_revoked' => 'Dispositivo revocado correctamente',
'revoking_a_device_is_permanent' => 'El revocado de un dispositivo es permanente',
- 'recover_account_instructions' => 'To recover your account, 2FAuth resets some Webauthn settings so you will be able to sign in using your email and password.',
+ 'recover_account_instructions' => 'Para recuperar su cuenta, 2FAuth restablece algunos ajustes de Webauthn para que pueda iniciar sesión usando su correo electrónico y contraseña.',
'invalid_recovery_token' => 'Token de recuperación inválido',
- 'webauthn_login_disabled' => 'Webauthn login disabled',
- 'invalid_reset_token' => 'This reset token is invalid.',
+ 'webauthn_login_disabled' => 'Login Webauthn desactivado',
+ 'invalid_reset_token' => 'Este token de recuperación no es válido.',
'rename_device' => 'Renombrar dispositivo',
'my_device' => 'Mi dispositivo',
'unknown_device' => 'Dispositivo desconocido',
'use_webauthn_only' => [
'label' => 'Usar WebAuthn solo',
- 'help' => 'Make WebAuthn the only authorized method to log into your 2FAuth account. This is the recommended setup to take advantage of the WebAuthn enhanced security.
- In case of device lost, you will be able to recover your account by resetting this option and signing in using your email and password.
- Attention! The Email & Password form remains available despite this option being enabled, but it will always return an \'Authentication failed\' response.'
+ 'help' => 'Haga de WebAuthn el único método autorizado para iniciar sesión en su cuenta de 2FAuth. Esta es la configuración recomendada para aprovechar la seguridad mejorada de WebAuthn.
+ En caso de pérdida del dispositivo, podrás recuperar tu cuenta restableciendo esta opción e iniciando sesión utilizando tu correo electrónico y contraseña.
+ Atención! El formulario de correo electrónico y contraseña sigue disponible a pesar de que esta opción está activada, pero siempre devolverá una respuesta de \'Autenticación fallida\'.'
],
- 'need_a_security_device_to_enable_options' => 'Set at least one device to enable the following options',
+ 'need_a_security_device_to_enable_options' => 'Establezca al menos un dispositivo para activar las siguientes opciones',
],
'forms' => [
'name' => 'Nombre',
diff --git a/resources/lang/es/commons.php b/resources/lang/es/commons.php
index 71cf6c6d..ab80af49 100644
--- a/resources/lang/es/commons.php
+++ b/resources/lang/es/commons.php
@@ -37,7 +37,7 @@ return [
'new' => 'Nuevo',
'back' => 'Volver',
'move' => 'Mover',
- 'export' => 'Export',
+ 'export' => 'Exportar',
'all' => 'Todo',
'select_all' => 'Seleccionar todo',
'clear_selection' => 'Borrar selección',
@@ -49,7 +49,7 @@ return [
'reload' => 'Recargar',
'some_data_have_changed' => 'Algunos datos han cambiado. Deberías',
'generate' => 'Generar',
- 'generating_otp' => 'Generating OTP',
+ 'generating_otp' => 'Generando contraseña de un solo uso',
'open_in_browser' => 'Abrir en el navegador',
'continue' => 'Continuar',
'discard' => 'Descartar',
diff --git a/resources/lang/es/errors.php b/resources/lang/es/errors.php
index 69fb473e..bd1d1c44 100644
--- a/resources/lang/es/errors.php
+++ b/resources/lang/es/errors.php
@@ -33,11 +33,11 @@ return [
'https_required' => 'Contexto HTTPS requerido',
'browser_does_not_support_webauthn' => 'Su dispositivo no soporta WebAuthn. Intente de nuevo más tarde en un navegador más moderno',
'aborted_by_user' => 'Abortado por el usuario',
- 'security_device_unsupported' => 'Unsupported or in use device',
- 'not_allowed_operation' => 'Operation not allowed',
- 'unsupported_operation' => 'Unsupported operation',
- 'unknown_error' => 'Unknown error',
- 'security_error_check_rpid' => 'Security error
Check your WEBAUTHN_ID env var',
+ 'security_device_unsupported' => 'Dispositivo no soportado o en uso',
+ 'not_allowed_operation' => 'Operacion no permitida',
+ 'unsupported_operation' => 'Operación no admitida',
+ 'unknown_error' => 'Error desconocido',
+ 'security_error_check_rpid' => 'Error de seguridad
Compruebe su variable de entorno WEBAUTHN_ID',
'unsupported_with_reverseproxy' => 'No aplicable cuando se utiliza un proxy de autenticación',
'user_deletion_failed' => 'Error al borrar la cuenta de usuario, no se han eliminado datos',
'auth_proxy_failed' => 'La autenticación proxy falló',
@@ -49,7 +49,7 @@ return [
'encrypted_migration' => 'Ilegíble, los datos parecen estar encriptados',
'no_logo_found_for_x' => 'Logo no disponible para {service}',
'file_upload_failed' => 'Fallo al subir el archivo',
- 'unauthorized' => 'Unauthorized',
- 'unauthorized_legend' => 'You do not have permissions to view this resource or to perform this action',
- 'cannot_delete_the_only_admin' => 'Cannot delete the only admin account'
+ 'unauthorized' => 'No autorizado',
+ 'unauthorized_legend' => 'No tiene permisos para ver este recurso o para realizar esta acción',
+ 'cannot_delete_the_only_admin' => 'No se puede eliminar la única cuenta de administrador'
];
\ No newline at end of file
diff --git a/resources/lang/es/groups.php b/resources/lang/es/groups.php
index adc60c6c..7e60035e 100644
--- a/resources/lang/es/groups.php
+++ b/resources/lang/es/groups.php
@@ -23,7 +23,7 @@ return [
'manage_groups_legend' => 'Puedes crear grupos para organizar tus cuentas de la manera que quieras. Todas las cuentas permanecen visibles en el pseudo grupo llamado \'Todo\', independientemente del grupo al que pertenezcan.',
'deleting_group_does_not_delete_accounts' => 'La eliminación de un grupo no elimina cuentas',
'move_selected_to' => 'Mover selección a',
- 'move_selected_to_group' => 'Move selected into a group',
+ 'move_selected_to_group' => 'Mover seleccionados a un grupo',
'no_group' => 'Sin grupo',
'change_group' => 'Cambiar grupo',
'group_successfully_created' => 'Grupo creado correctamente',
diff --git a/resources/lang/es/languages.php b/resources/lang/es/languages.php
index 3ab90006..57c9dbca 100644
--- a/resources/lang/es/languages.php
+++ b/resources/lang/es/languages.php
@@ -16,5 +16,5 @@ return [
'de' => 'Alemán',
'es' => 'Español',
'zh' => 'Chino Simplificado',
- 'ru' => 'Russian',
+ 'ru' => 'Ruso',
];
\ No newline at end of file
diff --git a/resources/lang/es/settings.php b/resources/lang/es/settings.php
index 9d546f47..15381604 100644
--- a/resources/lang/es/settings.php
+++ b/resources/lang/es/settings.php
@@ -14,18 +14,18 @@ return [
*/
'settings' => 'Ajustes',
- 'preferences' => 'Preferences',
+ 'preferences' => 'Preferencias',
'account' => 'Cuenta',
'oauth' => 'OAuth',
'webauthn' => 'WebAuthn',
'tokens' => 'Tokens',
'options' => 'Opciones',
- 'user_preferences' => 'User preferences',
- 'admin_settings' => 'Admin settings',
+ 'user_preferences' => 'Preferencias de usuario',
+ 'admin_settings' => 'Ajustes de administración',
'confirm' => [
],
- 'administration' => 'Administration',
+ 'administration' => 'Administración',
'administration_legend' => 'While previous settings are user settings (every user can set its own preferences), following settings are global and apply to all users. Only an administrator can view and edit those settings.',
'you_are_administrator' => 'You are an administrator',
'general' => 'General',
@@ -74,24 +74,24 @@ return [
'help' => 'Elija si desea que las cuentas se muestren como una lista o como una cuadrícula'
],
'password_format' => [
- 'label' => 'Password formatting',
+ 'label' => 'Formato de contraseñas',
'help' => 'Change how the passwords are displayed by grouping digits to ease readability and memorization'
],
- 'pair' => 'by Pair',
+ 'pair' => 'por parejas',
'pair_legend' => 'Group digits two by two',
'trio_legend' => 'Group digits three by three',
- 'half_legend' => 'Split digits into two equals groups',
- 'trio' => 'by Trio',
- 'half' => 'by Half',
+ 'half_legend' => 'Dividir dígitos en dos grupos iguales',
+ 'trio' => 'por tríos',
+ 'half' => 'por la mitad',
'grid' => 'Cuadrícula',
'list' => 'Lista',
'theme' => [
- 'label' => 'Theme',
- 'help' => 'Force a specific theme or apply the theme defined in your system/browser preferences'
+ 'label' => 'Tema',
+ 'help' => 'Forzar un tema específico o aplicar el tema definido en sus preferencias de sistema/navegador'
],
- 'light' => 'Light',
- 'dark' => 'Dark',
- 'automatic' => 'Auto',
+ 'light' => 'Claro',
+ 'dark' => 'Oscuro',
+ 'automatic' => 'Automático',
'show_accounts_icons' => [
'label' => 'Mostrar iconos',
'help' => 'Mostar iconos de aplicaciones en la vista principal'
@@ -125,19 +125,19 @@ return [
'help' => 'Guardar el último filtro de grupo aplicado y restaurarlo en su próxima visita',
],
'disable_registration' => [
- 'label' => 'Disable registration',
- 'help' => 'Prevent new user registration',
+ 'label' => 'Deshabilitar registro de usuarios',
+ 'help' => 'Evitar el registro de nuevos usuarios',
],
'otp_generation' => [
- 'label' => 'Show Password',
+ 'label' => 'Mostrar contraseña',
'help' => 'Set how and when OTPs are displayed.
',
],
- 'otp_generation_on_request' => 'After a click/tap',
+ 'otp_generation_on_request' => 'Después de un clic/toque',
'otp_generation_on_request_legend' => 'Alone, in its own view',
'otp_generation_on_request_title' => 'Click an account to get a password in a dedicated view',
- 'otp_generation_on_home' => 'Constantly',
+ 'otp_generation_on_home' => 'Constantemente',
'otp_generation_on_home_legend' => 'All of them, on home',
- 'otp_generation_on_home_title' => 'Show all passwords in the main view, without doing anything',
+ 'otp_generation_on_home_title' => 'Mostrar todas las contraseñas en la vista principal, sin hacer nada',
'never' => 'Nunca',
'on_otp_copy' => 'Al copiar código de seguridad',
'1_minutes' => 'Después de 1 minuto',
diff --git a/resources/lang/es/twofaccounts.php b/resources/lang/es/twofaccounts.php
index d9b01e15..5c3d5bf5 100644
--- a/resources/lang/es/twofaccounts.php
+++ b/resources/lang/es/twofaccounts.php
@@ -30,7 +30,7 @@ return [
'account_updated' => 'Cuenta actualizada correctamente',
'accounts_deleted' => 'Cuenta(s) eliminada(s) correctamente',
'accounts_moved' => 'Cuenta(s) movida(s) correctamente',
- 'export_selected_to_json' => 'Download a json export of selected accounts',
+ 'export_selected_to_json' => 'Descargar un fichero json con el contenido de las cuentas seleccionadas',
'forms' => [
'service' => [
'placeholder' => 'Google, Twitter, Apple',
@@ -58,8 +58,8 @@ return [
'title' => 'Bloquearlo',
],
'choose_image' => 'Subir',
- 'i_m_lucky' => 'Try my luck',
- 'i_m_lucky_legend' => 'The "Try my luck" button try to get the official icon of the given service. Enter actual service name without ".xyz" extension and try to avoid typo. (beta feature)',
+ 'i_m_lucky' => 'Probar suerte',
+ 'i_m_lucky_legend' => 'El botón "Probar suerte" intenta obtener el icono oficial del servicio dado. Introduzca el nombre del servicio sin la extensión ".xyz" e intente evitar errores tipográficos. (función beta)',
'test' => 'Test',
'secret' => [
'label' => 'Secreto',
@@ -156,7 +156,7 @@ return [
'possible_duplicate' => 'Ya existe una cuenta con exactamente los mismos datos',
'invalid_account' => '- cuenta inválida -',
'invalid_service' => '- servicio inválido -',
- 'do_not_set_password_or_encryption' => 'Do NOT enable Password protection or Encryption when you export data (from a 2FA app) you want to import into 2FAuth.',
+ 'do_not_set_password_or_encryption' => 'NO habilite la protección de contraseña o el cifrado cuando exporte datos (desde una aplicación 2FA) que desee importar a 2FAuth.',
],
];
\ No newline at end of file
diff --git a/resources/lang/es/validation.php b/resources/lang/es/validation.php
index eb74f66e..866ff878 100644
--- a/resources/lang/es/validation.php
+++ b/resources/lang/es/validation.php
@@ -18,9 +18,9 @@ return [
'active_url' => ':attribute no es una URL válida.',
'after' => ':attribute debe ser una fecha posterior a :date.',
'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.',
- 'alpha' => 'The :attribute must only contain letters.',
- 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
- 'alpha_num' => 'The :attribute must only contain letters and numbers.',
+ 'alpha' => ':attribute solo puede contener letras.',
+ 'alpha_dash' => ':attribute solo puede contener letras, números, guiones y guiones bajos.',
+ 'alpha_num' => ':attribute solo puede contener letras y números.',
'array' => ':attribute debe ser un conjunto de datos.',
'before' => ':attribute debe ser una fecha anterior a :date.',
'before_or_equal' => ':attribute debe ser una fecha anterior o igual a :date.',
@@ -43,11 +43,11 @@ return [
'digits_between' => ':attribute debe tener entre :min y :max dígitos.',
'dimensions' => 'Las dimensiones de la imagen :attribute no son válidas.',
'distinct' => 'El campo :attribute contiene un valor duplicado.',
- 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.',
- 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.',
+ 'doesnt_end_with' => ':attribute no puede finalizar con uno de los siguientes valores: :values.',
+ 'doesnt_start_with' => ':attribute no puede comenzar con uno de los siguientes valores: :values.',
'email' => ':attribute no es un correo válido.',
'ends_with' => 'El campo :attribute debe finalizar con uno de los siguientes valores: :values',
- 'enum' => 'The selected :attribute is invalid.',
+ 'enum' => ':attribute no tiene el formato adecuado.',
'exists' => ':attribute es inválido.',
'file' => 'El campo :attribute debe ser un archivo.',
'filled' => 'El campo :attribute es obligatorio.',
@@ -59,9 +59,9 @@ return [
],
'gte' => [
'array' => 'El campo :attribute debe tener como mínimo :value elementos.',
- 'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
- 'numeric' => 'The :attribute must be greater than or equal to :value.',
- 'string' => 'The :attribute must be greater than or equal to :value characters.',
+ 'file' => ':attribute debe ser mayor o igual a :value kilobytes.',
+ 'numeric' => ':attribute debe ser mayor o igual que :value.',
+ 'string' => ':attribute debe tener al menos :value caracteres.',
],
'image' => ':attribute debe ser una imagen.',
'in' => ':attribute es inválido.',
@@ -79,18 +79,18 @@ return [
],
'lte' => [
'array' => 'El campo :attribute debe tener como máximo :value elementos.',
- 'file' => 'The :attribute must be less than or equal to :value kilobytes.',
- 'numeric' => 'The :attribute must be less than or equal to :value.',
- 'string' => 'The :attribute must be less than or equal to :value characters.',
+ 'file' => ':attribute debe ser menor o igual que :value kilobytes.',
+ 'numeric' => ':attribute debe ser menor o igual que :value.',
+ 'string' => ':attribute debe tener como máximo :value caracteres.',
],
- 'mac_address' => 'The :attribute must be a valid MAC address.',
+ 'mac_address' => ':attribute debe ser una dirección MAC válida.',
'max' => [
- 'array' => 'The :attribute must not have more than :max items.',
- 'file' => 'The :attribute must not be greater than :max kilobytes.',
- 'numeric' => 'The :attribute must not be greater than :max.',
- 'string' => 'The :attribute must not be greater than :max characters.',
+ 'array' => 'El :attribute no debe contener más de :max elementos.',
+ 'file' => ':attribute no puede ser mayor que :max kilobytes.',
+ 'numeric' => ':attribute no debe ser mayor que :max.',
+ 'string' => ':attribute no debe contener más de :max caracteres.',
],
- 'max_digits' => 'The :attribute must not have more than :max digits.',
+ 'max_digits' => ':attribute no debe tener más de :max dígitos.',
'mimes' => ':attribute debe ser un archivo con formato: :values.',
'mimetypes' => ':attribute debe ser un archivo con formato: :values.',
'min' => [
@@ -99,17 +99,17 @@ return [
'numeric' => 'El tamaño de :attribute debe ser de al menos :min.',
'string' => ':attribute debe contener al menos :min caracteres.',
],
- 'min_digits' => 'The :attribute must have at least :min digits.',
+ 'min_digits' => ':attribute debe tener al menos :min dígitos.',
'multiple_of' => ':attribute debe ser un múltiplo de :value.',
'not_in' => ':attribute es inválido.',
'not_regex' => 'El formato del campo :attribute no es válido.',
'numeric' => ':attribute debe ser numérico.',
'password' => [
- 'letters' => 'The :attribute must contain at least one letter.',
- 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.',
- 'numbers' => 'The :attribute must contain at least one number.',
- 'symbols' => 'The :attribute must contain at least one symbol.',
- 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
+ 'letters' => ':attribute debe contener al menos una letra.',
+ 'mixed' => ':attribute debe contener al menos una mayúscula y una minúscula.',
+ 'numbers' => ':attribute debe contener al menos un número.',
+ 'symbols' => ':attribute debe contener al menos un símbolo.',
+ 'uncompromised' => 'El campo :attribute ha aparecido en una fuga de datos. Por favor, elige un nuevo valor.',
],
'present' => 'El campo :attribute debe estar presente.',
'prohibited' => 'El campo :attribute está prohibido.',
@@ -118,9 +118,9 @@ return [
'prohibits' => 'El campo :attribute prohíbe que :other esté presente.',
'regex' => 'El formato de :attribute es inválido.',
'required' => 'El campo :attribute es obligatorio.',
- 'required_array_keys' => 'The :attribute field must contain entries for: :values.',
+ 'required_array_keys' => 'El campo :attribute debe contener entradas para: :values.',
'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.',
- 'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
+ 'required_if_accepted' => 'El campo :attribute es obligatorio cuando :other se acepta.',
'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.',
'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.',
'required_with_all' => 'El campo :attribute es obligatorio cuando :values están presentes.',
@@ -135,10 +135,10 @@ return [
],
'starts_with' => 'El campo :attribute debe comenzar con uno de los siguientes valores: :values',
'string' => 'El campo :attribute debe ser una cadena de caracteres.',
- 'timezone' => 'The :attribute must be a valid timezone.',
+ 'timezone' => ':attribute debe ser una zona horaria válida.',
'unique' => 'El campo :attribute ya ha sido registrado.',
'uploaded' => 'Subir :attribute ha fallado.',
- 'url' => 'The :attribute must be a valid URL.',
+ 'url' => ':attribute debe ser una URL válida.',
'uuid' => 'El campo :attribute debe ser un UUID válido.',
'single' => 'Cuando se usa :attribute, éste debe ser el único parámetro en este cuerpo de la solicitud',
diff --git a/resources/lang/it/auth.php b/resources/lang/it/auth.php
new file mode 100644
index 00000000..6625020d
--- /dev/null
+++ b/resources/lang/it/auth.php
@@ -0,0 +1,124 @@
+ 'Credenziali non valide.',
+ 'password' => 'The provided password is incorrect.',
+ 'throttle' => 'Troppi tentativi di accesso. Riprova tra :seconds secondi.',
+
+ // 2FAuth
+ 'sign_out' => 'Sign out',
+ 'sign_in' => 'Sign in',
+ 'sign_in_using' => 'Sign in using',
+ 'sign_in_using_security_device' => 'Sign in using a security device',
+ 'login_and_password' => 'login & password',
+ 'register' => 'Register',
+ 'welcome_to_2fauth' => 'Welcome to 2FAuth',
+ 'autolock_triggered' => 'Auto lock triggered',
+ 'autolock_triggered_punchline' => 'The event watched by the Auto Lock feature has fired. You\'ve been automatically disconnected.',
+ 'change_autolock_in_settings' => 'You can change the behavior of the Autolock feature in Settings > Options tab.',
+ 'already_authenticated' => 'Already authenticated',
+ 'authentication' => 'Authentication',
+ 'maybe_later' => 'Maybe later',
+ 'user_account_controlled_by_proxy' => 'User account made available by an authentication proxy.
Manage the account at proxy level.',
+ 'auth_handled_by_proxy' => 'Authentication handled by a reverse proxy, below settings are disabled.
Manage authentication at proxy level.',
+ 'confirm' => [
+ 'logout' => 'Are you sure you want to log out?',
+ 'revoke_device' => 'Are you sure you want to revoke this device?',
+ 'delete_account' => 'Are you sure you want to delete your account?',
+ ],
+ 'webauthn' => [
+ 'security_device' => 'a security device',
+ 'security_devices' => 'Security devices',
+ 'security_devices_legend' => 'Authentication devices you can use to sign in 2FAuth, like security keys (i.e Yubikey) or smartphones with biometric capabilities (i.e. Apple FaceId/TouchId)',
+ 'enhance_security_using_webauthn' => 'You can enhance the security of your 2FAuth account by enabling WebAuthn authentication.
+ WebAuthn allows you to use trusted devices (like Yubikeys or smartphones with biometric capabilities) to sign in quickly and more securely.',
+ 'use_security_device_to_sign_in' => 'Get ready to authenticate using (one of) your security devices. Plug your key in, remove face mask or gloves, etc.',
+ 'lost_your_device' => 'Lost your device?',
+ 'recover_your_account' => 'Recover your account',
+ 'account_recovery' => 'Account recovery',
+ 'recovery_punchline' => '2FAuth will send you a recovery link to this email address. Click the link in the received email and follow the instructions.
Ensure you open the email on a device you fully own.',
+ 'send_recovery_link' => 'Send recovery link',
+ 'account_recovery_email_sent' => 'Account recovery email sent!',
+ 'disable_all_security_devices' => 'Disable all security devices',
+ 'disable_all_security_devices_help' => 'All your security devices will be revoked. Use this option if you have lost one or its security has been compromised.',
+ 'register_a_new_device' => 'Register a new device',
+ 'register_a_device' => 'Register a device',
+ 'device_successfully_registered' => 'Device successfully registered',
+ 'device_revoked' => 'Device successfully revoked',
+ 'revoking_a_device_is_permanent' => 'Revoking a device is permanent',
+ 'recover_account_instructions' => 'To recover your account, 2FAuth resets some Webauthn settings so you will be able to sign in using your email and password.',
+ 'invalid_recovery_token' => 'Invalid recovery token',
+ 'webauthn_login_disabled' => 'Webauthn login disabled',
+ 'invalid_reset_token' => 'This reset token is invalid.',
+ 'rename_device' => 'Rename device',
+ 'my_device' => 'My device',
+ 'unknown_device' => 'Unknown device',
+ 'use_webauthn_only' => [
+ 'label' => 'Use WebAuthn only',
+ 'help' => 'Make WebAuthn the only authorized method to log into your 2FAuth account. This is the recommended setup to take advantage of the WebAuthn enhanced security.
+ In case of device lost, you will be able to recover your account by resetting this option and signing in using your email and password.
+ Attention! The Email & Password form remains available despite this option being enabled, but it will always return an \'Authentication failed\' response.'
+ ],
+ 'need_a_security_device_to_enable_options' => 'Set at least one device to enable the following options',
+ ],
+ 'forms' => [
+ 'name' => 'Name',
+ 'login' => 'Login',
+ 'webauthn_login' => 'WebAuthn login',
+ 'email' => 'Email',
+ 'password' => 'Password',
+ 'reveal_password' => 'Reveal password',
+ 'hide_password' => 'Hide password',
+ 'confirm_password' => 'Confirm password',
+ 'confirm_new_password' => 'Confirm new password',
+ 'dont_have_account_yet' => 'Don\'t have your account yet?',
+ 'already_register' => 'Already registered?',
+ 'authentication_failed' => 'Authentication failed',
+ 'forgot_your_password' => 'Forgot your password?',
+ 'request_password_reset' => 'Reset it',
+ 'reset_your_password' => 'Reset your password',
+ 'reset_password' => 'Reset password',
+ 'disabled_in_demo' => 'Feature disabled in Demo mode',
+ 'new_password' => 'New password',
+ 'current_password' => [
+ 'label' => 'Current password',
+ 'help' => 'Fill in your current password to confirm that it\'s you'
+ ],
+ 'change_password' => 'Change password',
+ 'send_password_reset_link' => 'Send password reset link',
+ 'password_successfully_changed' => 'Password successfully changed',
+ 'edit_account' => 'Edit account',
+ 'profile_saved' => 'Profile successfully updated!',
+ 'welcome_to_demo_app_use_those_credentials' => 'Welcome to the 2FAuth demo.
You can connect using the email address demo@2fauth.app and the password demo',
+ 'welcome_to_testing_app_use_those_credentials' => 'Welcome to the 2FAuth testing instance.
Use email address testing@2fauth.app and password password',
+ 'register_punchline' => 'Welcome to 2FAuth.
You need an account to go further, please register yourself.',
+ 'reset_punchline' => '2FAuth will send you a password reset link to this address. Click the link in the received email to set a new password.',
+ 'name_this_device' => 'Name this device',
+ 'delete_account' => 'Delete account',
+ 'delete_your_account' => 'Delete your account',
+ 'delete_your_account_and_reset_all_data' => 'This will reset 2FAuth. Your user account will be deleted as well as all 2FA data. There is no going back.',
+ 'user_account_successfully_deleted' => 'User account successfully deleted',
+ 'has_lower_case' => 'Has lower case',
+ 'has_upper_case' => 'Has upper case',
+ 'has_special_char' => 'Has special char',
+ 'has_number' => 'Has number',
+ 'is_long_enough' => '8 characters min.',
+ 'mandatory_rules' => 'Mandatory',
+ 'optional_rules_you_should_follow' => 'Recommanded (highly)',
+ 'caps_lock_is_on' => 'Caps lock is On',
+ ],
+
+];
diff --git a/resources/lang/it/commons.php b/resources/lang/it/commons.php
new file mode 100644
index 00000000..b4a8c893
--- /dev/null
+++ b/resources/lang/it/commons.php
@@ -0,0 +1,74 @@
+ 'Cancel',
+ 'update' => 'Update',
+ 'copy' => 'Copy',
+ 'copy_to_clipboard' => 'Copy to clipboard',
+ 'copied_to_clipboard' => 'Copied to clipboard',
+ 'profile' => 'Profile',
+ 'edit' => 'Edit',
+ 'delete' => 'Delete',
+ 'disable' => 'Disable',
+ 'enable' => 'Enable',
+ 'create' => 'Create',
+ 'save' => 'Save',
+ 'close' => 'Close',
+ 'clear' => 'Clear',
+ 'clear_search' => 'Clear search',
+ 'demo_do_not_post_sensitive_data' => 'This is a demo app, do not post any sensitive data',
+ 'testing_do_not_post_sensitive_data' => 'This is a testing app, do not post any sensitive data',
+ 'selected' => 'selected',
+ 'name' => 'Name',
+ 'manage' => 'Manage',
+ 'done' => 'Done',
+ 'new' => 'New',
+ 'back' => 'Back',
+ 'move' => 'Move',
+ 'export' => 'Export',
+ 'all' => 'All',
+ 'select_all' => 'Select all',
+ 'clear_selection' => 'Clear selection',
+ 'sort_descending' => 'Sort descending',
+ 'sort_ascending' => 'Sort ascending',
+ 'rename' => 'Rename',
+ 'new_name' => 'New name',
+ 'options' => 'Options',
+ 'reload' => 'Reload',
+ 'some_data_have_changed' => 'Some data have changed. You should',
+ 'generate' => 'Generate',
+ 'generating_otp' => 'Generating OTP',
+ 'open_in_browser' => 'Open in browser',
+ 'continue' => 'Continue',
+ 'discard' => 'Discard',
+ 'about' => 'About',
+ 'usefull_links' => 'Usefull links',
+ 'environment' => 'Environment',
+ 'credits' => 'Credits',
+ '2fauth_teaser' => 'A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes',
+ 'made_with' => 'Made with',
+ 'ui_icons_by' => 'UI Icons by',
+ 'logos_by' => 'Logos by',
+ 'search' => 'Search',
+ 'resources' => 'Resources',
+ 'check_for_update' => 'Check for new version',
+ 'check_for_update_help' => 'Automatically check (once a week) and warn when a new release of 2FAuth is published on Github',
+ 'you_are_up_to_date' => 'This instance is up-to-date',
+ '2fauth_description' => 'A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes',
+ 'image_of_qrcode_to_scan' => 'Image of a QR code to scan',
+ 'file' => 'File',
+ 'or' => 'OR',
+ 'close_the_x_page' => 'Close the {pagetitle} page',
+];
diff --git a/resources/lang/it/errors.php b/resources/lang/it/errors.php
new file mode 100644
index 00000000..6334bf07
--- /dev/null
+++ b/resources/lang/it/errors.php
@@ -0,0 +1,55 @@
+ 'Resource not found',
+ 'error_occured' => 'An error occured:',
+ 'refresh' => 'Refresh',
+ 'no_valid_otp' => 'No valid OTP resource in this QR code',
+ 'something_wrong_with_server' => 'Something is wrong with your server',
+ 'Unable_to_decrypt_uri' => 'Unable to decrypt uri',
+ 'not_a_supported_otp_type' => 'This OTP format is not currently supported',
+ 'cannot_create_otp_without_secret' => 'Cannot create an OTP without a secret',
+ 'data_of_qrcode_is_not_valid_URI' => 'The data of this QR code is not a valid OTP Auth URI. The QR code contains:',
+ 'wrong_current_password' => 'Wrong current password, nothing has changed',
+ 'error_during_encryption' => 'Encryption failed, your database remains unprotected.',
+ 'error_during_decryption' => 'Decryption failed, your database is still protected. This is mainly caused by an integrity issue of encrypted data for one or more accounts.',
+ 'qrcode_cannot_be_read' => 'This QR code is unreadable',
+ 'too_many_ids' => 'too many ids were included in the query parameter, max 100 allowed',
+ 'delete_user_setting_only' => 'Only user-created setting can be deleted',
+ 'indecipherable' => '*indecipherable*',
+ 'cannot_decipher_secret' => 'The secret cannot be deciphered. This is mainly caused by a wrong APP_KEY set in the .env configuration file of 2Fauth or a corrupted data stored in database.',
+ 'https_required' => 'HTTPS context required',
+ 'browser_does_not_support_webauthn' => 'Your device does not support webauthn. Try again later using a more modern browser',
+ 'aborted_by_user' => 'Aborted by user',
+ 'security_device_unsupported' => 'Unsupported or in use device',
+ 'not_allowed_operation' => 'Operation not allowed',
+ 'unsupported_operation' => 'Unsupported operation',
+ 'unknown_error' => 'Unknown error',
+ 'security_error_check_rpid' => 'Security error
Check your WEBAUTHN_ID env var',
+ 'unsupported_with_reverseproxy' => 'Not applicable when using an auth proxy',
+ 'user_deletion_failed' => 'User account deletion failed, no data have been deleted',
+ 'auth_proxy_failed' => 'Proxy authentication failed',
+ 'auth_proxy_failed_legend' => '2Fauth is configured to run behind an authentication proxy but your proxy does not return the expected header. Check your configuration and try again.',
+ 'invalid_x_migration' => 'Invalid or unreadable :appname data',
+ 'invalid_2fa_data' => 'Invalid 2FA data',
+ 'unsupported_migration' => 'Data do not match any supported format',
+ 'unsupported_otp_type' => 'Unsupported OTP type',
+ 'encrypted_migration' => 'Unreadable, the data seem encrypted',
+ 'no_logo_found_for_x' => 'No logo available for {service}',
+ 'file_upload_failed' => 'File upload failed',
+ 'unauthorized' => 'Unauthorized',
+ 'unauthorized_legend' => 'You do not have permissions to view this resource or to perform this action',
+ 'cannot_delete_the_only_admin' => 'Cannot delete the only admin account'
+];
\ No newline at end of file
diff --git a/resources/lang/it/groups.php b/resources/lang/it/groups.php
new file mode 100644
index 00000000..1d130553
--- /dev/null
+++ b/resources/lang/it/groups.php
@@ -0,0 +1,40 @@
+ 'Groups',
+ 'create_group' => 'Create new group',
+ 'show_group_selector' => 'Show group selector',
+ 'hide_group_selector' => 'Hide group selector',
+ 'select_accounts_to_show' => 'Select accounts group to show',
+ 'manage_groups' => 'Manage groups',
+ 'active_group' => 'Active group',
+ 'manage_groups_legend' => 'You can create groups to organize your accounts the way you want. All accounts remain visible in the pseudo group named \'All\', regardless of the group they belong to.',
+ 'deleting_group_does_not_delete_accounts' => 'Deleting a group does not delete accounts',
+ 'move_selected_to' => 'Move selected to',
+ 'move_selected_to_group' => 'Move selected into a group',
+ 'no_group' => 'No group',
+ 'change_group' => 'Change group',
+ 'group_successfully_created' => 'Group successfully created',
+ 'group_name_saved' => 'Group name saved',
+ 'group_successfully_deleted' => 'Group successfully deleted',
+ 'forms' => [
+ 'new_group' => 'New group',
+ 'new_name' => 'New name',
+ 'rename_group' => 'Rename group',
+ ],
+ 'confirm' => [
+ 'delete' => 'Are you sure you want to delete this group?',
+ ],
+];
\ No newline at end of file
diff --git a/resources/lang/it/languages.php b/resources/lang/it/languages.php
new file mode 100644
index 00000000..a7f7e0e5
--- /dev/null
+++ b/resources/lang/it/languages.php
@@ -0,0 +1,20 @@
+ 'Browser preference',
+ 'en' => 'English',
+ 'fr' => 'French',
+ 'de' => 'German',
+ 'es' => 'Spanish',
+ 'zh' => 'Chinese Simplified',
+ 'ru' => 'Russian',
+];
\ No newline at end of file
diff --git a/resources/lang/it/pagination.php b/resources/lang/it/pagination.php
new file mode 100644
index 00000000..9d6a2e2b
--- /dev/null
+++ b/resources/lang/it/pagination.php
@@ -0,0 +1,19 @@
+ '« Precedente',
+ 'next' => 'Successivo »',
+
+];
diff --git a/resources/lang/it/passwords.php b/resources/lang/it/passwords.php
new file mode 100644
index 00000000..8c1b477e
--- /dev/null
+++ b/resources/lang/it/passwords.php
@@ -0,0 +1,26 @@
+ 'La password è stata reimpostata!',
+ 'sent' => 'Ti abbiamo inviato una email con il link per il reset della password!',
+ 'throttled' => 'Per favore, attendi prima di riprovare.',
+ 'token' => 'Questo token di reset della password non è valido.',
+ 'user' => "Non riusciamo a trovare un utente con questo indirizzo email.",
+
+ // 2FAuth
+ 'password' => 'Passwords must be at least eight characters and match the confirmation.',
+
+];
diff --git a/resources/lang/it/settings.php b/resources/lang/it/settings.php
new file mode 100644
index 00000000..1f5de622
--- /dev/null
+++ b/resources/lang/it/settings.php
@@ -0,0 +1,155 @@
+ 'Settings',
+ 'preferences' => 'Preferences',
+ 'account' => 'Account',
+ 'oauth' => 'OAuth',
+ 'webauthn' => 'WebAuthn',
+ 'tokens' => 'Tokens',
+ 'options' => 'Options',
+ 'user_preferences' => 'User preferences',
+ 'admin_settings' => 'Admin settings',
+ 'confirm' => [
+
+ ],
+ 'administration' => 'Administration',
+ 'administration_legend' => 'While previous settings are user settings (every user can set its own preferences), following settings are global and apply to all users. Only an administrator can view and edit those settings.',
+ 'you_are_administrator' => 'You are an administrator',
+ 'general' => 'General',
+ 'security' => 'Security',
+ 'profile' => 'Profile',
+ 'change_password' => 'Change password',
+ 'personal_access_tokens' => 'Personal access tokens',
+ 'token_legend' => 'Personal Access Tokens allow any app to authenticate to the 2Fauth API. You should specify the access token as a Bearer token in the authorization header of consumer apps requests.',
+ 'generate_new_token' => 'Generate a new token',
+ 'revoke' => 'Revoke',
+ 'token_revoked' => 'Token successfully revoked',
+ 'revoking_a_token_is_permanent' => 'Revoking a token is permanent',
+ 'confirm' => [
+ 'revoke' => 'Are you sure you want to revoke this token?',
+ ],
+ 'make_sure_copy_token' => 'Make sure to copy your personal access token now. You won’t be able to see it again!',
+ 'data_input' => 'Data input',
+ 'forms' => [
+ 'edit_settings' => 'Edit settings',
+ 'setting_saved' => 'Settings saved',
+ 'new_token' => 'New token',
+ 'some_translation_are_missing' => 'Some translations are missing using the browser preferred language?',
+ 'help_translate_2fauth' => 'Help translate 2FAuth',
+ 'language' => [
+ 'label' => 'Language',
+ 'help' => 'Language used to translate the 2FAuth user interface. Named languages are complete, set the one of your choice to override your browser preference.'
+ ],
+ 'show_otp_as_dot' => [
+ 'label' => 'Show generated one-time passwords as dot',
+ 'help' => 'Replace generated password caracters with *** to ensure confidentiality. Do not affect the copy/paste feature'
+ ],
+ 'close_otp_on_copy' => [
+ 'label' => 'Close OTP after copy',
+ 'help' => 'Clicking a generated password to copy it automatically hide it from the screen'
+ ],
+ 'copy_otp_on_display' => [
+ 'label' => 'Copy OTP on display',
+ 'help' => 'Automatically copy a generated password right after it appears on screen. Due to browsers limitations, only the first TOTP password will be copied, not the rotating ones'
+ ],
+ 'use_basic_qrcode_reader' => [
+ 'label' => 'Use basic QR code reader',
+ 'help' => 'If you experiences issues when capturing QR codes enables this option to switch to a more basic but more reliable QR code reader'
+ ],
+ 'display_mode' => [
+ 'label' => 'Display mode',
+ 'help' => 'Choose whether you want accounts to be displayed as a list or as a grid'
+ ],
+ 'password_format' => [
+ 'label' => 'Password formatting',
+ 'help' => 'Change how the passwords are displayed by grouping digits to ease readability and memorization'
+ ],
+ 'pair' => 'by Pair',
+ 'pair_legend' => 'Group digits two by two',
+ 'trio_legend' => 'Group digits three by three',
+ 'half_legend' => 'Split digits into two equals groups',
+ 'trio' => 'by Trio',
+ 'half' => 'by Half',
+ 'grid' => 'Grid',
+ 'list' => 'List',
+ 'theme' => [
+ 'label' => 'Theme',
+ 'help' => 'Force a specific theme or apply the theme defined in your system/browser preferences'
+ ],
+ 'light' => 'Light',
+ 'dark' => 'Dark',
+ 'automatic' => 'Auto',
+ 'show_accounts_icons' => [
+ 'label' => 'Show icons',
+ 'help' => 'Show icons accounts in the main view'
+ ],
+ 'get_official_icons' => [
+ 'label' => 'Get official icons',
+ 'help' => '(Try to) Get the official icon of the 2FA issuer when adding an account'
+ ],
+ 'auto_lock' => [
+ 'label' => 'Auto lock',
+ 'help' => 'Log out the user automatically in case of inactivity. Has no effect when authentication is handled by a proxy and no custom logout url is specified.'
+ ],
+ 'use_encryption' => [
+ 'label' => 'Protect sensible data',
+ 'help' => 'Sensitive data, the 2FA secrets and emails, are stored encrypted in database. Be sure to backup the APP_KEY value of your .env file (or the whole file) as it serves as key encryption. There is no way to decypher encrypted data without this key.',
+ ],
+ 'default_group' => [
+ 'label' => 'Default group',
+ 'help' => 'The group to which the newly created accounts are associated',
+ ],
+ 'useDirectCapture' => [
+ 'label' => 'Direct input',
+ 'help' => 'Choose whether you want to be prompted to choose an input mode among those available or if you want to directly use the default input mode',
+ ],
+ 'defaultCaptureMode' => [
+ 'label' => 'Default input mode',
+ 'help' => 'Default input mode used when the Direct input option is On',
+ ],
+ 'remember_active_group' => [
+ 'label' => 'Remember group filter',
+ 'help' => 'Save the last group filter applied and restore it on your next visit',
+ ],
+ 'disable_registration' => [
+ 'label' => 'Disable registration',
+ 'help' => 'Prevent new user registration',
+ ],
+ 'otp_generation' => [
+ 'label' => 'Show Password',
+ 'help' => 'Set how and when OTPs are displayed.
',
+ ],
+ 'otp_generation_on_request' => 'After a click/tap',
+ 'otp_generation_on_request_legend' => 'Alone, in its own view',
+ 'otp_generation_on_request_title' => 'Click an account to get a password in a dedicated view',
+ 'otp_generation_on_home' => 'Constantly',
+ 'otp_generation_on_home_legend' => 'All of them, on home',
+ 'otp_generation_on_home_title' => 'Show all passwords in the main view, without doing anything',
+ 'never' => 'Never',
+ 'on_otp_copy' => 'On security code copy',
+ '1_minutes' => 'After 1 minute',
+ '5_minutes' => 'After 5 minutes',
+ '10_minutes' => 'After 10 minutes',
+ '15_minutes' => 'After 15 minutes',
+ '30_minutes' => 'After 30 minutes',
+ '1_hour' => 'After 1 hour',
+ '1_day' => 'After 1 day',
+ 'livescan' => 'QR code livescan',
+ 'upload' => 'QR code upload',
+ 'advanced_form' => 'Advanced form',
+ ],
+
+];
\ No newline at end of file
diff --git a/resources/lang/it/titles.php b/resources/lang/it/titles.php
new file mode 100644
index 00000000..16be3a04
--- /dev/null
+++ b/resources/lang/it/titles.php
@@ -0,0 +1,49 @@
+ 'New account',
+ 'capture' => 'Flash QR',
+ 'accounts' => 'Accounts',
+ 'createAccount' => 'Create account',
+ 'importAccounts' => 'Import accounts',
+ 'editAccount' => 'Account edit',
+ 'showQRcode' => 'Account as QR code',
+ 'groups' => 'Groups',
+ 'createGroup' => 'Create group',
+ 'editGroup' => 'Group edit',
+ 'settings' => [
+ 'options' => 'Options',
+ 'account' => 'User account',
+ 'oauth' => [
+ 'tokens' => 'OAuth tokens',
+ 'generatePAT' => 'New personal token',
+ ],
+ 'webauthn' => [
+ 'editCredential' => 'Device edit',
+ 'devices' => 'WebAuthn devices',
+ ],
+ ],
+ 'login' => 'Login',
+ 'register' => 'Register',
+ 'autolock' => 'Auto lock',
+ 'password' => [
+ 'request' => 'Reset password',
+ 'reset' => 'New password',
+ ],
+ 'webauthn' => [
+ 'lost' => 'Account recovery',
+ 'recover' => 'Register a new device',
+ ],
+ 'flooded' => 'Flood',
+ 'genericError' => 'Error',
+ '404' => 'Item not found',
+ 'about' => 'About',
+];
\ No newline at end of file
diff --git a/resources/lang/it/twofaccounts.php b/resources/lang/it/twofaccounts.php
new file mode 100644
index 00000000..a9630fd0
--- /dev/null
+++ b/resources/lang/it/twofaccounts.php
@@ -0,0 +1,162 @@
+ 'Service',
+ 'account' => 'Account',
+ 'accounts' => 'Accounts',
+ 'icon' => 'Icon',
+ 'icon_for_account_x_at_service_y' => 'Icon of the {account} account at {service}',
+ 'icon_to_illustrate_the_account' => 'Icon that illustrates the account',
+ 'remove_icon' => 'Remove icon',
+ 'no_account_here' => 'No 2FA here!',
+ 'add_first_account' => 'Pick a method and add your first account',
+ 'use_full_form' => 'Or use the full form',
+ 'add_one' => 'Add one',
+ 'show_qrcode' => 'Show QR code',
+ 'no_service' => '- no service -',
+ 'account_created' => 'Account successfully created',
+ 'account_updated' => 'Account successfully updated',
+ 'accounts_deleted' => 'Account(s) successfully deleted',
+ 'accounts_moved' => 'Account(s) successfully moved',
+ 'export_selected_to_json' => 'Download a json export of selected accounts',
+ 'forms' => [
+ 'service' => [
+ 'placeholder' => 'Google, Twitter, Apple',
+ ],
+ 'account' => [
+ 'placeholder' => 'John DOE',
+ ],
+ 'new_account' => 'New account',
+ 'edit_account' => 'Edit account',
+ 'otp_uri' => 'OTP Uri',
+ 'scan_qrcode' => 'Scan a QR code',
+ 'upload_qrcode' => 'Upload a QR code',
+ 'use_advanced_form' => 'Use the advanced form',
+ 'prefill_using_qrcode' => 'Prefill using a QR Code',
+ 'use_qrcode' => [
+ 'val' => 'Use a qrcode',
+ 'title' => 'Use a QR code to fill the form magically',
+ ],
+ 'unlock' => [
+ 'val' => 'Unlock',
+ 'title' => 'Unlock it (at your own risk)',
+ ],
+ 'lock' => [
+ 'val' => 'Lock',
+ 'title' => 'Lock it',
+ ],
+ 'choose_image' => 'Upload',
+ 'i_m_lucky' => 'Try my luck',
+ 'i_m_lucky_legend' => 'The "Try my luck" button try to get the official icon of the given service. Enter actual service name without ".xyz" extension and try to avoid typo. (beta feature)',
+ 'test' => 'Test',
+ 'secret' => [
+ 'label' => 'Secret',
+ 'help' => 'The key used to generate your security codes'
+ ],
+ 'plain_text' => 'Plain text',
+ 'otp_type' => [
+ 'label' => 'Choose the type of OTP to create',
+ 'help' => 'Time-based OTP or HMAC-based OTP or Steam OTP'
+ ],
+ 'digits' => [
+ 'label' => 'Digits',
+ 'help' => 'The number of digits of the generated security codes'
+ ],
+ 'algorithm' => [
+ 'label' => 'Algorithm',
+ 'help' => 'The algorithm used to secure your security codes'
+ ],
+ 'period' => [
+ 'label' => 'Period',
+ 'placeholder' => 'Default is 30',
+ 'help' => 'The period of validity of the generated security codes in second'
+ ],
+ 'counter' => [
+ 'label' => 'Counter',
+ 'placeholder' => 'Default is 0',
+ 'help' => 'The initial counter value',
+ 'help_lock' => 'It is risky to edit the counter as you can desynchronize the account with the verification server of the service. Use the lock icon to enable modification, but only if you know for you are doing'
+ ],
+ 'image' => [
+ 'label' => 'Image',
+ 'placeholder' => 'http://...',
+ 'help' => 'The url of an external image to use as the account icon'
+ ],
+ 'options_help' => 'You can leave the following options blank if you don\'t know how to set them. The most commonly used values will be applied.',
+ 'alternative_methods' => 'Alternative methods',
+ ],
+ 'stream' => [
+ 'live_scan_cant_start' => 'Live scan can\'t start :(',
+ 'need_grant_permission' => [
+ 'reason' => '2FAuth does not have permission to access your camera',
+ 'solution' => 'You need to grant permission to use your device camera. If you already denied and your browser do not prompt you again, please refers to the browser documentation to find out how to grant permission.'
+ ],
+ 'not_readable' => [
+ 'reason' => 'Fail to load scanner',
+ 'solution' => 'Is the camera already in use? Ensure that no other app use your camera and try again'
+ ],
+ 'no_cam_on_device' => [
+ 'reason' => 'No camera on this device',
+ 'solution' => 'Maybe you forgot to plug in your webcam'
+ ],
+ 'secured_context_required' => [
+ 'reason' => 'Secure context required',
+ 'solution' => 'HTTPS is required for live scan. If you run 2FAuth from your computer, do not use virtual host other than localhost'
+ ],
+ 'https_required' => 'HTTPS required for camera streaming',
+ 'camera_not_suitable' => [
+ 'reason' => 'Installed cameras are not suitable',
+ 'solution' => 'Please use another device/camera'
+ ],
+ 'stream_api_not_supported' => [
+ 'reason' => 'Stream API is not supported in this browser',
+ 'solution' => 'You should use a modern browser'
+ ],
+ ],
+ 'confirm' => [
+ 'delete' => 'Are you sure you want to delete this account?',
+ 'cancel' => 'The account will be lost. Are you sure?',
+ 'discard' => 'Are you sure you want to discard this account?',
+ 'discard_all' => 'Are you sure you want to discard all accounts?',
+ 'discard_duplicates' => 'Are you sure you want to discard all duplicates?',
+ ],
+ 'import' => [
+ 'import' => 'Import',
+ 'to_import' => 'Import',
+ 'import_legend' => '2FAuth can import data from various 2FA apps.
Use the Export feature of these apps to get a migration resource (a QR code or a file) and load it using your preferred method below.',
+ 'upload' => 'Upload',
+ 'scan' => 'Scan',
+ 'supported_formats_for_qrcode_upload' => 'Accepted: jpg, jpeg, png, bmp, gif, svg, or webp',
+ 'supported_formats_for_file_upload' => 'Accepted: Plain text, json, 2fas',
+ 'supported_migration_formats' => 'Supported migration formats',
+ 'qr_code' => 'QR Code',
+ 'plain_text' => 'Plain text',
+ 'issuer' => 'Issuer',
+ 'imported' => 'Imported',
+ 'failure' => 'Failure',
+ 'x_valid_accounts_found' => '{count} valid accounts found',
+ 'import_all' => 'Import all',
+ 'import_this_account' => 'Import this account',
+ 'discard_all' => 'Discard all',
+ 'discard_duplicates' => 'Discard duplicates',
+ 'discard_this_account' => 'Discard this account',
+ 'generate_a_test_password' => 'Generate a test pasword',
+ 'possible_duplicate' => 'An account with the exact same data already exists',
+ 'invalid_account' => '- invalid account -',
+ 'invalid_service' => '- invalid service -',
+ 'do_not_set_password_or_encryption' => 'Do NOT enable Password protection or Encryption when you export data (from a 2FA app) you want to import into 2FAuth.',
+ ],
+
+];
\ No newline at end of file
diff --git a/resources/lang/it/validation.php b/resources/lang/it/validation.php
new file mode 100644
index 00000000..3561a99e
--- /dev/null
+++ b/resources/lang/it/validation.php
@@ -0,0 +1,204 @@
+ ':attribute deve essere accettato.',
+ 'accepted_if' => 'The :attribute must be accepted when :other is :value.',
+ 'active_url' => ':attribute non è un URL valido.',
+ 'after' => ':attribute deve essere una data successiva al :date.',
+ 'after_or_equal' => ':attribute deve essere una data successiva o uguale al :date.',
+ 'alpha' => 'The :attribute must only contain letters.',
+ 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
+ 'alpha_num' => 'The :attribute must only contain letters and numbers.',
+ 'array' => ':attribute deve essere un array.',
+ 'before' => ':attribute deve essere una data precedente al :date.',
+ 'before_or_equal' => ':attribute deve essere una data precedente o uguale al :date.',
+ 'between' => [
+ 'array' => ':attribute deve avere tra :min - :max elementi.',
+ 'file' => ':attribute deve trovarsi tra :min - :max kilobyte.',
+ 'numeric' => ':attribute deve trovarsi tra :min - :max.',
+ 'string' => ':attribute deve trovarsi tra :min - :max caratteri.',
+ ],
+ 'boolean' => 'Il campo :attribute deve essere vero o falso.',
+ 'confirmed' => 'Il campo di conferma per :attribute non coincide.',
+ 'current_password' => 'The password is incorrect.',
+ 'date' => ':attribute non è una data valida.',
+ 'date_equals' => ':attribute deve essere una data e uguale a :date.',
+ 'date_format' => ':attribute non coincide con il formato :format.',
+ 'declined' => 'The :attribute must be declined.',
+ 'declined_if' => 'The :attribute must be declined when :other is :value.',
+ 'different' => ':attribute e :other devono essere differenti.',
+ 'digits' => ':attribute deve essere di :digits cifre.',
+ 'digits_between' => ':attribute deve essere tra :min e :max cifre.',
+ 'dimensions' => 'Le dimensioni dell\'immagine di :attribute non sono valide.',
+ 'distinct' => ':attribute contiene un valore duplicato.',
+ 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.',
+ 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.',
+ 'email' => ':attribute non è valido.',
+ 'ends_with' => ':attribute deve finire con uno dei seguenti valori: :values',
+ 'enum' => 'The selected :attribute is invalid.',
+ 'exists' => ':attribute selezionato non è valido.',
+ 'file' => ':attribute deve essere un file.',
+ 'filled' => 'Il campo :attribute deve contenere un valore.',
+ 'gt' => [
+ 'array' => ':attribute deve contenere più di :value elementi.',
+ 'file' => ':attribute deve essere maggiore di :value kilobyte.',
+ 'numeric' => ':attribute deve essere maggiore di :value.',
+ 'string' => ':attribute deve contenere più di :value caratteri.',
+ ],
+ 'gte' => [
+ 'array' => ':attribute deve contenere un numero di elementi uguale o maggiore di :value.',
+ 'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
+ 'numeric' => 'The :attribute must be greater than or equal to :value.',
+ 'string' => 'The :attribute must be greater than or equal to :value characters.',
+ ],
+ 'image' => ':attribute deve essere un\'immagine.',
+ 'in' => ':attribute selezionato non è valido.',
+ 'in_array' => 'Il valore del campo :attribute non esiste in :other.',
+ 'integer' => ':attribute deve essere un numero intero.',
+ 'ip' => ':attribute deve essere un indirizzo IP valido.',
+ 'ipv4' => ':attribute deve essere un indirizzo IPv4 valido.',
+ 'ipv6' => ':attribute deve essere un indirizzo IPv6 valido.',
+ 'json' => ':attribute deve essere una stringa JSON valida.',
+ 'lt' => [
+ 'array' => ':attribute deve contenere meno di :value elementi.',
+ 'file' => ':attribute deve essere minore di :value kilobyte.',
+ 'numeric' => ':attribute deve essere minore di :value.',
+ 'string' => ':attribute deve contenere meno di :value caratteri.',
+ ],
+ 'lte' => [
+ 'array' => ':attribute deve contenere un numero di elementi minore o uguale a :value.',
+ 'file' => 'The :attribute must be less than or equal to :value kilobytes.',
+ 'numeric' => 'The :attribute must be less than or equal to :value.',
+ 'string' => 'The :attribute must be less than or equal to :value characters.',
+ ],
+ 'mac_address' => 'The :attribute must be a valid MAC address.',
+ 'max' => [
+ 'array' => 'The :attribute must not have more than :max items.',
+ 'file' => 'The :attribute must not be greater than :max kilobytes.',
+ 'numeric' => 'The :attribute must not be greater than :max.',
+ 'string' => 'The :attribute must not be greater than :max characters.',
+ ],
+ 'max_digits' => 'The :attribute must not have more than :max digits.',
+ 'mimes' => ':attribute deve essere del tipo: :values.',
+ 'mimetypes' => ':attribute deve essere del tipo: :values.',
+ 'min' => [
+ 'array' => ':attribute deve avere almeno :min elementi.',
+ 'file' => ':attribute deve essere almeno di :min kilobyte.',
+ 'numeric' => ':attribute deve essere almeno :min.',
+ 'string' => ':attribute deve contenere almeno :min caratteri.',
+ ],
+ 'min_digits' => 'The :attribute must have at least :min digits.',
+ 'multiple_of' => 'The :attribute must be a multiple of :value.',
+ 'not_in' => 'Il valore selezionato per :attribute non è valido.',
+ 'not_regex' => 'Il formato di :attribute non è valido.',
+ 'numeric' => ':attribute deve essere un numero.',
+ 'password' => [
+ 'letters' => 'The :attribute must contain at least one letter.',
+ 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.',
+ 'numbers' => 'The :attribute must contain at least one number.',
+ 'symbols' => 'The :attribute must contain at least one symbol.',
+ 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
+ ],
+ 'present' => 'Il campo :attribute deve essere presente.',
+ 'prohibited' => 'The :attribute field is prohibited.',
+ 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
+ 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
+ 'prohibits' => 'The :attribute field prohibits :other from being present.',
+ 'regex' => 'Il formato del campo :attribute non è valido.',
+ 'required' => 'Il campo :attribute è richiesto.',
+ 'required_array_keys' => 'The :attribute field must contain entries for: :values.',
+ 'required_if' => 'Il campo :attribute è richiesto quando :other è :value.',
+ 'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
+ 'required_unless' => 'Il campo :attribute è richiesto a meno che :other sia in :values.',
+ 'required_with' => 'Il campo :attribute è richiesto quando :values è presente.',
+ 'required_with_all' => 'Il campo :attribute è richiesto quando :values sono presenti.',
+ 'required_without' => 'Il campo :attribute è richiesto quando :values non è presente.',
+ 'required_without_all' => 'Il campo :attribute è richiesto quando nessuno di :values è presente.',
+ 'same' => ':attribute e :other devono coincidere.',
+ 'size' => [
+ 'array' => ':attribute deve contenere :size elementi.',
+ 'file' => ':attribute deve essere :size kilobyte.',
+ 'numeric' => ':attribute deve essere :size.',
+ 'string' => ':attribute deve contenere :size caratteri.',
+ ],
+ 'starts_with' => ':attribute deve iniziare con uno dei seguenti: :values',
+ 'string' => ':attribute deve essere una stringa.',
+ 'timezone' => 'The :attribute must be a valid timezone.',
+ 'unique' => ':attribute è stato già utilizzato.',
+ 'uploaded' => ':attribute non è stato caricato.',
+ 'url' => 'The :attribute must be a valid URL.',
+ 'uuid' => ':attribute deve essere un UUID valido.',
+
+ 'single' => 'When using :attribute it must be the only parameter in this request body',
+ 'onlyCustomOtpWithUri' => 'The uri parameter must be provided alone or only in combination with the \'custom_otp\' parameter',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'icon' => [
+ 'image' => 'Supported format are jpeg, png, bmp, gif, svg, or webp.',
+ ],
+ 'qrcode' => [
+ 'image' => 'Supported format are jpeg, png, bmp, gif, svg, or webp.',
+ ],
+ 'uri' => [
+ 'regex' => 'The :attribute is not a valid otpauth uri.',
+ ],
+ 'otp_type' => [
+ 'in' => 'The :attribute is not supported.',
+ ],
+ 'email' => [
+ 'exists' => 'No account found using this email.',
+ ],
+ 'secret' => [
+ 'isBase32Encoded' => 'The :attribute must be a base32 encoded string.',
+ ],
+ 'account' => [
+ 'regex' => 'The :attribute must not contain colon.',
+ ],
+ 'service' => [
+ 'regex' => 'The :attribute must not contain colon.',
+ ],
+ 'label' => [
+ 'required' => 'The uri must have a label.',
+ ],
+ 'ids' => [
+ 'regex' => 'IDs must be comma separated, without trailing comma.',
+ ]
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Attributes
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to swap our attribute placeholder
+ | with something more reader friendly such as "E-Mail Address" instead
+ | of "email". This simply helps us make our message more expressive.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/ro/auth.php b/resources/lang/ro/auth.php
new file mode 100644
index 00000000..5998c886
--- /dev/null
+++ b/resources/lang/ro/auth.php
@@ -0,0 +1,124 @@
+ 'These credentials do not match our records.',
+ 'password' => 'The provided password is incorrect.',
+ 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+
+ // 2FAuth
+ 'sign_out' => 'Sign out',
+ 'sign_in' => 'Sign in',
+ 'sign_in_using' => 'Sign in using',
+ 'sign_in_using_security_device' => 'Sign in using a security device',
+ 'login_and_password' => 'login & password',
+ 'register' => 'Register',
+ 'welcome_to_2fauth' => 'Welcome to 2FAuth',
+ 'autolock_triggered' => 'Auto lock triggered',
+ 'autolock_triggered_punchline' => 'The event watched by the Auto Lock feature has fired. You\'ve been automatically disconnected.',
+ 'change_autolock_in_settings' => 'You can change the behavior of the Autolock feature in Settings > Options tab.',
+ 'already_authenticated' => 'Already authenticated',
+ 'authentication' => 'Authentication',
+ 'maybe_later' => 'Maybe later',
+ 'user_account_controlled_by_proxy' => 'User account made available by an authentication proxy.
Manage the account at proxy level.',
+ 'auth_handled_by_proxy' => 'Authentication handled by a reverse proxy, below settings are disabled.
Manage authentication at proxy level.',
+ 'confirm' => [
+ 'logout' => 'Are you sure you want to log out?',
+ 'revoke_device' => 'Are you sure you want to revoke this device?',
+ 'delete_account' => 'Are you sure you want to delete your account?',
+ ],
+ 'webauthn' => [
+ 'security_device' => 'a security device',
+ 'security_devices' => 'Security devices',
+ 'security_devices_legend' => 'Authentication devices you can use to sign in 2FAuth, like security keys (i.e Yubikey) or smartphones with biometric capabilities (i.e. Apple FaceId/TouchId)',
+ 'enhance_security_using_webauthn' => 'You can enhance the security of your 2FAuth account by enabling WebAuthn authentication.
+ WebAuthn allows you to use trusted devices (like Yubikeys or smartphones with biometric capabilities) to sign in quickly and more securely.',
+ 'use_security_device_to_sign_in' => 'Get ready to authenticate using (one of) your security devices. Plug your key in, remove face mask or gloves, etc.',
+ 'lost_your_device' => 'Lost your device?',
+ 'recover_your_account' => 'Recover your account',
+ 'account_recovery' => 'Account recovery',
+ 'recovery_punchline' => '2FAuth will send you a recovery link to this email address. Click the link in the received email and follow the instructions.
Ensure you open the email on a device you fully own.',
+ 'send_recovery_link' => 'Send recovery link',
+ 'account_recovery_email_sent' => 'Account recovery email sent!',
+ 'disable_all_security_devices' => 'Disable all security devices',
+ 'disable_all_security_devices_help' => 'All your security devices will be revoked. Use this option if you have lost one or its security has been compromised.',
+ 'register_a_new_device' => 'Register a new device',
+ 'register_a_device' => 'Register a device',
+ 'device_successfully_registered' => 'Device successfully registered',
+ 'device_revoked' => 'Device successfully revoked',
+ 'revoking_a_device_is_permanent' => 'Revoking a device is permanent',
+ 'recover_account_instructions' => 'To recover your account, 2FAuth resets some Webauthn settings so you will be able to sign in using your email and password.',
+ 'invalid_recovery_token' => 'Invalid recovery token',
+ 'webauthn_login_disabled' => 'Webauthn login disabled',
+ 'invalid_reset_token' => 'This reset token is invalid.',
+ 'rename_device' => 'Rename device',
+ 'my_device' => 'My device',
+ 'unknown_device' => 'Unknown device',
+ 'use_webauthn_only' => [
+ 'label' => 'Use WebAuthn only',
+ 'help' => 'Make WebAuthn the only authorized method to log into your 2FAuth account. This is the recommended setup to take advantage of the WebAuthn enhanced security.
+ In case of device lost, you will be able to recover your account by resetting this option and signing in using your email and password.
+ Attention! The Email & Password form remains available despite this option being enabled, but it will always return an \'Authentication failed\' response.'
+ ],
+ 'need_a_security_device_to_enable_options' => 'Set at least one device to enable the following options',
+ ],
+ 'forms' => [
+ 'name' => 'Name',
+ 'login' => 'Login',
+ 'webauthn_login' => 'WebAuthn login',
+ 'email' => 'Email',
+ 'password' => 'Password',
+ 'reveal_password' => 'Reveal password',
+ 'hide_password' => 'Hide password',
+ 'confirm_password' => 'Confirm password',
+ 'confirm_new_password' => 'Confirm new password',
+ 'dont_have_account_yet' => 'Don\'t have your account yet?',
+ 'already_register' => 'Already registered?',
+ 'authentication_failed' => 'Authentication failed',
+ 'forgot_your_password' => 'Forgot your password?',
+ 'request_password_reset' => 'Reset it',
+ 'reset_your_password' => 'Reset your password',
+ 'reset_password' => 'Reset password',
+ 'disabled_in_demo' => 'Feature disabled in Demo mode',
+ 'new_password' => 'New password',
+ 'current_password' => [
+ 'label' => 'Current password',
+ 'help' => 'Fill in your current password to confirm that it\'s you'
+ ],
+ 'change_password' => 'Change password',
+ 'send_password_reset_link' => 'Send password reset link',
+ 'password_successfully_changed' => 'Password successfully changed',
+ 'edit_account' => 'Edit account',
+ 'profile_saved' => 'Profile successfully updated!',
+ 'welcome_to_demo_app_use_those_credentials' => 'Welcome to the 2FAuth demo.
You can connect using the email address demo@2fauth.app and the password demo',
+ 'welcome_to_testing_app_use_those_credentials' => 'Welcome to the 2FAuth testing instance.
Use email address testing@2fauth.app and password password',
+ 'register_punchline' => 'Welcome to 2FAuth.
You need an account to go further, please register yourself.',
+ 'reset_punchline' => '2FAuth will send you a password reset link to this address. Click the link in the received email to set a new password.',
+ 'name_this_device' => 'Name this device',
+ 'delete_account' => 'Delete account',
+ 'delete_your_account' => 'Delete your account',
+ 'delete_your_account_and_reset_all_data' => 'This will reset 2FAuth. Your user account will be deleted as well as all 2FA data. There is no going back.',
+ 'user_account_successfully_deleted' => 'User account successfully deleted',
+ 'has_lower_case' => 'Has lower case',
+ 'has_upper_case' => 'Has upper case',
+ 'has_special_char' => 'Has special char',
+ 'has_number' => 'Has number',
+ 'is_long_enough' => '8 characters min.',
+ 'mandatory_rules' => 'Mandatory',
+ 'optional_rules_you_should_follow' => 'Recommanded (highly)',
+ 'caps_lock_is_on' => 'Caps lock is On',
+ ],
+
+];
diff --git a/resources/lang/ro/commons.php b/resources/lang/ro/commons.php
new file mode 100644
index 00000000..b4a8c893
--- /dev/null
+++ b/resources/lang/ro/commons.php
@@ -0,0 +1,74 @@
+ 'Cancel',
+ 'update' => 'Update',
+ 'copy' => 'Copy',
+ 'copy_to_clipboard' => 'Copy to clipboard',
+ 'copied_to_clipboard' => 'Copied to clipboard',
+ 'profile' => 'Profile',
+ 'edit' => 'Edit',
+ 'delete' => 'Delete',
+ 'disable' => 'Disable',
+ 'enable' => 'Enable',
+ 'create' => 'Create',
+ 'save' => 'Save',
+ 'close' => 'Close',
+ 'clear' => 'Clear',
+ 'clear_search' => 'Clear search',
+ 'demo_do_not_post_sensitive_data' => 'This is a demo app, do not post any sensitive data',
+ 'testing_do_not_post_sensitive_data' => 'This is a testing app, do not post any sensitive data',
+ 'selected' => 'selected',
+ 'name' => 'Name',
+ 'manage' => 'Manage',
+ 'done' => 'Done',
+ 'new' => 'New',
+ 'back' => 'Back',
+ 'move' => 'Move',
+ 'export' => 'Export',
+ 'all' => 'All',
+ 'select_all' => 'Select all',
+ 'clear_selection' => 'Clear selection',
+ 'sort_descending' => 'Sort descending',
+ 'sort_ascending' => 'Sort ascending',
+ 'rename' => 'Rename',
+ 'new_name' => 'New name',
+ 'options' => 'Options',
+ 'reload' => 'Reload',
+ 'some_data_have_changed' => 'Some data have changed. You should',
+ 'generate' => 'Generate',
+ 'generating_otp' => 'Generating OTP',
+ 'open_in_browser' => 'Open in browser',
+ 'continue' => 'Continue',
+ 'discard' => 'Discard',
+ 'about' => 'About',
+ 'usefull_links' => 'Usefull links',
+ 'environment' => 'Environment',
+ 'credits' => 'Credits',
+ '2fauth_teaser' => 'A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes',
+ 'made_with' => 'Made with',
+ 'ui_icons_by' => 'UI Icons by',
+ 'logos_by' => 'Logos by',
+ 'search' => 'Search',
+ 'resources' => 'Resources',
+ 'check_for_update' => 'Check for new version',
+ 'check_for_update_help' => 'Automatically check (once a week) and warn when a new release of 2FAuth is published on Github',
+ 'you_are_up_to_date' => 'This instance is up-to-date',
+ '2fauth_description' => 'A web app to manage your Two-Factor Authentication (2FA) accounts and generate their security codes',
+ 'image_of_qrcode_to_scan' => 'Image of a QR code to scan',
+ 'file' => 'File',
+ 'or' => 'OR',
+ 'close_the_x_page' => 'Close the {pagetitle} page',
+];
diff --git a/resources/lang/ro/errors.php b/resources/lang/ro/errors.php
new file mode 100644
index 00000000..6334bf07
--- /dev/null
+++ b/resources/lang/ro/errors.php
@@ -0,0 +1,55 @@
+ 'Resource not found',
+ 'error_occured' => 'An error occured:',
+ 'refresh' => 'Refresh',
+ 'no_valid_otp' => 'No valid OTP resource in this QR code',
+ 'something_wrong_with_server' => 'Something is wrong with your server',
+ 'Unable_to_decrypt_uri' => 'Unable to decrypt uri',
+ 'not_a_supported_otp_type' => 'This OTP format is not currently supported',
+ 'cannot_create_otp_without_secret' => 'Cannot create an OTP without a secret',
+ 'data_of_qrcode_is_not_valid_URI' => 'The data of this QR code is not a valid OTP Auth URI. The QR code contains:',
+ 'wrong_current_password' => 'Wrong current password, nothing has changed',
+ 'error_during_encryption' => 'Encryption failed, your database remains unprotected.',
+ 'error_during_decryption' => 'Decryption failed, your database is still protected. This is mainly caused by an integrity issue of encrypted data for one or more accounts.',
+ 'qrcode_cannot_be_read' => 'This QR code is unreadable',
+ 'too_many_ids' => 'too many ids were included in the query parameter, max 100 allowed',
+ 'delete_user_setting_only' => 'Only user-created setting can be deleted',
+ 'indecipherable' => '*indecipherable*',
+ 'cannot_decipher_secret' => 'The secret cannot be deciphered. This is mainly caused by a wrong APP_KEY set in the .env configuration file of 2Fauth or a corrupted data stored in database.',
+ 'https_required' => 'HTTPS context required',
+ 'browser_does_not_support_webauthn' => 'Your device does not support webauthn. Try again later using a more modern browser',
+ 'aborted_by_user' => 'Aborted by user',
+ 'security_device_unsupported' => 'Unsupported or in use device',
+ 'not_allowed_operation' => 'Operation not allowed',
+ 'unsupported_operation' => 'Unsupported operation',
+ 'unknown_error' => 'Unknown error',
+ 'security_error_check_rpid' => 'Security error
Check your WEBAUTHN_ID env var',
+ 'unsupported_with_reverseproxy' => 'Not applicable when using an auth proxy',
+ 'user_deletion_failed' => 'User account deletion failed, no data have been deleted',
+ 'auth_proxy_failed' => 'Proxy authentication failed',
+ 'auth_proxy_failed_legend' => '2Fauth is configured to run behind an authentication proxy but your proxy does not return the expected header. Check your configuration and try again.',
+ 'invalid_x_migration' => 'Invalid or unreadable :appname data',
+ 'invalid_2fa_data' => 'Invalid 2FA data',
+ 'unsupported_migration' => 'Data do not match any supported format',
+ 'unsupported_otp_type' => 'Unsupported OTP type',
+ 'encrypted_migration' => 'Unreadable, the data seem encrypted',
+ 'no_logo_found_for_x' => 'No logo available for {service}',
+ 'file_upload_failed' => 'File upload failed',
+ 'unauthorized' => 'Unauthorized',
+ 'unauthorized_legend' => 'You do not have permissions to view this resource or to perform this action',
+ 'cannot_delete_the_only_admin' => 'Cannot delete the only admin account'
+];
\ No newline at end of file
diff --git a/resources/lang/ro/groups.php b/resources/lang/ro/groups.php
new file mode 100644
index 00000000..1d130553
--- /dev/null
+++ b/resources/lang/ro/groups.php
@@ -0,0 +1,40 @@
+ 'Groups',
+ 'create_group' => 'Create new group',
+ 'show_group_selector' => 'Show group selector',
+ 'hide_group_selector' => 'Hide group selector',
+ 'select_accounts_to_show' => 'Select accounts group to show',
+ 'manage_groups' => 'Manage groups',
+ 'active_group' => 'Active group',
+ 'manage_groups_legend' => 'You can create groups to organize your accounts the way you want. All accounts remain visible in the pseudo group named \'All\', regardless of the group they belong to.',
+ 'deleting_group_does_not_delete_accounts' => 'Deleting a group does not delete accounts',
+ 'move_selected_to' => 'Move selected to',
+ 'move_selected_to_group' => 'Move selected into a group',
+ 'no_group' => 'No group',
+ 'change_group' => 'Change group',
+ 'group_successfully_created' => 'Group successfully created',
+ 'group_name_saved' => 'Group name saved',
+ 'group_successfully_deleted' => 'Group successfully deleted',
+ 'forms' => [
+ 'new_group' => 'New group',
+ 'new_name' => 'New name',
+ 'rename_group' => 'Rename group',
+ ],
+ 'confirm' => [
+ 'delete' => 'Are you sure you want to delete this group?',
+ ],
+];
\ No newline at end of file
diff --git a/resources/lang/ro/languages.php b/resources/lang/ro/languages.php
new file mode 100644
index 00000000..a7f7e0e5
--- /dev/null
+++ b/resources/lang/ro/languages.php
@@ -0,0 +1,20 @@
+ 'Browser preference',
+ 'en' => 'English',
+ 'fr' => 'French',
+ 'de' => 'German',
+ 'es' => 'Spanish',
+ 'zh' => 'Chinese Simplified',
+ 'ru' => 'Russian',
+];
\ No newline at end of file
diff --git a/resources/lang/ro/pagination.php b/resources/lang/ro/pagination.php
new file mode 100644
index 00000000..d4814118
--- /dev/null
+++ b/resources/lang/ro/pagination.php
@@ -0,0 +1,19 @@
+ '« Previous',
+ 'next' => 'Next »',
+
+];
diff --git a/resources/lang/ro/passwords.php b/resources/lang/ro/passwords.php
new file mode 100644
index 00000000..a25271a3
--- /dev/null
+++ b/resources/lang/ro/passwords.php
@@ -0,0 +1,26 @@
+ 'Your password has been reset!',
+ 'sent' => 'We have emailed your password reset link!',
+ 'throttled' => 'Please wait before retrying.',
+ 'token' => 'This password reset token is invalid.',
+ 'user' => "We can't find a user with that email address.",
+
+ // 2FAuth
+ 'password' => 'Passwords must be at least eight characters and match the confirmation.',
+
+];
diff --git a/resources/lang/ro/settings.php b/resources/lang/ro/settings.php
new file mode 100644
index 00000000..1f5de622
--- /dev/null
+++ b/resources/lang/ro/settings.php
@@ -0,0 +1,155 @@
+ 'Settings',
+ 'preferences' => 'Preferences',
+ 'account' => 'Account',
+ 'oauth' => 'OAuth',
+ 'webauthn' => 'WebAuthn',
+ 'tokens' => 'Tokens',
+ 'options' => 'Options',
+ 'user_preferences' => 'User preferences',
+ 'admin_settings' => 'Admin settings',
+ 'confirm' => [
+
+ ],
+ 'administration' => 'Administration',
+ 'administration_legend' => 'While previous settings are user settings (every user can set its own preferences), following settings are global and apply to all users. Only an administrator can view and edit those settings.',
+ 'you_are_administrator' => 'You are an administrator',
+ 'general' => 'General',
+ 'security' => 'Security',
+ 'profile' => 'Profile',
+ 'change_password' => 'Change password',
+ 'personal_access_tokens' => 'Personal access tokens',
+ 'token_legend' => 'Personal Access Tokens allow any app to authenticate to the 2Fauth API. You should specify the access token as a Bearer token in the authorization header of consumer apps requests.',
+ 'generate_new_token' => 'Generate a new token',
+ 'revoke' => 'Revoke',
+ 'token_revoked' => 'Token successfully revoked',
+ 'revoking_a_token_is_permanent' => 'Revoking a token is permanent',
+ 'confirm' => [
+ 'revoke' => 'Are you sure you want to revoke this token?',
+ ],
+ 'make_sure_copy_token' => 'Make sure to copy your personal access token now. You won’t be able to see it again!',
+ 'data_input' => 'Data input',
+ 'forms' => [
+ 'edit_settings' => 'Edit settings',
+ 'setting_saved' => 'Settings saved',
+ 'new_token' => 'New token',
+ 'some_translation_are_missing' => 'Some translations are missing using the browser preferred language?',
+ 'help_translate_2fauth' => 'Help translate 2FAuth',
+ 'language' => [
+ 'label' => 'Language',
+ 'help' => 'Language used to translate the 2FAuth user interface. Named languages are complete, set the one of your choice to override your browser preference.'
+ ],
+ 'show_otp_as_dot' => [
+ 'label' => 'Show generated one-time passwords as dot',
+ 'help' => 'Replace generated password caracters with *** to ensure confidentiality. Do not affect the copy/paste feature'
+ ],
+ 'close_otp_on_copy' => [
+ 'label' => 'Close OTP after copy',
+ 'help' => 'Clicking a generated password to copy it automatically hide it from the screen'
+ ],
+ 'copy_otp_on_display' => [
+ 'label' => 'Copy OTP on display',
+ 'help' => 'Automatically copy a generated password right after it appears on screen. Due to browsers limitations, only the first TOTP password will be copied, not the rotating ones'
+ ],
+ 'use_basic_qrcode_reader' => [
+ 'label' => 'Use basic QR code reader',
+ 'help' => 'If you experiences issues when capturing QR codes enables this option to switch to a more basic but more reliable QR code reader'
+ ],
+ 'display_mode' => [
+ 'label' => 'Display mode',
+ 'help' => 'Choose whether you want accounts to be displayed as a list or as a grid'
+ ],
+ 'password_format' => [
+ 'label' => 'Password formatting',
+ 'help' => 'Change how the passwords are displayed by grouping digits to ease readability and memorization'
+ ],
+ 'pair' => 'by Pair',
+ 'pair_legend' => 'Group digits two by two',
+ 'trio_legend' => 'Group digits three by three',
+ 'half_legend' => 'Split digits into two equals groups',
+ 'trio' => 'by Trio',
+ 'half' => 'by Half',
+ 'grid' => 'Grid',
+ 'list' => 'List',
+ 'theme' => [
+ 'label' => 'Theme',
+ 'help' => 'Force a specific theme or apply the theme defined in your system/browser preferences'
+ ],
+ 'light' => 'Light',
+ 'dark' => 'Dark',
+ 'automatic' => 'Auto',
+ 'show_accounts_icons' => [
+ 'label' => 'Show icons',
+ 'help' => 'Show icons accounts in the main view'
+ ],
+ 'get_official_icons' => [
+ 'label' => 'Get official icons',
+ 'help' => '(Try to) Get the official icon of the 2FA issuer when adding an account'
+ ],
+ 'auto_lock' => [
+ 'label' => 'Auto lock',
+ 'help' => 'Log out the user automatically in case of inactivity. Has no effect when authentication is handled by a proxy and no custom logout url is specified.'
+ ],
+ 'use_encryption' => [
+ 'label' => 'Protect sensible data',
+ 'help' => 'Sensitive data, the 2FA secrets and emails, are stored encrypted in database. Be sure to backup the APP_KEY value of your .env file (or the whole file) as it serves as key encryption. There is no way to decypher encrypted data without this key.',
+ ],
+ 'default_group' => [
+ 'label' => 'Default group',
+ 'help' => 'The group to which the newly created accounts are associated',
+ ],
+ 'useDirectCapture' => [
+ 'label' => 'Direct input',
+ 'help' => 'Choose whether you want to be prompted to choose an input mode among those available or if you want to directly use the default input mode',
+ ],
+ 'defaultCaptureMode' => [
+ 'label' => 'Default input mode',
+ 'help' => 'Default input mode used when the Direct input option is On',
+ ],
+ 'remember_active_group' => [
+ 'label' => 'Remember group filter',
+ 'help' => 'Save the last group filter applied and restore it on your next visit',
+ ],
+ 'disable_registration' => [
+ 'label' => 'Disable registration',
+ 'help' => 'Prevent new user registration',
+ ],
+ 'otp_generation' => [
+ 'label' => 'Show Password',
+ 'help' => 'Set how and when OTPs are displayed.
',
+ ],
+ 'otp_generation_on_request' => 'After a click/tap',
+ 'otp_generation_on_request_legend' => 'Alone, in its own view',
+ 'otp_generation_on_request_title' => 'Click an account to get a password in a dedicated view',
+ 'otp_generation_on_home' => 'Constantly',
+ 'otp_generation_on_home_legend' => 'All of them, on home',
+ 'otp_generation_on_home_title' => 'Show all passwords in the main view, without doing anything',
+ 'never' => 'Never',
+ 'on_otp_copy' => 'On security code copy',
+ '1_minutes' => 'After 1 minute',
+ '5_minutes' => 'After 5 minutes',
+ '10_minutes' => 'After 10 minutes',
+ '15_minutes' => 'After 15 minutes',
+ '30_minutes' => 'After 30 minutes',
+ '1_hour' => 'After 1 hour',
+ '1_day' => 'After 1 day',
+ 'livescan' => 'QR code livescan',
+ 'upload' => 'QR code upload',
+ 'advanced_form' => 'Advanced form',
+ ],
+
+];
\ No newline at end of file
diff --git a/resources/lang/ro/titles.php b/resources/lang/ro/titles.php
new file mode 100644
index 00000000..16be3a04
--- /dev/null
+++ b/resources/lang/ro/titles.php
@@ -0,0 +1,49 @@
+ 'New account',
+ 'capture' => 'Flash QR',
+ 'accounts' => 'Accounts',
+ 'createAccount' => 'Create account',
+ 'importAccounts' => 'Import accounts',
+ 'editAccount' => 'Account edit',
+ 'showQRcode' => 'Account as QR code',
+ 'groups' => 'Groups',
+ 'createGroup' => 'Create group',
+ 'editGroup' => 'Group edit',
+ 'settings' => [
+ 'options' => 'Options',
+ 'account' => 'User account',
+ 'oauth' => [
+ 'tokens' => 'OAuth tokens',
+ 'generatePAT' => 'New personal token',
+ ],
+ 'webauthn' => [
+ 'editCredential' => 'Device edit',
+ 'devices' => 'WebAuthn devices',
+ ],
+ ],
+ 'login' => 'Login',
+ 'register' => 'Register',
+ 'autolock' => 'Auto lock',
+ 'password' => [
+ 'request' => 'Reset password',
+ 'reset' => 'New password',
+ ],
+ 'webauthn' => [
+ 'lost' => 'Account recovery',
+ 'recover' => 'Register a new device',
+ ],
+ 'flooded' => 'Flood',
+ 'genericError' => 'Error',
+ '404' => 'Item not found',
+ 'about' => 'About',
+];
\ No newline at end of file
diff --git a/resources/lang/ro/twofaccounts.php b/resources/lang/ro/twofaccounts.php
new file mode 100644
index 00000000..a9630fd0
--- /dev/null
+++ b/resources/lang/ro/twofaccounts.php
@@ -0,0 +1,162 @@
+ 'Service',
+ 'account' => 'Account',
+ 'accounts' => 'Accounts',
+ 'icon' => 'Icon',
+ 'icon_for_account_x_at_service_y' => 'Icon of the {account} account at {service}',
+ 'icon_to_illustrate_the_account' => 'Icon that illustrates the account',
+ 'remove_icon' => 'Remove icon',
+ 'no_account_here' => 'No 2FA here!',
+ 'add_first_account' => 'Pick a method and add your first account',
+ 'use_full_form' => 'Or use the full form',
+ 'add_one' => 'Add one',
+ 'show_qrcode' => 'Show QR code',
+ 'no_service' => '- no service -',
+ 'account_created' => 'Account successfully created',
+ 'account_updated' => 'Account successfully updated',
+ 'accounts_deleted' => 'Account(s) successfully deleted',
+ 'accounts_moved' => 'Account(s) successfully moved',
+ 'export_selected_to_json' => 'Download a json export of selected accounts',
+ 'forms' => [
+ 'service' => [
+ 'placeholder' => 'Google, Twitter, Apple',
+ ],
+ 'account' => [
+ 'placeholder' => 'John DOE',
+ ],
+ 'new_account' => 'New account',
+ 'edit_account' => 'Edit account',
+ 'otp_uri' => 'OTP Uri',
+ 'scan_qrcode' => 'Scan a QR code',
+ 'upload_qrcode' => 'Upload a QR code',
+ 'use_advanced_form' => 'Use the advanced form',
+ 'prefill_using_qrcode' => 'Prefill using a QR Code',
+ 'use_qrcode' => [
+ 'val' => 'Use a qrcode',
+ 'title' => 'Use a QR code to fill the form magically',
+ ],
+ 'unlock' => [
+ 'val' => 'Unlock',
+ 'title' => 'Unlock it (at your own risk)',
+ ],
+ 'lock' => [
+ 'val' => 'Lock',
+ 'title' => 'Lock it',
+ ],
+ 'choose_image' => 'Upload',
+ 'i_m_lucky' => 'Try my luck',
+ 'i_m_lucky_legend' => 'The "Try my luck" button try to get the official icon of the given service. Enter actual service name without ".xyz" extension and try to avoid typo. (beta feature)',
+ 'test' => 'Test',
+ 'secret' => [
+ 'label' => 'Secret',
+ 'help' => 'The key used to generate your security codes'
+ ],
+ 'plain_text' => 'Plain text',
+ 'otp_type' => [
+ 'label' => 'Choose the type of OTP to create',
+ 'help' => 'Time-based OTP or HMAC-based OTP or Steam OTP'
+ ],
+ 'digits' => [
+ 'label' => 'Digits',
+ 'help' => 'The number of digits of the generated security codes'
+ ],
+ 'algorithm' => [
+ 'label' => 'Algorithm',
+ 'help' => 'The algorithm used to secure your security codes'
+ ],
+ 'period' => [
+ 'label' => 'Period',
+ 'placeholder' => 'Default is 30',
+ 'help' => 'The period of validity of the generated security codes in second'
+ ],
+ 'counter' => [
+ 'label' => 'Counter',
+ 'placeholder' => 'Default is 0',
+ 'help' => 'The initial counter value',
+ 'help_lock' => 'It is risky to edit the counter as you can desynchronize the account with the verification server of the service. Use the lock icon to enable modification, but only if you know for you are doing'
+ ],
+ 'image' => [
+ 'label' => 'Image',
+ 'placeholder' => 'http://...',
+ 'help' => 'The url of an external image to use as the account icon'
+ ],
+ 'options_help' => 'You can leave the following options blank if you don\'t know how to set them. The most commonly used values will be applied.',
+ 'alternative_methods' => 'Alternative methods',
+ ],
+ 'stream' => [
+ 'live_scan_cant_start' => 'Live scan can\'t start :(',
+ 'need_grant_permission' => [
+ 'reason' => '2FAuth does not have permission to access your camera',
+ 'solution' => 'You need to grant permission to use your device camera. If you already denied and your browser do not prompt you again, please refers to the browser documentation to find out how to grant permission.'
+ ],
+ 'not_readable' => [
+ 'reason' => 'Fail to load scanner',
+ 'solution' => 'Is the camera already in use? Ensure that no other app use your camera and try again'
+ ],
+ 'no_cam_on_device' => [
+ 'reason' => 'No camera on this device',
+ 'solution' => 'Maybe you forgot to plug in your webcam'
+ ],
+ 'secured_context_required' => [
+ 'reason' => 'Secure context required',
+ 'solution' => 'HTTPS is required for live scan. If you run 2FAuth from your computer, do not use virtual host other than localhost'
+ ],
+ 'https_required' => 'HTTPS required for camera streaming',
+ 'camera_not_suitable' => [
+ 'reason' => 'Installed cameras are not suitable',
+ 'solution' => 'Please use another device/camera'
+ ],
+ 'stream_api_not_supported' => [
+ 'reason' => 'Stream API is not supported in this browser',
+ 'solution' => 'You should use a modern browser'
+ ],
+ ],
+ 'confirm' => [
+ 'delete' => 'Are you sure you want to delete this account?',
+ 'cancel' => 'The account will be lost. Are you sure?',
+ 'discard' => 'Are you sure you want to discard this account?',
+ 'discard_all' => 'Are you sure you want to discard all accounts?',
+ 'discard_duplicates' => 'Are you sure you want to discard all duplicates?',
+ ],
+ 'import' => [
+ 'import' => 'Import',
+ 'to_import' => 'Import',
+ 'import_legend' => '2FAuth can import data from various 2FA apps.
Use the Export feature of these apps to get a migration resource (a QR code or a file) and load it using your preferred method below.',
+ 'upload' => 'Upload',
+ 'scan' => 'Scan',
+ 'supported_formats_for_qrcode_upload' => 'Accepted: jpg, jpeg, png, bmp, gif, svg, or webp',
+ 'supported_formats_for_file_upload' => 'Accepted: Plain text, json, 2fas',
+ 'supported_migration_formats' => 'Supported migration formats',
+ 'qr_code' => 'QR Code',
+ 'plain_text' => 'Plain text',
+ 'issuer' => 'Issuer',
+ 'imported' => 'Imported',
+ 'failure' => 'Failure',
+ 'x_valid_accounts_found' => '{count} valid accounts found',
+ 'import_all' => 'Import all',
+ 'import_this_account' => 'Import this account',
+ 'discard_all' => 'Discard all',
+ 'discard_duplicates' => 'Discard duplicates',
+ 'discard_this_account' => 'Discard this account',
+ 'generate_a_test_password' => 'Generate a test pasword',
+ 'possible_duplicate' => 'An account with the exact same data already exists',
+ 'invalid_account' => '- invalid account -',
+ 'invalid_service' => '- invalid service -',
+ 'do_not_set_password_or_encryption' => 'Do NOT enable Password protection or Encryption when you export data (from a 2FA app) you want to import into 2FAuth.',
+ ],
+
+];
\ No newline at end of file
diff --git a/resources/lang/ro/validation.php b/resources/lang/ro/validation.php
new file mode 100644
index 00000000..d56d0324
--- /dev/null
+++ b/resources/lang/ro/validation.php
@@ -0,0 +1,204 @@
+ 'The :attribute must be accepted.',
+ 'accepted_if' => 'The :attribute must be accepted when :other is :value.',
+ 'active_url' => 'The :attribute is not a valid URL.',
+ 'after' => 'The :attribute must be a date after :date.',
+ 'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
+ 'alpha' => 'The :attribute must only contain letters.',
+ 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.',
+ 'alpha_num' => 'The :attribute must only contain letters and numbers.',
+ 'array' => 'The :attribute must be an array.',
+ 'before' => 'The :attribute must be a date before :date.',
+ 'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+ 'between' => [
+ 'array' => 'The :attribute must have between :min and :max items.',
+ 'file' => 'The :attribute must be between :min and :max kilobytes.',
+ 'numeric' => 'The :attribute must be between :min and :max.',
+ 'string' => 'The :attribute must be between :min and :max characters.',
+ ],
+ 'boolean' => 'The :attribute field must be true or false.',
+ 'confirmed' => 'The :attribute confirmation does not match.',
+ 'current_password' => 'The password is incorrect.',
+ 'date' => 'The :attribute is not a valid date.',
+ 'date_equals' => 'The :attribute must be a date equal to :date.',
+ 'date_format' => 'The :attribute does not match the format :format.',
+ 'declined' => 'The :attribute must be declined.',
+ 'declined_if' => 'The :attribute must be declined when :other is :value.',
+ 'different' => 'The :attribute and :other must be different.',
+ 'digits' => 'The :attribute must be :digits digits.',
+ 'digits_between' => 'The :attribute must be between :min and :max digits.',
+ 'dimensions' => 'The :attribute has invalid image dimensions.',
+ 'distinct' => 'The :attribute field has a duplicate value.',
+ 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.',
+ 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.',
+ 'email' => 'The :attribute must be a valid email address.',
+ 'ends_with' => 'The :attribute must end with one of the following: :values.',
+ 'enum' => 'The selected :attribute is invalid.',
+ 'exists' => 'The selected :attribute is invalid.',
+ 'file' => 'The :attribute must be a file.',
+ 'filled' => 'The :attribute field must have a value.',
+ 'gt' => [
+ 'array' => 'The :attribute must have more than :value items.',
+ 'file' => 'The :attribute must be greater than :value kilobytes.',
+ 'numeric' => 'The :attribute must be greater than :value.',
+ 'string' => 'The :attribute must be greater than :value characters.',
+ ],
+ 'gte' => [
+ 'array' => 'The :attribute must have :value items or more.',
+ 'file' => 'The :attribute must be greater than or equal to :value kilobytes.',
+ 'numeric' => 'The :attribute must be greater than or equal to :value.',
+ 'string' => 'The :attribute must be greater than or equal to :value characters.',
+ ],
+ 'image' => 'The :attribute must be an image.',
+ 'in' => 'The selected :attribute is invalid.',
+ 'in_array' => 'The :attribute field does not exist in :other.',
+ 'integer' => 'The :attribute must be an integer.',
+ 'ip' => 'The :attribute must be a valid IP address.',
+ 'ipv4' => 'The :attribute must be a valid IPv4 address.',
+ 'ipv6' => 'The :attribute must be a valid IPv6 address.',
+ 'json' => 'The :attribute must be a valid JSON string.',
+ 'lt' => [
+ 'array' => 'The :attribute must have less than :value items.',
+ 'file' => 'The :attribute must be less than :value kilobytes.',
+ 'numeric' => 'The :attribute must be less than :value.',
+ 'string' => 'The :attribute must be less than :value characters.',
+ ],
+ 'lte' => [
+ 'array' => 'The :attribute must not have more than :value items.',
+ 'file' => 'The :attribute must be less than or equal to :value kilobytes.',
+ 'numeric' => 'The :attribute must be less than or equal to :value.',
+ 'string' => 'The :attribute must be less than or equal to :value characters.',
+ ],
+ 'mac_address' => 'The :attribute must be a valid MAC address.',
+ 'max' => [
+ 'array' => 'The :attribute must not have more than :max items.',
+ 'file' => 'The :attribute must not be greater than :max kilobytes.',
+ 'numeric' => 'The :attribute must not be greater than :max.',
+ 'string' => 'The :attribute must not be greater than :max characters.',
+ ],
+ 'max_digits' => 'The :attribute must not have more than :max digits.',
+ 'mimes' => 'The :attribute must be a file of type: :values.',
+ 'mimetypes' => 'The :attribute must be a file of type: :values.',
+ 'min' => [
+ 'array' => 'The :attribute must have at least :min items.',
+ 'file' => 'The :attribute must be at least :min kilobytes.',
+ 'numeric' => 'The :attribute must be at least :min.',
+ 'string' => 'The :attribute must be at least :min characters.',
+ ],
+ 'min_digits' => 'The :attribute must have at least :min digits.',
+ 'multiple_of' => 'The :attribute must be a multiple of :value.',
+ 'not_in' => 'The selected :attribute is invalid.',
+ 'not_regex' => 'The :attribute format is invalid.',
+ 'numeric' => 'The :attribute must be a number.',
+ 'password' => [
+ 'letters' => 'The :attribute must contain at least one letter.',
+ 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.',
+ 'numbers' => 'The :attribute must contain at least one number.',
+ 'symbols' => 'The :attribute must contain at least one symbol.',
+ 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.',
+ ],
+ 'present' => 'The :attribute field must be present.',
+ 'prohibited' => 'The :attribute field is prohibited.',
+ 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.',
+ 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.',
+ 'prohibits' => 'The :attribute field prohibits :other from being present.',
+ 'regex' => 'The :attribute format is invalid.',
+ 'required' => 'The :attribute field is required.',
+ 'required_array_keys' => 'The :attribute field must contain entries for: :values.',
+ 'required_if' => 'The :attribute field is required when :other is :value.',
+ 'required_if_accepted' => 'The :attribute field is required when :other is accepted.',
+ 'required_unless' => 'The :attribute field is required unless :other is in :values.',
+ 'required_with' => 'The :attribute field is required when :values is present.',
+ 'required_with_all' => 'The :attribute field is required when :values are present.',
+ 'required_without' => 'The :attribute field is required when :values is not present.',
+ 'required_without_all' => 'The :attribute field is required when none of :values are present.',
+ 'same' => 'The :attribute and :other must match.',
+ 'size' => [
+ 'array' => 'The :attribute must contain :size items.',
+ 'file' => 'The :attribute must be :size kilobytes.',
+ 'numeric' => 'The :attribute must be :size.',
+ 'string' => 'The :attribute must be :size characters.',
+ ],
+ 'starts_with' => 'The :attribute must start with one of the following: :values.',
+ 'string' => 'The :attribute must be a string.',
+ 'timezone' => 'The :attribute must be a valid timezone.',
+ 'unique' => 'The :attribute has already been taken.',
+ 'uploaded' => 'The :attribute failed to upload.',
+ 'url' => 'The :attribute must be a valid URL.',
+ 'uuid' => 'The :attribute must be a valid UUID.',
+
+ 'single' => 'When using :attribute it must be the only parameter in this request body',
+ 'onlyCustomOtpWithUri' => 'The uri parameter must be provided alone or only in combination with the \'custom_otp\' parameter',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Language Lines
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify custom validation messages for attributes using the
+ | convention "attribute.rule" to name the lines. This makes it quick to
+ | specify a specific custom language line for a given attribute rule.
+ |
+ */
+
+ 'custom' => [
+ 'icon' => [
+ 'image' => 'Supported format are jpeg, png, bmp, gif, svg, or webp.',
+ ],
+ 'qrcode' => [
+ 'image' => 'Supported format are jpeg, png, bmp, gif, svg, or webp.',
+ ],
+ 'uri' => [
+ 'regex' => 'The :attribute is not a valid otpauth uri.',
+ ],
+ 'otp_type' => [
+ 'in' => 'The :attribute is not supported.',
+ ],
+ 'email' => [
+ 'exists' => 'No account found using this email.',
+ ],
+ 'secret' => [
+ 'isBase32Encoded' => 'The :attribute must be a base32 encoded string.',
+ ],
+ 'account' => [
+ 'regex' => 'The :attribute must not contain colon.',
+ ],
+ 'service' => [
+ 'regex' => 'The :attribute must not contain colon.',
+ ],
+ 'label' => [
+ 'required' => 'The uri must have a label.',
+ ],
+ 'ids' => [
+ 'regex' => 'IDs must be comma separated, without trailing comma.',
+ ]
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Custom Validation Attributes
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to swap our attribute placeholder
+ | with something more reader friendly such as "E-Mail Address" instead
+ | of "email". This simply helps us make our message more expressive.
+ |
+ */
+
+ 'attributes' => [],
+
+];
diff --git a/resources/lang/zh/commons.php b/resources/lang/zh/commons.php
index 1da0db88..da7d33d3 100644
--- a/resources/lang/zh/commons.php
+++ b/resources/lang/zh/commons.php
@@ -49,7 +49,7 @@ return [
'reload' => '刷新',
'some_data_have_changed' => '某些数据已经更改,您应该:',
'generate' => '生成',
- 'generating_otp' => 'Generating OTP',
+ 'generating_otp' => '正在生成 OTP',
'open_in_browser' => '在浏览器中打开',
'continue' => '继续',
'discard' => '放弃',
diff --git a/resources/lang/zh/settings.php b/resources/lang/zh/settings.php
index bcefd2e7..c2e60394 100644
--- a/resources/lang/zh/settings.php
+++ b/resources/lang/zh/settings.php
@@ -125,19 +125,19 @@ return [
'help' => '保存最后应用的组过滤器并在下次访问时还原它',
],
'disable_registration' => [
- 'label' => 'Disable registration',
- 'help' => 'Prevent new user registration',
+ 'label' => '禁用注册',
+ 'help' => '阻止新用户注册',
],
'otp_generation' => [
- 'label' => 'Show Password',
- 'help' => 'Set how and when OTPs are displayed.
',
+ 'label' => '显示密码',
+ 'help' => '设置 OTPs 的显示方式和时间。
',
],
- 'otp_generation_on_request' => 'After a click/tap',
- 'otp_generation_on_request_legend' => 'Alone, in its own view',
- 'otp_generation_on_request_title' => 'Click an account to get a password in a dedicated view',
- 'otp_generation_on_home' => 'Constantly',
- 'otp_generation_on_home_legend' => 'All of them, on home',
- 'otp_generation_on_home_title' => 'Show all passwords in the main view, without doing anything',
+ 'otp_generation_on_request' => '点击/单击账户后',
+ 'otp_generation_on_request_legend' => '在专用视图中显示密码',
+ 'otp_generation_on_request_title' => '单击帐户在专用视图中获取密码',
+ 'otp_generation_on_home' => '始终',
+ 'otp_generation_on_home_legend' => '主视图中显示所有密码',
+ 'otp_generation_on_home_title' => '在主视图中显示所有密码,无需任何操作',
'never' => '从不',
'on_otp_copy' => '在复制安全代码后',
'1_minutes' => '1分钟后',
diff --git a/resources/lang/zh/twofaccounts.php b/resources/lang/zh/twofaccounts.php
index 6e749b16..57fc00e9 100644
--- a/resources/lang/zh/twofaccounts.php
+++ b/resources/lang/zh/twofaccounts.php
@@ -58,8 +58,8 @@ return [
'title' => '将其锁定',
],
'choose_image' => '上传',
- 'i_m_lucky' => 'Try my luck',
- 'i_m_lucky_legend' => 'The "Try my luck" button try to get the official icon of the given service. Enter actual service name without ".xyz" extension and try to avoid typo. (beta feature)',
+ 'i_m_lucky' => '手气不错',
+ 'i_m_lucky_legend' => '"手气不错"按钮会尝试获取指定服务的官方图标。输入实际的英文服务名(不带后缀)并避免输入错误。(测试中的功能)',
'test' => '测试',
'secret' => [
'label' => '密钥',