Notification preferences: - Create notification_preferences table (post_published, post_failed, account_disconnected booleans per user) - NotificationPreferenceController with firstOrCreate on first visit - SendNotification job respects email preferences before sending - Settings page with toggle switches, i18n in 3 languages - 8 new tests for preferences (controller + wantsEmailFor + job integration) Post published notification: - PostPublished mail + maizzle template - Notify owner on successful publish via SendNotification job - PostPublished type added to notification enum Header & Layout: - Rename AppSidebarHeader to AppHeader with left/center/right slots - showSidebarTrigger prop to hide sidebar toggle - Calendar: controls in header (left: nav, center: date, right: tabs + new post) - Fixed header with scrollable content (flex h-screen pattern) - fullWidth pages use overflow-y-auto (fixes month view scroll) UI improvements: - Action buttons moved to header-right: posts, hashtags, labels - Settings breadcrumbs: "Settings > Profile" pattern - Calendar: remove duplicate New Post button from day view - Remove size="sm" from Schedule/Publish buttons - Remove bg-background from header (inherits from SidebarInset) - Add Cancel button to labels and hashtags create/edit dialogs - Add common.cancel i18n key - Clean up orphaned Calendar breadcrumbs - Fix SocialAccountsGrid buttons to use shadcn Button ghost All 753 tests passing.
206 lines
8.6 KiB
PHP
206 lines
8.6 KiB
PHP
<?php
|
|
|
|
return [
|
|
'title' => 'Configuración',
|
|
'description' => 'Administra tu perfil y configuración de la cuenta',
|
|
|
|
'nav' => [
|
|
'profile' => 'Perfil',
|
|
'password' => 'Contraseña',
|
|
'workspace' => 'Workspace',
|
|
'members' => 'Miembros',
|
|
'notifications' => 'Notificaciones',
|
|
'billing' => 'Facturación',
|
|
],
|
|
|
|
'notifications' => [
|
|
'title' => 'Preferencias de notificaciones',
|
|
'heading' => 'Notificaciones por correo',
|
|
'description' => 'Elige qué notificaciones por correo deseas recibir',
|
|
'post_published' => 'Post publicado',
|
|
'post_published_description' => 'Recibir un correo cuando tu post se publique correctamente',
|
|
'post_failed' => 'Post fallido',
|
|
'post_failed_description' => 'Recibir un correo cuando tu post falle al publicar',
|
|
'account_disconnected' => 'Cuenta desconectada',
|
|
'account_disconnected_description' => 'Recibir un correo cuando una cuenta social se desconecte',
|
|
'save' => 'Guardar preferencias',
|
|
],
|
|
|
|
'profile' => [
|
|
'title' => 'Configuración del perfil',
|
|
'photo_heading' => 'Foto de perfil',
|
|
'photo_description' => 'Sube una foto de perfil',
|
|
'heading' => 'Información del perfil',
|
|
'description' => 'Actualiza tu nombre y correo electrónico',
|
|
'avatar' => 'Avatar',
|
|
'name' => 'Nombre',
|
|
'name_placeholder' => 'Nombre completo',
|
|
'email' => 'Correo electrónico',
|
|
'email_placeholder' => 'Correo electrónico',
|
|
'email_unverified' => 'Tu correo electrónico no ha sido verificado.',
|
|
'resend_verification' => 'Haz clic aquí para reenviar el correo de verificación.',
|
|
'verification_sent' => 'Se ha enviado un nuevo enlace de verificación a tu correo electrónico.',
|
|
'save' => 'Guardar',
|
|
],
|
|
|
|
'password' => [
|
|
'title' => 'Configuración de contraseña',
|
|
'heading' => 'Actualizar contraseña',
|
|
'description' => 'Asegúrate de que tu cuenta use una contraseña larga y aleatoria para mantenerte seguro',
|
|
'current_password' => 'Contraseña actual',
|
|
'current_password_placeholder' => 'Contraseña actual',
|
|
'new_password' => 'Nueva contraseña',
|
|
'new_password_placeholder' => 'Nueva contraseña',
|
|
'confirm_password' => 'Confirmar contraseña',
|
|
'confirm_password_placeholder' => 'Confirmar contraseña',
|
|
'save' => 'Guardar contraseña',
|
|
],
|
|
|
|
'delete_account' => [
|
|
'heading' => 'Eliminar cuenta',
|
|
'description' => 'Elimina tu cuenta y todos sus recursos',
|
|
'warning' => 'Advertencia',
|
|
'warning_message' => 'Procede con precaución, esta acción no se puede deshacer.',
|
|
'button' => 'Eliminar cuenta',
|
|
'modal_title' => '¿Estás seguro de que deseas eliminar tu cuenta?',
|
|
'modal_description' => 'Una vez eliminada tu cuenta, todos sus recursos y datos también se eliminarán permanentemente. Introduce tu contraseña para confirmar que deseas eliminar permanentemente tu cuenta.',
|
|
'password' => 'Contraseña',
|
|
'password_placeholder' => 'Contraseña',
|
|
'cancel' => 'Cancelar',
|
|
'confirm' => 'Eliminar cuenta',
|
|
],
|
|
|
|
'workspace' => [
|
|
'title' => 'Configuración del workspace',
|
|
'logo_heading' => 'Logo del workspace',
|
|
'logo_description' => 'Sube un logo para tu workspace',
|
|
'heading' => 'Nombre del workspace',
|
|
'description' => 'Actualiza el nombre y zona horaria del workspace',
|
|
'members_heading' => 'Miembros',
|
|
'members_description' => 'Administra miembros e invitaciones del workspace',
|
|
'name' => 'Nombre',
|
|
'name_placeholder' => 'Mi Workspace',
|
|
'timezone' => 'Zona horaria',
|
|
'save' => 'Guardar',
|
|
],
|
|
|
|
'members' => [
|
|
'title' => 'Miembros',
|
|
'heading' => 'Miembros del equipo',
|
|
'description' => 'Administra miembros e invitaciones de este workspace',
|
|
|
|
'cancel' => 'Cancelar',
|
|
'remove' => 'Eliminar',
|
|
'make_admin' => 'Hacer administrador',
|
|
'make_member' => 'Hacer miembro',
|
|
|
|
'invite' => [
|
|
'title' => 'Invitar miembro',
|
|
'description' => 'Envía una invitación por correo para agregar colaboradores',
|
|
'email' => 'Correo electrónico',
|
|
'email_placeholder' => 'colaborador@email.com',
|
|
'role' => 'Rol',
|
|
'role_placeholder' => 'Selecciona un rol',
|
|
'submit' => 'Enviar invitación',
|
|
],
|
|
|
|
'pending' => [
|
|
'title' => 'Invitaciones pendientes',
|
|
'description' => 'Invitaciones en espera de aceptación',
|
|
'empty' => 'No hay invitaciones pendientes',
|
|
],
|
|
|
|
'list' => [
|
|
'title' => 'Miembros',
|
|
'description' => 'Personas con acceso a este workspace',
|
|
'empty' => 'No hay miembros además del propietario',
|
|
],
|
|
|
|
'remove_modal' => [
|
|
'title' => 'Eliminar miembro',
|
|
'description' => '¿Estás seguro de que deseas eliminar a este miembro del workspace? Perderá acceso a todos los recursos del workspace.',
|
|
'action' => 'Eliminar miembro',
|
|
],
|
|
|
|
'cancel_invite_modal' => [
|
|
'title' => 'Cancelar invitación',
|
|
'description' => '¿Estás seguro de que deseas cancelar esta invitación?',
|
|
'action' => 'Cancelar invitación',
|
|
],
|
|
|
|
'roles' => [
|
|
'owner' => 'Propietario',
|
|
'admin' => 'Administrador',
|
|
'member' => 'Miembro',
|
|
],
|
|
|
|
'flash' => [
|
|
'invite_sent' => '¡Invitación enviada correctamente!',
|
|
'invite_deleted' => 'Invitación eliminada.',
|
|
'member_removed' => '¡Miembro eliminado correctamente!',
|
|
'role_updated' => 'Rol del miembro actualizado.',
|
|
'wrong_email' => 'Esta invitación es para otro correo electrónico.',
|
|
'already_member' => 'Ya eres miembro de este workspace.',
|
|
'invite_accepted' => '¡Bienvenido! Ahora eres miembro del workspace.',
|
|
'invite_declined' => 'Invitación rechazada.',
|
|
],
|
|
],
|
|
|
|
'flash' => [
|
|
'profile_updated' => '¡Perfil actualizado correctamente!',
|
|
'language_updated' => '¡Idioma actualizado correctamente!',
|
|
'password_updated' => '¡Contraseña actualizada correctamente!',
|
|
'workspace_updated' => '¡Configuración actualizada correctamente!',
|
|
'photo_updated' => '¡Foto actualizada correctamente!',
|
|
'photo_deleted' => '¡Foto eliminada correctamente!',
|
|
'logo_updated' => '¡Logo subido correctamente!',
|
|
'logo_deleted' => '¡Logo eliminado correctamente!',
|
|
'notifications_updated' => '¡Preferencias de notificaciones actualizadas!',
|
|
],
|
|
|
|
'api_keys' => [
|
|
'title' => 'Claves API',
|
|
'page_title' => 'Claves API',
|
|
'heading' => 'Claves API',
|
|
'description' => 'Administra claves API para acceso programático a tu workspace.',
|
|
'create' => 'Crear clave API',
|
|
'copy' => 'Copiar',
|
|
'new_token_message' => 'Tu nueva clave API ha sido creada. Cópiala ahora — no podrás verla de nuevo.',
|
|
'table' => [
|
|
'name' => 'Nombre',
|
|
'key' => 'Clave',
|
|
'status' => 'Estado',
|
|
'expires' => 'Expira',
|
|
'last_used' => 'Último uso',
|
|
'never' => 'Nunca',
|
|
],
|
|
'actions' => [
|
|
'copy_id' => 'Copiar ID de clave API',
|
|
'copy_id_success' => 'ID de clave API copiado',
|
|
'delete' => 'Eliminar',
|
|
],
|
|
'empty' => [
|
|
'title' => 'No hay claves API',
|
|
'description' => 'Crea una clave API para acceder a tu workspace programáticamente.',
|
|
],
|
|
'delete_modal' => [
|
|
'title' => 'Eliminar clave API',
|
|
'description' => '¿Estás seguro de que deseas eliminar esta clave API? Las aplicaciones que la usen perderán acceso inmediatamente.',
|
|
'action' => 'Eliminar clave API',
|
|
],
|
|
'create_dialog' => [
|
|
'title' => 'Crear clave API',
|
|
'description' => 'Crea una nueva clave API para acceso programático a tu workspace.',
|
|
'name' => 'Nombre',
|
|
'name_placeholder' => 'ej. Clave API de Producción',
|
|
'expires' => 'Fecha de expiración (opcional)',
|
|
'expires_placeholder' => 'Sin expiración',
|
|
'submit' => 'Crear',
|
|
'cancel' => 'Cancelar',
|
|
],
|
|
'flash' => [
|
|
'created' => '¡Clave API creada correctamente!',
|
|
'deleted' => '¡Clave API eliminada correctamente!',
|
|
],
|
|
],
|
|
];
|