@@ -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