From 3e6597472784ad10f9460a97f8e6afc3581eef3e Mon Sep 17 00:00:00 2001 From: Ivan Date: Sun, 1 Mar 2026 21:22:55 +0000 Subject: [PATCH] feat: translate bookings page and components to English Co-Authored-By: Claude Opus 4.6 --- apps/web/app/(admin)/bookings/page.tsx | 4 +- .../components/bookings/booking-calendar.tsx | 22 +++--- .../components/bookings/booking-dialog.tsx | 78 +++++++++---------- 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/apps/web/app/(admin)/bookings/page.tsx b/apps/web/app/(admin)/bookings/page.tsx index 3dd386c..f574eb3 100644 --- a/apps/web/app/(admin)/bookings/page.tsx +++ b/apps/web/app/(admin)/bookings/page.tsx @@ -29,9 +29,9 @@ export default function BookingsPage() { return (
-

Reservas

+

Bookings

- Gestiona las reservas de canchas. Selecciona un horario para crear o ver una reserva. + Manage court bookings. Select a time slot to create or view a booking.

diff --git a/apps/web/components/bookings/booking-calendar.tsx b/apps/web/components/bookings/booking-calendar.tsx index 27d8679..1a2f4a9 100644 --- a/apps/web/components/bookings/booking-calendar.tsx +++ b/apps/web/components/bookings/booking-calendar.tsx @@ -94,13 +94,13 @@ export function BookingCalendar({ siteId, onSlotClick }: BookingCalendarProps) { const url = siteId ? `/api/courts?siteId=${siteId}` : "/api/courts"; const response = await fetch(url); if (!response.ok) { - throw new Error("Error al cargar las canchas"); + throw new Error("Error loading courts"); } const data = await response.json(); setCourts(data); return data as Court[]; } catch (err) { - setError(err instanceof Error ? err.message : "Error desconocido"); + setError(err instanceof Error ? err.message : "Unknown error"); return []; } }, [siteId]); @@ -113,7 +113,7 @@ export function BookingCalendar({ siteId, onSlotClick }: BookingCalendarProps) { `/api/courts/${courtId}/availability?date=${dateStr}` ); if (!response.ok) { - throw new Error(`Error al cargar disponibilidad`); + throw new Error(`Error loading availability`); } return (await response.json()) as CourtAvailability; } catch (err) { @@ -224,7 +224,7 @@ export function BookingCalendar({ siteId, onSlotClick }: BookingCalendarProps) { fetchCourts(); }} > - Reintentar + Retry
@@ -238,7 +238,7 @@ export function BookingCalendar({ siteId, onSlotClick }: BookingCalendarProps) {
- Calendario + Calendar
); @@ -373,7 +373,7 @@ export function BookingCalendar({ siteId, onSlotClick }: BookingCalendarProps) { {timeSlots.length === 0 && (
-

No hay horarios disponibles para este día.

+

No time slots available for this day.

)}
diff --git a/apps/web/components/bookings/booking-dialog.tsx b/apps/web/components/bookings/booking-dialog.tsx index 0baf44a..f8cc66d 100644 --- a/apps/web/components/bookings/booking-dialog.tsx +++ b/apps/web/components/bookings/booking-dialog.tsx @@ -104,12 +104,12 @@ export function BookingDialog({ try { const response = await fetch(`/api/bookings/${slot.bookingId}`); if (!response.ok) { - throw new Error("Error al cargar la reserva"); + throw new Error("Error loading booking"); } const data = await response.json(); setBooking(data); } catch (err) { - setError(err instanceof Error ? err.message : "Error desconocido"); + setError(err instanceof Error ? err.message : "Unknown error"); } finally { setLoadingBookingInfo(false); } @@ -128,7 +128,7 @@ export function BookingDialog({ `/api/clients?search=${encodeURIComponent(search)}&limit=10` ); if (!response.ok) { - throw new Error("Error al buscar clientes"); + throw new Error("Error searching players"); } const data: ClientsResponse = await response.json(); setClients(data.data); @@ -184,13 +184,13 @@ export function BookingDialog({ if (!response.ok) { const data = await response.json(); - throw new Error(data.error || "Error al crear la reserva"); + throw new Error(data.error || "Error creating booking"); } onBookingCreated?.(); onClose(); } catch (err) { - setError(err instanceof Error ? err.message : "Error al crear la reserva"); + setError(err instanceof Error ? err.message : "Error creating booking"); } finally { setCreatingBooking(false); } @@ -210,20 +210,20 @@ export function BookingDialog({ "Content-Type": "application/json", }, body: JSON.stringify({ - cancelReason: "Cancelada por el administrador", + cancelReason: "Cancelled by administrator", }), }); if (!response.ok) { const data = await response.json(); - throw new Error(data.error || "Error al cancelar la reserva"); + throw new Error(data.error || "Error cancelling booking"); } onBookingCancelled?.(); onClose(); } catch (err) { setError( - err instanceof Error ? err.message : "Error al cancelar la reserva" + err instanceof Error ? err.message : "Error cancelling booking" ); } finally { setCancellingBooking(false); @@ -246,7 +246,7 @@ export function BookingDialog({
- {slot.available ? "Nueva Reserva" : "Detalle de Reserva"} + {slot.available ? "New Booking" : "Booking Details"} {slot.available && ( @@ -473,10 +473,10 @@ export function BookingDialog({ {creatingBooking ? (
- Creando... + Creating... ) : ( - "Crear Reserva" + "Create Booking" )} )} @@ -491,10 +491,10 @@ export function BookingDialog({ {cancellingBooking ? (
- Cancelando... + Cancelling... ) : ( - "Cancelar Reserva" + "Cancel Booking" )} )}