From a1d282dc7155d17dd70642114f978a5989387cef Mon Sep 17 00:00:00 2001 From: horacioskrp Date: Wed, 11 Nov 2026 15:05:54 +0000 Subject: [PATCH] =?UTF-8?q?feat(i18n):=20param=C3=A8tres=20du=20compte=20?= =?UTF-8?q?=E2=80=94=20profil,=20mot=20de=20passe=20&=20double=20authentif?= =?UTF-8?q?ication=20(FR/EN)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang/en/settings.php | 63 +++++++++++++++++++ lang/fr/settings.php | 63 +++++++++++++++++++ resources/js/pages/settings/password.tsx | 44 ++++++------- resources/js/pages/settings/profile.tsx | 72 +++++++++++----------- resources/js/pages/settings/two-factor.tsx | 41 ++++++------ 5 files changed, 205 insertions(+), 78 deletions(-) diff --git a/lang/en/settings.php b/lang/en/settings.php index e3658c75..d6efdff3 100644 --- a/lang/en/settings.php +++ b/lang/en/settings.php @@ -8,10 +8,60 @@ 'profile' => [ 'title' => 'Profile', 'desc' => 'Your personal information', + 'page' => [ + 'breadcrumb' => 'Account settings', + 'head' => 'My profile', + 'heading' => 'My profile', + 'default_name' => 'My profile', + 'section_title' => 'Personal information', + 'section_desc' => 'Manage your profile information', + 'firstname' => 'First name', + 'firstname_ph' => 'Your first name', + 'lastname' => 'Last name', + 'lastname_ph' => 'Your last name', + 'matricule' => 'ID number', + 'matricule_ph' => 'Not assigned', + 'gender' => 'Gender', + 'gender_ph' => 'Select', + 'gender_male' => 'Male', + 'gender_female' => 'Female', + 'gender_other' => 'Other', + 'birth_date' => 'Date of birth', + 'email' => 'Email address', + 'email_ph' => 'example@email.com', + 'telephone' => 'Phone', + 'telephone_ph' => '+243 XXX XXX XXX', + 'address' => 'Address', + 'address_ph' => 'Your full address', + 'email_unverified' => 'Your email address is not verified.', + 'email_resend' => 'Click here to resend the verification email.', + 'email_link_sent' => 'A new verification link has been sent to your email address.', + 'saving' => 'Saving...', + 'save' => 'Save', + 'saved' => '✓ Changes saved', + ], ], 'password' => [ 'title' => 'Password', 'desc' => 'Change your password', + 'page' => [ + 'breadcrumb' => 'Password', + 'head' => 'Password', + 'heading' => 'Password', + 'card_desc' => 'Make sure to use a long, secure password.', + 'current' => 'Current password', + 'current_ph' => 'Enter your current password', + 'new_section' => 'New password', + 'new' => 'New password', + 'new_ph' => 'Enter a new password', + 'confirm' => 'Confirm password', + 'confirm_ph' => 'Confirm the new password', + 'tip_label' => 'Tip:', + 'tip' => 'At least 12 characters mixing uppercase, lowercase, numbers and symbols. Avoid passwords already used elsewhere.', + 'saving' => 'Updating...', + 'submit' => 'Update password', + 'saved' => '✓ Password updated', + ], ], 'appearance' => [ 'title' => 'Appearance', @@ -20,6 +70,19 @@ 'two_factor' => [ 'title' => 'Two-factor authentication', 'desc' => 'Secure your account with a second factor', + 'page' => [ + 'breadcrumb' => 'Two-factor authentication', + 'head' => 'Two-factor authentication', + 'heading' => 'Two-factor authentication', + 'card_desc' => 'Strengthen your account security with a second factor.', + 'enabled_badge' => 'Enabled', + 'enabled_desc' => 'With two-factor authentication enabled, you will be prompted for a secure code during sign-in, which you can retrieve from the TOTP app on your phone.', + 'disable' => 'Disable 2FA', + 'disabled_badge' => 'Disabled', + 'disabled_desc' => 'When you enable two-factor authentication, you will be prompted for a secure code during sign-in. This code can be retrieved from a TOTP app on your phone.', + 'continue_setup' => 'Continue setup', + 'enable' => 'Enable 2FA', + ], ], 'language' => [ 'title' => 'Language', diff --git a/lang/fr/settings.php b/lang/fr/settings.php index 76bb19d5..146362a8 100644 --- a/lang/fr/settings.php +++ b/lang/fr/settings.php @@ -8,10 +8,60 @@ 'profile' => [ 'title' => 'Profil', 'desc' => 'Vos informations personnelles', + 'page' => [ + 'breadcrumb' => 'Paramètres du compte', + 'head' => 'Mon profil', + 'heading' => 'Mon profil', + 'default_name' => 'Mon profil', + 'section_title' => 'Informations personnelles', + 'section_desc' => 'Gérez vos informations de profil', + 'firstname' => 'Prénom', + 'firstname_ph' => 'Votre prénom', + 'lastname' => 'Nom de famille', + 'lastname_ph' => 'Votre nom', + 'matricule' => 'Matricule', + 'matricule_ph' => 'Non attribué', + 'gender' => 'Genre', + 'gender_ph' => 'Sélectionner', + 'gender_male' => 'Masculin', + 'gender_female' => 'Féminin', + 'gender_other' => 'Autre', + 'birth_date' => 'Date de naissance', + 'email' => 'Adresse email', + 'email_ph' => 'exemple@email.com', + 'telephone' => 'Téléphone', + 'telephone_ph' => '+243 XXX XXX XXX', + 'address' => 'Adresse', + 'address_ph' => 'Votre adresse complète', + 'email_unverified' => "Votre adresse email n'est pas vérifiée.", + 'email_resend' => "Cliquez ici pour renvoyer l'email de vérification.", + 'email_link_sent' => 'Un nouveau lien de vérification a été envoyé à votre adresse email.', + 'saving' => 'Enregistrement...', + 'save' => 'Enregistrer', + 'saved' => '✓ Modifications enregistrées', + ], ], 'password' => [ 'title' => 'Mot de passe', 'desc' => 'Modifier votre mot de passe', + 'page' => [ + 'breadcrumb' => 'Mot de passe', + 'head' => 'Mot de passe', + 'heading' => 'Mot de passe', + 'card_desc' => "Assurez-vous d'utiliser un mot de passe long et sécurisé.", + 'current' => 'Mot de passe actuel', + 'current_ph' => 'Entrez votre mot de passe actuel', + 'new_section' => 'Nouveau mot de passe', + 'new' => 'Nouveau mot de passe', + 'new_ph' => 'Entrez un nouveau mot de passe', + 'confirm' => 'Confirmer le mot de passe', + 'confirm_ph' => 'Confirmez le nouveau mot de passe', + 'tip_label' => 'Conseil :', + 'tip' => 'Au moins 12 caractères mêlant majuscules, minuscules, chiffres et symboles. Évitez les mots de passe déjà utilisés ailleurs.', + 'saving' => 'Modification...', + 'submit' => 'Modifier le mot de passe', + 'saved' => '✓ Mot de passe modifié', + ], ], 'appearance' => [ 'title' => 'Apparence', @@ -20,6 +70,19 @@ 'two_factor' => [ 'title' => 'Double authentification', 'desc' => 'Sécurisez votre compte avec un second facteur', + 'page' => [ + 'breadcrumb' => 'Authentification à deux facteurs', + 'head' => 'Authentification à deux facteurs', + 'heading' => 'Authentification à deux facteurs', + 'card_desc' => 'Renforcez la sécurité de votre compte avec un second facteur.', + 'enabled_badge' => 'Activée', + 'enabled_desc' => "Avec l'authentification à deux facteurs activée, vous serez invité à saisir un code de sécurité lors de la connexion, que vous pouvez récupérer depuis l'application TOTP sur votre téléphone.", + 'disable' => 'Désactiver 2FA', + 'disabled_badge' => 'Désactivée', + 'disabled_desc' => "Lorsque vous activez l'authentification à deux facteurs, vous serez invité à saisir un code de sécurité lors de la connexion. Ce code peut être récupéré depuis une application TOTP sur votre téléphone.", + 'continue_setup' => 'Continuer la configuration', + 'enable' => 'Activer 2FA', + ], ], 'language' => [ 'title' => 'Langue', diff --git a/resources/js/pages/settings/password.tsx b/resources/js/pages/settings/password.tsx index d65f2db9..24525d8d 100644 --- a/resources/js/pages/settings/password.tsx +++ b/resources/js/pages/settings/password.tsx @@ -8,28 +8,30 @@ import PasswordStrength from '@/components/password-strength'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; +import { useTranslation } from '@/helpers/i18n'; import AppLayout from '@/layouts/app-layout'; import SettingsLayout from '@/layouts/settings/layout'; import { edit } from '@/routes/user-password'; import type { BreadcrumbItem } from '@/types'; -const breadcrumbs: BreadcrumbItem[] = [ - { - title: 'Mot de passe', - href: edit().url, - }, -]; - export default function Password() { + const { t } = useTranslation(); const passwordInput = useRef(null); const currentPasswordInput = useRef(null); const [password, setPassword] = useState(''); + const breadcrumbs: BreadcrumbItem[] = [ + { + title: t('settings.password.page.breadcrumb'), + href: edit().url, + }, + ]; + return ( - + -

Mot de passe

+

{t('settings.password.page.heading')}

@@ -40,8 +42,8 @@ export default function Password() {
-

Mot de passe

-

Assurez-vous d'utiliser un mot de passe long et sécurisé.

+

{t('settings.password.page.heading')}

+

{t('settings.password.page.card_desc')}

@@ -78,7 +80,7 @@ export default function Password() {
@@ -98,14 +100,14 @@ export default function Password() {
- Nouveau mot de passe + {t('settings.password.page.new_section')}
setPassword(e.target.value)} /> @@ -123,7 +125,7 @@ export default function Password() {
@@ -139,7 +141,7 @@ export default function Password() {

- 💡 Conseil : Au moins 12 caractères mêlant majuscules, minuscules, chiffres et symboles. Évitez les mots de passe déjà utilisés ailleurs. + 💡 {t('settings.password.page.tip_label')} {t('settings.password.page.tip')}

@@ -150,7 +152,7 @@ export default function Password() { className="bg-blue-600 hover:bg-blue-700" data-test="update-password-button" > - {processing ? 'Modification...' : 'Modifier le mot de passe'} + {processing ? t('settings.password.page.saving') : t('settings.password.page.submit')}

- ✓ Mot de passe modifié + {t('settings.password.page.saved')}

diff --git a/resources/js/pages/settings/profile.tsx b/resources/js/pages/settings/profile.tsx index a5935657..9404f41f 100644 --- a/resources/js/pages/settings/profile.tsx +++ b/resources/js/pages/settings/profile.tsx @@ -8,6 +8,7 @@ import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Textarea } from '@/components/ui/textarea'; +import { useTranslation } from '@/helpers/i18n'; import AppLayout from '@/layouts/app-layout'; import SettingsLayout from '@/layouts/settings/layout'; import { edit } from '@/routes/profile'; @@ -15,13 +16,6 @@ import { send } from '@/routes/verification'; import type { BreadcrumbItem } from '@/types'; import type { Auth } from '@/types/auth'; -const breadcrumbs: BreadcrumbItem[] = [ - { - title: 'Paramètres du compte', - href: edit().url, - }, -]; - export default function Profile({ mustVerifyEmail, status, @@ -29,8 +23,16 @@ export default function Profile({ mustVerifyEmail: boolean; status?: string; }>) { + const { t } = useTranslation(); const { auth } = usePage<{ auth: Auth }>().props; + const breadcrumbs: BreadcrumbItem[] = [ + { + title: t('settings.profile.page.breadcrumb'), + href: edit().url, + }, + ]; + const initials = [auth.user.firstname?.[0], auth.user.lastname?.[0]] .filter(Boolean) .join('') @@ -38,9 +40,9 @@ export default function Profile({ return ( - + -

Mon profil

+

{t('settings.profile.page.heading')}

@@ -52,7 +54,7 @@ export default function Profile({

- {[auth.user.firstname, auth.user.lastname].filter(Boolean).join(' ') || 'Mon profil'} + {[auth.user.firstname, auth.user.lastname].filter(Boolean).join(' ') || t('settings.profile.page.default_name')}

{auth.user.email}

@@ -79,8 +81,8 @@ export default function Profile({
-

Informations personnelles

-

Gérez vos informations de profil

+

{t('settings.profile.page.section_title')}

+

{t('settings.profile.page.section_desc')}

@@ -96,7 +98,7 @@ export default function Profile({
@@ -131,14 +133,14 @@ export default function Profile({
)} @@ -146,16 +148,16 @@ export default function Profile({
@@ -164,7 +166,7 @@ export default function Profile({
@@ -199,7 +201,7 @@ export default function Profile({
@@ -217,7 +219,7 @@ export default function Profile({