diff --git a/guix/ui.scm b/guix/ui.scm
index 953cf9ea7f48e6778e7ee1af22745f88c54d737e..8893cc8eee7167523ecbf5d8e3a599c65f105350 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -136,9 +136,7 @@ (define-syntax name
             (and (string? (syntax->datum #'fmt))
                  (free-identifier=? #'underscore #'G_))
             #'(begin
-                (format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
-                        (program-name) (program-name)
-                        (gettext prefix %gettext-domain))
+                (print-diagnostic-prefix prefix)
                 (format (guix-warning-port) (gettext fmt %gettext-domain)
                         args (... ...))))
            ((name (N-underscore singular plural n) args (... ...))
@@ -146,9 +144,7 @@ (define-syntax name
                  (string? (syntax->datum #'plural))
                  (free-identifier=? #'N-underscore #'N_))
             #'(begin
-                (format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
-                        (program-name) (program-name)
-                        (gettext prefix %gettext-domain))
+                (print-diagnostic-prefix prefix)
                 (format (guix-warning-port)
                         (ngettext singular plural n %gettext-domain)
                         args (... ...))))))))))
@@ -166,6 +162,14 @@ (define-syntax-rule (leave args ...)
     (report-error args ...)
     (exit 1)))
 
+(define (print-diagnostic-prefix prefix)
+  "Print PREFIX as a diagnostic line prefix."
+  (format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
+          (program-name) (program-name)
+          (if (string-null? prefix)
+              prefix
+              (gettext prefix %gettext-domain))))
+
 (define (print-unbound-variable-error port key args default-printer)
   ;; Print unbound variable errors more nicely, and in the right language.
   (match args