fix(i18n): restore interpolation spacing on pagination and counter keys across FR/ES/IT/PL

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.
This commit is contained in:
Marc-André Bombeck committed 2026-05-15 21:03:32 +02:00
1 parent b10ec6261d
commit 815f31a321
4 files changed
+40 -40

No files matched your search

+10 -10
View File
@@ -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}"
},
+10 -10
View File
@@ -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}"
},
+10 -10
View File
@@ -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}"
},
+10 -10
View File
@@ -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}"
},