From cdf0bf4bad192bf8e1ebb7bb96952575c5782295 Mon Sep 17 00:00:00 2001 From: Yutaka Kurosaki Date: Sat, 29 Nov 2025 12:00:09 +0900 Subject: [PATCH] feat: Add multi-language support (i18n) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Languages supported (8): - English (en) - 日本語 (ja) - Deutsch (de) - Français (fr) - Español (es) - 简体中文 (zh-CN) - 繁體中文 (zh-TW) - 한국어 (ko) Changes: - Add locale column to users table - Add SetLocale middleware for automatic locale detection - Add LocaleController for language switching - Create language files with translations for all UI elements - Add language selector to user profile page - Update all Blade views to use translation strings --- src/app/Http/Controllers/LocaleController.php | 30 +++++ src/app/Http/Middleware/SetLocale.php | 54 ++++++++ src/app/Models/User.php | 1 + src/bootstrap/app.php | 5 + ...11_29_024457_add_locale_to_users_table.php | 28 +++++ src/lang/de/messages.php | 117 ++++++++++++++++++ src/lang/en/messages.php | 117 ++++++++++++++++++ src/lang/es/messages.php | 117 ++++++++++++++++++ src/lang/fr/messages.php | 117 ++++++++++++++++++ src/lang/ja/messages.php | 117 ++++++++++++++++++ src/lang/ko/messages.php | 117 ++++++++++++++++++ src/lang/zh-CN/messages.php | 117 ++++++++++++++++++ src/lang/zh-TW/messages.php | 117 ++++++++++++++++++ .../views/admin/users/create.blade.php | 17 ++- .../views/admin/users/edit.blade.php | 23 ++-- .../views/admin/users/index.blade.php | 27 ++-- .../views/layouts/knowledge-base.blade.php | 16 +-- .../views/layouts/navigation.blade.php | 20 +-- .../views/livewire/document-editor.blade.php | 28 ++--- .../views/livewire/document-viewer.blade.php | 12 +- .../views/livewire/quick-switcher.blade.php | 10 +- .../views/livewire/sidebar-tree.blade.php | 6 +- src/resources/views/profile/edit.blade.php | 6 + .../partials/update-locale-form.blade.php | 46 +++++++ src/routes/web.php | 2 + 25 files changed, 1183 insertions(+), 84 deletions(-) create mode 100644 src/app/Http/Controllers/LocaleController.php create mode 100644 src/app/Http/Middleware/SetLocale.php create mode 100644 src/database/migrations/2025_11_29_024457_add_locale_to_users_table.php create mode 100644 src/lang/de/messages.php create mode 100644 src/lang/en/messages.php create mode 100644 src/lang/es/messages.php create mode 100644 src/lang/fr/messages.php create mode 100644 src/lang/ja/messages.php create mode 100644 src/lang/ko/messages.php create mode 100644 src/lang/zh-CN/messages.php create mode 100644 src/lang/zh-TW/messages.php create mode 100644 src/resources/views/profile/partials/update-locale-form.blade.php diff --git a/src/app/Http/Controllers/LocaleController.php b/src/app/Http/Controllers/LocaleController.php new file mode 100644 index 0000000..da9e42b --- /dev/null +++ b/src/app/Http/Controllers/LocaleController.php @@ -0,0 +1,30 @@ +validate([ + 'locale' => ['required', 'string', 'in:' . implode(',', array_keys(SetLocale::SUPPORTED_LOCALES))], + ]); + + $locale = $validated['locale']; + + // Save to user record + Auth::user()->update(['locale' => $locale]); + + // Also save to session for immediate effect + $request->session()->put('locale', $locale); + + return redirect()->route('profile.edit')->with('success', __('messages.settings.language_updated')); + } +} diff --git a/src/app/Http/Middleware/SetLocale.php b/src/app/Http/Middleware/SetLocale.php new file mode 100644 index 0000000..36f80f2 --- /dev/null +++ b/src/app/Http/Middleware/SetLocale.php @@ -0,0 +1,54 @@ + 'English', + 'ja' => '日本語', + 'de' => 'Deutsch', + 'fr' => 'Français', + 'es' => 'Español', + 'zh-CN' => '简体中文', + 'zh-TW' => '繁體中文', + 'ko' => '한국어', + ]; + + /** + * Handle an incoming request. + * + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + */ + public function handle(Request $request, Closure $next): Response + { + $locale = config('app.locale', 'en'); + + // Check authenticated user's preference + if (Auth::check() && Auth::user()->locale) { + $locale = Auth::user()->locale; + } + // Check session (for immediate effect after changing) + elseif ($request->session()->has('locale')) { + $locale = $request->session()->get('locale'); + } + + // Validate locale + if (!array_key_exists($locale, self::SUPPORTED_LOCALES)) { + $locale = 'en'; + } + + App::setLocale($locale); + + return $next($request); + } +} diff --git a/src/app/Models/User.php b/src/app/Models/User.php index da98d0a..2797c36 100644 --- a/src/app/Models/User.php +++ b/src/app/Models/User.php @@ -22,6 +22,7 @@ class User extends Authenticatable 'email', 'password', 'is_admin', + 'locale', ]; /** diff --git a/src/bootstrap/app.php b/src/bootstrap/app.php index 9e13148..803a65a 100644 --- a/src/bootstrap/app.php +++ b/src/bootstrap/app.php @@ -14,6 +14,11 @@ $middleware->alias([ 'admin' => \App\Http\Middleware\AdminMiddleware::class, ]); + + // Add SetLocale middleware to web group + $middleware->web(append: [ + \App\Http\Middleware\SetLocale::class, + ]); }) ->withExceptions(function (Exceptions $exceptions): void { // diff --git a/src/database/migrations/2025_11_29_024457_add_locale_to_users_table.php b/src/database/migrations/2025_11_29_024457_add_locale_to_users_table.php new file mode 100644 index 0000000..37772f7 --- /dev/null +++ b/src/database/migrations/2025_11_29_024457_add_locale_to_users_table.php @@ -0,0 +1,28 @@ +string('locale', 10)->default('en')->after('is_admin'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('locale'); + }); + } +}; diff --git a/src/lang/de/messages.php b/src/lang/de/messages.php new file mode 100644 index 0000000..9a1a446 --- /dev/null +++ b/src/lang/de/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => 'Dashboard', + 'knowledge_base' => 'Wissensdatenbank', + 'profile' => 'Profil', + 'user_management' => 'Benutzerverwaltung', + 'logout' => 'Abmelden', + 'login' => 'Anmelden', + 'register' => 'Registrieren', + ], + + // Documents + 'documents' => [ + 'title' => 'Dokumente', + 'new_document' => 'Neues Dokument', + 'edit_document' => 'Dokument bearbeiten', + 'edit' => 'Bearbeiten', + 'delete' => 'Löschen', + 'save' => 'Speichern', + 'cancel' => 'Abbrechen', + 'created_by' => 'Erstellt von', + 'updated' => 'Aktualisiert', + 'path' => 'Pfad', + 'last_modified' => 'Zuletzt geändert', + 'no_documents' => 'Keine Dokumente gefunden', + 'search_placeholder' => 'Dokumente suchen...', + 'create_success' => 'Dokument erfolgreich erstellt!', + 'update_success' => 'Dokument erfolgreich aktualisiert!', + 'delete_success' => 'Dokument erfolgreich gelöscht!', + 'delete_confirm' => 'Möchten Sie dieses Dokument wirklich löschen?', + 'linked_references' => 'Verknüpfte Referenzen', + 'title_label' => 'Titel', + 'title_placeholder' => 'Dokumenttitel (z.B. Laravel/Livewire/Components)', + 'title_hint' => 'Tipp: Verwenden Sie Schrägstriche (/) im Titel, um Dokumente automatisch in Ordnern zu organisieren', + 'content_label' => 'Inhalt', + 'content_placeholder' => 'Schreiben Sie hier Ihren Markdown...', + 'saving' => 'Speichern...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => 'Schnellwechsel', + 'placeholder' => 'Dokumente suchen...', + 'no_results' => 'Keine Dokumente gefunden', + 'navigate' => 'zum Navigieren', + 'select' => 'zum Auswählen', + 'close' => 'zum Schließen', + ], + + // Admin + 'admin' => [ + 'user_management' => 'Benutzerverwaltung', + 'new_user' => 'Neuer Benutzer', + 'edit_user' => 'Benutzer bearbeiten', + 'create_user' => 'Benutzer erstellen', + 'users' => 'Benutzer', + 'name' => 'Name', + 'email' => 'E-Mail', + 'password' => 'Passwort', + 'password_confirmation' => 'Passwort bestätigen', + 'password_hint' => 'Leer lassen, um das aktuelle Passwort beizubehalten.', + 'role' => 'Rolle', + 'admin' => 'Administrator', + 'user' => 'Benutzer', + 'grant_admin' => 'Administratorrechte gewähren', + 'created_at' => 'Erstellt am', + 'actions' => 'Aktionen', + 'edit' => 'Bearbeiten', + 'delete' => 'Löschen', + 'no_users' => 'Keine Benutzer gefunden.', + 'create_success' => 'Benutzer erfolgreich erstellt.', + 'update_success' => 'Benutzer erfolgreich aktualisiert.', + 'delete_success' => 'Benutzer erfolgreich gelöscht.', + 'cannot_delete_self' => 'Sie können sich nicht selbst löschen.', + 'self_admin_warning' => 'Das Entfernen Ihrer eigenen Administratorrechte sperrt Sie aus dem Admin-Bereich aus.', + ], + + // Settings + 'settings' => [ + 'language' => 'Sprache', + 'select_language' => 'Sprache auswählen', + 'language_updated' => 'Sprache erfolgreich aktualisiert.', + ], + + // Common + 'common' => [ + 'save' => 'Speichern', + 'cancel' => 'Abbrechen', + 'delete' => 'Löschen', + 'edit' => 'Bearbeiten', + 'create' => 'Erstellen', + 'update' => 'Aktualisieren', + 'back' => 'Zurück', + 'confirm' => 'Bestätigen', + 'yes' => 'Ja', + 'no' => 'Nein', + 'loading' => 'Laden...', + 'error' => 'Fehler', + 'success' => 'Erfolg', + ], + + // Auth + 'auth' => [ + 'login' => 'Anmelden', + 'register' => 'Registrieren', + 'email' => 'E-Mail', + 'password' => 'Passwort', + 'remember_me' => 'Angemeldet bleiben', + 'forgot_password' => 'Passwort vergessen?', + 'confirm_password' => 'Passwort bestätigen', + 'already_registered' => 'Bereits registriert?', + ], +]; + diff --git a/src/lang/en/messages.php b/src/lang/en/messages.php new file mode 100644 index 0000000..46fb363 --- /dev/null +++ b/src/lang/en/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => 'Dashboard', + 'knowledge_base' => 'Knowledge Base', + 'profile' => 'Profile', + 'user_management' => 'User Management', + 'logout' => 'Log Out', + 'login' => 'Login', + 'register' => 'Register', + ], + + // Documents + 'documents' => [ + 'title' => 'Documents', + 'new_document' => 'New Document', + 'edit_document' => 'Edit Document', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'save' => 'Save', + 'cancel' => 'Cancel', + 'created_by' => 'Created by', + 'updated' => 'Updated', + 'path' => 'Path', + 'last_modified' => 'Last modified', + 'no_documents' => 'No documents found', + 'search_placeholder' => 'Search documents...', + 'create_success' => 'Document created successfully!', + 'update_success' => 'Document updated successfully!', + 'delete_success' => 'Document deleted successfully!', + 'delete_confirm' => 'Are you sure you want to delete this document?', + 'linked_references' => 'Linked References', + 'title_label' => 'Title', + 'title_placeholder' => 'Document Title (use / for folders, e.g. Laravel/Livewire/Components)', + 'title_hint' => 'Tip: Use slashes (/) in the title to organize documents into folders automatically', + 'content_label' => 'Content', + 'content_placeholder' => 'Write your markdown here...', + 'saving' => 'Saving...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => 'Quick Switch', + 'placeholder' => 'Search documents...', + 'no_results' => 'No documents found', + 'navigate' => 'to navigate', + 'select' => 'to select', + 'close' => 'to close', + ], + + // Admin + 'admin' => [ + 'user_management' => 'User Management', + 'new_user' => 'New User', + 'edit_user' => 'Edit User', + 'create_user' => 'Create User', + 'users' => 'Users', + 'name' => 'Name', + 'email' => 'Email', + 'password' => 'Password', + 'password_confirmation' => 'Confirm Password', + 'password_hint' => 'Leave blank to keep current password.', + 'role' => 'Role', + 'admin' => 'Administrator', + 'user' => 'User', + 'grant_admin' => 'Grant administrator privileges', + 'created_at' => 'Created', + 'actions' => 'Actions', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'no_users' => 'No users found.', + 'create_success' => 'User created successfully.', + 'update_success' => 'User updated successfully.', + 'delete_success' => 'User deleted successfully.', + 'cannot_delete_self' => 'You cannot delete yourself.', + 'self_admin_warning' => 'Removing your own admin privileges will lock you out of the admin panel.', + ], + + // Settings + 'settings' => [ + 'language' => 'Language', + 'select_language' => 'Select Language', + 'language_updated' => 'Language updated successfully.', + ], + + // Common + 'common' => [ + 'save' => 'Save', + 'cancel' => 'Cancel', + 'delete' => 'Delete', + 'edit' => 'Edit', + 'create' => 'Create', + 'update' => 'Update', + 'back' => 'Back', + 'confirm' => 'Confirm', + 'yes' => 'Yes', + 'no' => 'No', + 'loading' => 'Loading...', + 'error' => 'Error', + 'success' => 'Success', + ], + + // Auth + 'auth' => [ + 'login' => 'Login', + 'register' => 'Register', + 'email' => 'Email', + 'password' => 'Password', + 'remember_me' => 'Remember me', + 'forgot_password' => 'Forgot your password?', + 'confirm_password' => 'Confirm Password', + 'already_registered' => 'Already registered?', + ], +]; + diff --git a/src/lang/es/messages.php b/src/lang/es/messages.php new file mode 100644 index 0000000..2ebfdcc --- /dev/null +++ b/src/lang/es/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => 'Panel de control', + 'knowledge_base' => 'Base de conocimientos', + 'profile' => 'Perfil', + 'user_management' => 'Gestión de usuarios', + 'logout' => 'Cerrar sesión', + 'login' => 'Iniciar sesión', + 'register' => 'Registrarse', + ], + + // Documents + 'documents' => [ + 'title' => 'Documentos', + 'new_document' => 'Nuevo documento', + 'edit_document' => 'Editar documento', + 'edit' => 'Editar', + 'delete' => 'Eliminar', + 'save' => 'Guardar', + 'cancel' => 'Cancelar', + 'created_by' => 'Creado por', + 'updated' => 'Actualizado', + 'path' => 'Ruta', + 'last_modified' => 'Última modificación', + 'no_documents' => 'No se encontraron documentos', + 'search_placeholder' => 'Buscar documentos...', + 'create_success' => '¡Documento creado exitosamente!', + 'update_success' => '¡Documento actualizado exitosamente!', + 'delete_success' => '¡Documento eliminado exitosamente!', + 'delete_confirm' => '¿Está seguro de que desea eliminar este documento?', + 'linked_references' => 'Referencias vinculadas', + 'title_label' => 'Título', + 'title_placeholder' => 'Título del documento (ej: Laravel/Livewire/Components)', + 'title_hint' => 'Consejo: Use barras (/) en el título para organizar documentos en carpetas automáticamente', + 'content_label' => 'Contenido', + 'content_placeholder' => 'Escriba su markdown aquí...', + 'saving' => 'Guardando...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => 'Cambio rápido', + 'placeholder' => 'Buscar documentos...', + 'no_results' => 'No se encontraron documentos', + 'navigate' => 'para navegar', + 'select' => 'para seleccionar', + 'close' => 'para cerrar', + ], + + // Admin + 'admin' => [ + 'user_management' => 'Gestión de usuarios', + 'new_user' => 'Nuevo usuario', + 'edit_user' => 'Editar usuario', + 'create_user' => 'Crear usuario', + 'users' => 'Usuarios', + 'name' => 'Nombre', + 'email' => 'Correo electrónico', + 'password' => 'Contraseña', + 'password_confirmation' => 'Confirmar contraseña', + 'password_hint' => 'Deje en blanco para mantener la contraseña actual.', + 'role' => 'Rol', + 'admin' => 'Administrador', + 'user' => 'Usuario', + 'grant_admin' => 'Otorgar privilegios de administrador', + 'created_at' => 'Fecha de creación', + 'actions' => 'Acciones', + 'edit' => 'Editar', + 'delete' => 'Eliminar', + 'no_users' => 'No se encontraron usuarios.', + 'create_success' => 'Usuario creado exitosamente.', + 'update_success' => 'Usuario actualizado exitosamente.', + 'delete_success' => 'Usuario eliminado exitosamente.', + 'cannot_delete_self' => 'No puede eliminarse a sí mismo.', + 'self_admin_warning' => 'Eliminar sus propios privilegios de administrador le impedirá acceder al panel de administración.', + ], + + // Settings + 'settings' => [ + 'language' => 'Idioma', + 'select_language' => 'Seleccionar idioma', + 'language_updated' => 'Idioma actualizado exitosamente.', + ], + + // Common + 'common' => [ + 'save' => 'Guardar', + 'cancel' => 'Cancelar', + 'delete' => 'Eliminar', + 'edit' => 'Editar', + 'create' => 'Crear', + 'update' => 'Actualizar', + 'back' => 'Volver', + 'confirm' => 'Confirmar', + 'yes' => 'Sí', + 'no' => 'No', + 'loading' => 'Cargando...', + 'error' => 'Error', + 'success' => 'Éxito', + ], + + // Auth + 'auth' => [ + 'login' => 'Iniciar sesión', + 'register' => 'Registrarse', + 'email' => 'Correo electrónico', + 'password' => 'Contraseña', + 'remember_me' => 'Recordarme', + 'forgot_password' => '¿Olvidó su contraseña?', + 'confirm_password' => 'Confirmar contraseña', + 'already_registered' => '¿Ya está registrado?', + ], +]; + diff --git a/src/lang/fr/messages.php b/src/lang/fr/messages.php new file mode 100644 index 0000000..36726d2 --- /dev/null +++ b/src/lang/fr/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => 'Tableau de bord', + 'knowledge_base' => 'Base de connaissances', + 'profile' => 'Profil', + 'user_management' => 'Gestion des utilisateurs', + 'logout' => 'Déconnexion', + 'login' => 'Connexion', + 'register' => "S'inscrire", + ], + + // Documents + 'documents' => [ + 'title' => 'Documents', + 'new_document' => 'Nouveau document', + 'edit_document' => 'Modifier le document', + 'edit' => 'Modifier', + 'delete' => 'Supprimer', + 'save' => 'Enregistrer', + 'cancel' => 'Annuler', + 'created_by' => 'Créé par', + 'updated' => 'Mis à jour', + 'path' => 'Chemin', + 'last_modified' => 'Dernière modification', + 'no_documents' => 'Aucun document trouvé', + 'search_placeholder' => 'Rechercher des documents...', + 'create_success' => 'Document créé avec succès !', + 'update_success' => 'Document mis à jour avec succès !', + 'delete_success' => 'Document supprimé avec succès !', + 'delete_confirm' => 'Êtes-vous sûr de vouloir supprimer ce document ?', + 'linked_references' => 'Références liées', + 'title_label' => 'Titre', + 'title_placeholder' => 'Titre du document (ex: Laravel/Livewire/Components)', + 'title_hint' => 'Astuce: Utilisez des barres obliques (/) dans le titre pour organiser automatiquement les documents en dossiers', + 'content_label' => 'Contenu', + 'content_placeholder' => 'Écrivez votre markdown ici...', + 'saving' => 'Enregistrement...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => 'Changement rapide', + 'placeholder' => 'Rechercher des documents...', + 'no_results' => 'Aucun document trouvé', + 'navigate' => 'pour naviguer', + 'select' => 'pour sélectionner', + 'close' => 'pour fermer', + ], + + // Admin + 'admin' => [ + 'user_management' => 'Gestion des utilisateurs', + 'new_user' => 'Nouvel utilisateur', + 'edit_user' => "Modifier l'utilisateur", + 'create_user' => 'Créer un utilisateur', + 'users' => 'Utilisateurs', + 'name' => 'Nom', + 'email' => 'E-mail', + 'password' => 'Mot de passe', + 'password_confirmation' => 'Confirmer le mot de passe', + 'password_hint' => 'Laissez vide pour conserver le mot de passe actuel.', + 'role' => 'Rôle', + 'admin' => 'Administrateur', + 'user' => 'Utilisateur', + 'grant_admin' => "Accorder les privilèges d'administrateur", + 'created_at' => 'Créé le', + 'actions' => 'Actions', + 'edit' => 'Modifier', + 'delete' => 'Supprimer', + 'no_users' => 'Aucun utilisateur trouvé.', + 'create_success' => 'Utilisateur créé avec succès.', + 'update_success' => 'Utilisateur mis à jour avec succès.', + 'delete_success' => 'Utilisateur supprimé avec succès.', + 'cannot_delete_self' => 'Vous ne pouvez pas vous supprimer vous-même.', + 'self_admin_warning' => "Supprimer vos propres privilèges d'administrateur vous empêchera d'accéder au panneau d'administration.", + ], + + // Settings + 'settings' => [ + 'language' => 'Langue', + 'select_language' => 'Sélectionner la langue', + 'language_updated' => 'Langue mise à jour avec succès.', + ], + + // Common + 'common' => [ + 'save' => 'Enregistrer', + 'cancel' => 'Annuler', + 'delete' => 'Supprimer', + 'edit' => 'Modifier', + 'create' => 'Créer', + 'update' => 'Mettre à jour', + 'back' => 'Retour', + 'confirm' => 'Confirmer', + 'yes' => 'Oui', + 'no' => 'Non', + 'loading' => 'Chargement...', + 'error' => 'Erreur', + 'success' => 'Succès', + ], + + // Auth + 'auth' => [ + 'login' => 'Connexion', + 'register' => "S'inscrire", + 'email' => 'E-mail', + 'password' => 'Mot de passe', + 'remember_me' => 'Se souvenir de moi', + 'forgot_password' => 'Mot de passe oublié ?', + 'confirm_password' => 'Confirmer le mot de passe', + 'already_registered' => 'Déjà inscrit ?', + ], +]; + diff --git a/src/lang/ja/messages.php b/src/lang/ja/messages.php new file mode 100644 index 0000000..2ab7ec7 --- /dev/null +++ b/src/lang/ja/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => 'ダッシュボード', + 'knowledge_base' => 'ナレッジベース', + 'profile' => 'プロフィール', + 'user_management' => 'ユーザー管理', + 'logout' => 'ログアウト', + 'login' => 'ログイン', + 'register' => '登録', + ], + + // Documents + 'documents' => [ + 'title' => 'ドキュメント', + 'new_document' => '新規ドキュメント', + 'edit_document' => 'ドキュメント編集', + 'edit' => '編集', + 'delete' => '削除', + 'save' => '保存', + 'cancel' => 'キャンセル', + 'created_by' => '作成者', + 'updated' => '更新日', + 'path' => 'パス', + 'last_modified' => '最終更新', + 'no_documents' => 'ドキュメントが見つかりません', + 'search_placeholder' => 'ドキュメントを検索...', + 'create_success' => 'ドキュメントを作成しました!', + 'update_success' => 'ドキュメントを更新しました!', + 'delete_success' => 'ドキュメントを削除しました!', + 'delete_confirm' => 'このドキュメントを削除してもよろしいですか?', + 'linked_references' => 'リンク元', + 'title_label' => 'タイトル', + 'title_placeholder' => 'ドキュメントタイトル(例: Laravel/Livewire/Components)', + 'title_hint' => 'ヒント: タイトルにスラッシュ(/)を含めると自動的にフォルダ構造が作成されます', + 'content_label' => '本文', + 'content_placeholder' => 'Markdownで記述してください...', + 'saving' => '保存中...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => 'クイックスイッチ', + 'placeholder' => 'ドキュメントを検索...', + 'no_results' => 'ドキュメントが見つかりません', + 'navigate' => 'で移動', + 'select' => 'で選択', + 'close' => 'で閉じる', + ], + + // Admin + 'admin' => [ + 'user_management' => 'ユーザー管理', + 'new_user' => '新規ユーザー', + 'edit_user' => 'ユーザー編集', + 'create_user' => 'ユーザー作成', + 'users' => 'ユーザー', + 'name' => '名前', + 'email' => 'メールアドレス', + 'password' => 'パスワード', + 'password_confirmation' => 'パスワード(確認)', + 'password_hint' => '変更しない場合は空欄のままにしてください。', + 'role' => '権限', + 'admin' => '管理者', + 'user' => '一般ユーザー', + 'grant_admin' => '管理者権限を付与する', + 'created_at' => '登録日', + 'actions' => '操作', + 'edit' => '編集', + 'delete' => '削除', + 'no_users' => 'ユーザーが登録されていません。', + 'create_success' => 'ユーザーを作成しました。', + 'update_success' => 'ユーザー情報を更新しました。', + 'delete_success' => 'ユーザーを削除しました。', + 'cannot_delete_self' => '自分自身を削除することはできません。', + 'self_admin_warning' => '自分自身の管理者権限を外すと、管理画面にアクセスできなくなります。', + ], + + // Settings + 'settings' => [ + 'language' => '言語', + 'select_language' => '言語を選択', + 'language_updated' => '言語を変更しました。', + ], + + // Common + 'common' => [ + 'save' => '保存', + 'cancel' => 'キャンセル', + 'delete' => '削除', + 'edit' => '編集', + 'create' => '作成', + 'update' => '更新', + 'back' => '戻る', + 'confirm' => '確認', + 'yes' => 'はい', + 'no' => 'いいえ', + 'loading' => '読み込み中...', + 'error' => 'エラー', + 'success' => '成功', + ], + + // Auth + 'auth' => [ + 'login' => 'ログイン', + 'register' => '登録', + 'email' => 'メールアドレス', + 'password' => 'パスワード', + 'remember_me' => 'ログイン状態を保持', + 'forgot_password' => 'パスワードをお忘れですか?', + 'confirm_password' => 'パスワード(確認)', + 'already_registered' => '既にアカウントをお持ちですか?', + ], +]; + diff --git a/src/lang/ko/messages.php b/src/lang/ko/messages.php new file mode 100644 index 0000000..c345346 --- /dev/null +++ b/src/lang/ko/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => '대시보드', + 'knowledge_base' => '지식 베이스', + 'profile' => '프로필', + 'user_management' => '사용자 관리', + 'logout' => '로그아웃', + 'login' => '로그인', + 'register' => '회원가입', + ], + + // Documents + 'documents' => [ + 'title' => '문서', + 'new_document' => '새 문서', + 'edit_document' => '문서 편집', + 'edit' => '편집', + 'delete' => '삭제', + 'save' => '저장', + 'cancel' => '취소', + 'created_by' => '작성자', + 'updated' => '업데이트', + 'path' => '경로', + 'last_modified' => '마지막 수정', + 'no_documents' => '문서를 찾을 수 없습니다', + 'search_placeholder' => '문서 검색...', + 'create_success' => '문서가 성공적으로 생성되었습니다!', + 'update_success' => '문서가 성공적으로 업데이트되었습니다!', + 'delete_success' => '문서가 성공적으로 삭제되었습니다!', + 'delete_confirm' => '이 문서를 삭제하시겠습니까?', + 'linked_references' => '연결된 참조', + 'title_label' => '제목', + 'title_placeholder' => '문서 제목 (예: Laravel/Livewire/Components)', + 'title_hint' => '팁: 제목에 슬래시(/)를 사용하면 문서를 폴더로 자동 정리할 수 있습니다', + 'content_label' => '내용', + 'content_placeholder' => '여기에 마크다운을 작성하세요...', + 'saving' => '저장 중...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => '빠른 전환', + 'placeholder' => '문서 검색...', + 'no_results' => '문서를 찾을 수 없습니다', + 'navigate' => '탐색', + 'select' => '선택', + 'close' => '닫기', + ], + + // Admin + 'admin' => [ + 'user_management' => '사용자 관리', + 'new_user' => '새 사용자', + 'edit_user' => '사용자 편집', + 'create_user' => '사용자 생성', + 'users' => '사용자', + 'name' => '이름', + 'email' => '이메일', + 'password' => '비밀번호', + 'password_confirmation' => '비밀번호 확인', + 'password_hint' => '현재 비밀번호를 유지하려면 비워두세요.', + 'role' => '역할', + 'admin' => '관리자', + 'user' => '일반 사용자', + 'grant_admin' => '관리자 권한 부여', + 'created_at' => '생성일', + 'actions' => '작업', + 'edit' => '편집', + 'delete' => '삭제', + 'no_users' => '사용자를 찾을 수 없습니다.', + 'create_success' => '사용자가 성공적으로 생성되었습니다.', + 'update_success' => '사용자가 성공적으로 업데이트되었습니다.', + 'delete_success' => '사용자가 성공적으로 삭제되었습니다.', + 'cannot_delete_self' => '자신을 삭제할 수 없습니다.', + 'self_admin_warning' => '자신의 관리자 권한을 제거하면 관리 패널에 액세스할 수 없게 됩니다.', + ], + + // Settings + 'settings' => [ + 'language' => '언어', + 'select_language' => '언어 선택', + 'language_updated' => '언어가 성공적으로 업데이트되었습니다.', + ], + + // Common + 'common' => [ + 'save' => '저장', + 'cancel' => '취소', + 'delete' => '삭제', + 'edit' => '편집', + 'create' => '생성', + 'update' => '업데이트', + 'back' => '뒤로', + 'confirm' => '확인', + 'yes' => '예', + 'no' => '아니오', + 'loading' => '로딩 중...', + 'error' => '오류', + 'success' => '성공', + ], + + // Auth + 'auth' => [ + 'login' => '로그인', + 'register' => '회원가입', + 'email' => '이메일', + 'password' => '비밀번호', + 'remember_me' => '로그인 상태 유지', + 'forgot_password' => '비밀번호를 잊으셨나요?', + 'confirm_password' => '비밀번호 확인', + 'already_registered' => '이미 계정이 있으신가요?', + ], +]; + diff --git a/src/lang/zh-CN/messages.php b/src/lang/zh-CN/messages.php new file mode 100644 index 0000000..dbcc7a5 --- /dev/null +++ b/src/lang/zh-CN/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => '仪表盘', + 'knowledge_base' => '知识库', + 'profile' => '个人资料', + 'user_management' => '用户管理', + 'logout' => '退出登录', + 'login' => '登录', + 'register' => '注册', + ], + + // Documents + 'documents' => [ + 'title' => '文档', + 'new_document' => '新建文档', + 'edit_document' => '编辑文档', + 'edit' => '编辑', + 'delete' => '删除', + 'save' => '保存', + 'cancel' => '取消', + 'created_by' => '创建者', + 'updated' => '更新时间', + 'path' => '路径', + 'last_modified' => '最后修改', + 'no_documents' => '未找到文档', + 'search_placeholder' => '搜索文档...', + 'create_success' => '文档创建成功!', + 'update_success' => '文档更新成功!', + 'delete_success' => '文档删除成功!', + 'delete_confirm' => '确定要删除此文档吗?', + 'linked_references' => '链接引用', + 'title_label' => '标题', + 'title_placeholder' => '文档标题(例如:Laravel/Livewire/Components)', + 'title_hint' => '提示:在标题中使用斜杠(/)可自动将文档组织到文件夹中', + 'content_label' => '内容', + 'content_placeholder' => '在此输入Markdown内容...', + 'saving' => '保存中...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => '快速切换', + 'placeholder' => '搜索文档...', + 'no_results' => '未找到文档', + 'navigate' => '导航', + 'select' => '选择', + 'close' => '关闭', + ], + + // Admin + 'admin' => [ + 'user_management' => '用户管理', + 'new_user' => '新建用户', + 'edit_user' => '编辑用户', + 'create_user' => '创建用户', + 'users' => '用户', + 'name' => '姓名', + 'email' => '邮箱', + 'password' => '密码', + 'password_confirmation' => '确认密码', + 'password_hint' => '留空以保持当前密码。', + 'role' => '角色', + 'admin' => '管理员', + 'user' => '普通用户', + 'grant_admin' => '授予管理员权限', + 'created_at' => '创建日期', + 'actions' => '操作', + 'edit' => '编辑', + 'delete' => '删除', + 'no_users' => '未找到用户。', + 'create_success' => '用户创建成功。', + 'update_success' => '用户更新成功。', + 'delete_success' => '用户删除成功。', + 'cannot_delete_self' => '您不能删除自己。', + 'self_admin_warning' => '移除您自己的管理员权限将使您无法访问管理面板。', + ], + + // Settings + 'settings' => [ + 'language' => '语言', + 'select_language' => '选择语言', + 'language_updated' => '语言更新成功。', + ], + + // Common + 'common' => [ + 'save' => '保存', + 'cancel' => '取消', + 'delete' => '删除', + 'edit' => '编辑', + 'create' => '创建', + 'update' => '更新', + 'back' => '返回', + 'confirm' => '确认', + 'yes' => '是', + 'no' => '否', + 'loading' => '加载中...', + 'error' => '错误', + 'success' => '成功', + ], + + // Auth + 'auth' => [ + 'login' => '登录', + 'register' => '注册', + 'email' => '邮箱', + 'password' => '密码', + 'remember_me' => '记住我', + 'forgot_password' => '忘记密码?', + 'confirm_password' => '确认密码', + 'already_registered' => '已有账号?', + ], +]; + diff --git a/src/lang/zh-TW/messages.php b/src/lang/zh-TW/messages.php new file mode 100644 index 0000000..96b8b04 --- /dev/null +++ b/src/lang/zh-TW/messages.php @@ -0,0 +1,117 @@ + [ + 'dashboard' => '儀表板', + 'knowledge_base' => '知識庫', + 'profile' => '個人資料', + 'user_management' => '使用者管理', + 'logout' => '登出', + 'login' => '登入', + 'register' => '註冊', + ], + + // Documents + 'documents' => [ + 'title' => '文件', + 'new_document' => '新增文件', + 'edit_document' => '編輯文件', + 'edit' => '編輯', + 'delete' => '刪除', + 'save' => '儲存', + 'cancel' => '取消', + 'created_by' => '建立者', + 'updated' => '更新時間', + 'path' => '路徑', + 'last_modified' => '最後修改', + 'no_documents' => '找不到文件', + 'search_placeholder' => '搜尋文件...', + 'create_success' => '文件建立成功!', + 'update_success' => '文件更新成功!', + 'delete_success' => '文件刪除成功!', + 'delete_confirm' => '確定要刪除此文件嗎?', + 'linked_references' => '連結參照', + 'title_label' => '標題', + 'title_placeholder' => '文件標題(例如:Laravel/Livewire/Components)', + 'title_hint' => '提示:在標題中使用斜線(/)可自動將文件組織到資料夾中', + 'content_label' => '內容', + 'content_placeholder' => '在此輸入Markdown內容...', + 'saving' => '儲存中...', + ], + + // Quick Switcher + 'quick_switcher' => [ + 'title' => '快速切換', + 'placeholder' => '搜尋文件...', + 'no_results' => '找不到文件', + 'navigate' => '導覽', + 'select' => '選擇', + 'close' => '關閉', + ], + + // Admin + 'admin' => [ + 'user_management' => '使用者管理', + 'new_user' => '新增使用者', + 'edit_user' => '編輯使用者', + 'create_user' => '建立使用者', + 'users' => '使用者', + 'name' => '姓名', + 'email' => '電子郵件', + 'password' => '密碼', + 'password_confirmation' => '確認密碼', + 'password_hint' => '留空以保持目前密碼。', + 'role' => '角色', + 'admin' => '管理員', + 'user' => '一般使用者', + 'grant_admin' => '授予管理員權限', + 'created_at' => '建立日期', + 'actions' => '操作', + 'edit' => '編輯', + 'delete' => '刪除', + 'no_users' => '找不到使用者。', + 'create_success' => '使用者建立成功。', + 'update_success' => '使用者更新成功。', + 'delete_success' => '使用者刪除成功。', + 'cannot_delete_self' => '您無法刪除自己。', + 'self_admin_warning' => '移除您自己的管理員權限將使您無法存取管理面板。', + ], + + // Settings + 'settings' => [ + 'language' => '語言', + 'select_language' => '選擇語言', + 'language_updated' => '語言更新成功。', + ], + + // Common + 'common' => [ + 'save' => '儲存', + 'cancel' => '取消', + 'delete' => '刪除', + 'edit' => '編輯', + 'create' => '建立', + 'update' => '更新', + 'back' => '返回', + 'confirm' => '確認', + 'yes' => '是', + 'no' => '否', + 'loading' => '載入中...', + 'error' => '錯誤', + 'success' => '成功', + ], + + // Auth + 'auth' => [ + 'login' => '登入', + 'register' => '註冊', + 'email' => '電子郵件', + 'password' => '密碼', + 'remember_me' => '記住我', + 'forgot_password' => '忘記密碼?', + 'confirm_password' => '確認密碼', + 'already_registered' => '已有帳號?', + ], +]; + diff --git a/src/resources/views/admin/users/create.blade.php b/src/resources/views/admin/users/create.blade.php index 694d00c..1a3a19d 100644 --- a/src/resources/views/admin/users/create.blade.php +++ b/src/resources/views/admin/users/create.blade.php @@ -7,7 +7,7 @@

- 新規ユーザー作成 + {{ __('messages.admin.create_user') }}

@@ -21,28 +21,28 @@
- +
- +
- +
- +
@@ -51,16 +51,16 @@
- キャンセル + {{ __('messages.common.cancel') }} - 作成 + {{ __('messages.common.create') }}
@@ -69,4 +69,3 @@ - diff --git a/src/resources/views/admin/users/edit.blade.php b/src/resources/views/admin/users/edit.blade.php index d9d6ed3..2b942fb 100644 --- a/src/resources/views/admin/users/edit.blade.php +++ b/src/resources/views/admin/users/edit.blade.php @@ -7,7 +7,7 @@

- ユーザー編集: {{ $user->name }} + {{ __('messages.admin.edit_user') }}: {{ $user->name }}

@@ -22,29 +22,29 @@
- +
- +
- - + + -

変更しない場合は空欄のままにしてください。

+

{{ __('messages.admin.password_hint') }}

- +
@@ -53,19 +53,19 @@
@if($user->id === auth()->id()) -

※自分自身の管理者権限を外すと、管理画面にアクセスできなくなります。

+

※{{ __('messages.admin.self_admin_warning') }}

@endif
- キャンセル + {{ __('messages.common.cancel') }} - 更新 + {{ __('messages.common.update') }}
@@ -74,4 +74,3 @@ - diff --git a/src/resources/views/admin/users/index.blade.php b/src/resources/views/admin/users/index.blade.php index 5903e62..9dbd1b8 100644 --- a/src/resources/views/admin/users/index.blade.php +++ b/src/resources/views/admin/users/index.blade.php @@ -2,13 +2,13 @@

- ユーザー管理 + {{ __('messages.admin.user_management') }}

- 新規ユーザー + {{ __('messages.admin.new_user') }}
@@ -36,19 +36,19 @@ ID - 名前 + {{ __('messages.admin.name') }} - メールアドレス + {{ __('messages.admin.email') }} - 権限 + {{ __('messages.admin.role') }} - 登録日 + {{ __('messages.admin.created_at') }} - 操作 + {{ __('messages.admin.actions') }} @@ -78,11 +78,11 @@ @if($user->is_admin) - 管理者 + {{ __('messages.admin.admin') }} @else - 一般ユーザー + {{ __('messages.admin.user') }} @endif @@ -90,12 +90,12 @@ {{ $user->created_at->format('Y/m/d H:i') }} - 編集 + {{ __('messages.admin.edit') }} @if($user->id !== auth()->id()) -
+ @csrf @method('DELETE') - +
@endif @@ -103,7 +103,7 @@ @empty - ユーザーが登録されていません。 + {{ __('messages.admin.no_users') }} @endforelse @@ -118,4 +118,3 @@ - diff --git a/src/resources/views/layouts/knowledge-base.blade.php b/src/resources/views/layouts/knowledge-base.blade.php index 49d76d2..75c9fa1 100644 --- a/src/resources/views/layouts/knowledge-base.blade.php +++ b/src/resources/views/layouts/knowledge-base.blade.php @@ -15,7 +15,7 @@