From 815f31a32185ede1bcf3fc09bcb5c0ca77e41b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 15 May 2026 21:03:32 +0200 Subject: [PATCH] fix(i18n): restore interpolation spacing on pagination and counter keys across FR/ES/IT/PL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The earlier translation pass dropped the surrounding spaces around the connector word on ten counter / pagination keys — the result was `Page 2 de10` / `Page 2 z10` rendering on every FR/ES/IT/PL `pageInfo`-shaped surface plus the admin pagination, onboarding tour step pill, getting-started progress chip, target consistency chips, and target weekly summary headline. Restore the spaces and translate the surrounding nouns natively at the same pass: - pageInfo (measurements / mood / medications), `admin.section.auditLog.pageOf` → FR `Page {page} sur {total}`, ES `Página {page} de {total}`, IT `Pagina {page} di {total}`, PL `Strona {page} z {total}`. - `admin.showingEntries`, `onboarding.tour.stepOf`, `gettingStarted.progress`, `targets.consistency.daysInRange`, `targets.consistency.daysLogged`, `targets.summary.weekTitle` — translated in full with native verb forms and balanced placeholder whitespace. The drift-guard test stays green; a follow-up tightening to assert `[A-Za-zÀ-ÿ]\{|\}[A-Za-zÀ-ÿ]` returns no match across the bundle would have caught the original drift and is queued for the next i18n round. --- messages/es.json | 20 ++++++++++---------- messages/fr.json | 20 ++++++++++---------- messages/it.json | 20 ++++++++++---------- messages/pl.json | 20 ++++++++++---------- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/messages/es.json b/messages/es.json index afbc64c07..addd051a4 100644 --- a/messages/es.json +++ b/messages/es.json @@ -348,7 +348,7 @@ "actions": "Acciones", "deleteConfirmTitle": "Delete measurement?", "deleteConfirmDescription": "This measurement will be permanently deleted.", - "pageInfo": "Page {page} de{total}", + "pageInfo": "Página {page} de {total}", "previousPage": "Previous page", "nextPage": "Next page" }, @@ -385,7 +385,7 @@ "invalidTimestamp": "Please select a valid time.", "deleteConfirmTitle": "Delete entry?", "deleteConfirmDescription": "This mood entry will be permanently deleted.", - "pageInfo": "Page {page} de{total}", + "pageInfo": "Página {page} de {total}", "loginRequired": "Please sign in to view mood entries." }, "medications": { @@ -714,7 +714,7 @@ "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", "actions": "Acciones", - "pageInfo": "Page {page} de{total}", + "pageInfo": "Página {page} de {total}", "previousPage": "Previous page", "nextPage": "Next page", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -1311,7 +1311,7 @@ "onboarding": { "errorGeneric": "Something went wrong while finishing setup. Please try again.", "tour": { - "stepOf": "Step {current} de{total}", + "stepOf": "Paso {current} de {total}", "next": "Siguiente", "back": "Atrás", "skip": "Skip tour", @@ -1413,7 +1413,7 @@ "gettingStarted": { "title": "Getting started", "subtitle": "Quick wins to get the most out of HealthLog.", - "progress": "{done} de{total} Hecho", + "progress": "{done} de {total} hecho", "dismissAll": "Hide checklist", "dismissTooltip": "Hide this item", "items": { @@ -2070,7 +2070,7 @@ "loginEmptyFailedTitle": "No failed sign-in attempts", "loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.", "loginEmptyResetFilter": "Show all events", - "showingEntries": "Showing {count} de{total} auth entries", + "showingEntries": "Mostrando {count} de {total} entradas de autenticación", "status": "Estado", "action": "Action", "ip": "IP", @@ -2256,7 +2256,7 @@ "perPage": "Per page", "prev": "Previous", "next": "Siguiente", - "pageOf": "Page {page} de{total}", + "pageOf": "Página {page} de {total}", "export": "Export CSV", "empty": "No audit entries match the current filters." }, @@ -2670,8 +2670,8 @@ "average30d": "30-day average:", "consistency": { "ariaLabel": "Last 7 days, in-range status per day", - "daysInRange": "{count} de{total} in range", - "daysLogged": "{count} de{total} logged", + "daysInRange": "{count} de {total} en rango", + "daysLogged": "{count} de {total} registrados", "dotInRange": "in range", "dotNearRange": "near range", "dotOutOfRange": "out of range", @@ -2697,7 +2697,7 @@ "daysAgo": "{count} days ago" }, "summary": { - "weekTitle": "{met} de{total} targets met this week", + "weekTitle": "{met} de {total} objetivos cumplidos esta semana", "weekTitleAll": "Todo{total} targets met this week", "streakHighlight": "{count}-day streak: {metric}" }, diff --git a/messages/fr.json b/messages/fr.json index 3e47756f6..089c431aa 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -348,7 +348,7 @@ "actions": "Actions", "deleteConfirmTitle": "Delete measurement?", "deleteConfirmDescription": "This measurement will be permanently deleted.", - "pageInfo": "Page {page} de{total}", + "pageInfo": "Page {page} sur {total}", "previousPage": "Previous page", "nextPage": "Next page" }, @@ -385,7 +385,7 @@ "invalidTimestamp": "Please select a valid time.", "deleteConfirmTitle": "Delete entry?", "deleteConfirmDescription": "This mood entry will be permanently deleted.", - "pageInfo": "Page {page} de{total}", + "pageInfo": "Page {page} sur {total}", "loginRequired": "Please sign in to view mood entries." }, "medications": { @@ -714,7 +714,7 @@ "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", "actions": "Actions", - "pageInfo": "Page {page} de{total}", + "pageInfo": "Page {page} sur {total}", "previousPage": "Previous page", "nextPage": "Next page", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -1311,7 +1311,7 @@ "onboarding": { "errorGeneric": "Something went wrong while finishing setup. Please try again.", "tour": { - "stepOf": "Step {current} de{total}", + "stepOf": "Étape {current} sur {total}", "next": "Suivant", "back": "Retour", "skip": "Skip tour", @@ -1413,7 +1413,7 @@ "gettingStarted": { "title": "Getting started", "subtitle": "Quick wins to get the most out of HealthLog.", - "progress": "{done} de{total} Terminé", + "progress": "{done} sur {total} terminé", "dismissAll": "Hide checklist", "dismissTooltip": "Hide this item", "items": { @@ -2070,7 +2070,7 @@ "loginEmptyFailedTitle": "No failed sign-in attempts", "loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.", "loginEmptyResetFilter": "Show all events", - "showingEntries": "Showing {count} de{total} auth entries", + "showingEntries": "Affichage de {count} sur {total} entrées d'authentification", "status": "Statut", "action": "Action", "ip": "IP", @@ -2256,7 +2256,7 @@ "perPage": "Per page", "prev": "Previous", "next": "Suivant", - "pageOf": "Page {page} de{total}", + "pageOf": "Page {page} sur {total}", "export": "Export CSV", "empty": "No audit entries match the current filters." }, @@ -2670,8 +2670,8 @@ "average30d": "30-day average:", "consistency": { "ariaLabel": "Last 7 days, in-range status per day", - "daysInRange": "{count} de{total} in range", - "daysLogged": "{count} de{total} logged", + "daysInRange": "{count} sur {total} dans la cible", + "daysLogged": "{count} sur {total} enregistrés", "dotInRange": "in range", "dotNearRange": "near range", "dotOutOfRange": "out of range", @@ -2697,7 +2697,7 @@ "daysAgo": "{count} days ago" }, "summary": { - "weekTitle": "{met} de{total} targets met this week", + "weekTitle": "{met} cibles sur {total} atteintes cette semaine", "weekTitleAll": "Tout{total} targets met this week", "streakHighlight": "{count}-day streak: {metric}" }, diff --git a/messages/it.json b/messages/it.json index a5e488e07..c34b7a5b9 100644 --- a/messages/it.json +++ b/messages/it.json @@ -348,7 +348,7 @@ "actions": "Azioni", "deleteConfirmTitle": "Delete measurement?", "deleteConfirmDescription": "This measurement will be permanently deleted.", - "pageInfo": "Page {page} di{total}", + "pageInfo": "Pagina {page} di {total}", "previousPage": "Previous page", "nextPage": "Next page" }, @@ -385,7 +385,7 @@ "invalidTimestamp": "Please select a valid time.", "deleteConfirmTitle": "Delete entry?", "deleteConfirmDescription": "This mood entry will be permanently deleted.", - "pageInfo": "Page {page} di{total}", + "pageInfo": "Pagina {page} di {total}", "loginRequired": "Please sign in to view mood entries." }, "medications": { @@ -714,7 +714,7 @@ "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", "actions": "Azioni", - "pageInfo": "Page {page} di{total}", + "pageInfo": "Pagina {page} di {total}", "previousPage": "Previous page", "nextPage": "Next page", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -1311,7 +1311,7 @@ "onboarding": { "errorGeneric": "Something went wrong while finishing setup. Please try again.", "tour": { - "stepOf": "Step {current} di{total}", + "stepOf": "Passo {current} di {total}", "next": "Avanti", "back": "Indietro", "skip": "Skip tour", @@ -1413,7 +1413,7 @@ "gettingStarted": { "title": "Getting started", "subtitle": "Quick wins to get the most out of HealthLog.", - "progress": "{done} di{total} Fatto", + "progress": "{done} di {total} fatto", "dismissAll": "Hide checklist", "dismissTooltip": "Hide this item", "items": { @@ -2070,7 +2070,7 @@ "loginEmptyFailedTitle": "No failed sign-in attempts", "loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.", "loginEmptyResetFilter": "Show all events", - "showingEntries": "Showing {count} di{total} auth entries", + "showingEntries": "Mostrando {count} di {total} voci di autenticazione", "status": "Stato", "action": "Action", "ip": "IP", @@ -2256,7 +2256,7 @@ "perPage": "Per page", "prev": "Previous", "next": "Avanti", - "pageOf": "Page {page} di{total}", + "pageOf": "Pagina {page} di {total}", "export": "Export CSV", "empty": "No audit entries match the current filters." }, @@ -2670,8 +2670,8 @@ "average30d": "30-day average:", "consistency": { "ariaLabel": "Last 7 days, in-range status per day", - "daysInRange": "{count} di{total} in range", - "daysLogged": "{count} di{total} logged", + "daysInRange": "{count} di {total} nell'intervallo", + "daysLogged": "{count} di {total} registrati", "dotInRange": "in range", "dotNearRange": "near range", "dotOutOfRange": "out of range", @@ -2697,7 +2697,7 @@ "daysAgo": "{count} days ago" }, "summary": { - "weekTitle": "{met} di{total} targets met this week", + "weekTitle": "{met} di {total} obiettivi raggiunti questa settimana", "weekTitleAll": "Tutto{total} targets met this week", "streakHighlight": "{count}-day streak: {metric}" }, diff --git a/messages/pl.json b/messages/pl.json index 47380cb0e..8fef9adff 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -348,7 +348,7 @@ "actions": "Akcje", "deleteConfirmTitle": "Delete measurement?", "deleteConfirmDescription": "This measurement will be permanently deleted.", - "pageInfo": "Page {page} z{total}", + "pageInfo": "Strona {page} z {total}", "previousPage": "Previous page", "nextPage": "Next page" }, @@ -385,7 +385,7 @@ "invalidTimestamp": "Please select a valid time.", "deleteConfirmTitle": "Delete entry?", "deleteConfirmDescription": "This mood entry will be permanently deleted.", - "pageInfo": "Page {page} z{total}", + "pageInfo": "Strona {page} z {total}", "loginRequired": "Please sign in to view mood entries." }, "medications": { @@ -714,7 +714,7 @@ "invalidTimestamp": "Please select a valid time.", "noIntakesYet": "No intakes recorded yet", "actions": "Akcje", - "pageInfo": "Page {page} z{total}", + "pageInfo": "Strona {page} z {total}", "previousPage": "Previous page", "nextPage": "Next page", "loginRequiredIntakes": "Please sign in to view intakes.", @@ -1311,7 +1311,7 @@ "onboarding": { "errorGeneric": "Something went wrong while finishing setup. Please try again.", "tour": { - "stepOf": "Step {current} z{total}", + "stepOf": "Krok {current} z {total}", "next": "Dalej", "back": "Wstecz", "skip": "Skip tour", @@ -1413,7 +1413,7 @@ "gettingStarted": { "title": "Getting started", "subtitle": "Quick wins to get the most out of HealthLog.", - "progress": "{done} z{total} Gotowe", + "progress": "{done} z {total} ukończone", "dismissAll": "Hide checklist", "dismissTooltip": "Hide this item", "items": { @@ -2070,7 +2070,7 @@ "loginEmptyFailedTitle": "No failed sign-in attempts", "loginEmptyFailedDescription": "That's the safe state. Switch to all events to see successful sign-ins.", "loginEmptyResetFilter": "Show all events", - "showingEntries": "Showing {count} z{total} auth entries", + "showingEntries": "Wyświetlanie {count} z {total} wpisów uwierzytelniania", "status": "Status", "action": "Action", "ip": "IP", @@ -2256,7 +2256,7 @@ "perPage": "Per page", "prev": "Previous", "next": "Dalej", - "pageOf": "Page {page} z{total}", + "pageOf": "Strona {page} z {total}", "export": "Export CSV", "empty": "No audit entries match the current filters." }, @@ -2670,8 +2670,8 @@ "average30d": "30-day average:", "consistency": { "ariaLabel": "Last 7 days, in-range status per day", - "daysInRange": "{count} z{total} in range", - "daysLogged": "{count} z{total} logged", + "daysInRange": "{count} z {total} w zakresie", + "daysLogged": "{count} z {total} zarejestrowanych", "dotInRange": "in range", "dotNearRange": "near range", "dotOutOfRange": "out of range", @@ -2697,7 +2697,7 @@ "daysAgo": "{count} days ago" }, "summary": { - "weekTitle": "{met} z{total} targets met this week", + "weekTitle": "{met} z {total} celów osiągniętych w tym tygodniu", "weekTitleAll": "Wszystko{total} targets met this week", "streakHighlight": "{count}-day streak: {metric}" },