Repository navigation
feat(i18n): Add Russian localization (ru) - #998
Merged
Rinat S (rsolmano) merged 4 commits intoOct 30, 2026
Merged
Conversation
Arhipov Oleg (arhipov-om)
requested review from
Olga Lavrichenko (OLavrik),
Rustam Sadykov (SBOne-Kenobi),
danyaberezun and
Rinat S (rsolmano)
as code owners
October 28, 2026 22:30
Rinat S (rsolmano)
force-pushed
the
add-ui-localization
branch
from
October 29, 2026 21:21
86cc143 to
56e0f4c
Compare
Rinat S (rsolmano)
approved these changes
Oct 30, 2026
Rinat S (rsolmano)
left a comment
Collaborator
There was a problem hiding this comment.
Rebased onto main and filled the 40 keys added there (survey, feedback settings, resource history); addressed the two open review threads and fixed six more mistranslated or truncated strings (untranslated transcript labels, plan-session placeholders missing the Enter/Shift+Enter hint, the review empty state and send tooltip). Locale tests, check:i18n, lint, typecheck, and the language-settings + feedback e2e specs pass. Thanks for the translation!
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.
Problem
ThinkRail's bundled UI did not include Russian, so Russian-speaking users had to use another interface language or maintain a local catalog.
Approach
Add Russian as a bundled locale, using
en.jsonas the source inventory. Preserve interpolation placeholders, indexed markup, technical literals, and Russian CLDR plural categories.Changes
_few/_manyforms for Russian plural families.mainatdf7cb6d2: translated the 40 keys added there (in-app survey, survey invitation, Settings → Feedback, persisted resource history) and dropped the 14 keysmainremoved (user-interview prompt, old resources dock/inspector strings)._oneread-range and idle-day messages, and correctly describe Central's signed-out state.Screenshots
Same scenario and viewport (1440×1000, DPR 1, dark theme), with browser locale
ru-RUand the default System preference. Before is the actual base build at940d15ca(English fallback); After is the branch build at86cc143c(bundled Russian). These are isolated fixture data, not a real account. PNGs live on a review-only assets ref and do not enter the PR file tree.Testing
bun run lint→ passed; Biome reports the existingdesign-audit/buttons.htmlsize warning (1.5 MiB).bun run typecheck→ 25 tasks passed.bun test packages/locales→ 51 passed.bun scripts/check-catalog.ts→ passed.bun run test→ 24/25 workspace tasks passed. The server task reported 2,030 passed, 4 skipped, 1 failed:packages/server/src/terminal/terminalManager.test.ts— “closing a tab removes it and reports closed”. That server file is unchanged by this PR.bun test ./.thinkrail/context/ru-review.test.ts packages/locales→ 61 passed: the 51 locale tests plus 10 temporary regression probes against the real i18next runtime (including 1/21/31/101 and the signed-out wording). The temporary probe does not ship.bun run check:i18n→ 9 passed; checker OK.bun run e2e→ completed: 659 passed, 5 failed out of 664. No tests were skipped, weakened, or changed to obtain this result.model-picker.spec.ts:53: expected provider-group header is hidden behind All models.00-jbcentral-lifecycle.spec.ts:181: expected one model row, received two.00-jbcentral.spec.ts:237: strict locator matched Recent and All-model rows.chat-scroll-stream-mount.spec.ts:113: two oldest-first tab-return viewport cases failed the stream-edge timing assertion.940d15ca→ 4 passed, 1 failed (the same model-picker failure). On the final branch, the same five cases plus bothlanguage-settingstests → 6 passed, 1 failed (again model-picker). The other four full-suite failures did not reproduce in either isolated serial selection; their cause is not established. The relevant tests, picker, and scrolling code are unchanged from the base.Focused serial comparison commands
Run on base and final respectively, after building that revision:
df7cb6d2:bun test packages/locales→ 51 passed;bun scripts/check-catalog.ts→ OK;bun run check:i18n→ OK;bun run lint→ passed (samedesign-audit/buttons.htmlsize warning);bun run typecheck→ 25 tasks passed;bun run e2e e2e/language-settings.spec.ts e2e/feedback.spec.ts→ 9 passed. The full e2e suite and screenshots were not re-run after the rebase.Related issues
No related issue is linked.
Checklist
bun run lint,bun run typecheck,bun run testbun run e2e, orbun run e2e:fullwhen touching agent behavior)SPEC.md/ top-level specs updated to reflect any boundary, contract, or behavior change