Repository navigation
feat(desktop-gpui): localize every GPUI surface and review all six translations - #3516
Conversation
…ur correction, audio library and crop dialog
…timeline and editor tabs
…llow the system language
… the permission prompts
# Conflicts: # apps/desktop-gpui/src/editor_window.rs # apps/desktop-gpui/src/target_overlay.rs
… review of every catalog
…, clip transitions, camera blur labels, recording errors and decimals
… number rules in the glossary
…ns after a second review
|
@greptileai review |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
| Some(error) => format!("Quit canceled: {error}. Cap will stay open so you can finish or recover the recording."), | ||
| None if action == QuitAction::TimedOut => "Quit canceled because recording shutdown is still pending. Cap will stay open. Use Stop once available, then try Quit again.".into(), | ||
| None => "Quit canceled because recording shutdown could not be confirmed. Cap will stay open. Use Stop, then try Quit again.".into(), | ||
| Some(error) => tr::dialog::quit::canceled(error), |
There was a problem hiding this comment.
Quit errors stay partly English
When quitting fails, tr::dialog::quit::canceled(error) embeds the raw English recording error in the translated dialog. Japanese users can still see “Stop task failed.” even though it has a translation. The mixed-language message also replaces session.error, and localize cannot recognize the translated wrapper later.
Localize the inner error before building the dialog.
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop-gpui/src/menus.rs
Line: 776
Comment:
**Quit errors stay partly English**
When quitting fails, `tr::dialog::quit::canceled(error)` embeds the raw English recording error in the translated dialog. Japanese users can still see “Stop task failed.” even though it has a translation. The mixed-language message also replaces `session.error`, and `localize` cannot recognize the translated wrapper later.
Localize the inner error before building the dialog.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.There was a problem hiding this comment.
Fixed in the latest push.
| // Catalogues | ||
| // --------------------------------------------------------------------------- | ||
|
|
||
| /// A catalogue label, read in the current language each time it is drawn. |
There was a problem hiding this comment.
The new comment above Label only describes the type and how it is used. AGENTS.md requires comments to explain non-obvious context and explicitly bans comments that narrate code or restate types.
Remove this comment and the new descriptive catalog section comments, such as the one in en.toml. This repository requirement must be satisfied before merging.
Context Used: AGENTS.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop-gpui/src/editor_tabs.rs
Line: 51
Comment:
**New comments repeat the code**
The new comment above `Label` only describes the type and how it is used. `AGENTS.md` requires comments to explain non-obvious context and explicitly bans comments that narrate code or restate types.
Remove this comment and the new descriptive catalog section comments, such as the one in `en.toml`. This repository requirement must be satisfied before merging.
**Context Used:** AGENTS.md ([source](https://github.com/capsoftware/cap/blob/main/AGENTS.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Fixed in the latest push.
…eprompter speed and the missing CLI message
…ign-in row so they fit
…p comments that restate code
|
@greptileai review |
| .when(hinted, |label| label.flex_none()) | ||
| .when(!hinted, |label| label.flex_1().min_w_0()) |
There was a problem hiding this comment.
Disabled merge rows now keep the full label on one line and give the reason only the leftover width. In the 300px menu, German labels such as “Mit vorherigem Clip zusammenführen” leave too little room for the reason, which is cut off after two short lines. Users cannot read why merging is blocked or what would enable it.
This is non-blocking, but putting the reason below the label or widening these rows would keep it readable.
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop-gpui/src/editor_window.rs
Line: 1868-1869
Comment:
**Merge reasons get cut off**
Disabled merge rows now keep the full label on one line and give the reason only the leftover width. In the 300px menu, German labels such as “Mit vorherigem Clip zusammenführen” leave too little room for the reason, which is cut off after two short lines. Users cannot read why merging is blocked or what would enable it.
This is non-blocking, but putting the reason below the label or widening these rows would keep it readable.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
# Conflicts: # apps/desktop-gpui/src/target_overlay.rs
|
@greptileai review |
Every GPUI surface now follows the chosen language, the six catalogs have had a native-level review, and the language picker ships in release builds.
This lands the open localization stack (#3422, #3423, #3428, #3434) merged with current
main, plus an audit of everything added since and a review of every translated string.Coverage
Strings
mainadded after that stack was written, now localized:target_overlay.rs): window size, Focus mode card and its hints, area ratio / reset / fill hints, countdown and mode picker hints.editor_export.rs:2295).editor_window.rs).editor_timeline.rs).store.rs:63).Errors shown to the user
Recording and upload errors stay English where they are created, because they are logged, matched to classify failures (
instant_cleanup::classify_start_failure, the Linux visible-window fallback) and saved in upload state.i18n::messages::localizetranslates them where they are shown: the main window error card, the recording controls, and the upload status in the library and Settings → Recordings.prefix{inner}suffixwrappers, nested a few deep. Engine text it doesn't know passes through unchanged.Numbers
i18n::decimalwrites1,5 GBin French, Spanish and German for the numbers inside translated sentences: export size and time estimates, free storage, 3D shot lengths and transition lengths. Other languages and English are unchanged.Translation review
Every key in zh-CN, ja, fr, es, de and hi was reviewed against the English context, the source and Apple's own localized wording. About 590 strings changed. Most of the changes are about consistency:
….locales/GLOSSARY.mdrecords these choices, the error rule and the decimal rule.Fitting the longer languages
editor_window.rs,clip_menu_row). English already cut "Split at playhead" short, and Japanese and German lost the label entirely.Release
Systemfollows the macOS language in release builds.CFBundleLocalizationsplusInfoPlist.stringsin each language mean the permission prompts use the system language.

Confidence Score: 5/5
The PR appears safe to merge, with the earlier non-blocking clip-menu text clipping still outstanding.Findings
Fix with agent prompt
Summary
Extends GPUI translations across the editor, screenshot tools, recording picker, and dialogs.
Reviews (4) · Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." · Reviewed by Greptile