From db36397b933be6ee7b75a44e6cad18271fb4cb56 Mon Sep 17 00:00:00 2001 From: doxa-maps-88655c70 <88627970+doxa-maps-88655c70@users.noreply.github.com> Date: Thu, 24 Sep 2026 21:26:49 +0000 Subject: [PATCH] Translate the last three English literals in components the clone renders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A dropdown every localised surface renders had no t() at all. Its two visible strings — the clear button and the empty state — were English literals, and one of them, "No options found", was ALREADY catalogued in eleven locales elsewhere in this repo: the translation existed and the component was ignoring it. The poster wall's export modal had the same shape, reassuring the reader that nothing is uploaded in English only. Three keys in buttons.json across eleven locales, and the literals replaced. Both bundles that render these components — regions and country-posters, whose cards are routed to me — are rebuilt. check:i18n-parity passes with no locale regressed. AND A BUILD HAZARD IN MY OWN COMMAND SHAPE, worth writing down because it is exactly the failure the brief warns about. I ran BUNDLE=x bun x vite build 2>&1 | tail -2 && bun run tree && bun run fix:sri The vite build FAILED on a syntax error — I had put a const inside defineProps — and tree and fix:sri ran anyway, because the exit status of a pipeline is the LAST command's, and `tail` succeeded. So the chain regenerated the tree and re-hashed against a bundle that had not been rebuilt: the "tree alone ships a stale .js" trap, opened by the pipe I added to keep the output short. Caught because the next build's byte count moved, not because the chain complained. Any agent using `| tail` after a build needs pipefail or a separate status check. --- library/components/poster/PosterWall.vue | 2 +- library/components/search/FilterDropdown.vue | 11 +- library/i18n/locales/ar/buttons.json | 5 +- library/i18n/locales/de/buttons.json | 5 +- library/i18n/locales/en/buttons.json | 5 +- library/i18n/locales/es/buttons.json | 5 +- library/i18n/locales/fr/buttons.json | 5 +- library/i18n/locales/hi/buttons.json | 5 +- library/i18n/locales/it/buttons.json | 5 +- library/i18n/locales/pt/buttons.json | 5 +- library/i18n/locales/ro/buttons.json | 5 +- library/i18n/locales/ru/buttons.json | 5 +- library/i18n/locales/zh/buttons.json | 5 +- .../country-posters/countries-map/index.html | 2 +- .../country-poster-wall/index.html | 2 +- .../country-posters-mfe/index.html | 2 +- .../country-posters/country-posters.js | 80 ++++---- public/doxa-maps/index.html | 2 +- public/doxa-maps/manifest.json | 16 +- .../region-dashboards/index.html | 2 +- .../regions-dashboard/regions-dashboard.js | 180 +++++++++--------- .../regions-dashboard/regions-list/index.html | 2 +- .../regions-dashboard/regions-mfe/index.html | 2 +- 23 files changed, 199 insertions(+), 159 deletions(-) diff --git a/library/components/poster/PosterWall.vue b/library/components/poster/PosterWall.vue index 25f6ddb2b..2d8b3a549 100644 --- a/library/components/poster/PosterWall.vue +++ b/library/components/poster/PosterWall.vue @@ -709,7 +709,7 @@ useShadowStyles(
diff --git a/library/components/search/FilterDropdown.vue b/library/components/search/FilterDropdown.vue index 0805d05fe..5478048a0 100644 --- a/library/components/search/FilterDropdown.vue +++ b/library/components/search/FilterDropdown.vue @@ -24,6 +24,7 @@ * filter-clear { name } — the selection was cleared. */ import { ref, computed, nextTick, onBeforeUnmount } from 'vue' +import { useI18n } from 'vue-i18n' const props = defineProps({ label: { type: String, required: true }, @@ -33,6 +34,12 @@ const props = defineProps({ placeholder: { type: String, default: 'Type to search...' }, }) +// ★ THIS COMPONENT HAD NO t() AT ALL, on a dropdown that every localised surface renders. Its +// two visible strings — the clear button and the empty state — were English literals, and one of +// them ('No options found') was ALREADY catalogued in eleven locales elsewhere in this repo, so +// the translation existed and this component was ignoring it. +const { t } = useI18n() + const emit = defineEmits(['filter-change', 'filter-clear']) const isOpen = ref(false) @@ -317,10 +324,10 @@ onBeforeUnmount(() => { @input="onSearchInput" @keydown="onKeydown" > - +