CI / check (push) Has been cancelled
1. Performance: 25 pages switched from force-dynamic to revalidate=300 (ISR); 2 pages (community, developers) now fully static (SSG) 2. DB indexes: Added @@index on foreign keys for WebsiteArticles, WebsiteArticleReactions, WebsiteArticleComments, WebsiteHelpCenterTickets, WebsiteShopArticles, RadioSongRequests, StaffActivities 3. SEO: Added robots.ts, sitemap.ts, canonical URLs, Open Graph + Twitter Card metadata on root layout and news articles 4. A11Y: Replaced <details>/<summary> dropdowns with accessible button-based NavDropdown (aria-expanded, aria-haspopup, role=menu). MobileNav now uses translated aria-label, aria-expanded, aria-controls, role=menu 5. Code quality: Added try/catch to updateArticle/deleteArticle; deleteArticle now uses prisma. for atomicity 6. CI/CD: Added GitHub Actions workflow (typecheck + test) 7. i18n: Added openMenu/closeMenu keys to all 6 locales 8. Observability: Health endpoint now checks SMTP reachability when configured 9. Loading states: Added loading.tsx for root, admin, and news sections 10. Word filter cache: Added 60s TTL auto-refresh instead of manual cache bust
651 lines
28 KiB
JSON
651 lines
28 KiB
JSON
{
|
|
"nav": {
|
|
"home": "Inicio",
|
|
"community": "Comunidad",
|
|
"articles": "Artículos",
|
|
"photos": "Fotos",
|
|
"staff": "Equipo",
|
|
"rankings": "Clasificaciones",
|
|
"guilds": "Grupos",
|
|
"leaderboards": "Tablas de clasificación",
|
|
"rareValues": "Valores raros",
|
|
"shop": "Tienda",
|
|
"market": "Mercado",
|
|
"assistance": "Asistencia",
|
|
"helpCenter": "Centro de ayuda",
|
|
"myTickets": "Mis tickets",
|
|
"badges": "Insignias",
|
|
"radio": "Radio",
|
|
"friends": "Amigos",
|
|
"messages": "Mensajes",
|
|
"admin": "Admin",
|
|
"openMenu": "Open menu",
|
|
"closeMenu": "Close menu",
|
|
"drawBadge": "Diseñar insignia"
|
|
},
|
|
"header": {
|
|
"online": "{count} {hotel} en línea",
|
|
"nitroClient": "Cliente Nitro",
|
|
"tagline": "¡Un mundo virtual en línea donde puedes crear tu propio avatar, hacer amigos, chatear, crear salas y mucho más!",
|
|
"login": "Iniciar sesión",
|
|
"or": "O",
|
|
"createAccount": "Crear una cuenta"
|
|
},
|
|
"footer": {
|
|
"copyright": "© {year} - {hotel} es un proyecto educativo sin fines de lucro"
|
|
},
|
|
"common": {
|
|
"language": "Idioma",
|
|
"lightMode": "Modo claro",
|
|
"darkMode": "Modo oscuro"
|
|
},
|
|
"pages": {
|
|
"staff": {
|
|
"title": "Equipo",
|
|
"subtitle": "El equipo detrás del hotel",
|
|
"ranksTitle": "Rangos",
|
|
"ranksSubtitle": "De qué se encarga cada parte del equipo",
|
|
"membersTitle": "Miembros del equipo",
|
|
"membersEmptySubtitle": "Nadie que mostrar ahora mismo",
|
|
"membersSubtitle": "{count, plural, one {# miembro manteniendo todo en marcha} other {# miembros manteniendo todo en marcha}}",
|
|
"emptyState": "No hay miembros del equipo que mostrar.",
|
|
"colUsername": "Usuario",
|
|
"colRank": "Rango",
|
|
"colMotto": "Lema"
|
|
},
|
|
"leaderboard": {
|
|
"title": "Tabla de clasificación",
|
|
"subtitle": "Top 20 jugadores por {currency}",
|
|
"tab_credits": "Créditos",
|
|
"tab_diamonds": "Diamantes",
|
|
"tab_duckets": "Duckets",
|
|
"tab_achievement": "Logros",
|
|
"tab_respects": "Respetos",
|
|
"tab_onlinetime": "Tiempo en línea",
|
|
"emptyState": "Aún no hay clasificaciones que mostrar.",
|
|
"colAvatar": "Avatar",
|
|
"colPlayer": "Jugador"
|
|
},
|
|
"friends": {
|
|
"title": "Amigos",
|
|
"emptySubtitle": "Aún no has añadido amigos",
|
|
"subtitle": "{count, plural, one {Tienes # amigo} other {Tienes # amigos}}",
|
|
"emptyState": "Añade amigos en el hotel y aparecerán aquí.",
|
|
"noMotto": "Sin lema"
|
|
},
|
|
"messages": {
|
|
"title": "Mensajes",
|
|
"subtitle": "Solicitudes de amistad y mensajes fuera de línea esperándote",
|
|
"requestsTitle": "Solicitudes de amistad",
|
|
"requestsEmptySubtitle": "Nadie te ha enviado una solicitud de amistad aún",
|
|
"requestsSubtitle": "{count, plural, one {# solicitud pendiente} other {# solicitudes pendientes}}",
|
|
"requestsEmptyState": "No hay solicitudes de amistad pendientes.",
|
|
"wantsToBeFriend": "quiere ser tu amigo.",
|
|
"accept": "Aceptar",
|
|
"offlineTitle": "Mensajes fuera de línea",
|
|
"offlineEmptySubtitle": "Tu bandeja de entrada está vacía",
|
|
"offlineSubtitle": "{count, plural, one {# mensaje recibido} other {# mensajes recibidos}}",
|
|
"offlineEmptyState": "No tienes mensajes fuera de línea.",
|
|
"unknownUser": "Usuario #{id}"
|
|
},
|
|
"profile": {
|
|
"noMotto": "Sin lema",
|
|
"statRank": "Rango",
|
|
"statCredits": "Créditos",
|
|
"statRegistered": "Registrado",
|
|
"badgesTitle": "Insignias",
|
|
"badgesEmpty": "Aún no hay insignias.",
|
|
"photosTitle": "Fotos",
|
|
"photosEmpty": "Aún no hay fotos.",
|
|
"guestbookTitle": "Libro de visitas",
|
|
"guestbookSubtitle": "Mensajes en el muro de {username}",
|
|
"leaveMessage": "Dejar un mensaje",
|
|
"guestbookPlaceholder": "Escribe algo en el libro de visitas de {username}…",
|
|
"post": "Publicar",
|
|
"loginToPost": "Inicia sesión para dejar un mensaje en el libro de visitas.",
|
|
"guestbookEmpty": "Aún no hay entradas en el libro de visitas.",
|
|
"unknownUser": "Usuario #{id}",
|
|
"statDuckets": "Duckets",
|
|
"statDiamonds": "Diamantes",
|
|
"walletTitle": "Billetera",
|
|
"friendsTitle": "Amigos",
|
|
"friendsSubtitle": "Personas del hotel con las que pasan el tiempo",
|
|
"friendsEmpty": "No hay amigos que mostrar.",
|
|
"roomsTitle": "Salas",
|
|
"roomsSubtitle": "Salas que poseen",
|
|
"roomsEmpty": "No hay salas que mostrar.",
|
|
"roomUntitled": "Sala sin título"
|
|
},
|
|
"rankings": {
|
|
"title": "Clasificaciones",
|
|
"subtitle": "Los 12 mejores jugadores clasificados por créditos",
|
|
"emptyState": "Aún no hay jugadores que clasificar."
|
|
},
|
|
"home": {
|
|
"welcome": "Bienvenido a {hotelName}",
|
|
"welcomeSubtitle": "Tu hotel retro, ahora impulsado por Next.js",
|
|
"welcomeBody": "Pasa el rato, colecciona furni y conoce amigos.",
|
|
"enterHotel": "Entrar al hotel",
|
|
"register": "REGÍSTRATE AHORA",
|
|
"joinNow": "¡Únete a {hotelName} hoy!",
|
|
"recentUsers": "Usuarios recientes",
|
|
"recentPhotos": "Fotos recientes",
|
|
"latestNews": "Últimas noticias",
|
|
"newsTitle": "Últimas noticias",
|
|
"newsSubtitle": "Lo último del hotel",
|
|
"allNews": "Todas las noticias →",
|
|
"noArticles": "Aún no hay artículos.",
|
|
"noPhotos": "Aún no hay fotos.",
|
|
"noUsers": "No hay usuarios en línea"
|
|
},
|
|
"news": {
|
|
"title": "Noticias",
|
|
"subtitle": "Los últimos anuncios, eventos y actualizaciones del hotel",
|
|
"noArticles": "Aún no hay artículos."
|
|
},
|
|
"article": {
|
|
"backToNews": "← Noticias",
|
|
"reactionsTitle": "Reacciones",
|
|
"reactionsSubtitle": "Dinos lo que piensas",
|
|
"reaction": {
|
|
"like": "Me gusta",
|
|
"love": "Me encanta",
|
|
"wow": "Vaya"
|
|
},
|
|
"removeReaction": "Haz clic para eliminar tu reacción",
|
|
"reactWith": "Reaccionar con {reaction}",
|
|
"noReactions": "Aún no hay reacciones.",
|
|
"logIn": "Inicia sesión",
|
|
"toReact": "para reaccionar.",
|
|
"commentsTitle": "Comentarios",
|
|
"commentsSubtitle": "Únete a la conversación",
|
|
"commentsCount": "{count} hasta ahora",
|
|
"noComments": "Aún no hay comentarios. Sé el primero en comentar.",
|
|
"userNumber": "Usuario #{id}",
|
|
"addComment": "Añadir un comentario",
|
|
"commentPlaceholder": "Escribe tu comentario…",
|
|
"postComment": "Publicar comentario",
|
|
"toComment": "para dejar un comentario."
|
|
},
|
|
"photos": {
|
|
"title": "Fotos",
|
|
"subtitle": "Las últimas instantáneas tomadas en el hotel",
|
|
"noPhotos": "Aún no hay fotos.",
|
|
"photoAlt": "Foto del usuario #{id}",
|
|
"byUser": "por el usuario #{id}"
|
|
},
|
|
"badges": {
|
|
"title": "Insignias",
|
|
"subtitle": "Las insignias que puedes ganar y lucir en el hotel",
|
|
"noBadges": "Aún no hay insignias disponibles."
|
|
},
|
|
"community": {
|
|
"title": "Comunidad",
|
|
"subtitle": "Todo lo que sucede en el hotel en un solo lugar",
|
|
"open": "Abrir →",
|
|
"links": {
|
|
"rankings": {
|
|
"title": "Clasificaciones",
|
|
"text": "Ve los jugadores más ricos del hotel, clasificados por créditos."
|
|
},
|
|
"staff": {
|
|
"title": "Equipo",
|
|
"text": "Conoce al equipo que mantiene el hotel en funcionamiento cada día."
|
|
},
|
|
"news": {
|
|
"title": "Noticias",
|
|
"text": "Los últimos anuncios, eventos y actualizaciones."
|
|
},
|
|
"photos": {
|
|
"title": "Fotos",
|
|
"text": "Instantáneas compartidas por la comunidad de todo el hotel."
|
|
},
|
|
"guilds": {
|
|
"title": "Grupos",
|
|
"text": "Explora los grupos que los jugadores han creado y a los que se han unido."
|
|
},
|
|
"leaderboards": {
|
|
"title": "Tablas de clasificación",
|
|
"text": "Quién está en la cima esta temporada en las estadísticas del hotel."
|
|
}
|
|
}
|
|
},
|
|
"guilds": {
|
|
"title": "Grupos",
|
|
"subtitle": "Explora los grupos que los jugadores han creado y a los que se han unido",
|
|
"empty": "Aún no hay grupos.",
|
|
"unnamedGuild": "Grupo sin nombre",
|
|
"noDescription": "Sin descripción"
|
|
},
|
|
"guild": {
|
|
"allGuilds": "← Todos los grupos",
|
|
"unnamedGuild": "Grupo sin nombre",
|
|
"noDescription": "Sin descripción",
|
|
"memberSingular": "Miembro",
|
|
"memberPlural": "Miembros",
|
|
"founded": "Fundado",
|
|
"forumLink": "Foro →",
|
|
"discussion": "Discusión",
|
|
"membersTitle": "Miembros",
|
|
"memberLowerSingular": "miembro",
|
|
"memberLowerPlural": "miembros",
|
|
"noMembers": "No hay miembros.",
|
|
"owner": "Dueño",
|
|
"noMotto": "Sin lema"
|
|
},
|
|
"guildForum": {
|
|
"backToGuild": "← Volver al grupo",
|
|
"unnamedGuild": "Grupo sin nombre",
|
|
"forumTitle": "{guild} — Foro",
|
|
"threadSingular": "hilo",
|
|
"threadPlural": "hilos",
|
|
"newThread": "+ Nuevo hilo",
|
|
"empty": "Aún no hay hilos en este foro.",
|
|
"colSubject": "Asunto",
|
|
"colAuthor": "Autor",
|
|
"colPosts": "Mensajes",
|
|
"colDate": "Fecha",
|
|
"noSubject": "(sin asunto)",
|
|
"pinned": "Fijado",
|
|
"locked": "Bloqueado",
|
|
"userNumber": "Usuario #{id}",
|
|
"unknown": "Desconocido"
|
|
},
|
|
"guildForumNew": {
|
|
"backToForum": "← Volver al foro",
|
|
"unnamedGuild": "Grupo sin nombre",
|
|
"title": "Nuevo hilo",
|
|
"subtitle": "en el foro de {guild}",
|
|
"subjectLabel": "Asunto",
|
|
"subjectPlaceholder": "Asunto del hilo",
|
|
"messageLabel": "Mensaje",
|
|
"messagePlaceholder": "Escribe tu mensaje inicial…",
|
|
"postThread": "Publicar hilo",
|
|
"cancel": "Cancelar"
|
|
},
|
|
"shop": {
|
|
"title": "Tienda",
|
|
"subtitle": "Recarga tu cuenta y obtén paquetes exclusivos, moneda e insignias.",
|
|
"browsingCategory": "Explorando los paquetes de {category}.",
|
|
"all": "Todos",
|
|
"allPackages": "Todos los paquetes",
|
|
"packagesAvailable": "{count, plural, one {# paquete disponible} other {# paquetes disponibles}}",
|
|
"empty": "No hay paquetes disponibles ahora mismo.",
|
|
"buy": "Comprar"
|
|
},
|
|
"topup": {
|
|
"title": "Recargar con PayPal",
|
|
"subtitle": "Paga de forma segura con PayPal y tus créditos se añaden en cuanto se procesa el pago.",
|
|
"cancelled": "El pago fue cancelado — no se realizó ningún cobro.",
|
|
"chooseAmount": "Elige un monto",
|
|
"notConfiguredPre": "PayPal aún no está configurado. Un administrador debe configurar",
|
|
"notConfiguredAnd": "y",
|
|
"notConfiguredOptional": "(y opcionalmente",
|
|
"notConfiguredPost": "para sandbox vs. producción).",
|
|
"balanceTitle": "Tu saldo",
|
|
"signedInAs": "Conectado como {username}",
|
|
"credits": "Créditos",
|
|
"creditsPerUnit": "Créditos por 1.00 {currency}",
|
|
"rateLine": "Recibes <strong>{amount}</strong> créditos por 1.00 {currency}. Los créditos aparecen en el juego la próxima vez que inicies sesión."
|
|
},
|
|
"marketplace": {
|
|
"title": "Mercado",
|
|
"subtitle": "Explora muebles y rarezas listados por jugadores. Los listados se colocan en el juego y se actualizan en vivo — entra al hotel para hacer una oferta.",
|
|
"activeOffers": "Ofertas activas",
|
|
"sellers": "Vendedores",
|
|
"totalValue": "Valor total",
|
|
"activeListings": "Listados activos",
|
|
"mostRecentFirst": "Más recientes primero",
|
|
"empty": "No hay ofertas activas en el mercado ahora mismo. Vuelve más tarde.",
|
|
"colOffer": "Oferta",
|
|
"colItem": "Artículo",
|
|
"colSeller": "Vendedor",
|
|
"colPrice": "Precio",
|
|
"colListed": "Publicado",
|
|
"itemLabel": "Artículo #{id}",
|
|
"userLabel": "Usuario #{id}",
|
|
"justNow": "ahora mismo",
|
|
"minutesAgo": "hace {count}m",
|
|
"hoursAgo": "hace {count}h",
|
|
"daysAgo": "hace {count}d"
|
|
},
|
|
"rares": {
|
|
"title": "Valores raros",
|
|
"subtitle": "Obtén una visión general de todas las rarezas del hotel, agrupadas por categoría.",
|
|
"empty": "Actualmente no tenemos rarezas listadas aquí.",
|
|
"rareCount": "{count, plural, one {# rareza} other {# rarezas}}",
|
|
"viewRares": "Ver rarezas →"
|
|
},
|
|
"rareCategory": {
|
|
"rareCount": "{count, plural, one {# rareza en esta categoría} other {# rarezas en esta categoría}}",
|
|
"allRares": "← Todas las rarezas",
|
|
"empty": "Aún no hay rarezas listadas en esta categoría.",
|
|
"colRare": "Rareza",
|
|
"colCredits": "Créditos",
|
|
"colCurrency": "Moneda",
|
|
"creditsValue": "{value} créditos",
|
|
"duckets": "Duckets",
|
|
"diamonds": "Diamantes",
|
|
"credits": "Créditos"
|
|
},
|
|
"redeem": {
|
|
"title": "Canjear un vale",
|
|
"subtitle": "¿Tienes un código de vale? Introdúcelo abajo para añadir la recompensa a tu cuenta.",
|
|
"enterCode": "Ingresa tu código",
|
|
"oncePerAccount": "Cada vale solo puede canjearse una vez por cuenta.",
|
|
"balanceTitle": "Tu saldo",
|
|
"signedInAs": "Conectado como {username}",
|
|
"credits": "Créditos",
|
|
"instantCredit": "Las recompensas canjeadas se acreditan al instante y aparecen en el juego la próxima vez que inicies sesión."
|
|
},
|
|
"help": {
|
|
"title": "Centro de ayuda",
|
|
"subtitle": "Encuentra guías, temas de soporte y las reglas del hotel — todo lo que necesitas para obtener ayuda.",
|
|
"myTickets": "Mis tickets →",
|
|
"topicsTitle": "Temas de soporte",
|
|
"topicsSubtitle": "Explora guías y respuestas a preguntas frecuentes",
|
|
"topicsEmpty": "Aún no hay temas de ayuda.",
|
|
"rulesTitle": "Reglas del hotel",
|
|
"rulesSubtitle": "Por favor, léelas antes de pasar el rato en el hotel",
|
|
"rulesEmpty": "Aún no hay reglas publicadas.",
|
|
"categoryEmpty": "No hay reglas en esta categoría."
|
|
},
|
|
"helpCategory": {
|
|
"back": "← Centro de ayuda",
|
|
"topicSubtitle": "Tema del centro de ayuda",
|
|
"moreTitle": "Más temas de ayuda",
|
|
"moreSubtitle": "Ir a otro tema de soporte"
|
|
},
|
|
"helpTickets": {
|
|
"title": "Tickets de ayuda",
|
|
"subtitle": "Envía un ticket al equipo y sigue tus solicitudes abiertas.",
|
|
"statTotal": "Total de tickets",
|
|
"statOpen": "Abiertos",
|
|
"statClosed": "Cerrados",
|
|
"newTitle": "Nuevo ticket",
|
|
"newSubtitle": "Describe tu problema y el equipo hará seguimiento",
|
|
"subjectPlaceholder": "Asunto",
|
|
"contentPlaceholder": "Describe tu problema…",
|
|
"submit": "Enviar ticket",
|
|
"listTitle": "Tus tickets",
|
|
"listSubtitle": "Todas las solicitudes que has enviado al equipo",
|
|
"listEmpty": "Aún no tienes tickets.",
|
|
"colId": "ID",
|
|
"colSubject": "Asunto",
|
|
"colStatus": "Estado",
|
|
"colCreated": "Creado",
|
|
"statusOpen": "Abierto",
|
|
"statusClosed": "Cerrado"
|
|
},
|
|
"applyStaff": {
|
|
"title": "Solicitar unirte al equipo de {hotel}",
|
|
"subtitle": "Abrimos solicitudes de personal de vez en cuando. Si encuentras un puesto en el que crees que encajarías perfectamente, no dudes en solicitarlo.",
|
|
"noPositionsTitle": "No hay puestos abiertos",
|
|
"noPositionsBody": "Actualmente no hay puestos abiertos. Vuelve más tarde para comprobar si tenemos alguna vacante. Gracias por tu interés.",
|
|
"noDeadline": "Sin fecha límite",
|
|
"deadline": "Fecha límite de solicitud: {date}",
|
|
"alreadyApplied": "Ya has solicitado {rank}",
|
|
"aboutYou": "Sobre ti",
|
|
"aboutPlaceholder": "Cuéntanos por qué serías un gran {rank}…",
|
|
"applyFor": "Solicitar {rank}"
|
|
},
|
|
"applyTeam": {
|
|
"title": "Solicitar unirte al equipo de {hotel}",
|
|
"subtitle": "Abrimos solicitudes de equipo periódicamente. ¡Si ves un equipo al que encajas, no dudes en solicitarlo!",
|
|
"noPositionsTitle": "No hay puestos de equipo abiertos",
|
|
"noPositionsBody": "Actualmente no hay puestos de equipo abiertos. Vuelve más tarde para comprobar si hay nuevas vacantes. ¡Gracias!",
|
|
"pending": "Tu solicitud está pendiente",
|
|
"aboutYou": "Sobre ti",
|
|
"aboutPlaceholder": "Cuéntanos por qué serías ideal para {rank}…",
|
|
"applyFor": "Solicitar {rank}"
|
|
},
|
|
"radio": {
|
|
"title": "Radio",
|
|
"subtitle": "Sintoniza la radio del hotel — sesiones de DJ en vivo, solicitudes y saludos.",
|
|
"nowPlaying": "Reproduciendo ahora",
|
|
"nothingPlaying": "No se está reproduciendo nada ahora mismo.",
|
|
"onAir": "Al aire: {dj}",
|
|
"noDj": "No hay DJ al aire.",
|
|
"audioUnsupported": "Tu navegador no soporta el elemento de audio.",
|
|
"streamOffline": "La transmisión está actualmente fuera de línea.",
|
|
"exploreTitle": "Explora la radio",
|
|
"exploreSubtitle": "Horario, saludos, solicitudes y más",
|
|
"linkSchedule": "Horario",
|
|
"linkScheduleText": "Nuestra programación semanal de DJs y programas.",
|
|
"linkShouts": "Saludos",
|
|
"linkShoutsText": "Saludos y solicitudes de la comunidad.",
|
|
"linkRequests": "Solicitudes",
|
|
"linkRequestsText": "Pídele al DJ que ponga tu canción favorita.",
|
|
"linkApply": "Solicitar ser DJ",
|
|
"linkApplyText": "Únete al equipo y sal al aire.",
|
|
"linkLeaderboard": "Tabla de clasificación",
|
|
"linkLeaderboardText": "Los mejores oyentes clasificados por puntos obtenidos.",
|
|
"todayTitle": "Horario de hoy",
|
|
"todayTitleWithDay": "Horario de hoy · {day}",
|
|
"todaySubtitle": "Lo que hay al aire hoy",
|
|
"fullWeek": "Semana completa →",
|
|
"noShowsToday": "No hay programas programados para hoy.",
|
|
"colTime": "Hora",
|
|
"colShow": "Programa",
|
|
"colDj": "DJ",
|
|
"untitledShow": "Programa sin título",
|
|
"userNumber": "Usuario #{id}"
|
|
},
|
|
"radioSchedule": {
|
|
"title": "Horario de radio",
|
|
"subtitle": "Nuestra programación semanal de DJs y programas",
|
|
"empty": "Aún no hay programas programados.",
|
|
"colDay": "Día",
|
|
"colTime": "Hora",
|
|
"colDj": "DJ",
|
|
"colShow": "Programa",
|
|
"noShows": "Sin programas"
|
|
},
|
|
"radioShouts": {
|
|
"title": "Saludos de radio",
|
|
"subtitle": "Saludos y solicitudes de la comunidad",
|
|
"postTitle": "Publicar un saludo",
|
|
"postSubtitle": "Envía un mensaje al DJ al aire",
|
|
"messageLabel": "Tu mensaje",
|
|
"messagePlaceholder": "Envía un saludo al DJ…",
|
|
"shoutButton": "Saludar",
|
|
"loginToPost": "Inicia sesión para publicar un saludo.",
|
|
"latestTitle": "Últimos saludos",
|
|
"latestSubtitle": "Los mensajes más recientes de los oyentes",
|
|
"empty": "Aún no hay saludos. ¡Sé el primero!"
|
|
},
|
|
"radioContests": {
|
|
"title": "Concursos de radio",
|
|
"subtitle": "Sintoniza y participa en nuestros últimos concursos al aire",
|
|
"empty": "Aún no hay concursos.",
|
|
"contestLabel": "Concurso #{id}",
|
|
"dateUnknown": "Fecha desconocida"
|
|
},
|
|
"radioGiveaways": {
|
|
"title": "Sorteos de radio",
|
|
"subtitle": "Escucha para tener la oportunidad de ganar en nuestros sorteos de radio",
|
|
"empty": "Aún no hay sorteos.",
|
|
"giveawayLabel": "Sorteo #{id}",
|
|
"dateUnknown": "Fecha desconocida"
|
|
},
|
|
"radioLeaderboard": {
|
|
"title": "Tabla de clasificación de oyentes",
|
|
"subtitle": "Top 50 oyentes por puntos obtenidos sintonizando la radio",
|
|
"empty": "Aún no hay puntos de oyente que mostrar.",
|
|
"colRank": "Rango",
|
|
"colAvatar": "Avatar",
|
|
"colListener": "Oyente",
|
|
"colPoints": "Puntos"
|
|
},
|
|
"radioApply": {
|
|
"title": "Solicitar ser DJ de radio",
|
|
"subtitle": "Cuéntanos sobre ti y por qué serías ideal para la radio",
|
|
"latestTitle": "Tu última solicitud",
|
|
"statusLabel": "Estado:",
|
|
"submittedOn": "· enviada el {date}",
|
|
"submitAgain": "Puedes enviarla de nuevo abajo si tus datos han cambiado.",
|
|
"formTitle": "Formulario de solicitud",
|
|
"formSubtitle": "Todos los campos marcados como obligatorios deben completarse",
|
|
"realNameLabel": "Nombre real",
|
|
"realNamePlaceholder": "Tu nombre completo",
|
|
"ageLabel": "Edad",
|
|
"availabilityLabel": "Disponibilidad",
|
|
"availabilityPlaceholder": "¿Qué días y horarios puedes transmitir?",
|
|
"musicStyleLabel": "Estilo musical",
|
|
"musicStylePlaceholder": "ej. House, Pop, Hip-Hop",
|
|
"experienceLabel": "Experiencia",
|
|
"optional": "(opcional)",
|
|
"experiencePlaceholder": "¿Tienes experiencia previa como DJ o presentador?",
|
|
"motivationLabel": "Motivación",
|
|
"motivationPlaceholder": "¿Por qué quieres unirte al equipo de radio?",
|
|
"submitButton": "Enviar solicitud"
|
|
},
|
|
"settings": {
|
|
"accountSettings": "Configuración de la cuenta",
|
|
"accountSettingsSubtitle": "Gestiona tu perfil, seguridad y cuentas conectadas",
|
|
"publicProfile": "Tu perfil público",
|
|
"noMotto": "Sin lema",
|
|
"noEmail": "Sin correo electrónico registrado",
|
|
"changeMotto": "Cambiar lema",
|
|
"changeMottoSubtitle": "Se actualiza al instante en el juego si estás en línea",
|
|
"mottoPlaceholder": "Tu lema",
|
|
"saveMotto": "Guardar lema",
|
|
"securityTitle": "Seguridad",
|
|
"securitySubtitle": "Autenticación de dos factores",
|
|
"securityDescription": "Añade una segunda capa de protección a tu cuenta.",
|
|
"twoFactorLink": "Autenticación de dos factores",
|
|
"connectionsTitle": "Cuentas conectadas",
|
|
"connectionsSubtitle": "Inicia sesión con un solo clic",
|
|
"connectionsDescription": "Vincula Discord o Google a tu cuenta del hotel.",
|
|
"manageConnections": "Gestionar conexiones"
|
|
},
|
|
"settings2fa": {
|
|
"backToSettings": "← Configuración",
|
|
"title": "Autenticación de dos factores",
|
|
"subtitle": "Añade una segunda capa de seguridad con una aplicación de autenticación",
|
|
"nowEnabled": "2FA está ahora activado. 🔒",
|
|
"disabledNotice": "2FA ha sido desactivado.",
|
|
"badCode": "Ese código no era válido — inténtalo de nuevo.",
|
|
"noAppKeyPrefix": "2FA no está disponible hasta que",
|
|
"noAppKeyMiddle": "esté configurada (la misma",
|
|
"noAppKeySuffix": "que en tu instalación de AtomCMS, para que los secretos existentes sigan siendo legibles).",
|
|
"isEnabled": "2FA está activado",
|
|
"onYourAccount": "en tu cuenta.",
|
|
"disable": "Desactivar 2FA",
|
|
"scanOrEnter": "Escanea o ingresa esta clave",
|
|
"scanInstructions": "Añade esto a Google Authenticator / Authy, luego ingresa el código de 6 dígitos para confirmar.",
|
|
"manualKey": "Clave manual:",
|
|
"codePlaceholder": "Código de 6 dígitos",
|
|
"confirm": "Confirmar",
|
|
"enableIntro": "Añade una segunda capa de seguridad con una aplicación de autenticación.",
|
|
"enable": "Activar 2FA"
|
|
},
|
|
"connections": {
|
|
"backToSettings": "← Configuración",
|
|
"title": "Cuentas conectadas",
|
|
"subtitle": "Vincula una cuenta social para iniciar sesión con un clic",
|
|
"matchByEmail": "La vinculamos a tu cuenta del hotel por correo electrónico, así que usa la dirección registrada:",
|
|
"lookupFailed": "No pudimos leer tus cuentas vinculadas ahora mismo. Aún puedes conectar abajo — tu estado se mostrará cuando esté disponible.",
|
|
"statusUnavailable": "No disponible en este hotel.",
|
|
"statusConnected": "Conectado — inicia sesión con esta cuenta.",
|
|
"statusNotConnected": "No conectado.",
|
|
"connected": "Conectado",
|
|
"connectProvider": "Conectar {provider}",
|
|
"unavailable": "No disponible",
|
|
"footerNote": "Conectar te lleva al proveedor para autorizar, y luego de vuelta aquí. Si el correo electrónico de tu cuenta social no coincide con una cuenta del hotel, serás redirigido a la pantalla de inicio de sesión con una nota."
|
|
},
|
|
"login": {
|
|
"title": "Iniciar sesión",
|
|
"subtitle": "Bienvenido de nuevo — inicia sesión para entrar al hotel.",
|
|
"subtitle2fa": "Ingresa el código de 6 dígitos de tu autenticador.",
|
|
"usernamePlaceholder": "Usuario",
|
|
"passwordPlaceholder": "Contraseña",
|
|
"codePlaceholder": "Código 2FA",
|
|
"pleaseWait": "Por favor espera…",
|
|
"verify": "Verificar",
|
|
"signIn": "Iniciar sesión",
|
|
"or": "o",
|
|
"continueWithDiscord": "Continuar con Discord",
|
|
"continueWithGoogle": "Continuar con Google",
|
|
"noAccount": "¿No tienes cuenta?",
|
|
"createOne": "Crea una",
|
|
"forgotPassword": "¿Olvidaste tu contraseña?",
|
|
"errorInvalidCredentials": "Usuario o contraseña inválidos",
|
|
"errorInvalid2fa": "Código 2FA inválido"
|
|
},
|
|
"register": {
|
|
"title": "Crear cuenta",
|
|
"subtitle": "Únete al hotel — solo toma un momento.",
|
|
"username": "Usuario",
|
|
"email": "Correo electrónico",
|
|
"password": "Contraseña",
|
|
"confirmPassword": "Repetir contraseña",
|
|
"usernamePlaceholder": "Usuario",
|
|
"emailPlaceholder": "Correo electrónico",
|
|
"passwordPlaceholder": "Contraseña (mín. 6 caracteres)",
|
|
"confirmPasswordPlaceholder": "Repetir contraseña",
|
|
"selectOutfit": "Selecciona tu atuendo",
|
|
"termsAccept": "Soy mayor de 18 años y acepto los términos y reglas de {hotel}.",
|
|
"createAccount": "Crear cuenta",
|
|
"creatingAccount": "Creando cuenta...",
|
|
"alreadyHaveAccount": "¿Ya tienes una cuenta? ¡Inicia sesión!",
|
|
"register": "Registrarse",
|
|
"termsError": "Debes aceptar los términos y reglas para registrarte.",
|
|
"usernameError": "El usuario es obligatorio.",
|
|
"emailError": "Se requiere un correo electrónico válido.",
|
|
"passwordError": "La contraseña debe tener al menos 6 caracteres.",
|
|
"confirmPasswordError": "Las contraseñas no coinciden.",
|
|
"termsRequired": "Debes aceptar los términos y reglas.",
|
|
"usernameRequired": "El usuario es obligatorio.",
|
|
"emailRequired": "El correo electrónico es obligatorio.",
|
|
"passwordRequired": "La contraseña es obligatoria.",
|
|
"passwordsDontMatch": "Las contraseñas no coinciden."
|
|
},
|
|
"forgot": {
|
|
"title": "Restablecer contraseña",
|
|
"subtitle": "Te enviaremos por correo electrónico un enlace seguro para establecer una nueva contraseña.",
|
|
"sentNotice": "Si ese correo está registrado, se ha enviado un enlace de restablecimiento. Revisa tu bandeja de entrada.",
|
|
"emailPlaceholder": "Tu correo electrónico",
|
|
"sendResetLink": "Enviar enlace de restablecimiento",
|
|
"backToLogin": "Volver al inicio de sesión"
|
|
},
|
|
"reset": {
|
|
"title": "Establecer una nueva contraseña",
|
|
"subtitle": "Elige una contraseña segura que no uses en otros sitios.",
|
|
"passwordPlaceholder": "Nueva contraseña (mín. 6 caracteres)",
|
|
"resetPassword": "Restablecer contraseña",
|
|
"backToLogin": "Volver al inicio de sesión"
|
|
},
|
|
"verify": {
|
|
"verifiedTitle": "Todo está listo",
|
|
"verifiedSubtitle": "Correo electrónico verificado",
|
|
"verifiedBody": "Tu dirección de correo electrónico ha sido verificada. Ya puedes iniciar sesión y jugar.",
|
|
"goToLogin": "Ir al inicio de sesión",
|
|
"alreadyTitle": "Ya verificado",
|
|
"alreadySubtitle": "Nada más que hacer",
|
|
"alreadyBody": "Esta dirección de correo electrónico ya ha sido confirmada.",
|
|
"unavailableTitle": "Inténtalo de nuevo en breve",
|
|
"unavailableSubtitle": "Servidor inaccesible",
|
|
"unavailableBody": "No pudimos contactar al servidor para verificar tu correo. Por favor, intenta el enlace de nuevo en un momento.",
|
|
"invalidTitle": "Verificación de correo electrónico",
|
|
"invalidSubtitle": "Enlace inválido o expirado",
|
|
"invalidBody": "Este enlace de verificación no es válido. Asegúrate de haber abierto el enlace completo de tu correo, o solicita uno nuevo.",
|
|
"backToLogin": "Volver al inicio de sesión"
|
|
},
|
|
"banned": {
|
|
"title": "Has sido baneado",
|
|
"subtitle": "Cuenta suspendida",
|
|
"body": "Tu cuenta ha sido suspendida del hotel.",
|
|
"reasonLabel": "Motivo:",
|
|
"permanent": "Este baneo es permanente.",
|
|
"expires": "Expira el {date}.",
|
|
"contactStaff": "Si crees que esto es un error, contacta al equipo."
|
|
},
|
|
"maintenance": {
|
|
"title": "{hotel} está en mantenimiento",
|
|
"subtitle": "Volveremos en breve",
|
|
"staffCanLogIn": "El equipo aún puede iniciar sesión."
|
|
}
|
|
}
|
|
}
|