Skip to content

feat(i18n): ship Ukrainian - #9190

Merged
saddlepaddle merged 1 commit into
ParadevAI:mainfrom
serhii-kucherenko:serhii/add-ukrainian-language
Oct 31, 2026
Merged

saddlepaddle merged 1 commit into
ParadevAI:mainfrom
serhii-kucherenko:serhii/add-ukrainian-language

Conversation

@serhii-kucherenko

@serhii-kucherenko serhii-kucherenko commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

What & why

Adds Ukrainian (uk) as a full app language: all 7,054 messages, plus the iOS permission prompts and the native composer and attachments-sheet strings. A user who picks «Українська» in Settings, or whose system language is uk-UA, gets the app in Ukrainian. Closes #9189.

  • uk in SUPPORTED_LOCALES, the lazy catalog map and lingui.config; the picker label is «Українська».
  • Plurals carry all four Ukrainian forms (one, few, many, other): 1 проєкт, 3 проєкти, 5 проєктів, 21 проєкт.
  • Mobile: locales/uk.json, uk.lproj for the composer and attachments sheet, and the Hermes PluralRules and RelativeTimeFormat data for uk. The native test now expects few/many for uk, as it does for pl, ru and cs.
  • Glossary: paywall is пейвол.

Terms follow the glossary's "product vocabulary translates" rule, in the register Ukrainian developers actually use: workspace is робочий простір, session is сеанс, task is завдання, but coding agent is кодинг-агент, thread is тред, logs are логи, seed round is seed-раунд. Git verbs keep the forms teams say (коміт, запушити, злити, ребейз); worktree, diff, stash and issue stay in Latin script. Plain UI chrome stays standard product Ukrainian (Налаштування, Скасувати, Застосунок). Spelling follows the 2019 orthography (проєкт). Three new glossary rows record the funding terms, the developer terms and the verb forms for future strings.

Review: a second model read a random 500-string sample (12 fixes), then three reviewers read the whole catalog for register, meaning a dictionary-correct word that Ukrainian developers do not use (208 fixes, one pick per term family).

How I tested it

  • bun run check:i18n: uk has 7,054 messages and 0 missing; compile --strict passes.
  • Biome passes on every changed file, and tsc passes in packages/i18n and apps/mobile. packages/i18n tests pass (169/169), and so do apps/mobile tests (250/250).
  • Repo-wide bun run test on my machine: every task passes except time-outs in host-service and desktop git and shell tests, under load from other builds. This change does not touch those packages.
  • A run through @superset/i18n resolves uk-UA to uk, lazy-loads the catalog and renders the plurals above.
  • In the dev desktop app, driven over CDP with real clicks: Settings → Appearance → Language → Українська. The UI switches at once, with no restart, and keeps the choice after a reload.
  • A look through the running app found two labels that did not fit (the settings search placeholder clipped, a sidebar header wrapped) and verb forms mixed within one group (sample prompts, "Select …" placeholders, the getting-started card). Those are fixed.

Checklist

  • PR title follows conventional commits (type(scope): subject)
  • bun run lint and bun run typecheck pass (CI fails on lint warnings too)
  • "Allow edits from maintainers" is checked on fork PRs
  • I have signed the CLA (the bot asks on your first PR)

Adds uk to SUPPORTED_LOCALES, the lazy catalog map and lingui.config,
with a complete catalog of 7,053 messages, plus the mobile side: iOS
permission strings, composer and attachments-sheet .lproj resources,
and the Hermes PluralRules and RelativeTimeFormat locale data.

The code is uk (the language), not ua (the country). The picker shows
"Українська". Plurals carry all four CLDR categories (one, few, many,
other), and the native test now expects few/many for uk as it does
for pl, ru and cs. Spelling follows the 2019 orthography (проєкт).

Product vocabulary translates per the glossary: робочий простір,
агент, панель, завдання, сеанс, гілка. Git verbs keep the forms
Ukrainian developers use (коміт, закомітити, запушити, злити,
перебазувати); worktree, diff, stash and issue stay in Latin script.
Paywall is пейвол, added to the glossary row.
@coderabbitai

coderabbitai Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e7d2eed4-3f6a-4923-b6a1-a8eaa2af8cd9
Commits

Reviewing files that changed from the base of the PR and between 5dbab35 and af31491.

Files selected for processing: 11
  • apps/mobile/lib/intl-polyfills/intl-polyfills.ts
  • apps/mobile/locales/uk.json
  • apps/mobile/modules/attachments-sheet/ios/Resources/uk.lproj/Localizable.strings
  • apps/mobile/modules/composer/ios/Resources/uk.lproj/Localizable.strings
  • apps/mobile/modules/composer/ios/Resources/uk.lproj/Localizable.stringsdict
  • packages/i18n/glossary.md
  • packages/i18n/lingui.config.ts
  • packages/i18n/locales/uk/messages.po
  • packages/i18n/src/index.ts
  • packages/i18n/src/locales.ts
  • packages/i18n/test/native-localization.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Walkthrough

Ukrainian is now included in locale configuration and plural handling. The mobile app also has Ukrainian permission descriptions and native attachment and composer translations.

Changes: Ukrainian locale support

Layer / File(s) Summary
Register Ukrainian locale and plural handling
packages/i18n/src/locales.ts, packages/i18n/lingui.config.ts, packages/i18n/src/index.ts, apps/mobile/lib/intl-polyfills/intl-polyfills.ts, packages/i18n/test/native-localization.test.ts, packages/i18n/glossary.md
The supported locale list, locale labels, and catalog map include Ukrainian. The PluralRules and RelativeTimeFormat polyfills load Ukrainian locale data. The plural-category test and glossary include Ukrainian.
Add Ukrainian mobile and iOS strings
apps/mobile/locales/uk.json, apps/mobile/modules/attachments-sheet/ios/Resources/uk.lproj/Localizable.strings, apps/mobile/modules/composer/ios/Resources/uk.lproj/Localizable.strings, apps/mobile/modules/composer/ios/Resources/uk.lproj/Localizable.stringsdict
Ukrainian permission descriptions and native attachment and composer translations are added. The attachment count resource defines one, few, many, and other forms.

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature · Severity of issue fixed: Medium

Suggested reviewers: kitenite, saddlepaddle

Merge Risk: Minimal · up to af314

The Ukrainian locale resources are consistent across runtime and native consumers, with no identified merge-blocking risk.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title uses conventional commit format and clearly identifies the main change: shipping Ukrainian localization.
Linked Issues check Passed Issue #9189 is open and directly linked. The PR adds uk to SUPPORTED_LOCALES, lingui.config, and the lazy catalog map. It adds packages/i18n/locales/uk/messages.po and reports 7,054 messages w…
Out of Scope Changes check Passed The changes stay within issue #9189. Locale registration, catalog content, plural handling, mobile resources, Hermes data, glossary guidance, and the related plural test all support shipping Ukrainian…
Docstring Coverage Passed No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat…
Description check Passed The description includes complete What & why, How I tested it, and Checklist sections. It explains the Ukrainian localization scope, links the issue, documents targeted and broader testing, and marks …
Full details: Linked Issues check

Explanation

Issue #9189 is open and directly linked. The PR adds uk to SUPPORTED_LOCALES, lingui.config, and the lazy catalog map. It adds packages/i18n/locales/uk/messages.po and reports 7,054 messages with none missing and compile --strict passing. The catalog uses Ukrainian one, few, many, and other forms. The PR adds iOS permission strings, native composer and attachments-sheet resources, and Hermes PluralRules and RelativeTimeFormat data. It adds the requested glossary-aligned terminology and updates the native plural test for uk.

Full details: Out of Scope Changes check

Explanation

The changes stay within issue #9189. Locale registration, catalog content, plural handling, mobile resources, Hermes data, glossary guidance, and the related plural test all support shipping Ukrainian as an app language. No unrelated product behavior or unrelated feature work is identified.

Full details: Docstring Coverage

Explanation

No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 5 files. (5 skipped: 5 unsupported.)

Full details: Description check

Explanation

The description includes complete What & why, How I tested it, and Checklist sections. It explains the Ukrainian localization scope, links the issue, documents targeted and broader testing, and marks all checklist items complete.

Finishing Touches
Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@greptile-apps

greptile-apps Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable issues were found.

Summary

Adds Ukrainian across the shared app catalog and mobile native text.

  • Ukrainian is now a selectable language across the app.
  • iOS mobile shows Ukrainian text in its native prompts and message controls.

Reviews (1) · Last reviewed commit: "feat(i18n): ship Ukrainian" · Reviewed by Greptile

@saddlepaddle
saddlepaddle merged commit 0dcd64a into ParadevAI:main Oct 31, 2026
15 of 18 checks passed
tsavo-at-pieces added a commit to tsavo-at-pieces/Paradev that referenced this pull request Oct 31, 2026
Brings in main up to 0dcd64a (ParadevAI#9190), which adds the Ukrainian
catalog. The next commit adds this branch's new string to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tsavo-at-pieces added a commit to tsavo-at-pieces/Paradev that referenced this pull request Oct 31, 2026
ParadevAI#9190 added the Ukrainian catalog after this branch added "Refreshes
when Codex next runs." to the other catalogs, so `lingui compile
--strict` failed for uk. The wording matches the catalog's entries for
Claude Code and OpenCode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch had an error being deployed

1 failed deployment
preview — af314915 Deployed Oct 31, 2026 by serhii-kucherenko via Create Database (Neon) #13411
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Ukrainian (uk) as an app language

2 participants