Conversation
Full Ukrainian translation of the dashboard, following the existing
i18n structure: all 24 namespaces under apps/dashboard/src/i18n/locales/uk/,
registered in the locale list and the two Locale-keyed display maps
(Settings > Language, onboarding).
Also adds docs/i18n/README.uk.md and links it from the language switcher
in the root README and every existing translation.
Key/placeholder parity with en is exact across all 24 files (verified
programmatically). The dashboard's own parity test (i18n-parity.test.ts)
required raising UNTRANSLATED_BASELINE per namespace for this locale's own
irreducible remainder: brand names (Openship Cloud/Edge/Mail, GitHub
Releases, Amazon SES, Cloudflare Tunnel/R2, AWS S3, Backblaze B2,
DigitalOcean Spaces, Microsoft Teams), literal technical strings that must
not change (PEM certificate/key headers, `npm start`, a `pg_dump` command,
a mail-client name list), and placeholder-only templates with no actual
prose (e.g. `{greeting}, {name}`). Every ordinary UI string was translated.
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
uk) as a supported dashboard locale, per CONTRIBUTING.md'''s i18n guide: full translation underapps/dashboard/src/i18n/locales/uk/(all 24 namespaces), registered inlocalesinapps/dashboard/src/i18n/index.ts, and the twoRecord<Locale, string>display-name maps (Settings > Language, onboarding language picker).docs/i18n/README.uk.md(translated root README) and links it from the language-switcher badge row in the root README and every existing translation.{name},{count}, etc.) parity withenis exact across all 24 files — verified programmatically, not just by eye.Why
UNTRANSLATED_BASELINEchangedThe dashboard'''s own
i18n-parity.test.tsratchets a per-namespace count of locale strings that are byte-identical to English. Adding a 10th locale necessarily adds its own irreducible remainder to that count — this is not a translation gap, it'''s exactly the same class of exception every existing locale already has baked into that baseline: brand names (Openship Cloud/Edge/Mail,GitHub Releases,Amazon SES,Cloudflare Tunnel/R2,AWS S3,Backblaze B2,DigitalOcean Spaces,Microsoft Teams), literal technical strings that must not change (PEM headers,npm start, apg_dumpcommand, a mail-client name list), and placeholder-only templates with no actual prose (e.g.{greeting}, {name},{status} → {hostname}). Every ordinary UI string inukwas translated — I audited every singleukvalue the parity checker flagged (bun run i18n:check --full) before touching the baseline, and fixed the ones that were genuinely missed (OAuth field labels, an SSH port label, a cron-expression subtitle, an account-switcher placeholder, etc.) rather than just raising the number to make the test pass.Test plan
uk/*.jsonhas the exact same key set as itsen/*.jsoncounterpart (24/24 match).{placeholder}occurrence count matches betweenenanduk(24/24 match).bun run i18n:check— reviewed the full untranslated-value diff forukbefore adjusting the baseline (see above).bun run test(apps/dashboard) — 1186/1186 passing, including the updatedi18n-parity.test.ts.bun run lint(tsc --noEmit, apps/dashboard) — no errors.