Skip to content
Merged
164 changes: 163 additions & 1 deletion i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -316,5 +316,167 @@
"errorServer": "Something went wrong. Try again in a moment.",
"errorNetwork": "No connection. Try again.",
"footer": "Cancel anytime."
},
"hackaton": {
"pageTitle": "#1 NaN Hackathon",
"label": "// hackathon",
"title": "#1 NaN Hackathon",
"subtitle": "7 days to build with the cluster's open source models. Teams of 4, balanced. Prize: 1 month of NaN free.",
"dates": "June 7–13 · build week · Sunday 14th: Demo Day",
"backToLanding": "← Back",
"rules": "Allowed models: Qwen 3.6 or Gemma 4. The project must be open source. Free theme.",
"loginCta": "Sign in to NaN to register",
"login": {
"prompt": "Sign in with your NaN account",
"description": "Enter your NaN account email and we'll send you a link to sign in. It's the same access as the platform.",
"emailLabel": "Email",
"emailPlaceholder": "you@email.com",
"submit": "Send link",
"submitting": "Sending…",
"success": "If that email belongs to a NaN member, we've sent you a sign-in link. Check your inbox (and spam folder), then come back here.",
"errorEmail": "Enter a valid email.",
"errorRate": "Too many attempts. Wait a moment and try again.",
"errorServer": "Couldn't send the link. Try again.",
"errorNetwork": "Network error. Try again."
},
"full": "All 40 seats are full. We'll add you to the reserve list (pool).",
"phase": {
"notOpenTitle": "Registration not open yet",
"notOpen": "Registration for this hackathon isn't open yet. Check back soon to sign up.",
"closedTitle": "Registration closed",
"closed": "The registration window has closed. We hope to see you at the next NaN hackathon!",
"inProgressTitle": "The hackathon is underway",
"inProgress": "Registration is closed, but you're already in. Check your status and your team.",
"votingTitle": "Voting is open",
"voting": "Submissions are live. Head to the gallery, browse the projects and vote for your favorite.",
"votingCta": "View projects & vote",
"resultsTitle": "Results published",
"results": "The hackathon has ended. Check out the final leaderboard.",
"resultsCta": "View leaderboard"
},
"alreadyRegistered": {
"title": "You're already registered",
"confirmed": "Your seat is confirmed. We'll reach out on Discord with the next steps.",
"reserve": "You're in the reserve pool. If a seat frees up you'll get in by registration order; we'll let you know on Discord.",
"cta": "View my status and team"
},
"capacity": {
"seatsTaken": "{n} of {cap} seats taken",
"seatsRemaining": "{n} seats left",
"lastSeats": "Last {n} seats!",
"poolTitle": "Main seats full",
"poolNote": "All {cap} main seats are full. If you register now you'll join the reserve pool ({taken} of {res} taken).",
"poolExplain": "The pool is the waitlist: if an active seat drops out, whoever is in the pool gets in by registration order.",
"poolBarLabel": "Reserve pool",
"closedTitle": "Registration full",
"closedNote": "All {cap} seats and the {res} reserve pool spots are taken. Keep an eye on Discord in case one frees up."
},
"form": {
"name": "Name",
"discord": "Discord username",
"discordHelp": "Required — to coordinate your team",
"specialty": "Specialty",
"level": "Level",
"specFrontend": "Frontend",
"specBackend": "Backend",
"specMlAiData": "ML / AI / Data",
"specDesignProduct": "Design / Product",
"specOther": "Other",
"levelJunior": "Junior",
"levelMid": "Mid",
"levelSenior": "Senior",
"submit": "Register",
"submitting": "Sending…",
"success": "Registration recorded! Check your status in My team.",
"successReserve": "You're on the reserve list. If a seat frees up, you'll get in by order.",
"errorDiscord": "The Discord username is required.",
"errorFull": "Registration full (40 + 10 reserves).",
"errorEligible": "Your NaN account is not eligible to register.",
"errorServer": "Something went wrong. Try again.",
"errorNetwork": "Network error. Try again.",
"errorRate": "Too many attempts. Wait a moment and try again."
},
"me": {
"title": "My team",
"noTeam": "Teams haven't been announced yet.",
"teammates": "Teammates",
"rules": "Rules: Qwen 3.6 / Gemma 4 + open source.",
"submissionCta": "Edit submission",
"reassignCta": "Request reassignment",
"reassignPending": "Request registered. Another teammate must confirm it ({have}/{need}).",
"reassignFilled": "Reassignment complete: a member from the reserve pool has joined.",
"reassignNoPool": "Reassignment complete: the pool was empty, your team continues with 3 members.",
"reassignAlready": "You've already requested this reassignment. Another teammate still needs to confirm it.",
"reassignSelectAbsent": "Select absent member",
"reassignErrorSubmit": "Couldn't register.",
"reassignSending": "Sending…",
"reassignInfo": {
"label": "Reassign absent member",
"toggleAria": "More information about reassignment",
"title": "What is it and what happens when you request a reassignment?",
"points": [
"It replaces a teammate who won't take part (didn't show up or has gone silent).",
"It takes TWO team members: the request isn't executed until a second teammate confirms the same reassignment.",
"Once that agreement is reached, that person is marked absent and removed from your team and from the hackathon. The action is immediate and irreversible.",
"The system automatically picks the first candidate from the reserve pool (by registration order) and adds them to your team in their place.",
"If the pool is empty, your team continues with 3 members (the allowed minimum) and the organizers are notified.",
"It's only available during the building phase."
]
}
},
"submission": {
"title": "Team submission",
"fTitle": "Title",
"description": "Description (optional)",
"publicUrl": "Public URL",
"spaceUrl": "Space URL (optional · +1 point)",
"repoUrl": "Repo (open source)",
"imageUrl": "Cover image link",
"videoUrl": "Video link (YouTube)",
"attachMedia": "Attach media",
"videoInfo": "Upload a short video to YouTube presenting your project and set it as “Unlisted”: it won’t show up in search or on your channel, but anyone with the link can watch it. Paste that link here.",
"imageHint": "It will be shown as the project cover during voting.",
"submit": "Save submission",
"update": "Update submission",
"submitting": "Saving…",
"saved": "Submission saved. Checks executed.",
"alreadyTitle": "Submission sent ✓",
"alreadyNote": "Your team already has a submission. You can edit it and save again while the deadline is open.",
"error": "Couldn't save the submission.",
"errorRequired": "Missing required fields: title, public URL and repo.",
"errorClosed": "The submission window is closed: it can no longer be saved.",
"closedTitle": "Submission window closed",
"closedNote": "The building phase has ended. The submission can no longer be created or edited; it's now being verified before voting.",
"notSubmitted": "Your team didn't submit anything before the deadline closed.",
"checks": "Automatic checks",
"urlLive": "Public URL responds",
"inNanSpace": "Deployed in a NaN Space",
"repoPublic": "Public repo",
"notPrizeEligible": "No valid public repo: not eligible for prize."
},
"projects": {
"title": "Projects",
"empty": "No projects published yet.",
"vote": "Vote",
"voted": "Voted ✓",
"voting": "Sending…",
"loginToVote": "Sign in to vote",
"selfVote": "You can't vote for your own team.",
"alreadyVoted": "You've already voted.",
"notEligible": "Your NaN account is not eligible to vote.",
"yourVote": "Your vote ✓",
"changeVote": "Vote for this one",
"presentationVideo": "Presentation video"
},
"leaderboard": {
"title": "Leaderboard",
"hidden": "The leaderboard will be published when voting closes.",
"rank": "#",
"team": "Team",
"votes": "Votes",
"auto": "Auto",
"total": "Total",
"winner": "🏆 Winner"
}
}
}
}
164 changes: 163 additions & 1 deletion i18n/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -316,5 +316,167 @@
"errorServer": "Algo falló. Vuelve a intentarlo en un momento.",
"errorNetwork": "Sin conexión. Vuelve a intentarlo.",
"footer": "Cancela cuando quieras."
},
"hackaton": {
"pageTitle": "#1 Hackatón NaN",
"label": "// hackatón",
"title": "#1 Hackatón NaN",
"subtitle": "7 días para construir con modelos open source del cluster. Equipos de 4, balanceados. Premio: 1 mes gratis de NaN.",
"dates": "7–13 de junio · construcción · Domingo 14: Demo Day",
"backToLanding": "← Volver",
"rules": "Modelos permitidos: Qwen 3.6 o Gemma 4. El proyecto debe ser open source. Tema libre.",
"loginCta": "Inicia sesión en NaN para inscribirte",
"login": {
"prompt": "Entra con tu cuenta NaN",
"description": "Introduce el email de tu cuenta NaN y te enviaremos un enlace para iniciar sesión. Es el mismo acceso que la plataforma.",
"emailLabel": "Email",
"emailPlaceholder": "tu@email.com",
"submit": "Enviar enlace",
"submitting": "Enviando…",
"success": "Si ese email pertenece a un miembro de NaN, te hemos enviado un enlace para entrar. Revisa tu correo (y la carpeta de spam) y luego vuelve aquí.",
"errorEmail": "Introduce un email válido.",
"errorRate": "Demasiados intentos. Espera un momento e inténtalo de nuevo.",
"errorServer": "No se pudo enviar el enlace. Inténtalo de nuevo.",
"errorNetwork": "Error de red. Inténtalo de nuevo."
},
"full": "Las 40 plazas están llenas. Te apuntamos a la lista de reservas (pool).",
"phase": {
"notOpenTitle": "Inscripciones aún no abiertas",
"notOpen": "Las inscripciones para este hackatón todavía no están abiertas. Vuelve pronto para apuntarte.",
"closedTitle": "Inscripciones cerradas",
"closed": "El plazo de inscripción ya se ha cerrado. ¡Te esperamos en el próximo hackatón de NaN!",
"inProgressTitle": "El hackatón está en marcha",
"inProgress": "Las inscripciones están cerradas, pero tú ya estás dentro. Consulta tu estado y tu equipo.",
"votingTitle": "La votación está abierta",
"voting": "Las entregas ya están publicadas. Entra a la galería, revisa los proyectos y vota tu favorito.",
"votingCta": "Ver proyectos y votar",
"resultsTitle": "Resultados publicados",
"results": "El hackatón ha terminado. Consulta la clasificación final.",
"resultsCta": "Ver clasificación"
},
"alreadyRegistered": {
"title": "Ya estás inscrito",
"confirmed": "Tu plaza está confirmada. Te avisaremos por Discord con los siguientes pasos.",
"reserve": "Estás en la pool de reservas. Si se libera una plaza entrarás por orden de inscripción; te avisaremos por Discord.",
"cta": "Ver mi estado y equipo"
},
"capacity": {
"seatsTaken": "{n} de {cap} plazas ocupadas",
"seatsRemaining": "Quedan {n} plazas",
"lastSeats": "¡Últimas {n} plazas!",
"poolTitle": "Plazas principales completas",
"poolNote": "Las {cap} plazas principales están llenas. Si te inscribes ahora entrarás en la pool de reservas ({taken} de {res} ocupadas).",
"poolExplain": "La pool es la lista de espera: si una plaza activa se da de baja, quien está en la pool entra por orden de inscripción.",
"poolBarLabel": "Pool de reservas",
"closedTitle": "Inscripciones completas",
"closedNote": "Las {cap} plazas y las {res} de la pool de reservas están ocupadas. Atento al Discord por si se libera alguna."
},
"form": {
"name": "Nombre",
"discord": "Usuario de Discord",
"discordHelp": "Obligatorio — para coordinar tu equipo",
"specialty": "Especialidad",
"level": "Nivel",
"specFrontend": "Frontend",
"specBackend": "Backend",
"specMlAiData": "ML / AI / Data",
"specDesignProduct": "Diseño / Producto",
"specOther": "Otro",
"levelJunior": "Junior",
"levelMid": "Mid",
"levelSenior": "Senior",
"submit": "Inscribirme",
"submitting": "Enviando…",
"success": "¡Inscripción registrada! Revisa tu estado en Mi equipo.",
"successReserve": "Estás en la lista de reservas. Si se libera plaza, entrarás por orden.",
"errorDiscord": "El usuario de Discord es obligatorio.",
"errorFull": "Inscripción completa (40 + 10 reservas).",
"errorEligible": "Tu cuenta NaN no es elegible para inscribirse.",
"errorServer": "Algo falló. Inténtalo de nuevo.",
"errorNetwork": "Error de red. Inténtalo de nuevo.",
"errorRate": "Demasiados intentos. Espera un momento e inténtalo de nuevo."
},
"me": {
"title": "Mi equipo",
"noTeam": "Aún no se han anunciado los equipos.",
"teammates": "Compañeros",
"rules": "Reglas: Qwen 3.6 / Gemma 4 + open source.",
"submissionCta": "Editar submission",
"reassignCta": "Convocar reasignación",
"reassignPending": "Convocatoria registrada. Hace falta que otro compañero la confirme ({have}/{need}).",
"reassignFilled": "Reasignación completada: se ha incorporado un miembro de la pool de reservas.",
"reassignNoPool": "Reasignación completada: no quedaba nadie en la pool, el equipo continúa con 3 miembros.",
"reassignAlready": "Ya has convocado esta reasignación. Falta que otro compañero la confirme.",
"reassignSelectAbsent": "Selecciona ausente",
"reassignErrorSubmit": "No se pudo registrar.",
"reassignSending": "Enviando…",
"reassignInfo": {
"label": "Reasignar miembro ausente",
"toggleAria": "Más información sobre la reasignación",
"title": "¿Qué es y qué ocurre al convocar una reasignación?",
"points": [
"Sirve para sustituir a un compañero de tu equipo que no va a participar (no apareció o ha desaparecido).",
"Hacen falta DOS miembros del equipo: la convocatoria no se ejecuta hasta que un segundo compañero confirma la misma reasignación.",
"Cuando se alcanza ese acuerdo, esa persona se marca como ausente y sale de tu equipo y del hackatón. La acción es inmediata e irreversible.",
"El sistema busca automáticamente al primer candidato de la pool de reservas (por orden de inscripción) y lo añade a tu equipo en su lugar.",
"Si no queda nadie en la pool, tu equipo continúa con 3 miembros (el mínimo permitido) y se avisa a la organización.",
"Solo está disponible durante la fase de construcción."
]
}
},
"submission": {
"title": "Submission del equipo",
"fTitle": "Título",
"description": "Descripción (opcional)",
"publicUrl": "URL pública",
"spaceUrl": "URL del Space (opcional · +1 punto)",
"repoUrl": "Repo (open source)",
"imageUrl": "Enlace de imagen de portada",
"videoUrl": "Enlace de vídeo (YouTube)",
"attachMedia": "Adjuntar media",
"videoInfo": "Sube a YouTube un vídeo corto presentando tu proyecto y márcalo como «Oculto» (no listado): no aparecerá en búsquedas ni en tu canal, pero cualquiera con el enlace podrá verlo. Pega aquí ese enlace.",
"imageHint": "Se mostrará como portada del proyecto durante la votación.",
"submit": "Guardar submission",
"update": "Actualizar submission",
"submitting": "Guardando…",
"saved": "Submission guardada. Checks ejecutados.",
"alreadyTitle": "Submission enviada ✓",
"alreadyNote": "Tu equipo ya tiene submission enviada. Puedes editarla y volver a guardar mientras el plazo siga abierto.",
"error": "No se pudo guardar la submission.",
"errorRequired": "Faltan campos obligatorios: título, URL pública y repo.",
"errorClosed": "El plazo de entrega está cerrado: ya no se puede guardar.",
"closedTitle": "Plazo de entrega cerrado",
"closedNote": "La fase de construcción ha terminado. Ya no se puede crear ni editar la submission; ahora se verifica antes de la votación.",
"notSubmitted": "Tu equipo no llegó a enviar ninguna submission antes de cerrarse el plazo.",
"checks": "Checks automáticos",
"urlLive": "URL pública responde",
"inNanSpace": "Desplegada en Space de NaN",
"repoPublic": "Repo público",
"notPrizeEligible": "Sin repo público válido: no elegible a premio."
},
"projects": {
"title": "Proyectos",
"empty": "Aún no hay proyectos publicados.",
"vote": "Votar",
"voted": "Votado ✓",
"voting": "Enviando…",
"loginToVote": "Inicia sesión para votar",
"selfVote": "No puedes votar a tu propio equipo.",
"alreadyVoted": "Ya has votado.",
"notEligible": "Tu cuenta NaN no es elegible para votar.",
"yourVote": "Tu voto ✓",
"changeVote": "Votar por este",
"presentationVideo": "Vídeo presentación"
},
"leaderboard": {
"title": "Leaderboard",
"hidden": "El leaderboard se publicará al cerrar la votación.",
"rank": "#",
"team": "Equipo",
"votes": "Votos",
"auto": "Auto",
"total": "Total",
"winner": "🏆 Ganador"
}
}
}
}
Loading
Loading