You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Android: 79 localized paragraphs are completed by hardcoded English (whitespace is the symptom) #922
Filed as a whitespace defect. Re-reviewing it found the whitespace is the symptom of something larger, so this is rewritten in place rather than left mis-scoped.
What is actually wrong
94 strings in values/strings.xml end with a trailing space. I assumed they were fragments joined to other localized fragments. They are not. Of the 94:
what the fragment is concatenated with
count
a hardcoded English literal
79
another localized string
0
unresolved / other
15
// AddDeviceWizard.kt:830Text(
uiString(R.string.l10n_add_device_wizard_a_whoop_strap_bonds_to_a_d39bdf4a) +"to the official WHOOP app, and the other way round. It's reversible: pair it in the "+"other app whenever you want it back.",
A French user reads:
Un bracelet WHOOP se lie à un seul appareil. Alors qu'il est connecté à NOOP il ne va pas diffuser to the official WHOOP app, and the other way round. It's reversible: pair it in the other app whenever you want it back.
Half the paragraph is translated and half is English, in 79 places, in every non-English locale. The missing trailing space is a cosmetic detail on top of that.
Why nothing catches it
The trailing literals are real hardcoded UI copy, and i18n_audit.py does find them — they are part of the 229 it reports and sit in Tools/i18n_audit_baseline.json, so the gate is green. The baseline was the right call for a backlog, but it means these particular 79 read as "known, tolerated" when their user-visible effect is a half-English paragraph, not an untranslated label.
Revised fix
The whitespace patch alone would only add a space before the English — polishing the seam. The real fix, per paragraph:
extract the trailing literal(s) into values/strings.xml with the existing key convention;
compose from localized parts (or better, use a single string with placeholders so translators see whole sentences);
drop the now-pointless trailing space from the leading fragment;
remove those entries from the audit baseline, ratcheting it down as Tools/doc_comment_lint_baseline.txt requires of its own.
That is 79 paragraphs across ~20 screens plus translations into five locales, so it wants splitting by screen rather than one sweep.
Still true from the original report
pt-rPT carries the trailing space on all 94 and the machine-translated locales dropped every one (de/es/zh: 94 missing, fr: 77 after #921). If the composition survives in any form, a trailing-whitespace parity test against the default catalogue is worth having — but it is now the smaller half of this issue.
changed the title [-]Android: 4 locales drop the trailing space on every concatenated string fragment (~360 strings)[/-][+]Android: 79 localized paragraphs are completed by hardcoded English (whitespace is the symptom)[/+]on Jul 28, 2026
Those 16 are the ones whose full English sentence exists verbatim in Strand/Resources/Localizable.xcstrings with a translation already present in all five Android locales — Swift never had the split, so the complete paragraph is already translated there. Merged values are copied from that catalogue, so no new translation enters the tree. That split axis rather than by-screen: it isolates the subset with zero translation risk. The remaining 63 have copy that drifted from Swift's wording and do need real translation into five locales.
One correction to the issue body: these literals are not part of the 229 and are not in Tools/i18n_audit_baseline.json. _extract_literals skips any literal whose preceding token is +, deliberately, citing #557 — added 2026-07-18 in the #540/#558 commit, ten days before this issue. Verified: 0 of the 62 prose tails appear in the baseline, and removing 16 of them left the reported count unchanged at 206.
So the gate misses this twice — the resource that exists is fully translated, and the scanner never looks at the tail. Step 4 of the fix plan is a no-op; no baseline update is needed.
Verified fixed: 0 remaining uiString(...) + "<English tail" concatenations in Android sources. The 79 hardcoded English tails identified in the issue have been replaced with proper localized strings. (The separate AAPT2 whitespace-stripping issue #2041 remains open.)
Activity
[-]Android: 4 locales drop the trailing space on every concatenated string fragment (~360 strings)[/-][+]Android: 79 localized paragraphs are completed by hardcoded English (whitespace is the symptom)[/+]ryanbr commentedon Aug 2, 2026
#1037 closes 16 of these. 79 sites → 63.
Those 16 are the ones whose full English sentence exists verbatim in
Strand/Resources/Localizable.xcstringswith a translation already present in all five Android locales — Swift never had the split, so the complete paragraph is already translated there. Merged values are copied from that catalogue, so no new translation enters the tree. That split axis rather than by-screen: it isolates the subset with zero translation risk. The remaining 63 have copy that drifted from Swift's wording and do need real translation into five locales.One correction to the issue body: these literals are not part of the 229 and are not in
Tools/i18n_audit_baseline.json._extract_literalsskips any literal whose preceding token is+, deliberately, citing #557 — added 2026-07-18 in the #540/#558 commit, ten days before this issue. Verified: 0 of the 62 prose tails appear in the baseline, and removing 16 of them left the reported count unchanged at 206.So the gate misses this twice — the resource that exists is fully translated, and the scanner never looks at the tail. Step 4 of the fix plan is a no-op; no baseline update is needed.
Android: complete 16 half-English paragraphs from the Swift catalogue (…
Android: complete 16 half-English paragraphs from the Swift catalogue (…
sleep: drag the hypnogram to read the clock time under your finger
sleep: drag the hypnogram to read the clock time under your finger
sleep: drag the filled hypnogram to read the clock time under your fi…
sleep: drag the filled hypnogram to read the clock time under your fi…
evoveotech commentedon Sep 10, 2026
Verified fixed: 0 remaining
uiString(...) + "<English tail"concatenations in Android sources. The 79 hardcoded English tails identified in the issue have been replaced with proper localized strings. (The separate AAPT2 whitespace-stripping issue #2041 remains open.)