Repository navigation
Unify translations, plurals and number/date formats (T13: IN-02, IN-05, IN-06, IN-08, IN-09, IN-10, IN-12, IN-13, IN-15) - #223
Merged
Conversation
IN-02: the HU and ES Terms say sign-in uses a six-digit code sent by email, not a link. IN-05: one glossary per language for tools, roles and formats, kept in docs/standards/ui.md. Competition format names stay in English. IN-06, IN-09: HU article and case fixes, MI instead of AI, and one suffix form for DebateLab. IN-08, IN-13: numbers group four-digit values in ES and HU, dates name the month, decimals use the language separator, N/A is translated. IN-10: count strings go through i18next plurals. IN-12: a test lists ES/HU values identical to English, with an allowlist of intended ones. IN-15: shorter ES Ask placeholder; "p. ej." without the stray comma. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At 375 px the Ask input leaves 131 px for text. The new placeholders measure 119 px (ES) and 110 px (HU) in the app font. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On mobile, 'Menü megnyitása' also contains 'megnyitás', so the substring match found two buttons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Exempt the English competition format names in the agentic language judge; restore the space after the bullet in History chat rows; hyphenate HU MI- compounds outside the legal pages and use one wording for the AI output language; retranslate onboarding.readyDesc from the current English; localize the admin zero cost; memoize the Library draft word count. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hyphenate the remaining HU MI- and vitapárbaj-forduló compounds, join Esetstruktúra and Esettámadás-elemzés, use Exával, say Megnyitás and időmérő in the flowchart dialog and Sparring round, cache formatDecimal formatters, and note in the glossary that the Timer spells out R1 and R2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedEnable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Next included review available in 21 minutes. View limit details
Note 🎁 Summarized by CodeRabbit Free
Comment |
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.
Summary
T13 from the 22 Oct 2026 QA report on prod, the last translation batch. HU and ES now say the same thing as EN in the Terms sign-in sentence, each language uses one name per tool, role and format, counts take plural forms, and numbers and dates follow the interface language. A new test catches Spanish or Hungarian values left identical to English.
Per issue
IN-02 (Medium): HU Terms said sign-in is by an emailed link (legal text)
Only the sign-in clause of
termsPage.p3changed. The rest of each paragraph is byte-identical to main.ES had the same "link" wording, so it changed too. EN p3 reads "You may sign in with Google, email-based sign-in, or an admin-issued demo code." It doesn't name the six digits. HU and ES now name the code, which is the real flow.
LoginPage.tsxasks for six digits andsupabase/config.tomlsetsotp_length = 6. EN was not part of the approval, so I left it alone. Aligning EN to "a six-digit code sent by email" would be a small follow-up. Both review rounds checked these sentences against EN and found them acceptable.IN-05 (Low): one glossary per language
The glossary is now in docs/standards/ui.md, and the catalogs follow it:
/toolspages and the SEO titles already did. A few of these were translated before and are now English on purpose: ES/HUdebate.formats.bpand HUdebate.formats.policy. This is deliberate, not a regression. HU Sparring "Public Forum · 8 beszéd" and the Timer's "Nyilvános fórum" now match. So do ES "Foro público", "Política" and "Parlamentario británico", and HU "Politikai", "Szakpolitikai" and "Brit parlamenti"./toolsuse.packages/corethat theaiEdge Function also enforces, and Sparring has turn tables for exactly three formats. Changing either needs an Edge Function change, which this batch excludes. The names are now the same everywhere.IN-06 (Low): HU grammar
IN-08 (Low): number separators, gender, duplicate card names
formatNumbernow usesuseGrouping: 'always'. The Sparring counter reads 40/1.200 (ES) and 40/1 200 (HU). Engines that don't know'always'treat it astrue, which is the old behaviour.IN-09 (Nit): HU "MI" vs "AI", DebateLab suffixes
IN-10 (Low): count strings had no plural forms
count:debateCountsLabelinCurrentDebateStrip.tsx_one/_otherwere fine.src/test/i18n-keys.test.tsalready enforces the suffixes for literalcountcalls.src/test/i18n.test.tschecks "1 source" / "2 sources", "1 fuente" / "2 fuentes", "1 forrás" / "2 forrás", and the composed debate counts in all three languages.IN-12 (Low): untranslated values
src/test/i18n-untranslated.test.tslists every ES/HU value identical to English, in both namespaces. It fails on anything not on its allowlist, and also on allowlist entries that are no longer identical. The allowlist is grouped by reason:IN-13 (Nit): dd/mm/yyyy, decimals, "N/A"
formatDecimalcovers Generate and Ask durations and admin costs and rates ("1,5 s" in ES and HU).common.notAvailablekey translates it: N/A, N/D, nincs adat. It is the default fallback indate-format.tsand replaces the literal in PDF export.src/test/date-format.test.tscovers numbers, decimals, dates and the fallback per language.IN-15 (Nit): ES placeholders
Verification
GitHub Actions minutes are used up, so these are local runs of the full
npm run verify, not a CI pass. Verify passed at all three heads:649f2cd7(first version),c3ddf907(round 1 fixes) andca589e10.ca589e10is the PR head: the round 2 fixes plus a normal merge oforigin/mainat073dd08d(#220, no shared files). Atca589e10:npm test: 88 files, 634 tests passedtest:collaboration: 5 files, 30 tests passedtest:edge: 457 passed, 0 failedbuild(vite build, prerender of all 10 public pages, sitemap, site check, build boundaries): passtest:sw: all checks true, includinglanguageSwitchOfflineandpublicPagesKeepTheirOwnHtmltest:e2e:smoke: 47 passedI reran the specs whose pinned strings this branch changes on desktop and mobile Chromium:
e2e/hungarian-parity,localization,first-run,sparringandauthed-pages. Atca589e10, 112/112 passed. The first run there failed 4 mobile tests with "Executable doesn't exist", because another process had deleted the shared~/.cache/ms-playwrightmid-run. I reinstalled Chromium with the repo's pinned Playwright (no--force), and the rerun passed. Earlier at649f2cd7, this run caught one real failure: on mobile, the HU parity spec's "Megnyitás" lookup also matched "Menü megnyitása". It now usesexact: true.The verify recipe
.claude/skills/verify-debatelab/recipes/localization.spec.tschanged only in a comment, the old HU login title. Its assertion readshu.login.titlefrom the catalog. I didn't rerun it, and I didn't take the shared stack lock.Screenshots. 42 captures at 375 and 1280 px in EN, ES and HU, taken at
649f2cd7. They are kept locally in.verify/artifacts/t13-evidence/, becauseghcan't attach them. They come from a credential-free Playwright run on this worktree's port with a stubbed session; only thedebates,current_debates,sourcesandsource_foldersreads are stubbed. They prove the client only. The later review fixes changed one string on these screens: HU Library now says "Az MI-válaszok…" with a hyphen. In the Sparring setup shots the turn list is collapsed, so the new HU role names show in the format description line, not as turn labels. The captures show:/termssection 3 in all three languages.Review rounds (fresh-context Claude subagent,
claude-opus-5-5, full diff against main)agentic/pages.e2e.ts) didn't exempt the English format names. No replay entry embeds that text, so nothing needed re-recording.onboarding.readyDesc, the admin zero cost, the memoized word count and "Időmérő-kijelző".attackResults.critical/major/minor.discuss.tsreads them through a dynamic key.formatDecimalcaches its formatters._manyplural forms.Left open
agentic/pages.e2e.tschanged only in its exemption text. It uses onlyagent.assert, which isn't cached, so no replay entry needs re-recording.public/online-debate-timer/index.htmlandscripts/seo_guides.pystill say "Standard (4-6-6-3)". The app now says "School 4-6-6-3". Those pages are generated SEO content, outside this batch._manyplurals. i18next 23 uses themanycategory for Spanish counts of 1,000,000 and up, and no ES plural in the catalog has a_manyform. This predates the batch, and no count in the app gets that large.To check on the Vercel preview or staging
useGrouping: 'always'falls back to locale grouping, which shows 1200.No migrations, no Edge Function changes, and no billing or workspace-invite code touched.
🤖 Generated with Claude Code