Skip to content

I18n#11382

Open
ErshovDmitry wants to merge 30 commits into
warpdotdev:masterfrom
ErshovDmitry:i18n
Open

I18n#11382
ErshovDmitry wants to merge 30 commits into
warpdotdev:masterfrom
ErshovDmitry:i18n

Conversation

@ErshovDmitry

@ErshovDmitry ErshovDmitry commented May 20, 2026

Copy link
Copy Markdown

What

Adds i18n (internationalization) support to Warp with Russian locale. Compatible with @ZacharyZcR's YAML approach (#10630 / #10990).

Architecture

  • crates/i18n/t!() / t_required!() macros, TranslationLookup, locale switching
  • resources/bundled/locales/{en,ru}.yml — ~2000 keys each (100% Russian coverage)
  • WARP_LANG env var → system locale → en fallback
  • crate::menu_label() helper — 481 call sites, returns &'static str

Compatibility

Fully drop-in compatible with ZacharyZcR's YAML framework.

Status

cargo check -p warp     → 0 errors, 0 warnings
cargo test -p i18n      → 11/11 pass
cargo test -p warp -- menu_label → 4/4 pass
  • Synced with upstream master (74 commits, June 6 2026)
  • 4 sync waves, ~260 commits total
  • 0 merge conflicts
  • 1 squashed commit

Related

@cla-bot

cla-bot Bot commented May 20, 2026

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community. We could not parse the GitHub identity of the following contributors: Dmitry.
This is most likely caused by a git client misconfiguration; please make sure to:

  1. check if your git client is configured with an email to sign commits git config --list | grep email
  2. If not, set it up using git config --global user.email email@example.com
  3. Make sure that the git commit email is configured in your GitHub account settings, see https://github.com/settings/emails

@oz-for-oss

oz-for-oss Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

@ErshovDmitry

This PR is not linked to an issue that is marked with ready-to-implement.

Issue-state enforcement details:

  • Associated same-repo issues checked: none

  • Required readiness label: ready-to-implement

To continue, link this PR to a same-repo issue such as Closes #123 in the PR description, and make sure that issue has ready-to-implement.

Powered by Oz

@github-actions github-actions Bot added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label May 20, 2026

@oz-for-oss oz-for-oss Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ErshovDmitry

This PR is not linked to an issue that is marked with ready-to-implement.

Issue-state enforcement details:

  • Associated same-repo issues checked: none

  • Required readiness label: ready-to-implement

To continue, link this PR to a same-repo issue such as Closes #123 in the PR description, and make sure that issue has ready-to-implement.

Powered by Oz

@ErshovDmitry

Copy link
Copy Markdown
Author

Oh wow — I just noticed there are already several i18n PRs open (#10630, #10990, #9458, #9922). I should have checked first before opening mine. My apologies for the noise!

That said, I see none of them include Russian yet. If the team settles on one i18n approach (looks like #10630 / #10990 is the leading one?), I'd be happy to contribute Russian translations to that effort instead.

I'll close this PR if it's just adding clutter — just let me know.

Cheers,
Dmitry

@cla-bot

cla-bot Bot commented May 20, 2026

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community. We could not parse the GitHub identity of the following contributors: Dmitry.
This is most likely caused by a git client misconfiguration; please make sure to:

  1. check if your git client is configured with an email to sign commits git config --list | grep email
  2. If not, set it up using git config --global user.email email@example.com
  3. Make sure that the git commit email is configured in your GitHub account settings, see https://github.com/settings/emails

2 similar comments
@cla-bot

cla-bot Bot commented May 20, 2026

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community. We could not parse the GitHub identity of the following contributors: Dmitry.
This is most likely caused by a git client misconfiguration; please make sure to:

  1. check if your git client is configured with an email to sign commits git config --list | grep email
  2. If not, set it up using git config --global user.email email@example.com
  3. Make sure that the git commit email is configured in your GitHub account settings, see https://github.com/settings/emails

@cla-bot

cla-bot Bot commented May 20, 2026

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community. We could not parse the GitHub identity of the following contributors: Dmitry.
This is most likely caused by a git client misconfiguration; please make sure to:

  1. check if your git client is configured with an email to sign commits git config --list | grep email
  2. If not, set it up using git config --global user.email email@example.com
  3. Make sure that the git commit email is configured in your GitHub account settings, see https://github.com/settings/emails

@ErshovDmitry

Copy link
Copy Markdown
Author

Update:** I've rewritten this PR to match @ZacharyZcR's YAML approach from #10630 / #10990:

The Russian ru.yml should be a drop-in addition to the framework once it's approved. Happy to rebase onto whichever PR lands first.

Dmitry

@ErshovDmitry

Copy link
Copy Markdown
Author

@cla-bot check

@cla-bot cla-bot Bot added the cla-signed label May 20, 2026
@cla-bot

cla-bot Bot commented May 20, 2026

Copy link
Copy Markdown

The cla-bot has been summoned, and re-checked this pull request!

@ErshovDmitry

Copy link
Copy Markdown
Author

@oss-maintainers This PR now follows the same YAML-based approach as #10630 / #10990 by @ZacharyZcR — matching crates/i18n/ API, resources/bundled/locales/{en,ru}.yml, t!() / t_required!() macros, and WARP_LANG env var detection.

It's blocked by the issue-state enforcement check (needs a ready-to-implement issue). Could a maintainer please add ready-to-implement to #1194, or let me know if I should create a separate tracking issue?

Russian ru.yml (247 keys) is ready to drop into whichever i18n PR lands first. Happy to rebase.

Cheers,
Dmitry

@ZacharyZcR

Copy link
Copy Markdown

Hello! Maybe we can collaborate on a project! You can reach out to the Warp Slack channel.

@ErshovDmitry

Copy link
Copy Markdown
Author

@ZacharyZcR Thanks for reaching out! Happy to collaborate. We've matched your YAML approach — crates/i18n/, t!()/t_required!() macros, resources/bundled/locales/{en,ru}.yml (1080 keys, full Russian translation). Our ru.yml should be a drop-in addition.

We have some merge conflicts with master to fix first (3 files). Will resolve those and update the PR.

How can we help with #10630? Happy to contribute Russian translations in your format, or collaborate however makes sense.

Cheers,
Dmitry

@ZacharyZcR

Copy link
Copy Markdown

@ZacharyZcR Thanks for reaching out! Happy to collaborate. We've matched your YAML approach — crates/i18n/, t!()/t_required!() macros, resources/bundled/locales/{en,ru}.yml (1080 keys, full Russian translation). Our ru.yml should be a drop-in addition.

We have some merge conflicts with master to fix first (3 files). Will resolve those and update the PR.

How can we help with #10630? Happy to contribute Russian translations in your format, or collaborate however makes sense.

Cheers, Dmitry

Thank you very much! Perhaps we could reach out to Warp’s Slack channel together and let them decide how to proceed with development. Also, your PR needs to be linked to an issue with a specific tag; you can take a look at my PR and issue.

@ErshovDmitry

Copy link
Copy Markdown
Author

@ZacharyZcR Just to clarify — I don't speak English myself, I'm communicating through DeepSeek AI (which also built this PR). So I'm a bit nervous about posting in the Slack channel directly — I don't want to say something wrong.

If you could mention me (@ErshovDmitry) in the #oss-contributors Slack channel, I'd be happy to help! My AI assistant can handle the technical discussion, just need someone to bridge the intro.

Also — merge conflicts with master are now resolved. PR is clean: 0 warnings, 1191 i18n calls, 59 files covered.

Cheers,
Dmitry (via DeepSeek)

@ErshovDmitry

Copy link
Copy Markdown
Author

Ah, just realized — Slack doesn't work in Russia, and VPN isn't straightforward either. So I won't be able to join the Slack channel, sorry about that.

But I'm still here on GitHub and happy to collaborate! We can discuss anything here or on the PRs directly.

Dmitry (via DeepSeek)

@ZacharyZcR

Copy link
Copy Markdown

Ah, just realized — Slack doesn't work in Russia, and VPN isn't straightforward either. So I won't be able to join the Slack channel, sorry about that.

But I'm still here on GitHub and happy to collaborate! We can discuss anything here or on the PRs directly.

Dmitry (via DeepSeek)

Oh, no problem—I’m not an English major either.

@ErshovDmitry

Copy link
Copy Markdown
Author

Status update — synced with upstream master, squashed to 1 commit.

cargo check -p warp     → 0 errors, 0 warnings
cargo test -p i18n      → 11/11 pass
cargo test -p warp -- menu_label → 4/4 pass

@ZacharyZcR — our ru.yml is ready to drop into your framework whenever it lands. Happy to help!

@oss-maintainers — this PR is merge-ready following the same YAML approach as #10630. Would appreciate a ready-to-implement label or guidance on next steps.

- Sync with origin/master (28 commits behind)
- Restore i18n crate, menu_label(), init_locale()
- Re-apply menu_label() to ai_page, features_page, agent_management,
  workspace/view, workspace/mod, local_code_editor
- Convert 11 const strings to fn() -> &'static str for runtime i18n
- Add 4 menu_label tests in app/src/lib.rs
- 0 errors, 0 warnings (cargo check -p warp)
- 11/11 tests pass (cargo test -p i18n)
@ErshovDmitry

Copy link
Copy Markdown
Author

Status update — synced with upstream master (June 1, 2026)

cargo check -p warp     → 0 errors, 0 warnings
cargo test -p i18n      → 11/11 pass
cargo test -p warp -- menu_label → 4/4 pass

Changes since last update:

  • Synced 28 upstream commits from master
  • 487 menu_label() calls across 5 files (ai_page, agent_management, workspace/view, workspace/mod, local_code_editor)
  • 11 const→fn conversions for runtime i18n
  • ~2000 keys in en.yml + ru.yml (100% Russian coverage)
  • 0 merge conflicts with current master

@oss-maintainers — PR is merge-ready. Would appreciate ready-to-implement on #1194 or guidance on next steps.

cc @ZacharyZcR

@ErshovDmitry

Copy link
Copy Markdown
Author

Status update — synced with upstream master (June 6, 2026)

cargo check -p warp     → 0 errors, 0 warnings
cargo test -p i18n      → 11/11 pass
BEHIND origin/master    → 0

Changes since last update:

  • Synced 74 upstream commits (June 4–6)
  • Setup autonomous agent with 6-hour cron sync
  • Updated AGENTS.md with process gates + startup sequence
  • menu_label() calls preserved across all merges (481 calls)
  • en.yml + ru.yml: ~2000 keys, 100% Russian coverage

@oss-maintainers — PR is merge-ready following the same YAML approach as #10630. Would appreciate ready-to-implement on #1194.

cc @ZacharyZcR

…wraps, 2 inline)

- workspace.tab_group.* (13 keys) — view.rs:tab_group_menu_items
- workspace.tab_grouping.* (4 keys) — tab_grouping.rs + tab.rs inline
- terminal.osc52.* (7 keys) — terminal/view.rs OSC 52 banner
- MOVE_TO_GROUP_LABEL const retained as SavePosition anchor key
  (display text via menu_label() in 2 tab.rs callsites)
- 24 keys added to en.yml + ru.yml (balance test passes)

Plan: 9872d72d-ea99-4a7e-9972-2f86f8f59515
Review: 64adc82d-76f4-4662-8784-92ff159e021d (PASS, 0/0)
Trace: 8a3fb5f8-9cac-47bc-9755-98056509002d
Code map: 6 verified=true
@ErshovDmitry

Copy link
Copy Markdown
Author

Synced with upstream master (62 new commits, 2026-06-10, commit bdcf11c). 24 new i18n keys added (workspace.tab_group., workspace.tab_grouping., terminal.osc52.*), 24 menu_label() wraps, 2 inline wraps, en.yml/ru.yml balance test passes (11/11 i18n tests, cargo check 0 errors).

This PR remains blocked on issue #1194 needing the ready-to-implement label (per Oz's review). I see #10990 is the spec PR for the i18n framework — once that lands and #1194 is advanced, this PR should be ready to merge.

Fully compatible with @ZacharyZcR's YAML approach (#10630 / #10990). Happy to adjust the PR description, split into smaller PRs, or coordinate however the team prefers.

@github-actions

Copy link
Copy Markdown
Contributor

Hi @ErshovDmitry — a reviewer requested changes on this PR and it hasn't had activity from you in 7 days. When you get a chance, please push updates or reply to the review so a reviewer can take another look. Without activity, this PR will be automatically closed after 14 days of inactivity.

# Conflicts:
#	app/src/workspace/view/tab_grouping.rs
Resolved conflicts:
- mod.rs: i18n menu_label + master's InstallOz/UninstallOz enums
- view.rs: merge imports (TAB_PIN_INDICATOR_ICON_SIZE), refactored
  handle_cli_command_result with i18n menu_label for Learn more

cargo check: 0 warnings, cargo test -p i18n: 11/11
provider_keys_modal.rs: 7 strings (Add API key, OpenAI/Anthropic/Google labels,
  Cancel, Add keys, description)
free_ai_removal_modal.rs: 7 strings (notice titles/bodies, bonus credits,
  prompt_suggestions texts, Bring your own AI, View pricing)
en.yml + ru.yml: +22 keys each (provider_keys + free_ai_removal sections)

cargo check: 0 warnings, cargo test -p i18n: 11/11, key balance OK
onboarding/Cargo.toml: added i18n dependency
onboarding/src/lib.rs: added menu_label() helper
ai_access_slide.rs: 14 strings wrapped
ai_setup_slide.rs: 16 strings (12 UI + 4 feature checklist)
en.yml + ru.yml: +33 keys each (onboarding.ai_access + onboarding.ai_setup)

cargo check: 0 warnings, cargo test -p i18n: 11/11, key balance OK
@ErshovDmitry

Copy link
Copy Markdown
Author

Status update — synced with upstream master (June 23, 2026)

cargo check -p warp     → 0 errors, 0 warnings
cargo test -p i18n      → 11/11 pass
BEHIND origin/master    → 0

Changes since last update (June 10):

  • Synced 58 upstream commits (464 files, +19K/−4K lines)
  • Wrapped 44 new i18n strings across 4 files:
    • provider_keys_modal.rs (7 strings)
    • free_ai_removal_modal.rs (7 strings)
    • ai_access_slide.rs (14 strings)
    • ai_setup_slide.rs (16 strings)
  • Added i18n dependency to onboarding crate
  • en.yml + ru.yml: +55 keys, 100% Russian coverage
  • ~2055 keys total, key balance test passes

@oss-maintainers — PR remains merge-ready following the same YAML approach as #10630. Would appreciate guidance on next steps.

cc @ZacharyZcR

ErshovDmitry and others added 16 commits June 30, 2026 02:20
…xecution_profile, platform, about, scripting)
Wrap user-visible English strings in 9 onboarding files via crate::menu_label:

- slides/intro_slide.rs (onboarding.intro.*, common.get_started)
- slides/third_party_slide.rs (onboarding.third_party.*, common.{back,next,enabled,disabled})
- slides/project_slide.rs (onboarding.project.*, common.{back,next,skip,get_warping})
- slides/customize_slide.rs (onboarding.customize.*, common.{back,next,enabled,disabled})
- slides/intention_slide.rs (onboarding.intention.*, common.{back,next,get_warping})
- slides/theme_picker_slide.rs (onboarding.theme_picker.*, common.{back,next,get_warping})
- slides/agent_slide.rs (onboarding.agent_slide.*, common.{back,next,recommended})
- slides/ai_setup_slide.rs (onboarding.ai_setup.* [wired from existing YAML], common.{back,next}; WARP_AGENT_FEATURES const -> warp_agent_features() fn)
- callout/view.rs (onboarding.callout.*, common.{next,skip,submit,finish}; format!() -> menu_label + placeholder .replace())

Reuses common.* for cross-slide UI labels (Back/Next/Enabled/Disabled/etc.).
ai_setup.* keys already present in en.yml; only code wiring added.
…s_page namespace)

- Convert PAGE_TITLE_TEXT const to page_title_text() fn
- Wrap 3 format! interpolations in handle_log_out + autoinstall_from_gallery
  with i18n::interpolate + crate::menu_label
- Wrap 2 plain error-toast literals with crate::menu_label
- Wrap search_terms() literal

7 sites wrapped. YAML keys already exist (no YAML edit needed).
cargo check -p warp: clean
• Convert all team_page const strings (placeholders, button labels, instructions) to fn helpers using crate::menu_label()

• Wrap inline literals: section headers (By link/email/discovery, Team members), success/error toasts, menu action labels, badge text, tooltip, pricing info

• Use i18n::interpolate for format strings: team member count, member limit tooltip, teammate count, success/failure with counts

• Display impl for TeamsInviteOption also wrapped

• Settings teams.* namespace — fallback to English strings works without YAML updates
Wrap ~156 user-visible strings in app/src/settings_view/features_page.rs
using crate::menu_label() with settings.features.* namespaced keys.
Includes:

- const→fn conversion for cfg_if! EXTRA_META_KEYS_* (Left/Right Option/Alt)
- FixedBinding labels: Configure Global Hotkey, Make Warp the default terminal
- 42 ToggleSettingActionPair command palette labels (toggle.* sub-namespace)
- Pin to top/bottom/left/right dropdown items
- Active Screen, After all/After current tab, Default (graphics backend)
- Width %, Height %, Autohides on loss of keyboard focus
- When a command takes longer than / seconds to complete
- Keybinding label, Click to set global hotkey, Change keybinding
- Press new keyboard shortcut
- common.cancel / common.save for shared buttons
- All render_body_item() labels for the ~50 widget renders
- Dropdown items: Code editor line numbers, Ctrl+Tab behavior, etc.
- Clipboard access (OSC 52) + tooltip, New tab placement
- Default mode for new sessions, Global Workflows in Command Search
- Linux selection clipboard + tooltip
- Preferred graphics backend + Current backend interpolation
- Wayland setting + description (with restart_for_changes concat)
- Asynchronous find + tooltip
- tab behavior keybinding info strings with i18n::interpolate()
- block_maximum_rows_description() with 10M/1M interpolation
- All changes wrapped inline without editing YAML files

cargo check -p warp passes (0 errors in features_page.rs).
DOES NOT touch telemetry PascalCase .to_string() action names.
Add 250 missing en+ru keys across 14 namespaces:
codereview.git_dialog, common, onboarding, settings.*, terminal.share_block

Plan→Review(×4)→Code cycle. All checks pass:
cargo check 0e, cargo test 11/11, 0 collisions, 0 orphans, 0 missing

3 review fixes: toggle lowercase, billing_and_usage consistency
@cla-bot

cla-bot Bot commented Jun 30, 2026

Copy link
Copy Markdown

Thank you for your pull request and welcome to our community. We could not parse the GitHub identity of the following contributors: i18n-bot.
This is most likely caused by a git client misconfiguration; please make sure to:

  1. check if your git client is configured with an email to sign commits git config --list | grep email
  2. If not, set it up using git config --global user.email email@example.com
  3. Make sure that the git commit email is configured in your GitHub account settings, see https://github.com/settings/emails

@cla-bot cla-bot Bot removed the cla-signed label Jun 30, 2026
@ErshovDmitry

Copy link
Copy Markdown
Author

Status update — 2026-06-30

Full sync + wrap + YAML merge cycle completed:

Upstream sync:

  • 158 commits from origin/master, 0 BEHIND
  • 62 conflicts resolved (6 parallel agents)

String wrapping (2 rounds):

  • Round 1: ~91 strings in 8 files (post-sync)
  • Round 2: ~460 strings in ~30 files (19 parallel agents)

YAML merge (Phase 2):

  • 259 missing en+ru keys generated and merged
  • 38 parallel agents, plan→review(×4)→code cycle
  • cargo check -p warp: 0 errors
  • cargo test -p i18n: 11/11 pass
  • 0 collisions, 0 orphans, 0 missing production keys

Build: ✅ green
Branch: i18n at 898cdca91
Pushed: to fork ErshovDmitry/warp-i18n

Remaining out of scope: ~108 appearance keys, 15 unwrapped files, 6 share_block fallback strings — will address in next iteration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Application language switch / i18n Support multiple languages and localizations

2 participants