From 37907a1858746fadde99e857d9135e996356f734 Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:01:18 +0100 Subject: [PATCH 01/10] Fix: New translations en.json from Crowdin --- frontend/messages/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index ea650474..64d5ec54 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -215,7 +215,7 @@ "ends": "· termine {date}", "venueMode": "Mode Lieu", "notPublic": "Ce tableau de bord n'est pas public, ou la compétition n'existe pas.", - "backToAll": "← Tous les tableaux de scores publics", + "backToAll": " Tous les tableaux de scores publics", "teamScoreboard": "Tableau de bord de l'équipe", "individualScoreboard": "Tableau de bord individuel", "frozenSuffix": "· frozen", From 945a594bb6fec56214af96404c55d157c9dc8b9c Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:07:15 +0100 Subject: [PATCH 02/10] Fix: New translations en.json from Crowdin --- frontend/messages/fr.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 64d5ec54..4ec157ba 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -513,6 +513,10 @@ }, "detail": { "noDescription": "Aucune description.", + "connection": "Connection", + "connectionCopy": "Copy", + "connectionCopied": "Copied", + "connectionCopyError": "Couldn't copy to clipboard", "othersViewing": "{count, plural, one {# autre visionnage} other {# autres spectateurs}}", "lockedTitle": "Verrouillé", "lockedBy": "Résolvez {names} pour débloquer ce défi.", @@ -600,6 +604,8 @@ "noFlagHint": "Aucun drapeau défini pour le moment — en ajouter un avant de publier.", "fieldTitle": "Titre de la page", "fieldDescription": "Libellé", + "fieldConnectionInfo": "Connection info", + "fieldConnectionInfoHint": "Optional. Where competitors reach the live service — a URL, host and port, or short instructions. Shown on the challenge once it's unlocked.", "fieldCategory": "Catégorie", "uncategorized": "Non catégorisé", "initialPoints": "Points initiaux", From 6e037ec1f46749736c3957fe1034f1947eb9ed2b Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:07:16 +0100 Subject: [PATCH 03/10] Fix: New translations en.json from Crowdin --- frontend/messages/es.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 4f89b2c3..7ff32879 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -513,6 +513,10 @@ }, "detail": { "noDescription": "Sin descripción.", + "connection": "Connection", + "connectionCopy": "Copy", + "connectionCopied": "Copied", + "connectionCopyError": "Couldn't copy to clipboard", "othersViewing": "{count, plural, one {# otra visión} other {# otros viendo}}", "lockedTitle": "Bloqueado", "lockedBy": "Resuelve {names} para desbloquear este desafío.", @@ -600,6 +604,8 @@ "noFlagHint": "No hay ninguna bandera definida aún — añada una antes de publicar.", "fieldTitle": "Título", "fieldDescription": "Descripción", + "fieldConnectionInfo": "Connection info", + "fieldConnectionInfoHint": "Optional. Where competitors reach the live service — a URL, host and port, or short instructions. Shown on the challenge once it's unlocked.", "fieldCategory": "Categoría", "uncategorized": "Sin categorizar", "initialPoints": "Puntos iniciales", From f2bcdeb4fc8cea5a1bfcc3a466be267d74855075 Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:07:18 +0100 Subject: [PATCH 04/10] Fix: New translations en.json from Crowdin --- frontend/messages/pl.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index d8052f8f..08658439 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -513,6 +513,10 @@ }, "detail": { "noDescription": "Brak opisu.", + "connection": "Connection", + "connectionCopy": "Copy", + "connectionCopied": "Copied", + "connectionCopyError": "Couldn't copy to clipboard", "othersViewing": "{count, plural, one {# inne przeglądanie} other {# innych oglądających}}", "lockedTitle": "Zablokowane", "lockedBy": "Rozwiąż {names} , aby odblokować to wyzwanie.", @@ -600,6 +604,8 @@ "noFlagHint": "Nie ustawiono jeszcze flagi — dodaj jedną przed publikacją.", "fieldTitle": "Rozporządzenie Rady (EWG) nr 2658/87 z dnia 23 lipca 1987 r. w sprawie nomenklatury taryfowej i statystycznej oraz w sprawie Wspólnej Taryfy Celnej (Dz.U. L 256 z 7.9.1987, s. 1).", "fieldDescription": "Opis", + "fieldConnectionInfo": "Connection info", + "fieldConnectionInfoHint": "Optional. Where competitors reach the live service — a URL, host and port, or short instructions. Shown on the challenge once it's unlocked.", "fieldCategory": "Kategoria", "uncategorized": "Nieskategoryzowane", "initialPoints": "Punkty początkowe", From d2e1ddb501f684bbf3eea8755f99590d17bfe5e8 Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Thu, 20 Aug 2026 11:26:05 +0100 Subject: [PATCH 05/10] Fix: New translations en.json from Crowdin --- frontend/messages/fr.json | 49 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 4ec157ba..6a925dbf 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -132,7 +132,8 @@ "roles": "Rôles", "events": "Journal des événements", "automations": "Automatisations", - "siteSettings": "Paramètres du site" + "siteSettings": "Paramètres du site", + "pages": "Pages" }, "notifications": { "title": "Notifications", @@ -414,7 +415,8 @@ "description": "résoudre les défis" } } - } + }, + "pagesLabel": "Site pages" }, "register": { "title": "Créer un compte", @@ -1237,5 +1239,48 @@ "description": "The generated files are removed. You can regenerate a new version anytime.", "confirm": "Delete" } + }, + "pages": { + "heading": "Custom pages", + "subtitle": "Author About, Sponsors or Contact pages. They appear in the sidebar and render at their own /p/ link.", + "empty": { + "title": "No pages yet", + "description": "Add a page to put your own content in the sidebar." + }, + "noAccess": { + "title": "No access", + "description": "You need the manage pages permission to author pages." + }, + "form": { + "title": "Title", + "slug": "URL slug", + "slugHelp": "The page will be at {url}. Changing it breaks existing links.", + "icon": "Sidebar icon", + "content": "Content", + "visibility": "Who can see it", + "status": "Status" + }, + "visibility": { + "public": "Anyone, including signed-out visitors", + "authenticated": "Signed-in users only" + }, + "status": { + "draft": "Draft", + "published": "Published" + }, + "actions": { + "add": "Add page", + "create": "Create page", + "save": "Save changes", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "moveUp": "Move up", + "moveDown": "Move down" + }, + "delete": { + "title": "Delete this page?", + "description": "“{title}” will be removed and its link will stop working. This can't be undone." + } } } From 58573906b239288850379f3e0828f24bfc1c2fb4 Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Thu, 20 Aug 2026 11:26:07 +0100 Subject: [PATCH 06/10] Fix: New translations en.json from Crowdin --- frontend/messages/es.json | 49 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 7ff32879..2695304d 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -132,7 +132,8 @@ "roles": "Roles", "events": "Registro de eventos", "automations": "Automatizaciones", - "siteSettings": "Ajustes del sitio" + "siteSettings": "Ajustes del sitio", + "pages": "Pages" }, "notifications": { "title": "Notificaciones", @@ -414,7 +415,8 @@ "description": "resolver desafíos" } } - } + }, + "pagesLabel": "Site pages" }, "register": { "title": "Crear cuenta", @@ -1237,5 +1239,48 @@ "description": "The generated files are removed. You can regenerate a new version anytime.", "confirm": "Delete" } + }, + "pages": { + "heading": "Custom pages", + "subtitle": "Author About, Sponsors or Contact pages. They appear in the sidebar and render at their own /p/ link.", + "empty": { + "title": "No pages yet", + "description": "Add a page to put your own content in the sidebar." + }, + "noAccess": { + "title": "No access", + "description": "You need the manage pages permission to author pages." + }, + "form": { + "title": "Title", + "slug": "URL slug", + "slugHelp": "The page will be at {url}. Changing it breaks existing links.", + "icon": "Sidebar icon", + "content": "Content", + "visibility": "Who can see it", + "status": "Status" + }, + "visibility": { + "public": "Anyone, including signed-out visitors", + "authenticated": "Signed-in users only" + }, + "status": { + "draft": "Draft", + "published": "Published" + }, + "actions": { + "add": "Add page", + "create": "Create page", + "save": "Save changes", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "moveUp": "Move up", + "moveDown": "Move down" + }, + "delete": { + "title": "Delete this page?", + "description": "“{title}” will be removed and its link will stop working. This can't be undone." + } } } From 2e732b83c85f0bc42e9da5eaf866277e108df5d8 Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Thu, 20 Aug 2026 11:26:08 +0100 Subject: [PATCH 07/10] Fix: New translations en.json from Crowdin --- frontend/messages/pl.json | 49 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index 08658439..14d97d34 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -132,7 +132,8 @@ "roles": "Role", "events": "Dziennik zdarzeń", "automations": "Automatyzacja", - "siteSettings": "Ustawienia witryny" + "siteSettings": "Ustawienia witryny", + "pages": "Pages" }, "notifications": { "title": "Powiadomienia", @@ -414,7 +415,8 @@ "description": "rozwiązywanie wyzwań" } } - } + }, + "pagesLabel": "Site pages" }, "register": { "title": "Utwórz konto", @@ -1237,5 +1239,48 @@ "description": "The generated files are removed. You can regenerate a new version anytime.", "confirm": "Delete" } + }, + "pages": { + "heading": "Custom pages", + "subtitle": "Author About, Sponsors or Contact pages. They appear in the sidebar and render at their own /p/ link.", + "empty": { + "title": "No pages yet", + "description": "Add a page to put your own content in the sidebar." + }, + "noAccess": { + "title": "No access", + "description": "You need the manage pages permission to author pages." + }, + "form": { + "title": "Title", + "slug": "URL slug", + "slugHelp": "The page will be at {url}. Changing it breaks existing links.", + "icon": "Sidebar icon", + "content": "Content", + "visibility": "Who can see it", + "status": "Status" + }, + "visibility": { + "public": "Anyone, including signed-out visitors", + "authenticated": "Signed-in users only" + }, + "status": { + "draft": "Draft", + "published": "Published" + }, + "actions": { + "add": "Add page", + "create": "Create page", + "save": "Save changes", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "moveUp": "Move up", + "moveDown": "Move down" + }, + "delete": { + "title": "Delete this page?", + "description": "“{title}” will be removed and its link will stop working. This can't be undone." + } } } From 2c1eacf3598ee77e0897335e698e2feeabaed4fb Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:56:11 +0100 Subject: [PATCH 08/10] Fix: New translations en.json from Crowdin --- frontend/messages/fr.json | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 6a925dbf..8218c84b 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -470,7 +470,7 @@ "uncategorized": "non catégorisé", "solvedOfTotal": "{solved} de {total} résolu", "manage": "Gérer les défis", - "doneManaging": "Gestion terminée", + "backToChallenges": "Back to challenges", "points": "{value} pts", "dynamic": "dynamique", "dynamicSuffix": "(dynamique)", @@ -580,18 +580,28 @@ "imported": "Importé {created, plural, one {# défi} other {# défis}}", "importedSkipped": "Importé {created, plural, one {# challenge} other {# challenges}}, {skipped} sauté", "newChallenge": "Nouveau défi", - "colTitle": "Titre de la page", - "colCategory": "Catégorie", - "colPoints": "Points", - "colState": "État", - "colActions": "Actions", + "searchPlaceholder": "Search challenges", + "filterAllCategories": "All categories", + "noResults": "No challenges match your filters.", + "selectTitle": "No challenge selected", + "selectBody": "Choose a challenge from the list to edit it — or create a new one.", + "emptyTitle": "No challenges yet", + "emptyBody": "Create your first challenge, or import an existing set.", + "backToList": "All challenges", + "noAccessTitle": "Organiser access required", + "noAccessBody": "Managing challenges needs organiser access for this competition. Ask an administrator if you think you should have it.", + "sectionMore": "More options", + "sectionMoreHint": "Connection info, release schedule, prerequisites, difficulty, tags", + "savedToast": "Changes saved", + "createdToast": "Challenge created", + "deletedToast": "Challenge deleted", + "scheduledShort": "scheduled", "stateDraft": "brouillon", "statePublished": "publié", "dyn": "dyn", "scheduled": "· planifié", "releasesTooltip": "Sorties {date}", "dynamicTooltip": "Dynamique : {points}→{min} sur ~{decay} résout", - "edit": "Editer", "publish": "Publier", "unpublish": "Dépublier", "delete": "Supprimez", From a2347845ac988d39d3a00d69431872b212a727ca Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:56:12 +0100 Subject: [PATCH 09/10] Fix: New translations en.json from Crowdin --- frontend/messages/es.json | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/messages/es.json b/frontend/messages/es.json index 2695304d..9b55d1cf 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -470,7 +470,7 @@ "uncategorized": "sin categorizar", "solvedOfTotal": "{solved} de {total} resuelto", "manage": "Gestionar desafíos", - "doneManaging": "Hecho de gestión", + "backToChallenges": "Back to challenges", "points": "{value} puntos", "dynamic": "dinámico", "dynamicSuffix": "(dinámico)", @@ -580,18 +580,28 @@ "imported": "¡Importado {created, plural, one {# Desafío} other {# ¡Desafío}}", "importedSkipped": "¡Importado {created, plural, one {# Desafío} other {# ¡Desafío}}, {skipped} omitido", "newChallenge": "Nuevo desafío", - "colTitle": "Título", - "colCategory": "Categoría", - "colPoints": "Puntos", - "colState": "Estado", - "colActions": "Acciones", + "searchPlaceholder": "Search challenges", + "filterAllCategories": "All categories", + "noResults": "No challenges match your filters.", + "selectTitle": "No challenge selected", + "selectBody": "Choose a challenge from the list to edit it — or create a new one.", + "emptyTitle": "No challenges yet", + "emptyBody": "Create your first challenge, or import an existing set.", + "backToList": "All challenges", + "noAccessTitle": "Organiser access required", + "noAccessBody": "Managing challenges needs organiser access for this competition. Ask an administrator if you think you should have it.", + "sectionMore": "More options", + "sectionMoreHint": "Connection info, release schedule, prerequisites, difficulty, tags", + "savedToast": "Changes saved", + "createdToast": "Challenge created", + "deletedToast": "Challenge deleted", + "scheduledShort": "scheduled", "stateDraft": "borrador", "statePublished": "publicado", "dyn": "dyn", "scheduled": "· programado", "releasesTooltip": "Libera {date}", "dynamicTooltip": "Dinámica: {points}→{min} sobre las resoluciones ~{decay}", - "edit": "Editar", "publish": "Publicar", "unpublish": "No publicar", "delete": "Eliminar", From e7452dcec36bf526641adc3b9cf69a92c9692756 Mon Sep 17 00:00:00 2001 From: Tom Collier <105301937+tbcsec@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:56:14 +0100 Subject: [PATCH 10/10] Fix: New translations en.json from Crowdin --- frontend/messages/pl.json | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index 14d97d34..d9cf243f 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -470,7 +470,7 @@ "uncategorized": "nieskategoryzowane", "solvedOfTotal": "{solved} z {total} rozwiązane", "manage": "Zarządzaj wyzwaniami", - "doneManaging": "Zarządzanie zakończone", + "backToChallenges": "Back to challenges", "points": "{value} punktów", "dynamic": "dynamiczny", "dynamicSuffix": "(dynamiczny)", @@ -580,18 +580,28 @@ "imported": "Zaimportowano {created, plural, one {# wyzwanie} other {# wyzwania}}", "importedSkipped": "Zaimportowano {created, plural, one {# wyzwanie} other {# wyzwania}}, {skipped} pominięto", "newChallenge": "Nowe wyzwanie", - "colTitle": "Rozporządzenie Rady (EWG) nr 2658/87 z dnia 23 lipca 1987 r. w sprawie nomenklatury taryfowej i statystycznej oraz w sprawie Wspólnej Taryfy Celnej (Dz.U. L 256 z 7.9.1987, s. 1).", - "colCategory": "Kategoria", - "colPoints": "Punkty", - "colState": "Stan", - "colActions": "Akcje", + "searchPlaceholder": "Search challenges", + "filterAllCategories": "All categories", + "noResults": "No challenges match your filters.", + "selectTitle": "No challenge selected", + "selectBody": "Choose a challenge from the list to edit it — or create a new one.", + "emptyTitle": "No challenges yet", + "emptyBody": "Create your first challenge, or import an existing set.", + "backToList": "All challenges", + "noAccessTitle": "Organiser access required", + "noAccessBody": "Managing challenges needs organiser access for this competition. Ask an administrator if you think you should have it.", + "sectionMore": "More options", + "sectionMoreHint": "Connection info, release schedule, prerequisites, difficulty, tags", + "savedToast": "Changes saved", + "createdToast": "Challenge created", + "deletedToast": "Challenge deleted", + "scheduledShort": "scheduled", "stateDraft": "szkic", "statePublished": "opublikowane", "dyn": "dyn", "scheduled": "· zaplanowane", "releasesTooltip": "Wydania {date}", "dynamicTooltip": "Dynamiczny: {points}→{min} ponad ~{decay} rozwiązuje", - "edit": "Edytuj", "publish": "Opublikuj", "unpublish": "Cofnij publikację", "delete": "Usuń",