Repository navigation
UI: Group digits of counters in translated strings - #74296
Merged
Merged
Conversation
shahar1
requested review from
BasPH,
Lee-W,
amoghrajesh,
ashb,
bbovenzi,
bugraoz93,
choo121600,
ephraimbuddy,
gopidesupavan,
guan404ming,
henry3260,
hussein-awala,
jason810496,
jedcunningham,
jscheffl,
mobuchowski,
pierrejeambrun,
potiuk,
romsharon98,
ryanahamilton,
sekikn,
shubhamraj-git,
uranusjr,
vatsrahul1001 and
vincbeck
as code owners
October 5, 2026 19:17
shahar1
force-pushed
the
ui-locale-number-placeholders
branch
4 times, most recently
from
October 6, 2026 03:08
5c3bed2 to
3c74d91
Compare
shahar1
force-pushed
the
ui-locale-number-placeholders
branch
4 times, most recently
from
October 7, 2026 13:03
f0f56da to
fdf3882
Compare
choo121600
reviewed
Oct 8, 2026
choo121600
left a comment
Member
There was a problem hiding this comment.
Looks good
But it seems like the CI is failing. Could you take a look?
shahar1
force-pushed
the
ui-locale-number-placeholders
branch
3 times, most recently
from
October 10, 2026 11:54
537af13 to
0e27679
Compare
Counters interpolated into translations (Dag, run and task counts, import errors, pool slots, log search matches) rendered as raw integers, so large values were hard to read and ignored the conventions of the selected UI language (12,345 in English, 12.345 in German, 12 345 in French). Routing them through i18next's built-in number formatter picks up each locale's grouping without custom separator logic. A locale test guards against new counter placeholders skipping the formatter, the translation completeness check keeps treating formatted counts as plural-driving, and the translation skill tells translators to keep the formatter suffix.
i18next blanks a counter passed as undefined only when the placeholder is
unformatted. With the number formatter it looks the value up under the whole
"count, number" expression, finds nothing and prints the raw placeholder, so
a not-yet-loaded total would show "{{total, number}}" to the user instead of
an empty gap.
Strings added to the zh-TW locale on main after the previous rebase used a
bare {{count}} placeholder, which the locale counter test rejects.
Strings added to the pl, el and ca locales on main used a bare {{count}}
placeholder, which the locale counter test rejects.
Claude-Session: https://claude.ai/code/session_01UbFJXAjB2dTsFiiMpc9HCM
shahar1
force-pushed
the
ui-locale-number-placeholders
branch
from
October 10, 2026 11:55
0e27679 to
bc8689f
Compare
1 task done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
related: #73713
Followup to the above, this PR applies the digit grouping in all existing locales (changes in 171 files, most of them are technical as changing
{{count}}to{{counter,number}}.AI Summary
Follow-up to #73713, which grouped digits of numbers the UI renders directly. Counters interpolated into translated strings (Dag, run and task counts, import errors, pool slots, deadlines, log search matches, ...) still render as raw integers, so `12345` shows instead of `12,345` (en), `12.345` (de) or `12 345` (fr).This routes every counter placeholder through i18next's built-in
numberformatter ({{count}}→{{count, number}}) in all locales, so each language gets its own grouping without custom separator logic. Plural selection is unchanged: i18next still picks the plural form from the rawcount.src/i18n/locales.test.tsfails if any locale adds a counter placeholder (count,current,total,missedCount,upcomingCount) without the formatter, and checks grouping for plural and non-plural counters inenandde.breeze ui check-translation-completenesskeeps treating{{count, number}}as plural-driving.airflow-translationsskill tells translators to keep the, numbersuffix.Was generative AI tooling used to co-author this PR?
Generated-by: Claude Code (Opus 5.5) following the guidelines