feat: Add i18n support for profile page

- Add profile section translations to all 8 language files
- Update profile/edit.blade.php header
- Update update-profile-information-form.blade.php
- Update update-password-form.blade.php
- Update delete-user-form.blade.php

Translated sections:
- Profile information form
- Password update form
- Account deletion form
This commit is contained in:
2025-11-29 12:03:28 +09:00
parent cdf0bf4bad
commit 9bb2ff8ccc
12 changed files with 202 additions and 26 deletions

View File

@@ -1,7 +1,7 @@
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Profile') }}
{{ __('messages.profile.title') }}
</h2>
</x-slot>

View File

@@ -1,18 +1,18 @@
<section class="space-y-6">
<header>
<h2 class="text-lg font-medium text-gray-900">
{{ __('Delete Account') }}
{{ __('messages.profile.delete_account') }}
</h2>
<p class="mt-1 text-sm text-gray-600">
{{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }}
{{ __('messages.profile.delete_account_description') }}
</p>
</header>
<x-danger-button
x-data=""
x-on:click.prevent="$dispatch('open-modal', 'confirm-user-deletion')"
>{{ __('Delete Account') }}</x-danger-button>
>{{ __('messages.profile.delete_account') }}</x-danger-button>
<x-modal name="confirm-user-deletion" :show="$errors->userDeletion->isNotEmpty()" focusable>
<form method="post" action="{{ route('profile.destroy') }}" class="p-6">
@@ -20,22 +20,22 @@
@method('delete')
<h2 class="text-lg font-medium text-gray-900">
{{ __('Are you sure you want to delete your account?') }}
{{ __('messages.profile.delete_account_confirm') }}
</h2>
<p class="mt-1 text-sm text-gray-600">
{{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }}
{{ __('messages.profile.delete_account_confirm_description') }}
</p>
<div class="mt-6">
<x-input-label for="password" value="{{ __('Password') }}" class="sr-only" />
<x-input-label for="password" :value="__('messages.auth.password')" class="sr-only" />
<x-text-input
id="password"
name="password"
type="password"
class="mt-1 block w-3/4"
placeholder="{{ __('Password') }}"
:placeholder="__('messages.auth.password')"
/>
<x-input-error :messages="$errors->userDeletion->get('password')" class="mt-2" />
@@ -43,11 +43,11 @@ class="mt-1 block w-3/4"
<div class="mt-6 flex justify-end">
<x-secondary-button x-on:click="$dispatch('close')">
{{ __('Cancel') }}
{{ __('messages.common.cancel') }}
</x-secondary-button>
<x-danger-button class="ms-3">
{{ __('Delete Account') }}
{{ __('messages.profile.delete_account') }}
</x-danger-button>
</div>
</form>

View File

@@ -1,11 +1,11 @@
<section>
<header>
<h2 class="text-lg font-medium text-gray-900">
{{ __('Update Password') }}
{{ __('messages.profile.update_password') }}
</h2>
<p class="mt-1 text-sm text-gray-600">
{{ __('Ensure your account is using a long, random password to stay secure.') }}
{{ __('messages.profile.update_password_description') }}
</p>
</header>
@@ -14,25 +14,25 @@
@method('put')
<div>
<x-input-label for="update_password_current_password" :value="__('Current Password')" />
<x-input-label for="update_password_current_password" :value="__('messages.profile.current_password')" />
<x-text-input id="update_password_current_password" name="current_password" type="password" class="mt-1 block w-full" autocomplete="current-password" />
<x-input-error :messages="$errors->updatePassword->get('current_password')" class="mt-2" />
</div>
<div>
<x-input-label for="update_password_password" :value="__('New Password')" />
<x-input-label for="update_password_password" :value="__('messages.profile.new_password')" />
<x-text-input id="update_password_password" name="password" type="password" class="mt-1 block w-full" autocomplete="new-password" />
<x-input-error :messages="$errors->updatePassword->get('password')" class="mt-2" />
</div>
<div>
<x-input-label for="update_password_password_confirmation" :value="__('Confirm Password')" />
<x-input-label for="update_password_password_confirmation" :value="__('messages.profile.confirm_password')" />
<x-text-input id="update_password_password_confirmation" name="password_confirmation" type="password" class="mt-1 block w-full" autocomplete="new-password" />
<x-input-error :messages="$errors->updatePassword->get('password_confirmation')" class="mt-2" />
</div>
<div class="flex items-center gap-4">
<x-primary-button>{{ __('Save') }}</x-primary-button>
<x-primary-button>{{ __('messages.common.save') }}</x-primary-button>
@if (session('status') === 'password-updated')
<p
@@ -41,7 +41,7 @@
x-transition
x-init="setTimeout(() => show = false, 2000)"
class="text-sm text-gray-600"
>{{ __('Saved.') }}</p>
>{{ __('messages.profile.saved') }}</p>
@endif
</div>
</form>

View File

@@ -1,11 +1,11 @@
<section>
<header>
<h2 class="text-lg font-medium text-gray-900">
{{ __('Profile Information') }}
{{ __('messages.profile.information') }}
</h2>
<p class="mt-1 text-sm text-gray-600">
{{ __("Update your account's profile information and email address.") }}
{{ __('messages.profile.information_description') }}
</p>
</header>
@@ -18,29 +18,29 @@
@method('patch')
<div>
<x-input-label for="name" :value="__('Name')" />
<x-input-label for="name" :value="__('messages.profile.name')" />
<x-text-input id="name" name="name" type="text" class="mt-1 block w-full" :value="old('name', $user->name)" required autofocus autocomplete="name" />
<x-input-error class="mt-2" :messages="$errors->get('name')" />
</div>
<div>
<x-input-label for="email" :value="__('Email')" />
<x-input-label for="email" :value="__('messages.profile.email')" />
<x-text-input id="email" name="email" type="email" class="mt-1 block w-full" :value="old('email', $user->email)" required autocomplete="username" />
<x-input-error class="mt-2" :messages="$errors->get('email')" />
@if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail())
<div>
<p class="text-sm mt-2 text-gray-800">
{{ __('Your email address is unverified.') }}
{{ __('messages.profile.email_unverified') }}
<button form="send-verification" class="underline text-sm text-gray-600 hover:text-gray-900 rounded-md focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">
{{ __('Click here to re-send the verification email.') }}
{{ __('messages.profile.resend_verification') }}
</button>
</p>
@if (session('status') === 'verification-link-sent')
<p class="mt-2 font-medium text-sm text-green-600">
{{ __('A new verification link has been sent to your email address.') }}
{{ __('messages.profile.verification_sent') }}
</p>
@endif
</div>
@@ -48,7 +48,7 @@
</div>
<div class="flex items-center gap-4">
<x-primary-button>{{ __('Save') }}</x-primary-button>
<x-primary-button>{{ __('messages.common.save') }}</x-primary-button>
@if (session('status') === 'profile-updated')
<p
@@ -57,7 +57,7 @@
x-transition
x-init="setTimeout(() => show = false, 2000)"
class="text-sm text-gray-600"
>{{ __('Saved.') }}</p>
>{{ __('messages.profile.saved') }}</p>
@endif
</div>
</form>