Skip to content

Commit 4b12aa4

Browse files
nightt5879Hmbown
authored andcommitted
fix(tui): localize exact edit preview headers
Derive the Alt+V exact edit preview headings from the active locale without changing the compact approval card path. Add regression coverage for every shipped locale. Addresses Codex review on #4722. Signed-off-by: Nightt <87569709+nightt5879@users.noreply.github.com> (cherry picked from commit d180cb5)
1 parent 3db71c7 commit 4b12aa4

1 file changed

Lines changed: 40 additions & 6 deletions

File tree

crates/tui/src/tui/approval.rs

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -818,12 +818,12 @@ fn edit_file_preview_lines(params: &Value, max_lines: usize) -> Option<Vec<Strin
818818
Some(lines)
819819
}
820820

821-
fn exact_edit_file_preview_lines(params: &Value) -> Option<Vec<String>> {
821+
fn exact_edit_file_preview_lines(params: &Value, locale: Locale) -> Option<Vec<String>> {
822822
let search = param_text(params, &["search"])?;
823823
let replace = param_text(params, &["replace"])?;
824-
let mut lines = vec!["replace this".to_string()];
824+
let mut lines = vec![tr(locale, MessageId::ApprovalLabelReplaceThis).into_owned()];
825825
lines.extend(exact_preview_body_lines("- ", &search));
826-
lines.push("with this".to_string());
826+
lines.push(tr(locale, MessageId::ApprovalLabelWithThis).into_owned());
827827
lines.extend(exact_preview_body_lines("+ ", &replace));
828828
Some(lines)
829829
}
@@ -1409,12 +1409,12 @@ impl ApprovalView {
14091409
}
14101410
content.push('\n');
14111411
if canonical_action_alias(&self.request.tool_name, &self.request.params) == "edit_file"
1412-
&& let Some(preview_lines) = exact_edit_file_preview_lines(&self.request.params)
1412+
&& let Some(preview_lines) = exact_edit_file_preview_lines(&self.request.params, locale)
14131413
{
1414-
content.push_str(&localize_detail_label("Preview", locale));
1414+
content.push_str(&tr(locale, MessageId::ApprovalLabelPreview));
14151415
content.push_str(":\n");
14161416
for line in preview_lines {
1417-
content.push_str(&localize_preview_shell_line("edit_file", &line, locale));
1417+
content.push_str(&line);
14181418
content.push('\n');
14191419
}
14201420
content.push('\n');
@@ -3143,6 +3143,40 @@ diff --git a/src/b.rs b/src/b.rs
31433143
);
31443144
}
31453145

3146+
#[test]
3147+
fn edit_file_details_pager_localizes_preview_headers_for_every_locale() {
3148+
for &locale in Locale::shipped() {
3149+
let request = ApprovalRequest::new(
3150+
"test-id",
3151+
"edit_file",
3152+
"Edit a file on disk",
3153+
&json!({
3154+
"path": "src/lib.rs",
3155+
"search": "old();",
3156+
"replace": "new();"
3157+
}),
3158+
"tool:edit_file",
3159+
);
3160+
let mut view = ApprovalView::new_for_locale(request, locale);
3161+
3162+
let action = view.handle_key(KeyEvent::new(KeyCode::Char('v'), KeyModifiers::ALT));
3163+
let ViewAction::Emit(ViewEvent::OpenTextPager { content, .. }) = action else {
3164+
panic!("Alt+V should open the edit details pager for {locale:?}");
3165+
};
3166+
let expected_headers = format!(
3167+
"{}:\n{}\n- \"old();\"\n{}\n+ \"new();\"",
3168+
tr(locale, MessageId::ApprovalLabelPreview),
3169+
tr(locale, MessageId::ApprovalLabelReplaceThis),
3170+
tr(locale, MessageId::ApprovalLabelWithThis),
3171+
);
3172+
3173+
assert!(
3174+
content.contains(&expected_headers),
3175+
"details pager did not localize edit preview headers for {locale:?}:\n{content}"
3176+
);
3177+
}
3178+
}
3179+
31463180
#[test]
31473181
fn test_approval_view_current_decision_mapping() {
31483182
let mut view = ApprovalView::new(benign_request());

0 commit comments

Comments
 (0)