fix(i18n-es): correct fuzzy-matcher strandings in Spanish catalog - #42808
Conversation
39 entries in the Spanish catalog carried a translation that renders a different string than the English msgid. These are legacy strandings: the old `pybabel update` fuzzy matcher copied a translation from a similar-looking msgid, and where it guessed wrong the copied Spanish stayed behind. Because both the frontend and backend builds compile with `--use-fuzzy`, these entries are live in the UI. Several render the opposite of the source string: Select all -> "Deseleccionar todo" (Deselect all) Data Export Options -> "Opciones del gráfico" (Chart options) Export All Data -> "Borrar todos los datos" (Delete all data) Sign in -> "No está en" (Not in) Not Contains -> "Denunciar un contenido" (Report content) True -> "MAR" (Tue) `Select all` labels the button whose handler is handleSelectAll(), so a user clicking "Deselect all" selects every option. The ag-Grid table filter menu is corrected as a whole, since most of one dropdown was affected. Also fixes the Datastore connection error, which listed the BigQuery roles and permissions instead of the Datastore ones. Every entry was verified against its call site; msgid strings with no reachable call site were left alone. 38 `#, fuzzy` flags are cleared, since the entries are now confirmed translations. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #42808 +/- ##
==========================================
- Coverage 65.79% 65.79% -0.01%
==========================================
Files 2842 2842
Lines 162132 162157 +25
Branches 37159 37163 +4
==========================================
+ Hits 106677 106691 +14
- Misses 53391 53397 +6
- Partials 2064 2069 +5
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Code Review Agent Run #9c00f2Actionable Suggestions - 0Filtered by Review RulesBito filtered these suggestions based on rules created automatically for your feedback. Manage rules.
Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
rusackas
left a comment
There was a problem hiding this comment.
This is exactly the kind of forensic follow-up #42728 needed. Spot-checked a chunk of these against my own Spanish and they all check out, especially glad to see Select all un-inverted and SSL fixed (it was showing "sql").
One more for the pile while you're in there: Client ID and Slice Id are both still #, fuzzy and share the same stranded string as Line width ("Anchura de la línea"), right next to Client Secret which this PR already caught. Not blocking, happy to see it land as-is or folded in.
LGTM!
|
Oh we deploy on fridays here! ;) Thanks Evan! I'll keep working on this. |
SUMMARY
39 entries in the Spanish catalog carry a translation that renders a different string
than the English
msgid. Several render the opposite of the source:msgidSelect allDeseleccionar todoData Export OptionsOpciones del gráficoExport All DataBorrar todos los datosSign inNo está enNot ContainsDenunciar un contenidoEqualsSecuencialTrueMARClient SecretSelección de columnaSelect allis the label on the button whose handler ishandleSelectAll()(
Select.tsx:654) — so a user clicking a control that reads "Deselect all" selectsevery option.
Sign inrenders twice on the login page, as the card title and thesubmit button.
These are legacy strandings. The old
pybabel updatefuzzy matcher copied a translationfrom a similar-looking
msgid; where it guessed wrong, the copied Spanish stayed behind.babel_update.shhas since moved to--no-fuzzy-matching, so this is cleanup of damagealready done rather than an ongoing source of new breakage.
They are live in the UI: both the frontend and backend builds compile with
--use-fuzzy,so a
#, fuzzyentry is displayed, not withheld. This is also whymsgfmtnever caughtthem — it skips format checking on fuzzy entries.
This is the follow-up to #42728, which fixed the 75 entries whose format placeholders
didn't match. That defect class had a mechanical proof (
msgfmt). This one does not: theplaceholders here are fine, so the errors are only visible to someone who reads both
languages.
How these were found, and where the method fails
A script made the class tractable, and it is worth stating how it works so the change is
auditable rather than "trust me":
The detector under-reports, and this is a structural property, not a tuning problem.
When a legitimate synonym shares the stranded translation, the pair scores as similar and
never surfaces. Three entries in this PR were missed that way:
Select all→ "Deseleccionar todo"Deselect all→ "Deseleccionar todo" (correct)Data Export Options→ "Opciones del gráfico"Chart Options→ "Opciones del gráfico" (correct)Revoke→ "Eliminar"Remove→ "Eliminar" (correct)The first two were caught only by opening the running UI and looking. The third is left for
a follow-up. So: the detector is a lead generator, not a proof, and this PR is not a
claim that the catalog is clean.
Every entry here was confirmed by reading its call site, which changed several of the
translations. Entries with no reachable call site were left alone rather than guessed at
(e.g.
beta, whose only occurrences are in test files).Scope notes
individually, then turned out to sit in one dropdown (
AgGridTable/index.tsx:556-587)where most neighbours were also stranded. Fixing 3 of 13 in the same menu would have
been incoherent. Note this table is behind
AG_GRID_TABLE_ENABLED;Select allandSelect Allare not flag-gated and render in the coreSelectcomponent.msgidwas checked for other call sites before being touched —to,Group,Select All,Select all.of the Datastore ones (
db_engine_specs/datastore.py).Referreris deliberately left untranslated. It isLog.referrer— the HTTP RefererURL — in an admin audit view, and this catalog already keeps protocol terms as-is
(
URL,JSON,dttm,Host). It replaces "Actualizar" (Refresh), which was wrong.Feature Not Enabled→ "Función no habilitada": funcionalidad is arguably the moreprecise Spanish, but this catalog uses función for the software sense throughout
(
función de desglose,función experimental) and funcionalidad appears nowhere inits 4,871 entries. Consistency was chosen over precision; happy to switch.
# Machine-translated via backfill_po.pycomment are out ofscope — those are AI drafts awaiting review, a different workflow.
38
#, fuzzyflags are cleared, since the corrected entries are now confirmedtranslations.
Deleted %swas already un-fuzzy — confirmed, and wrong.Deliberately not included, to keep this reviewable: two recently-added features
(API keys, semantic layers/views) shipped with almost entirely stranded catalogs and want
their own PR.
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
Captured on a local instance running
apache/superset:f65b424, this PR's base commit.Sign inrenders as "No está en" (Not in) on both the card title and the submit buttonLogin before






Login After
Export Menu Before
Export Menu after
Select all before
Select all after
TESTING INSTRUCTIONS
The catalog compiles cleanly and no new format errors are introduced:
msgfmt -c --statistics -o /dev/null superset/translations/es/LC_MESSAGES/messages.po # 3931 translated, 978 fuzzy, 197 untranslated (was 3893 / 1016 / 197)To confirm none of the newly-confirmed entries hides a format defect, blanket-clear the
fuzzy flags and recompile —
msgfmtonly format-checks non-fuzzy entries:This reports 4 fatal errors both before and after this change — all pre-existing, in
%s column,%s item,Added to 1 dashboardand%(suggestion)s instead of …. Anythingabove 4 would mean new breakage.
To see the strings in the UI, run with the locale set to
es, then:IN) — thebulk-action bar at the bottom of the dropdown
ReferrercolumnAG_GRID_TABLE_ENABLED) — operators,Blanks,AND/ORADDITIONAL INFORMATION