Normalize and unwrap translatable strings (messages and comments)
Marco Ricci

Marco Ricci commited on 2025-01-15 16:01:44
Zeige 1 geänderte Dateien mit 436 Einfügungen und 695 Löschungen.


Rewrite one-paragraph comments and strings as one-line strings, with
implicit line continuation if necessary.  This is how they would appear
anyway if printed via `repr`, and in the `mkdocstrings`-extracted API
documentation.  Further trim the "TRANSLATORS:" prefix from comments; it
is added automatically during `.po` file writing as necessary.

Some minor changes to the docstrings have also been made:

  * `Label`
      - `VAULT_METAVAR_SERVICE`: Trim `as "service_metavar"` from the`
        comments for consistency.
  * DebugMsgTemplate
      - `VAULT_NATIVE_EVP_BYTESTOKEY_RESULT`: Use the correct message.
      - `VAULT_NATIVE_CHECKING_MAC_DETAILS`,
        `VAULT_NATIVE_V02_PAYLOAD_MAC_POSTPROCESSING`: Fix reference to
        `InfoMsgTemplate.VAULT_NATIVE_PARSING_IV_PAYLOAD_AND_MAC`
  * InfoMsgTemplate
      - `VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC`: Use "these terms" instead
        of "this term".

The diff is hard to read in normal "line" mode, but much clearer if read
in "word-diff" mode (with quotes also treated as whitespace).
... ...
@@ -545,34 +545,28 @@ def _Commented(  # noqa: N802
545 545
 
546 546
 class Label(enum.Enum):
547 547
     DEPRECATION_WARNING_LABEL = _Commented(
548
-        comments=r"""
549
-        TRANSLATORS: This is a short label that will be prepended to
550
-        a warning message, e.g., "Deprecation warning: A subcommand will
551
-        be required in v1.0."
552
-        """,
548
+        comments='This is a short label that will be prepended to '
549
+        'a warning message, e.g., "Deprecation warning: A subcommand '
550
+        'will be required in v1.0."',
553 551
     )(
554 552
         context='Label :: Diagnostics :: Marker',
555 553
         single='Deprecation warning',
556 554
     )
557 555
     WARNING_LABEL = _Commented(
558
-        comments=r"""
559
-        TRANSLATORS: This is a short label that will be prepended to
560
-        a warning message, e.g., "Warning: An empty service name is not
561
-        supported by vault(1)."
562
-        """,
556
+        comments='This is a short label that will be prepended to '
557
+        'a warning message, e.g., "Warning: An empty service name '
558
+        'is not supported by vault(1)."',
563 559
     )(
564 560
         context='Label :: Diagnostics :: Marker',
565 561
         single='Warning',
566 562
     )
567 563
     CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL = (
568 564
         _Commented(
569
-            comments=r"""
570
-            TRANSLATORS: This is one of two values of the settings_type
571
-            metavar used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS
572
-            entry.  It is only used there.  The full sentence then
573
-            reads: "Cannot update the global settings without any given
574
-            settings."
575
-            """,
565
+            comments='This is one of two values of the settings_type metavar '
566
+            'used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS entry.  '
567
+            'It is only used there.  '
568
+            'The full sentence then reads: '
569
+            '"Cannot update the global settings without any given settings."',
576 570
         )(
577 571
             context='Label :: Error message :: Metavar',
578 572
             single='global settings',
... ...
@@ -580,173 +574,143 @@ class Label(enum.Enum):
580 574
     )
581 575
     CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE = (
582 576
         _Commented(
583
-            comments=r"""
584
-            TRANSLATORS: This is one of two values of the settings_type
585
-            metavar used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS
586
-            entry.  It is only used there.  The full sentence then
587
-            reads: "Cannot update the service-specific settings without
588
-            any given settings."
589
-            """,
577
+            comments='This is one of two values of the settings_type metavar '
578
+            'used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS entry.  '
579
+            'It is only used there.  '
580
+            'The full sentence then reads: '
581
+            '"Cannot update the service-specific settings without any '
582
+            'given settings."',
590 583
         )(
591 584
             context='Label :: Error message :: Metavar',
592 585
             single='service-specific settings',
593 586
         )
594 587
     )
595 588
     DERIVEPASSPHRASE_01 = _Commented(
596
-        comments=r"""
597
-        TRANSLATORS: This is the first paragraph of the command help
598
-        text, but it also appears (in truncated form, if necessary) as
599
-        one-line help text for this command.  The translation should
600
-        thus be as meaningful as possible even if truncated.
601
-        """,
589
+        comments='This is the first paragraph of the command help text, '
590
+        'but it also appears (in truncated form, if necessary) '
591
+        'as one-line help text for this command.  '
592
+        'The translation should thus be as meaningful as possible '
593
+        'even if truncated.',
602 594
     )(
603 595
         context='Label :: Help text :: Explanation',
604
-        single="""
605
-        Derive a strong passphrase, deterministically, from a master secret.
606
-        """,
596
+        single='Derive a strong passphrase, deterministically, '
597
+        'from a master secret.',
607 598
     )
608 599
     DERIVEPASSPHRASE_02 = _Commented(
609 600
         comments='',
610 601
     )(
611 602
         context='Label :: Help text :: Explanation',
612
-        single="""
613
-        The currently implemented subcommands are "vault" (for the
614
-        scheme used by vault) and "export" (for exporting foreign
615
-        configuration data).  See the respective `--help` output for
616
-        instructions.  If no subcommand is given, we default to "vault".
617
-        """,
603
+        single='The currently implemented subcommands are "vault" '
604
+        '(for the scheme used by vault) and "export" '
605
+        '(for exporting foreign configuration data).  '
606
+        'See the respective `--help` output for instructions.  '
607
+        'If no subcommand is given, we default to "vault".',
618 608
     )
619 609
     DERIVEPASSPHRASE_03 = _Commented(
620 610
         comments='',
621 611
     )(
622 612
         context='Label :: Help text :: Explanation',
623
-        single="""
624
-        Deprecation notice: Defaulting to "vault" is deprecated.
625
-        Starting in v1.0, the subcommand must be specified explicitly.
626
-        """,
613
+        single='Deprecation notice: Defaulting to "vault" is deprecated.  '
614
+        'Starting in v1.0, the subcommand must be specified explicitly.',
627 615
     )
628 616
     DERIVEPASSPHRASE_EPILOG_01 = _Commented(
629 617
         comments='',
630 618
     )(
631 619
         context='Label :: Help text :: Explanation',
632
-        single=r"""
633
-        Configuration is stored in a directory according to the
634
-        `DERIVEPASSPHRASE_PATH` variable, which defaults to
635
-        `~/.derivepassphrase` on UNIX-like systems and
636
-        `C:\Users\<user>\AppData\Roaming\Derivepassphrase` on Windows.
637
-        """,
620
+        single='Configuration is stored in a directory according to the '
621
+        '`DERIVEPASSPHRASE_PATH` variable, which defaults to '
622
+        '`~/.derivepassphrase` on UNIX-like systems and '
623
+        r'`C:\Users\<user>\AppData\Roaming\Derivepassphrase` on Windows.',
638 624
     )
639 625
     DERIVEPASSPHRASE_EXPORT_01 = _Commented(
640
-        comments=r"""
641
-        TRANSLATORS: This is the first paragraph of the command help
642
-        text, but it also appears (in truncated form, if necessary) as
643
-        one-line help text for this command.  The translation should
644
-        thus be as meaningful as possible even if truncated.
645
-        """,
626
+        comments='This is the first paragraph of the command help text, '
627
+        'but it also appears (in truncated form, if necessary) '
628
+        'as one-line help text for this command.  '
629
+        'The translation should thus be as meaningful as possible '
630
+        'even if truncated.',
646 631
     )(
647 632
         context='Label :: Help text :: Explanation',
648
-        single="""
649
-        Export a foreign configuration to standard output.
650
-        """,
633
+        single='Export a foreign configuration to standard output.',
651 634
     )
652 635
     DERIVEPASSPHRASE_EXPORT_02 = _Commented(
653 636
         comments='',
654 637
     )(
655 638
         context='Label :: Help text :: Explanation',
656
-        single="""
657
-        The only available subcommand is "vault", which implements the
658
-        vault-native configuration scheme.  If no subcommand is given,
659
-        we default to "vault".
660
-        """,
639
+        single='The only available subcommand is "vault", '
640
+        'which implements the vault-native configuration scheme.  '
641
+        'If no subcommand is given, we default to "vault".',
661 642
     )
662 643
     DERIVEPASSPHRASE_EXPORT_03 = DERIVEPASSPHRASE_03
663 644
     DERIVEPASSPHRASE_EXPORT_VAULT_01 = _Commented(
664
-        comments=r"""
665
-        TRANSLATORS: This is the first paragraph of the command help
666
-        text, but it also appears (in truncated form, if necessary) as
667
-        one-line help text for this command.  The translation should
668
-        thus be as meaningful as possible even if truncated.
669
-        """,
645
+        comments='This is the first paragraph of the command help text, '
646
+        'but it also appears (in truncated form, if necessary) '
647
+        'as one-line help text for this command.  '
648
+        'The translation should thus be as meaningful as possible '
649
+        'even if truncated.',
670 650
     )(
671 651
         context='Label :: Help text :: Explanation',
672
-        single="""
673
-        Export a vault-native configuration to standard output.
674
-        """,
652
+        single='Export a vault-native configuration to standard output.',
675 653
     )
676 654
     DERIVEPASSPHRASE_EXPORT_VAULT_02 = _Commented(
677 655
         comments='',
678 656
     )(
679 657
         context='Label :: Help text :: Explanation',
680
-        single="""
681
-        Depending on the configuration format, {path_metavar!s} may
682
-        either be a file or a directory.  We support the vault "v0.2",
683
-        "v0.3" and "storeroom" formats.
684
-        """,
658
+        single='Depending on the configuration format, '
659
+        '{path_metavar!s} may either be a file or a directory.  '
660
+        'We support the vault "v0.2", "v0.3" and "storeroom" formats.',
685 661
         flags='python-brace-format',
686 662
     )
687 663
     DERIVEPASSPHRASE_EXPORT_VAULT_03 = _Commented(
688 664
         comments='',
689 665
     )(
690 666
         context='Label :: Help text :: Explanation',
691
-        single="""
692
-        If {path_metavar!s} is explicitly given as `VAULT_PATH`, then
693
-        use the `VAULT_PATH` environment variable to determine the
694
-        correct path.  (Use `./VAULT_PATH` or similar to indicate
695
-        a file/directory actually named `VAULT_PATH`.)
696
-        """,
667
+        single='If {path_metavar!s} is explicitly given as `VAULT_PATH`, '
668
+        'then use the `VAULT_PATH` environment variable to '
669
+        'determine the correct path.  '
670
+        '(Use `./VAULT_PATH` or similar to indicate a file/directory '
671
+        'actually named `VAULT_PATH`.)',
697 672
         flags='python-brace-format',
698 673
     )
699 674
     DERIVEPASSPHRASE_VAULT_01 = _Commented(
700
-        comments=r"""
701
-        TRANSLATORS: This is the first paragraph of the command help
702
-        text, but it also appears (in truncated form, if necessary) as
703
-        one-line help text for this command.  The translation should
704
-        thus be as meaningful as possible even if truncated.
705
-        """,
675
+        comments='This is the first paragraph of the command help text, '
676
+        'but it also appears (in truncated form, if necessary) '
677
+        'as one-line help text for this command.  '
678
+        'The translation should thus be as meaningful as possible '
679
+        'even if truncated.',
706 680
     )(
707 681
         context='Label :: Help text :: Explanation',
708
-        single="""
709
-        Derive a passphrase using the vault derivation scheme.
710
-        """,
682
+        single='Derive a passphrase using the vault derivation scheme.',
711 683
     )
712 684
     DERIVEPASSPHRASE_VAULT_02 = _Commented(
713 685
         comments='',
714 686
     )(
715 687
         context='Label :: Help text :: Explanation',
716
-        single="""
717
-        If operating on global settings, or importing/exporting
718
-        settings, then {service_metavar!s} must be omitted.  Otherwise
719
-        it is required.
720
-        """,
688
+        single='If operating on global settings, or importing/exporting settings, '
689
+        'then {service_metavar!s} must be omitted.  '
690
+        'Otherwise it is required.',
721 691
         flags='python-brace-format',
722 692
     )
723 693
     DERIVEPASSPHRASE_VAULT_EPILOG_01 = _Commented(
724 694
         comments='',
725 695
     )(
726 696
         context='Label :: Help text :: Explanation',
727
-        single="""
728
-        WARNING: There is NO WAY to retrieve the generated passphrases
729
-        if the master passphrase, the SSH key, or the exact passphrase
730
-        settings are lost, short of trying out all possible
731
-        combinations.  You are STRONGLY advised to keep independent
732
-        backups of the settings and the SSH key, if any.
733
-        """,
697
+        single='WARNING: There is NO WAY to retrieve the generated passphrases '
698
+        'if the master passphrase, the SSH key, or the exact '
699
+        'passphrase settings are lost, '
700
+        'short of trying out all possible combinations.  '
701
+        'You are STRONGLY advised to keep independent backups of '
702
+        'the settings and the SSH key, if any.',
734 703
     )
735 704
     DERIVEPASSPHRASE_VAULT_EPILOG_02 = _Commented(
736 705
         comments='',
737 706
     )(
738 707
         context='Label :: Help text :: Explanation',
739
-        single="""
740
-        The configuration is NOT encrypted, and you are STRONGLY
741
-        discouraged from using a stored passphrase.
742
-        """,
708
+        single='The configuration is NOT encrypted, and you are '
709
+        'STRONGLY discouraged from using a stored passphrase.',
743 710
     )
744 711
     DEPRECATED_COMMAND_LABEL = _Commented(
745
-        comments=r"""
746
-        TRANSLATORS: We use this format string to indicate, at the
747
-        beginning of a command's help text, that this command is
748
-        deprecated.
749
-        """,
712
+        comments='We use this format string to indicate, at the beginning '
713
+        "of a command's help text, that this command is deprecated.",
750 714
     )(
751 715
         context='Label :: Help text :: Marker',
752 716
         single='(Deprecated) {text}',
... ...
@@ -759,55 +723,37 @@ class Label(enum.Enum):
759 723
         single='also emit debug information (implies --verbose)',
760 724
     )
761 725
     EXPORT_VAULT_FORMAT_HELP_TEXT = _Commented(
762
-        comments=r"""
763
-        TRANSLATORS: The defaults_hint is
764
-        Label.EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT, the metavar is
765
-        Label.EXPORT_VAULT_FORMAT_METAVAR_FMT.
766
-        """,
726
+        comments='The defaults_hint is Label.EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT, '
727
+        'the metavar is Label.EXPORT_VAULT_FORMAT_METAVAR_FMT.',
767 728
     )(
768 729
         context='Label :: Help text :: One-line description',
769
-        single=r"""
770
-        try the following storage format {metavar!s}; may be
771
-        specified multiple times, formats will be tried in order
772
-        {defaults_hint!s}
773
-        """,
730
+        single='try the following storage format {metavar!s}; '
731
+        'may be specified multiple times, '
732
+        'formats will be tried in order {defaults_hint!s}',
774 733
         flags='python-brace-format',
775 734
     )
776 735
     EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT = _Commented(
777
-        comments=r"""
778
-        TRANSLATORS: See EXPORT_VAULT_FORMAT_HELP_TEXT.  The format
779
-        names/labels "v0.3", "v0.2" and "storeroom" should not be
780
-        translated.
781
-        """,
736
+        comments='See EXPORT_VAULT_FORMAT_HELP_TEXT.  '
737
+        'The format names/labels "v0.3", "v0.2" and "storeroom" '
738
+        'should not be translated.',
782 739
     )(
783 740
         context='Label :: Help text :: One-line description',
784
-        single=r"""
785
-        (default: v0.3, v0.2, storeroom)
786
-        """,
741
+        single='(default: v0.3, v0.2, storeroom)',
787 742
     )
788 743
     EXPORT_VAULT_KEY_HELP_TEXT = _Commented(
789
-        comments=r"""
790
-        TRANSLATORS: The defaults_hint is
791
-        Label.EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT, the metavar is
792
-        Label.EXPORT_VAULT_KEY_METAVAR_K.
793
-        """,
744
+        comments='The defaults_hint is Label.EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT, '
745
+        'the metavar is Label.EXPORT_VAULT_KEY_METAVAR_K.',
794 746
     )(
795 747
         context='Label :: Help text :: One-line description',
796
-        single=r"""
797
-        use {metavar!s} as the storage master key {defaults_hint!s}
798
-        """,
748
+        single='use {metavar!s} as the storage master key {defaults_hint!s}',
799 749
         flags='python-brace-format',
800 750
     )
801 751
     EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT = _Commented(
802
-        comments=r"""
803
-        TRANSLATORS: See EXPORT_VAULT_KEY_HELP_TEXT.
804
-        """,
752
+        comments='See EXPORT_VAULT_KEY_HELP_TEXT.',
805 753
     )(
806 754
         context='Label :: Help text :: One-line description',
807
-        single=r"""
808
-        (default: check the `VAULT_KEY`, `LOGNAME`, `USER`, or
809
-        `USERNAME` environment variables)
810
-        """,
755
+        single='(default: check the `VAULT_KEY`, `LOGNAME`, `USER`, or '
756
+        '`USERNAME` environment variables)',
811 757
     )
812 758
     HELP_OPTION_HELP_TEXT = _Commented(
813 759
         comments='',
... ...
@@ -847,80 +793,56 @@ class Label(enum.Enum):
847 793
         single='select a suitable SSH key from the SSH agent',
848 794
     )
849 795
     DERIVEPASSPHRASE_VAULT_LENGTH_HELP_TEXT = _Commented(
850
-        comments=r"""
851
-        TRANSLATORS: The metavar is
852
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
853
-        """,
796
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
854 797
     )(
855 798
         context='Label :: Help text :: One-line description',
856 799
         single='ensure a passphrase length of {metavar!s} characters',
857 800
         flags='python-brace-format',
858 801
     )
859 802
     DERIVEPASSPHRASE_VAULT_REPEAT_HELP_TEXT = _Commented(
860
-        comments=r"""
861
-        TRANSLATORS: The metavar is
862
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
863
-        """,
803
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
864 804
     )(
865 805
         context='Label :: Help text :: One-line description',
866 806
         single='forbid any run of {metavar!s} identical characters',
867 807
         flags='python-brace-format',
868 808
     )
869 809
     DERIVEPASSPHRASE_VAULT_LOWER_HELP_TEXT = _Commented(
870
-        comments=r"""
871
-        TRANSLATORS: The metavar is
872
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
873
-        """,
810
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
874 811
     )(
875 812
         context='Label :: Help text :: One-line description',
876 813
         single='ensure at least {metavar!s} lowercase characters',
877 814
         flags='python-brace-format',
878 815
     )
879 816
     DERIVEPASSPHRASE_VAULT_UPPER_HELP_TEXT = _Commented(
880
-        comments=r"""
881
-        TRANSLATORS: The metavar is
882
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
883
-        """,
817
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
884 818
     )(
885 819
         context='Label :: Help text :: One-line description',
886 820
         single='ensure at least {metavar!s} uppercase characters',
887 821
         flags='python-brace-format',
888 822
     )
889 823
     DERIVEPASSPHRASE_VAULT_NUMBER_HELP_TEXT = _Commented(
890
-        comments=r"""
891
-        TRANSLATORS: The metavar is
892
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
893
-        """,
824
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
894 825
     )(
895 826
         context='Label :: Help text :: One-line description',
896 827
         single='ensure at least {metavar!s} digits',
897 828
         flags='python-brace-format',
898 829
     )
899 830
     DERIVEPASSPHRASE_VAULT_SPACE_HELP_TEXT = _Commented(
900
-        comments=r"""
901
-        TRANSLATORS: The metavar is
902
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
903
-        """,
831
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
904 832
     )(
905 833
         context='Label :: Help text :: One-line description',
906 834
         single='ensure at least {metavar!s} spaces',
907 835
         flags='python-brace-format',
908 836
     )
909 837
     DERIVEPASSPHRASE_VAULT_DASH_HELP_TEXT = _Commented(
910
-        comments=r"""
911
-        TRANSLATORS: The metavar is
912
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
913
-        """,
838
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
914 839
     )(
915 840
         context='Label :: Help text :: One-line description',
916 841
         single='ensure at least {metavar!s} "-" or "_" characters',
917 842
         flags='python-brace-format',
918 843
     )
919 844
     DERIVEPASSPHRASE_VAULT_SYMBOL_HELP_TEXT = _Commented(
920
-        comments=r"""
921
-        TRANSLATORS: The metavar is
922
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
923
-        """,
845
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
924 846
     )(
925 847
         context='Label :: Help text :: One-line description',
926 848
         single='ensure at least {metavar!s} symbol characters',
... ...
@@ -961,56 +883,43 @@ class Label(enum.Enum):
961 883
         single='delete all settings',
962 884
     )
963 885
     DERIVEPASSPHRASE_VAULT_EXPORT_HELP_TEXT = _Commented(
964
-        comments="""
965
-        TRANSLATORS: The metavar is
966
-        Label.STORAGE_MANAGEMENT_METAVAR_SERVICE.
967
-        """,
886
+        comments='The metavar is Label.STORAGE_MANAGEMENT_METAVAR_SERVICE.',
968 887
     )(
969 888
         context='Label :: Help text :: One-line description',
970 889
         single='export all saved settings to {metavar!s}',
971 890
         flags='python-brace-format',
972 891
     )
973 892
     DERIVEPASSPHRASE_VAULT_IMPORT_HELP_TEXT = _Commented(
974
-        comments="""
975
-        TRANSLATORS: The metavar is
976
-        Label.STORAGE_MANAGEMENT_METAVAR_SERVICE.
977
-        """,
893
+        comments='The metavar is Label.STORAGE_MANAGEMENT_METAVAR_SERVICE.',
978 894
     )(
979 895
         context='Label :: Help text :: One-line description',
980 896
         single='import saved settings from {metavar!s}',
981 897
         flags='python-brace-format',
982 898
     )
983 899
     DERIVEPASSPHRASE_VAULT_OVERWRITE_HELP_TEXT = _Commented(
984
-        comments="""
985
-        TRANSLATORS: The corresponding option is displayed as
986
-        "--overwrite-existing / --merge-existing", so you may want to
987
-        hint that the default (merge) is the second of those options.
988
-        """,
900
+        comments='The corresponding option is displayed as '
901
+        '"--overwrite-existing / --merge-existing", so you may want to '
902
+        'hint that the default (merge) is the second of those options.',
989 903
     )(
990 904
         context='Label :: Help text :: One-line description',
991 905
         single='overwrite or merge (default) the existing configuration',
992 906
     )
993 907
     DERIVEPASSPHRASE_VAULT_UNSET_HELP_TEXT = _Commented(
994
-        comments="""
995
-        TRANSLATORS: The corresponding option is displayed as
996
-        "--unset=phrase|key|...|symbol", so the "given setting" is
997
-        referring to "phrase", "key", "lower", ..., or "symbol",
998
-        respectively.  "with --config" here means that the user must
999
-        also specify "--config" for this option to have any effect.
1000
-        """,
908
+        comments='The corresponding option is displayed as '
909
+        '"--unset=phrase|key|...|symbol", so the "given setting" is '
910
+        'referring to "phrase", "key", "lower", ..., or "symbol", '
911
+        'respectively.  '
912
+        '"with --config" here means that the user must also specify '
913
+        '"--config" for this option to have any effect.',
1001 914
     )(
1002 915
         context='Label :: Help text :: One-line description',
1003
-        single="""
1004
-        with --config, also unsets the given setting; may be specified
1005
-        multiple times
1006
-        """,
916
+        single='with --config, also unsets the given setting; '
917
+        'may be specified multiple times',
1007 918
     )
1008 919
     DERIVEPASSPHRASE_VAULT_EXPORT_AS_HELP_TEXT = _Commented(
1009
-        comments="""
1010
-        TRANSLATORS: The corresponding option is displayed as
1011
-        "--export-as=json|sh", so json refers to the JSON format
1012
-        (default) and sh refers to the POSIX sh format.
1013
-        """,
920
+        comments='The corresponding option is displayed as '
921
+        '"--export-as=json|sh", so json refers to the JSON format (default) '
922
+        'and sh refers to the POSIX sh format.',
1014 923
     )(
1015 924
         context='Label :: Help text :: One-line description',
1016 925
         single='when exporting, export as JSON (default) or POSIX sh',
... ...
@@ -1023,44 +932,32 @@ class Label(enum.Enum):
1023 932
         single='FMT',
1024 933
     )
1025 934
     EXPORT_VAULT_KEY_METAVAR_K = _Commented(
1026
-        comments=r"""
1027
-        TRANSLATORS: See Label.EXPORT_VAULT_KEY_HELP_TEXT.
1028
-        """,
935
+        comments='See Label.EXPORT_VAULT_KEY_HELP_TEXT.',
1029 936
     )(
1030 937
         context='Label :: Help text :: Metavar :: export vault',
1031 938
         single='K',
1032 939
     )
1033 940
     EXPORT_VAULT_METAVAR_PATH = _Commented(
1034
-        comments=r"""
1035
-        TRANSLATORS: Used as "path_metavar" in
1036
-        Label.DERIVEPASSPHRASE_EXPORT_VAULT_02 and others.
1037
-        """,
941
+        comments='Used as "path_metavar" in '
942
+        'Label.DERIVEPASSPHRASE_EXPORT_VAULT_02 and others.',
1038 943
     )(
1039 944
         context='Label :: Help text :: Metavar :: export vault',
1040 945
         single='PATH',
1041 946
     )
1042 947
     PASSPHRASE_GENERATION_METAVAR_NUMBER = _Commented(
1043
-        comments=r"""
1044
-        TRANSLATORS: This metavar is also used in a matching epilog.
1045
-        """,
948
+        comments='This metavar is also used in a matching epilog.',
1046 949
     )(
1047 950
         context='Label :: Help text :: Metavar :: vault',
1048 951
         single='NUMBER',
1049 952
     )
1050 953
     STORAGE_MANAGEMENT_METAVAR_PATH = _Commented(
1051
-        comments=r"""
1052
-        TRANSLATORS: This metavar is also used in multiple one-line help
1053
-        texts.
1054
-        """,
954
+        comments='This metavar is also used in multiple one-line help texts.',
1055 955
     )(
1056 956
         context='Label :: Help text :: Metavar :: vault',
1057 957
         single='PATH',
1058 958
     )
1059 959
     VAULT_METAVAR_SERVICE = _Commented(
1060
-        comments=r"""
1061
-        TRANSLATORS: This metavar is also used in multiple one-line help
1062
-        texts, as "service_metavar".
1063
-        """,
960
+        comments='This metavar is also used in multiple one-line help texts.',
1064 961
     )(
1065 962
         context='Label :: Help text :: Metavar :: vault',
1066 963
         single='SERVICE',
... ...
@@ -1072,28 +969,18 @@ class Label(enum.Enum):
1072 969
         single='Use $VISUAL or $EDITOR to configure the spawned editor.',
1073 970
     )
1074 971
     PASSPHRASE_GENERATION_EPILOG = _Commented(
1075
-        comments=r"""
1076
-        TRANSLATORS: The metavar is
1077
-        Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
1078
-        """,
972
+        comments='The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.',
1079 973
     )(
1080 974
         context='Label :: Help text :: Explanation',
1081
-        single=r"""
1082
-        Use {metavar!s}=0 to exclude a character type from the output.
1083
-        """,
975
+        single='Use {metavar!s}=0 to exclude a character type from the output.',
1084 976
         flags='python-brace-format',
1085 977
     )
1086 978
     STORAGE_MANAGEMENT_EPILOG = _Commented(
1087
-        comments=r"""
1088
-        TRANSLATORS: The metavar is
1089
-        Label.STORAGE_MANAGEMENT_METAVAR_PATH.
1090
-        """,
979
+        comments='The metavar is Label.STORAGE_MANAGEMENT_METAVAR_PATH.',
1091 980
     )(
1092 981
         context='Label :: Help text :: Explanation',
1093
-        single=r"""
1094
-        Using "-" as {metavar!s} for standard input/standard output
1095
-        is supported.
1096
-        """,
982
+        single='Using "-" as {metavar!s} for standard input/standard output '
983
+        'is supported.',
1097 984
         flags='python-brace-format',
1098 985
     )
1099 986
     COMMANDS_LABEL = _Commented(
... ...
@@ -1148,27 +1035,20 @@ class Label(enum.Enum):
1148 1035
         comments='',
1149 1036
     )(
1150 1037
         context='Label :: Info Message',
1151
-        single=r"""
1152
-        {PROG_NAME!s} {__version__}
1153
-        """,  # noqa: RUF027
1038
+        single='{PROG_NAME!s} {__version__}',  # noqa: RUF027
1154 1039
         flags='python-brace-format',
1155 1040
     )
1156 1041
     CONFIRM_THIS_CHOICE_PROMPT_TEXT = _Commented(
1157
-        comments=r"""
1158
-        TRANSLATORS: There is no support for "yes" or "no" in other
1159
-        languages than English, so it is advised that your translation
1160
-        makes it clear that only the strings "y", "yes", "n" or "no" are
1161
-        supported, even if the prompt becomes a bit longer.
1162
-        """,
1042
+        comments='There is no support for "yes" or "no" in other languages '
1043
+        'than English, so it is advised that your translation makes it '
1044
+        'clear that only the strings "y", "yes", "n" or "no" are supported, '
1045
+        'even if the prompt becomes a bit longer.',
1163 1046
     )(
1164 1047
         context='Label :: Interactive prompt',
1165 1048
         single='Confirm this choice? (y/N)',
1166 1049
     )
1167 1050
     SUITABLE_SSH_KEYS_LABEL = _Commented(
1168
-        comments=r"""
1169
-        TRANSLATORS: This label is the heading of the list of suitable
1170
-        SSH keys.
1171
-        """,
1051
+        comments='This label is the heading of the list of suitable SSH keys.',
1172 1052
     )(
1173 1053
         context='Label :: Interactive prompt',
1174 1054
         single='Suitable SSH keys:',
... ...
@@ -1184,29 +1064,25 @@ class Label(enum.Enum):
1184 1064
 
1185 1065
 class DebugMsgTemplate(enum.Enum):
1186 1066
     BUCKET_ITEM_FOUND = _Commented(
1187
-        comments=r"""
1188
-        TRANSLATORS: This message is emitted by the vault configuration
1189
-        exporter for "storeroom"-type configuration directories.  The
1190
-        system stores entries in different "buckets" of a hash table.
1191
-        Here, we report on a single item (path and value) we discovered
1192
-        after decrypting the whole bucket.  (We ensure the path and
1193
-        value are printable as-is.)
1194
-        """,
1067
+        comments='This message is emitted by the vault configuration exporter '
1068
+        'for "storeroom"-type configuration directories.  '
1069
+        'The system stores entries in different "buckets" of a hash table.  '
1070
+        'Here, we report on a single item (path and value) we discovered '
1071
+        'after decrypting the whole bucket.  '
1072
+        '(We ensure the path and value are printable as-is.)',
1195 1073
     )(
1196 1074
         context='Debug message',
1197 1075
         single='Found bucket item: {path} -> {value}',
1198 1076
         flags='python-brace-format',
1199 1077
     )
1200 1078
     DECRYPT_BUCKET_ITEM_INFO = _Commented(
1201
-        comments=r"""
1202
-        TRANSLATORS: "AES256-CBC" and "PKCS#7" are, in essence, names of
1203
-        formats, and should not be translated.  "IV" means
1204
-        "initialization vector", and is specifically a cryptographic
1205
-        term, as are "plaintext" and "ciphertext".
1206
-        """,
1079
+        comments='"AES256-CBC" and "PKCS#7" are, in essence, names of formats, '
1080
+        'and should not be translated.  '
1081
+        '"IV" means "initialization vector", and is specifically '
1082
+        'a cryptographic term, as are "plaintext" and "ciphertext".',
1207 1083
     )(
1208 1084
         context='Debug message',
1209
-        single="""
1085
+        single="""\
1210 1086
 Decrypt bucket item contents:
1211 1087
 
1212 1088
   \b
... ...
@@ -1222,7 +1098,7 @@ class DebugMsgTemplate(enum.Enum):
1222 1098
         comments='',
1223 1099
     )(
1224 1100
         context='Debug message',
1225
-        single="""
1101
+        single="""\
1226 1102
 Decrypt bucket item:
1227 1103
 
1228 1104
   \b
... ...
@@ -1233,18 +1109,17 @@ class DebugMsgTemplate(enum.Enum):
1233 1109
         flags='python-brace-format',
1234 1110
     )
1235 1111
     DECRYPT_BUCKET_ITEM_MAC_INFO = _Commented(
1236
-        comments=r"""
1237
-        TRANSLATORS: The MAC stands for "message authentication code",
1238
-        which guarantees the authenticity of the message to anyone who
1239
-        holds the corresponding key, similar to a digital signature.
1240
-        The acronym "MAC" is assumed to be well-known to the English
1241
-        target audience, or at least discoverable by them; they *are*
1242
-        asking for debug output, after all.  Please use your judgement
1243
-        as to whether to translate this term or not, expanded or not.
1244
-        """,
1112
+        comments='The MAC stands for "message authentication code", '
1113
+        'which guarantees the authenticity of the message to anyone '
1114
+        'who holds the corresponding key, similar to a digital signature.  '
1115
+        'The acronym "MAC" is assumed to be well-known to the '
1116
+        'English target audience, or at least discoverable by them; '
1117
+        'they *are* asking for debug output, after all.  '
1118
+        'Please use your judgement as to whether to translate this term '
1119
+        'or not, expanded or not.',
1245 1120
     )(
1246 1121
         context='Debug message',
1247
-        single="""
1122
+        single="""\
1248 1123
 Decrypt bucket item contents:
1249 1124
 
1250 1125
   \b
... ...
@@ -1256,15 +1131,13 @@ class DebugMsgTemplate(enum.Enum):
1256 1131
         flags='python-brace-format',
1257 1132
     )
1258 1133
     DECRYPT_BUCKET_ITEM_SESSION_KEYS_INFO = _Commented(
1259
-        comments=r"""
1260
-        TRANSLATORS: "AES256-CBC" and "PKCS#7" are, in essence, names of
1261
-        formats, and should not be translated.  "IV" means
1262
-        "initialization vector", and is specifically a cryptographic
1263
-        term, as are "plaintext" and "ciphertext".
1264
-        """,
1134
+        comments='"AES256-CBC" and "PKCS#7" are, in essence, names of formats, '
1135
+        'and should not be translated.  '
1136
+        '"IV" means "initialization vector", and is specifically '
1137
+        'a cryptographic term, as are "plaintext" and "ciphertext".',
1265 1138
     )(
1266 1139
         context='Debug message',
1267
-        single="""
1140
+        single="""\
1268 1141
 Decrypt bucket item session keys:
1269 1142
 
1270 1143
   \b
... ...
@@ -1278,18 +1151,17 @@ class DebugMsgTemplate(enum.Enum):
1278 1151
         flags='python-brace-format',
1279 1152
     )
1280 1153
     DECRYPT_BUCKET_ITEM_SESSION_KEYS_MAC_INFO = _Commented(
1281
-        comments=r"""
1282
-        TRANSLATORS: The MAC stands for "message authentication code",
1283
-        which guarantees the authenticity of the message to anyone who
1284
-        holds the corresponding key, similar to a digital signature.
1285
-        The acronym "MAC" is assumed to be well-known to the English
1286
-        target audience, or at least discoverable by them; they *are*
1287
-        asking for debug output, after all.  Please use your judgement
1288
-        as to whether to translate this term or not, expanded or not.
1289
-        """,
1154
+        comments='The MAC stands for "message authentication code", '
1155
+        'which guarantees the authenticity of the message to anyone '
1156
+        'who holds the corresponding key, similar to a digital signature.  '
1157
+        'The acronym "MAC" is assumed to be well-known to the '
1158
+        'English target audience, or at least discoverable by them; '
1159
+        'they *are* asking for debug output, after all.  '
1160
+        'Please use your judgement as to whether to translate this term '
1161
+        'or not, expanded or not.',
1290 1162
     )(
1291 1163
         context='Debug message',
1292
-        single="""
1164
+        single="""\
1293 1165
 Decrypt bucket item session keys:
1294 1166
 
1295 1167
   \b
... ...
@@ -1304,7 +1176,7 @@ class DebugMsgTemplate(enum.Enum):
1304 1176
         comments='',
1305 1177
     )(
1306 1178
         context='Debug message',
1307
-        single="""
1179
+        single="""\
1308 1180
 Derived master keys' keys:
1309 1181
 
1310 1182
   \b
... ...
@@ -1317,34 +1188,32 @@ class DebugMsgTemplate(enum.Enum):
1317 1188
         flags='python-brace-format',
1318 1189
     )
1319 1190
     DIRECTORY_CONTENTS_CHECK_OK = _Commented(
1320
-        comments=r"""
1321
-        TRANSLATORS: This message is emitted by the vault configuration
1322
-        exporter for "storeroom"-type configuration directories, while
1323
-        "assembling" the items stored in the configuration according to
1324
-        the item's "path".  Each "directory" in the path contains a list
1325
-        of children it claims to contain, and this list must be matched
1326
-        against the actual discovered items.  Now, at the end, we
1327
-        actually confirm the claim.  (We would have already thrown an
1328
-        error here otherwise.)
1329
-        """,
1191
+        comments='This message is emitted by the vault configuration exporter '
1192
+        'for "storeroom"-type configuration directories, '
1193
+        'while "assembling" the items stored in the configuration '
1194
+        """according to the item's "path".  """
1195
+        'Each "directory" in the path contains a list of children '
1196
+        'it claims to contain, and this list must be matched '
1197
+        'against the actual discovered items.  '
1198
+        'Now, at the end, we actually confirm the claim.  '
1199
+        '(We would have already thrown an error here otherwise.)',
1330 1200
     )(
1331 1201
         context='Debug message',
1332 1202
         single='Directory contents check OK: {path} -> {contents}',
1333 1203
         flags='python-brace-format',
1334 1204
     )
1335 1205
     MASTER_KEYS_DATA_MAC_INFO = _Commented(
1336
-        comments=r"""
1337
-        TRANSLATORS: The MAC stands for "message authentication code",
1338
-        which guarantees the authenticity of the message to anyone who
1339
-        holds the corresponding key, similar to a digital signature.
1340
-        The acronym "MAC" is assumed to be well-known to the English
1341
-        target audience, or at least discoverable by them; they *are*
1342
-        asking for debug output, after all.  Please use your judgement
1343
-        as to whether to translate this term or not, expanded or not.
1344
-        """,
1206
+        comments='The MAC stands for "message authentication code", '
1207
+        'which guarantees the authenticity of the message to anyone '
1208
+        'who holds the corresponding key, similar to a digital signature.  '
1209
+        'The acronym "MAC" is assumed to be well-known to the '
1210
+        'English target audience, or at least discoverable by them; '
1211
+        'they *are* asking for debug output, after all.  '
1212
+        'Please use your judgement as to whether to translate this term '
1213
+        'or not, expanded or not.',
1345 1214
     )(
1346 1215
         context='Debug message',
1347
-        single="""
1216
+        single="""\
1348 1217
 Master keys data:
1349 1218
 
1350 1219
   \b
... ...
@@ -1356,58 +1225,54 @@ class DebugMsgTemplate(enum.Enum):
1356 1225
         flags='python-brace-format',
1357 1226
     )
1358 1227
     POSTPONING_DIRECTORY_CONTENTS_CHECK = _Commented(
1359
-        comments=r"""
1360
-        TRANSLATORS: This message is emitted by the vault configuration
1361
-        exporter for "storeroom"-type configuration directories, while
1362
-        "assembling" the items stored in the configuration according to
1363
-        the item's "path".  Each "directory" in the path contains a list
1364
-        of children it claims to contain, and this list must be matched
1365
-        against the actual discovered items.  When emitting this
1366
-        message, we merely indicate that we saved the "claimed" list for
1367
-        this directory for later.
1368
-        """,
1228
+        comments='This message is emitted by the vault configuration exporter '
1229
+        'for "storeroom"-type configuration directories, '
1230
+        'while "assembling" the items stored in the configuration '
1231
+        """according to the item's "path".  """
1232
+        'Each "directory" in the path contains a list of children '
1233
+        'it claims to contain, and this list must be matched '
1234
+        'against the actual discovered items.  '
1235
+        'When emitting this message, we merely indicate that we saved '
1236
+        'the "claimed" list for this directory for later.',
1369 1237
     )(
1370 1238
         context='Debug message',
1371 1239
         single='Postponing directory contents check: {path} -> {contents}',
1372 1240
         flags='python-brace-format',
1373 1241
     )
1374 1242
     SETTING_CONFIG_STRUCTURE_CONTENTS = _Commented(
1375
-        comments=r"""
1376
-        TRANSLATORS: This message is emitted by the vault configuration
1377
-        exporter for "storeroom"-type configuration directories, while
1378
-        "assembling" the items stored in the configuration according to
1379
-        the item's "path".  We confirm that we set the entry at the
1380
-        given path to the given value.
1381
-        """,
1243
+        comments='This message is emitted by the vault configuration exporter '
1244
+        'for "storeroom"-type configuration directories, '
1245
+        'while "assembling" the items stored in the configuration '
1246
+        """according to the item's "path".  """
1247
+        'We confirm that we set the entry at the given path '
1248
+        'to the given value.',
1382 1249
     )(
1383 1250
         context='Debug message',
1384 1251
         single='Setting contents: {path} -> {value}',
1385 1252
         flags='python-brace-format',
1386 1253
     )
1387 1254
     SETTING_CONFIG_STRUCTURE_CONTENTS_EMPTY_DIRECTORY = _Commented(
1388
-        comments=r"""
1389
-        TRANSLATORS: This message is emitted by the vault configuration
1390
-        exporter for "storeroom"-type configuration directories, while
1391
-        "assembling" the items stored in the configuration according to
1392
-        the item's "path".  We confirm that we set up a currently empty
1393
-        directory at the given path.
1394
-        """,
1255
+        comments='This message is emitted by the vault configuration exporter '
1256
+        'for "storeroom"-type configuration directories, '
1257
+        'while "assembling" the items stored in the configuration '
1258
+        """according to the item's "path".  """
1259
+        'We confirm that we set up a currently empty directory '
1260
+        'at the given path.',
1395 1261
     )(
1396 1262
         context='Debug message',
1397 1263
         single='Setting contents (empty directory): {path}',
1398 1264
         flags='python-brace-format',
1399 1265
     )
1400 1266
     VAULT_NATIVE_EVP_BYTESTOKEY_INIT = _Commented(
1401
-        comments=r"""
1402
-        TRANSLATORS: This message is emitted by the vault configuration
1403
-        exporter for "native"-type configuration directories: in v0.2,
1404
-        the non-standard and deprecated "EVP_bytestokey" function from
1405
-        OpenSSL must be reimplemented from scratch.  The terms "salt"
1406
-        and "IV" (initialization vector) are cryptographic terms.
1407
-        """,
1267
+        comments='This message is emitted by the vault configuration exporter '
1268
+        'for "native"-type configuration directories: '
1269
+        'in v0.2, the non-standard and deprecated "EVP_bytestokey" function '
1270
+        'from OpenSSL must be reimplemented from scratch.  '
1271
+        'The terms "salt" and "IV" (initialization vector) '
1272
+        'are cryptographic terms.',
1408 1273
     )(
1409 1274
         context='Debug message',
1410
-        single="""
1275
+        single="""\
1411 1276
 evp_bytestokey_md5 (initialization):
1412 1277
 
1413 1278
   \b
... ...
@@ -1421,18 +1286,16 @@ class DebugMsgTemplate(enum.Enum):
1421 1286
         flags='python-brace-format',
1422 1287
     )
1423 1288
     VAULT_NATIVE_EVP_BYTESTOKEY_RESULT = _Commented(
1424
-        comments=r"""
1425
-        TRANSLATORS: This message is emitted by the vault configuration
1426
-        exporter for "native"-type configuration directories: in v0.2,
1427
-        the non-standard and deprecated "EVP_bytestokey" function from
1428
-        OpenSSL must be reimplemented from scratch.  The terms "salt"
1429
-        and "IV" (initialization vector) are cryptographic terms.
1430
-        This function reports on the updated buffer length and contents
1431
-        after executing one round of hashing.
1432
-        """,
1289
+        comments='This message is emitted by the vault configuration exporter '
1290
+        'for "native"-type configuration directories: '
1291
+        'in v0.2, the non-standard and deprecated "EVP_bytestokey" function '
1292
+        'from OpenSSL must be reimplemented from scratch.  '
1293
+        'The terms "salt" and "IV" (initialization vector) '
1294
+        'are cryptographic terms.'
1295
+        'This function reports on the final results.',
1433 1296
     )(
1434 1297
         context='Debug message',
1435
-        single="""
1298
+        single="""\
1436 1299
 evp_bytestokey_md5 (result):
1437 1300
 
1438 1301
   \b
... ...
@@ -1442,18 +1305,17 @@ class DebugMsgTemplate(enum.Enum):
1442 1305
         flags='python-brace-format',
1443 1306
     )
1444 1307
     VAULT_NATIVE_EVP_BYTESTOKEY_ROUND = _Commented(
1445
-        comments=r"""
1446
-        TRANSLATORS: This message is emitted by the vault configuration
1447
-        exporter for "native"-type configuration directories: in v0.2,
1448
-        the non-standard and deprecated "EVP_bytestokey" function from
1449
-        OpenSSL must be reimplemented from scratch.  The terms "salt"
1450
-        and "IV" (initialization vector) are cryptographic terms.
1451
-        This function reports on the updated buffer length and contents
1452
-        after executing one round of hashing.
1453
-        """,
1308
+        comments='This message is emitted by the vault configuration exporter '
1309
+        'for "native"-type configuration directories: '
1310
+        'in v0.2, the non-standard and deprecated "EVP_bytestokey" function '
1311
+        'from OpenSSL must be reimplemented from scratch.  '
1312
+        'The terms "salt" and "IV" (initialization vector) '
1313
+        'are cryptographic terms.'
1314
+        'This function reports on the updated buffer length and contents '
1315
+        'after executing one round of hashing.',
1454 1316
     )(
1455 1317
         context='Debug message',
1456
-        single="""
1318
+        single="""\
1457 1319
 evp_bytestokey_md5 (round update):
1458 1320
 
1459 1321
   \b
... ...
@@ -1463,16 +1325,14 @@ class DebugMsgTemplate(enum.Enum):
1463 1325
         flags='python-brace-format',
1464 1326
     )
1465 1327
     VAULT_NATIVE_CHECKING_MAC_DETAILS = _Commented(
1466
-        comments=r"""
1467
-        TRANSLATORS: This message is emitted by the vault configuration
1468
-        exporter for "native"-type configuration directories.  It is
1469
-        preceded by the info message PARSING_IV_PAYLOAD_MAC; see the
1470
-        commentary there concerning the terms and thoughts on
1471
-        translating them.
1472
-        """,
1328
+        comments='This message is emitted by the vault configuration exporter '
1329
+        'for "native"-type configuration directories.  '
1330
+        'It is preceded by the info message '
1331
+        'VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC; see the commentary there '
1332
+        'concerning the terms and thoughts on translating them.',
1473 1333
     )(
1474 1334
         context='Debug message',
1475
-        single="""
1335
+        single="""\
1476 1336
 MAC details:
1477 1337
 
1478 1338
   \b
... ...
@@ -1482,27 +1342,23 @@ class DebugMsgTemplate(enum.Enum):
1482 1342
         flags='python-brace-format',
1483 1343
     )
1484 1344
     VAULT_NATIVE_PADDED_PLAINTEXT = _Commented(
1485
-        comments=r"""
1486
-        TRANSLATORS: This message is emitted by the vault configuration
1487
-        exporter for "native"-type configuration directories.  "padding"
1488
-        and "plaintext" are cryptographic terms.
1489
-        """,
1345
+        comments='This message is emitted by the vault configuration exporter '
1346
+        'for "native"-type configuration directories.  '
1347
+        '"padding" and "plaintext" are cryptographic terms.',
1490 1348
     )(
1491 1349
         context='Debug message',
1492 1350
         single='Padded plaintext: {contents}',
1493 1351
         flags='python-brace-format',
1494 1352
     )
1495 1353
     VAULT_NATIVE_PARSE_BUFFER = _Commented(
1496
-        comments=r"""
1497
-        TRANSLATORS: This message is emitted by the vault configuration
1498
-        exporter for "native"-type configuration directories.  It is
1499
-        preceded by the info message PARSING_IV_PAYLOAD_MAC; see the
1500
-        commentary there concerning the terms and thoughts on
1501
-        translating them.
1502
-        """,
1354
+        comments='This message is emitted by the vault configuration exporter '
1355
+        'for "native"-type configuration directories.  '
1356
+        'It is preceded by the info message '
1357
+        'VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC; see the commentary there '
1358
+        'concerning the terms and thoughts on translating them.',
1503 1359
     )(
1504 1360
         context='Debug message',
1505
-        single="""
1361
+        single="""\
1506 1362
 Buffer: {contents}
1507 1363
 
1508 1364
   \b
... ...
@@ -1513,11 +1369,9 @@ class DebugMsgTemplate(enum.Enum):
1513 1369
         flags='python-brace-format',
1514 1370
     )
1515 1371
     VAULT_NATIVE_PLAINTEXT = _Commented(
1516
-        comments=r"""
1517
-        TRANSLATORS: This message is emitted by the vault configuration
1518
-        exporter for "native"-type configuration directories.
1519
-        "plaintext" is a cryptographic term.
1520
-        """,
1372
+        comments='This message is emitted by the vault configuration exporter '
1373
+        'for "native"-type configuration directories.  '
1374
+        '"plaintext" is a cryptographic term.',
1521 1375
     )(
1522 1376
         context='Debug message',
1523 1377
         single='Plaintext: {contents}',
... ...
@@ -1527,7 +1381,7 @@ class DebugMsgTemplate(enum.Enum):
1527 1381
         comments='',
1528 1382
     )(
1529 1383
         context='Debug message',
1530
-        single="""
1384
+        single="""\
1531 1385
 Master key derivation:
1532 1386
 
1533 1387
   \b
... ...
@@ -1538,16 +1392,15 @@ class DebugMsgTemplate(enum.Enum):
1538 1392
         flags='python-brace-format',
1539 1393
     )
1540 1394
     VAULT_NATIVE_V02_PAYLOAD_MAC_POSTPROCESSING = _Commented(
1541
-        comments=r"""
1542
-        TRANSLATORS: This message is emitted by the vault configuration
1543
-        exporter for "native"-type configuration directories.  It is
1544
-        preceded by the info message PARSING_IV_PAYLOAD_MAC and the
1545
-        debug message PARSING_NATIVE_PARSE_BUFFER; see the commentary
1546
-        there concerning the terms and thoughts on translating them.
1547
-        """,
1395
+        comments='This message is emitted by the vault configuration exporter '
1396
+        'for "native"-type configuration directories.  '
1397
+        'It is preceded by the info message '
1398
+        'VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC and the debug message '
1399
+        'PARSING_NATIVE_PARSE_BUFFER; see the commentary there concerning '
1400
+        'the terms and thoughts on translating them.',
1548 1401
     )(
1549 1402
         context='Debug message',
1550
-        single="""
1403
+        single="""\
1551 1404
 Postprocessing buffer (v0.2):
1552 1405
 
1553 1406
   \b
... ...
@@ -1560,90 +1413,75 @@ class DebugMsgTemplate(enum.Enum):
1560 1413
 
1561 1414
 class InfoMsgTemplate(enum.Enum):
1562 1415
     ASSEMBLING_CONFIG_STRUCTURE = _Commented(
1563
-        comments=r"""
1564
-        TRANSLATORS: This message is emitted by the vault configuration
1565
-        exporter for "storeroom"-type configuration directories.  The
1566
-        system stores entries in different "buckets" of a hash table.
1567
-        After the respective items in the buckets have been decrypted,
1568
-        we then have a list of item paths plus contents to populate.
1569
-        This must be done in a certain order (we don't yet have an
1570
-        existing directory tree to rely on, but rather must build it
1571
-        on-the-fly), hence the term "assembling".
1572
-        """,
1416
+        comments='This message is emitted by the vault configuration exporter '
1417
+        'for "storeroom"-type configuration directories.  '
1418
+        'The system stores entries in different "buckets" of a hash table.  '
1419
+        'After the respective items in the buckets have been decrypted, '
1420
+        'we then have a list of item paths plus contents to populate.  '
1421
+        "This must be done in a certain order (we don't yet have an "
1422
+        'existing directory tree to rely on, but rather must '
1423
+        'build it on-the-fly), hence the term "assembling".',
1573 1424
     )(
1574 1425
         context='Info message',
1575 1426
         single='Assembling config structure',
1576 1427
     )
1577 1428
     CANNOT_LOAD_AS_VAULT_CONFIG = _Commented(
1578
-        comments=r"""
1579
-        TRANSLATORS: "fmt" is a string such as "v0.2" or "storeroom",
1580
-        indicating the format which we tried to load the vault
1581
-        configuration as.
1582
-        """,
1429
+        comments='"fmt" is a string such as "v0.2" or "storeroom", '
1430
+        'indicating the format which we tried to load the '
1431
+        'vault configuration as.',
1583 1432
     )(
1584 1433
         context='Info message',
1585 1434
         single='Cannot load {path!r} as a {fmt!s} vault configuration.',
1586 1435
         flags='python-brace-format',
1587 1436
     )
1588 1437
     CHECKING_CONFIG_STRUCTURE_CONSISTENCY = _Commented(
1589
-        comments=r"""
1590
-        TRANSLATORS: This message is emitted by the vault configuration
1591
-        exporter for "storeroom"-type configuration directories.  Having
1592
-        "assembled" the configuration items according to their claimed
1593
-        paths and contents, we then check if the assembled structure is
1594
-        internally consistent.
1595
-        """,
1438
+        comments='This message is emitted by the vault configuration exporter '
1439
+        'for "storeroom"-type configuration directories.  '
1440
+        'Having "assembled" the configuration items according to '
1441
+        'their claimed paths and contents, we then check if the '
1442
+        'assembled structure is internally consistent.',
1596 1443
     )(
1597 1444
         context='Info message',
1598 1445
         single='Checking config structure consistency',
1599 1446
     )
1600 1447
     DECRYPTING_BUCKET = _Commented(
1601
-        comments=r"""
1602
-        TRANSLATORS: This message is emitted by the vault configuration
1603
-        exporter for "storeroom"-type configuration directories.  The
1604
-        system stores entries in different "buckets" of a hash table.
1605
-        We parse the directory bucket by bucket.  All buckets are
1606
-        numbered in hexadecimal, and typically there are 32 buckets, so
1607
-        2-digit hex numbers.
1608
-        """,
1448
+        comments='This message is emitted by the vault configuration exporter '
1449
+        'for "storeroom"-type configuration directories.  '
1450
+        'The system stores entries in different "buckets" of a hash table.  '
1451
+        'We parse the directory bucket by bucket.  '
1452
+        'All buckets are numbered in hexadecimal, and typically there are '
1453
+        '32 buckets, so 2-digit hex numbers.',
1609 1454
     )(
1610 1455
         context='Info message',
1611 1456
         single='Decrypting bucket {bucket_number}',
1612 1457
         flags='python-brace-format',
1613 1458
     )
1614 1459
     PARSING_MASTER_KEYS_DATA = _Commented(
1615
-        comments=r"""
1616
-        TRANSLATORS: This message is emitted by the vault configuration
1617
-        exporter for "storeroom"-type configuration directories.
1618
-        `.keys` is a filename, from which data about the master keys for
1619
-        this configuration are loaded.
1620
-        """,
1460
+        comments='This message is emitted by the vault configuration exporter '
1461
+        'for "storeroom"-type configuration directories.  '
1462
+        '`.keys` is a filename, from which data about the master keys '
1463
+        'for this configuration are loaded.',
1621 1464
     )(
1622 1465
         context='Info message',
1623 1466
         single='Parsing master keys data from .keys',
1624 1467
     )
1625 1468
     PIP_INSTALL_EXTRA = _Commented(
1626
-        comments=r"""
1627
-        TRANSLATORS: This message immediately follows an error message
1628
-        about a missing library that needs to be installed.  The Python
1629
-        Package Index (PyPI) supports declaring sets of optional
1630
-        dependencies as "extras", so users installing from PyPI can
1631
-        request reinstallation with a named "extra" being enabled.  This
1632
-        would then let the installer take care of the missing libraries
1633
-        automatically, hence this suggestion to PyPI users.
1634
-        """,
1469
+        comments='This message immediately follows an error message about '
1470
+        'a missing library that needs to be installed.  '
1471
+        'The Python Package Index (PyPI) supports declaring sets of '
1472
+        'optional dependencies as "extras", so users installing from PyPI '
1473
+        'can request reinstallation with a named "extra" being enabled.  '
1474
+        'This would then let the installer take care of the '
1475
+        'missing libraries automatically, '
1476
+        'hence this suggestion to PyPI users.',
1635 1477
     )(
1636 1478
         context='Info message',
1637
-        single="""
1638
-        (For users installing from PyPI, see the {extra_name!r} extra.)
1639
-        """,
1479
+        single='For users installing from PyPI, see the {extra_name!r} extra.',
1640 1480
         flags='python-brace-format',
1641 1481
     )
1642 1482
     SUCCESSFULLY_MIGRATED = _Commented(
1643
-        comments=r"""
1644
-        TRANSLATORS: This info message immediately follows the "Using
1645
-        deprecated v0.1-style ..." deprecation warning.
1646
-        """,
1483
+        comments='This info message immediately follows the '
1484
+        '"Using deprecated v0.1-style ..." deprecation warning.',
1647 1485
     )(
1648 1486
         context='Info message',
1649 1487
         single='Successfully migrated to {path!r}.',
... ...
@@ -1668,17 +1506,16 @@ class InfoMsgTemplate(enum.Enum):
1668 1506
         single='Deriving an encryption and signing key',
1669 1507
     )
1670 1508
     VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC = _Commented(
1671
-        comments=r"""
1672
-        TRANSLATORS: This message is emitted by the vault configuration
1673
-        exporter for "native"-type configuration directories.  "IV"
1674
-        means "initialization vector", and "MAC" means "message
1675
-        authentication code".  They are specifically cryptographic
1676
-        terms, as is "payload".  The acronyms "IV" and "MAC" are assumed
1677
-        to be well-known to the English target audience, or at least
1678
-        discoverable by them; they *are* asking for debug output, after
1679
-        all.  Please use your judgement as to whether to translate this
1680
-        term or not, expanded or not.
1681
-        """,
1509
+        comments='This message is emitted by the vault configuration exporter '
1510
+        'for "native"-type configuration directories.  '
1511
+        '"IV" means "initialization vector", and "MAC" means '
1512
+        '"message authentication code".  '
1513
+        'They are specifically cryptographic terms, as is "payload".  '
1514
+        'The acronyms "IV" and "MAC" are assumed to be well-known to the '
1515
+        'English target audience, or at least discoverable by them; '
1516
+        'they *are* asking for debug output, after all.  '
1517
+        'Please use your judgement as to whether to translate these terms '
1518
+        'or not, expanded or not.',
1682 1519
     )(
1683 1520
         context='Info message',
1684 1521
         single='Parsing IV, payload and MAC from the file contents',
... ...
@@ -1690,30 +1527,24 @@ class WarnMsgTemplate(enum.Enum):
1690 1527
         comments='',
1691 1528
     )(
1692 1529
         context='Warning message',
1693
-        single="""
1694
-        An empty {service_metavar!s} is not supported by vault(1).
1695
-        For compatibility, this will be treated as if SERVICE was not
1696
-        supplied, i.e., it will error out, or operate on global settings.
1697
-        """,
1530
+        single='An empty {service_metavar!s} is not supported by vault(1).  '
1531
+        'For compatibility, this will be treated as if SERVICE was not '
1532
+        'supplied, i.e., it will error out, or operate on global settings.',
1698 1533
         flags='python-brace-format',
1699 1534
     )
1700 1535
     EMPTY_SERVICE_SETTINGS_INACCESSIBLE = _Commented(
1701 1536
         comments='',
1702 1537
     )(
1703 1538
         context='Warning message',
1704
-        single="""
1705
-        An empty {service_metavar!s} is not supported by vault(1).
1706
-        The empty-string service settings will be inaccessible and
1707
-        ineffective.  To ensure that vault(1) and {PROG_NAME!s} see the
1708
-        settings, move them into the "global" section.
1709
-        """,
1539
+        single='An empty {service_metavar!s} is not supported by vault(1).  '
1540
+        'The empty-string service settings will be inaccessible '
1541
+        'and ineffective.  '
1542
+        'To ensure that vault(1) and {PROG_NAME!s} see the settings, '  # noqa: RUF027
1543
+        'move them into the "global" section.',
1710 1544
         flags='python-brace-format',
1711 1545
     )
1712 1546
     FAILED_TO_MIGRATE_CONFIG = _Commented(
1713
-        comments=r"""
1714
-        TRANSLATORS: "error" is supplied by the operating system
1715
-        (errno/strerror).
1716
-        """,
1547
+        comments='"error" is supplied by the operating system (errno/strerror).',
1717 1548
     )(
1718 1549
         context='Warning message',
1719 1550
         single='Failed to migrate to {path!r}: {error!s}: {filename!r}.',
... ...
@@ -1723,59 +1554,49 @@ class WarnMsgTemplate(enum.Enum):
1723 1554
         comments='',
1724 1555
     )(
1725 1556
         context='Warning message',
1726
-        single=r"""
1727
-        Setting a global passphrase is ineffective
1728
-        because a key is also set.
1729
-        """,
1557
+        single='Setting a global passphrase is ineffective '
1558
+        'because a key is also set.',
1730 1559
     )
1731 1560
     PASSPHRASE_NOT_NORMALIZED = _Commented(
1732
-        comments=r"""
1733
-        TRANSLATORS: The key is a (vault) configuration key, in JSONPath
1734
-        syntax, typically "$.global" for the global passphrase or
1735
-        "$.services.service_name" or "$.services["service with spaces"]"
1736
-        for the services "service_name" and "service with spaces",
1737
-        respectively.  The form is one of the four Unicode normalization
1738
-        forms: NFC, NFD, NFKC, NFKD.
1739
-
1740
-        The asterisks are not special.  Please feel free to substitute
1741
-        any other appropriate way to mark up emphasis of the word
1742
-        "displays".
1743
-        """,
1561
+        comments='The key is a (vault) configuration key, in JSONPath syntax, '
1562
+        'typically "$.global" for the global passphrase or '
1563
+        '"$.services.service_name" or "$.services["service with spaces"]" '
1564
+        'for the services "service_name" and "service with spaces", '
1565
+        'respectively.  '
1566
+        'The form is one of the four Unicode normalization forms: '
1567
+        'NFC, NFD, NFKC, NFKD.  '
1568
+        'The asterisks are not special.  '
1569
+        'Please feel free to substitute any other appropriate way to '
1570
+        'mark up emphasis of the word "displays".',
1744 1571
     )(
1745 1572
         context='Warning message',
1746
-        single=r"""
1747
-        The {key!s} passphrase is not {form!s}-normalized.  Its
1748
-        serialization as a byte string may not be what you expect it to
1749
-        be, even if it *displays* correctly.  Please make sure to
1750
-        double-check any derived passphrases for unexpected results.
1751
-        """,
1573
+        single='The {key!s} passphrase is not {form!s}-normalized.  '
1574
+        'Its serialization as a byte string may not be what you '
1575
+        'expect it to be, even if it *displays* correctly.  '
1576
+        'Please make sure to double-check any derived passphrases '
1577
+        'for unexpected results.',
1752 1578
         flags='python-brace-format',
1753 1579
     )
1754 1580
     SERVICE_NAME_INCOMPLETABLE = _Commented(
1755 1581
         comments='',
1756 1582
     )(
1757 1583
         context='Warning message',
1758
-        single="""
1759
-        The service name {service!r} contains an ASCII control
1760
-        character, which is not supported by our shell completion code.
1761
-        This service name will therefore not be available for completion
1762
-        on the command-line.  You may of course still type it in
1763
-        manually in whatever format your shell accepts, but we highly
1764
-        recommend choosing a different service name instead.
1765
-        """,
1584
+        single='The service name {service!r} contains an ASCII control character, '
1585
+        'which is not supported by our shell completion code.  '
1586
+        'This service name will therefore not be available for completion '
1587
+        'on the command-line.  '
1588
+        'You may of course still type it in manually in whatever format '
1589
+        'your shell accepts, but we highly recommend choosing a different '
1590
+        'service name instead.',
1766 1591
         flags='python-brace-format',
1767 1592
     )
1768 1593
     SERVICE_PASSPHRASE_INEFFECTIVE = _Commented(
1769
-        comments=r"""
1770
-        TRANSLATORS: The key that is set need not necessarily be set at
1771
-        the service level; it may be a global key as well.
1772
-        """,
1594
+        comments='The key that is set need not necessarily be set at the '
1595
+        'service level; it may be a global key as well.',
1773 1596
     )(
1774 1597
         context='Warning message',
1775
-        single=r"""
1776
-        Setting a service passphrase is ineffective because a key is
1777
-        also set: {service!s}.
1778
-        """,
1598
+        single='Setting a service passphrase is ineffective '
1599
+        'because a key is also set: {service!s}.',
1779 1600
         flags='python-brace-format',
1780 1601
     )
1781 1602
     STEP_REMOVE_INEFFECTIVE_VALUE = _Commented(
... ...
@@ -1789,220 +1610,165 @@ class WarnMsgTemplate(enum.Enum):
1789 1610
         comments='',
1790 1611
     )(
1791 1612
         context='Warning message',
1792
-        single="""
1793
-        Replacing invalid value {old!s} for key {path!s} with {new!s}.
1794
-        """,
1613
+        single='Replacing invalid value {old!s} for key {path!s} with {new!s}.',
1795 1614
         flags='python-brace-format',
1796 1615
     )
1797 1616
     V01_STYLE_CONFIG = _Commented(
1798 1617
         comments='',
1799 1618
     )(
1800 1619
         context='Warning message :: Deprecation',
1801
-        single=r"""
1802
-        Using deprecated v0.1-style config file {old!r}, instead of
1803
-        v0.2-style {new!r}.  Support for v0.1-style config filenames
1804
-        will be removed in v1.0.
1805
-        """,
1620
+        single='Using deprecated v0.1-style config file {old!r}, '
1621
+        'instead of v0.2-style {new!r}.  '
1622
+        'Support for v0.1-style config filenames will be removed in v1.0.',
1806 1623
         flags='python-brace-format',
1807 1624
     )
1808 1625
     V10_SUBCOMMAND_REQUIRED = _Commented(
1809
-        comments=r"""
1810
-        TRANSLATORS: This deprecation warning may be issued at any
1811
-        level, i.e. we may actually be talking about subcommands, or
1812
-        sub-subcommands, or sub-sub-subcommands, etc., which is what the
1813
-        "here" is supposed to indicate.
1814
-        """,
1626
+        comments='This deprecation warning may be issued at any level, '
1627
+        'i.e. we may actually be talking about subcommands, '
1628
+        'or sub-subcommands, or sub-sub-subcommands, etc., '
1629
+        'which is what the "here" is supposed to indicate.',
1815 1630
     )(
1816 1631
         context='Warning message :: Deprecation',
1817
-        single="""
1818
-        A subcommand will be required here in v1.0.  See --help for
1819
-        available subcommands.  Defaulting to subcommand "vault".
1820
-        """,
1632
+        single='A subcommand will be required here in v1.0.  '
1633
+        'See --help for available subcommands.  '
1634
+        'Defaulting to subcommand "vault".',
1821 1635
     )
1822 1636
 
1823 1637
 
1824 1638
 class ErrMsgTemplate(enum.Enum):
1825 1639
     AGENT_REFUSED_LIST_KEYS = _Commented(
1826
-        comments=r"""
1827
-        TRANSLATORS: "loaded keys" being keys loaded into the agent.
1828
-        """,
1640
+        comments='"loaded keys" being keys loaded into the agent.',
1829 1641
     )(
1830 1642
         context='Error message',
1831
-        single="""
1832
-        The SSH agent failed to or refused to supply a list of loaded keys.
1833
-        """,
1643
+        single='The SSH agent failed to or refused to supply '
1644
+        'a list of loaded keys.',
1834 1645
     )
1835 1646
     AGENT_REFUSED_SIGNATURE = _Commented(
1836
-        comments=r"""
1837
-        TRANSLATORS: The message to be signed is the vault UUID, but
1838
-        there's no space to explain that here, so ideally the error
1839
-        message does not go into detail.
1840
-        """,
1647
+        comments='The message to be signed is the vault UUID, '
1648
+        "but there's no space to explain that here, "
1649
+        'so ideally the error message does not go into detail.',
1841 1650
     )(
1842 1651
         context='Error message',
1843
-        single="""
1844
-        The SSH agent failed to or refused to issue a signature with the
1845
-        selected key, necessary for deriving a service passphrase.
1846
-        """,
1652
+        single='The SSH agent failed to or refused to issue a signature '
1653
+        'with the selected key, necessary for deriving a service passphrase.',
1847 1654
     )
1848 1655
     CANNOT_CONNECT_TO_AGENT = _Commented(
1849
-        comments=r"""
1850
-        TRANSLATORS: "error" is supplied by the operating system
1851
-        (errno/strerror).
1852
-        """,
1656
+        comments='"error" is supplied by the operating system (errno/strerror).',
1853 1657
     )(
1854 1658
         context='Error message',
1855 1659
         single='Cannot connect to the SSH agent: {error!s}: {filename!r}.',
1856 1660
         flags='python-brace-format',
1857 1661
     )
1858 1662
     CANNOT_DECODEIMPORT_VAULT_SETTINGS = _Commented(
1859
-        comments=r"""
1860
-        TRANSLATORS: "error" is supplied by the operating system
1861
-        (errno/strerror).
1862
-        """,
1663
+        comments='"error" is supplied by the operating system (errno/strerror).',
1863 1664
     )(
1864 1665
         context='Error message',
1865 1666
         single='Cannot import vault settings: cannot decode JSON: {error!s}.',
1866 1667
         flags='python-brace-format',
1867 1668
     )
1868 1669
     CANNOT_EXPORT_VAULT_SETTINGS = _Commented(
1869
-        comments=r"""
1870
-        TRANSLATORS: "error" is supplied by the operating system
1871
-        (errno/strerror).
1872
-        """,
1670
+        comments='"error" is supplied by the operating system (errno/strerror).',
1873 1671
     )(
1874 1672
         context='Error message',
1875 1673
         single='Cannot export vault settings: {error!s}: {filename!r}.',
1876 1674
         flags='python-brace-format',
1877 1675
     )
1878 1676
     CANNOT_IMPORT_VAULT_SETTINGS = _Commented(
1879
-        comments=r"""
1880
-        TRANSLATORS: "error" is supplied by the operating system
1881
-        (errno/strerror).
1882
-        """,
1677
+        comments='"error" is supplied by the operating system (errno/strerror).',
1883 1678
     )(
1884 1679
         context='Error message',
1885 1680
         single='Cannot import vault settings: {error!s}: {filename!r}.',
1886 1681
         flags='python-brace-format',
1887 1682
     )
1888 1683
     CANNOT_LOAD_USER_CONFIG = _Commented(
1889
-        comments=r"""
1890
-        TRANSLATORS: "error" is supplied by the operating system
1891
-        (errno/strerror).
1892
-        """,
1684
+        comments='"error" is supplied by the operating system (errno/strerror).',
1893 1685
     )(
1894 1686
         context='Error message',
1895 1687
         single='Cannot load user config: {error!s}: {filename!r}.',
1896 1688
         flags='python-brace-format',
1897 1689
     )
1898 1690
     CANNOT_LOAD_VAULT_SETTINGS = _Commented(
1899
-        comments=r"""
1900
-        TRANSLATORS: "error" is supplied by the operating system
1901
-        (errno/strerror).
1902
-        """,
1691
+        comments='"error" is supplied by the operating system (errno/strerror).',
1903 1692
     )(
1904 1693
         context='Error message',
1905 1694
         single='Cannot load vault settings: {error!s}: {filename!r}.',
1906 1695
         flags='python-brace-format',
1907 1696
     )
1908 1697
     CANNOT_PARSE_AS_VAULT_CONFIG = _Commented(
1909
-        comments=r"""
1910
-        TRANSLATORS: Unlike the "Cannot load {path!r} as a {fmt!s} vault
1911
-        configuration." message, *this* error message is emitted when we
1912
-        have tried loading the path in each of our supported formats,
1913
-        and failed.  The user will thus see the above "Cannot load ..."
1914
-        warning message potentially multiple times, and this error
1915
-        message at the very bottom.
1916
-        """,
1698
+        comments='Unlike the "Cannot load {path!r} as a {fmt!s} '
1699
+        'vault configuration." message, *this* error message is emitted '
1700
+        'when we have tried loading the path in each of our '
1701
+        'supported formats, and failed.  '
1702
+        'The user will thus see the above "Cannot load ..." warning message '
1703
+        'potentially multiple times, '
1704
+        'and this error message at the very bottom.',
1917 1705
     )(
1918 1706
         context='Error message',
1919
-        single=r"""
1920
-        Cannot parse {path!r} as a valid vault-native configuration
1921
-        file/directory.
1922
-        """,
1707
+        single='Cannot parse {path!r} as a valid vault-native '
1708
+        'configuration file/directory.',
1923 1709
         flags='python-brace-format',
1924 1710
     )
1925 1711
     CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR = _Commented(
1926
-        comments=r"""
1927
-        TRANSLATORS: "error" is supplied by the operating system
1928
-        (errno/strerror).
1929
-        """,
1712
+        comments='"error" is supplied by the operating system (errno/strerror).',
1930 1713
     )(
1931 1714
         context='Error message',
1932
-        single=r"""
1933
-        Cannot parse {path!r} as a valid vault-native configuration
1934
-        file/directory: {error!s}: {filename!r}.
1935
-        """,
1715
+        single=r'Cannot parse {path!r} as a valid vault-native '
1716
+        'configuration file/directory: {error!s}: {filename!r}.',
1936 1717
         flags='python-brace-format',
1937 1718
     )
1938 1719
     CANNOT_STORE_VAULT_SETTINGS = _Commented(
1939
-        comments=r"""
1940
-        TRANSLATORS: "error" is supplied by the operating system
1941
-        (errno/strerror).
1942
-        """,
1720
+        comments='"error" is supplied by the operating system (errno/strerror).',
1943 1721
     )(
1944 1722
         context='Error message',
1945 1723
         single='Cannot store vault settings: {error!s}: {filename!r}.',
1946 1724
         flags='python-brace-format',
1947 1725
     )
1948 1726
     CANNOT_UNDERSTAND_AGENT = _Commented(
1949
-        comments=r"""
1950
-        TRANSLATORS: This error message is used whenever we cannot make
1951
-        any sense of a response from the SSH agent because the response
1952
-        is ill-formed (truncated, improperly encoded, etc.) or otherwise
1953
-        violates the communications protocol.  Well-formed responses
1954
-        that adhere to the protocol, even if they indicate that the
1955
-        requested operation failed, are handled with a different error
1956
-        message.
1957
-        """,
1727
+        comments='This error message is used whenever we cannot make '
1728
+        'any sense of a response from the SSH agent '
1729
+        'because the response is ill-formed '
1730
+        '(truncated, improperly encoded, etc.) '
1731
+        'or otherwise violates the communications protocol.  '
1732
+        'Well-formed responses that adhere to the protocol, '
1733
+        'even if they indicate that the requested operation failed, '
1734
+        'are handled with a different error message.',
1958 1735
     )(
1959 1736
         context='Error message',
1960
-        single="""
1961
-        Cannot understand the SSH agent's response because it violates
1962
-        the communications protocol.
1963
-        """,
1737
+        single="Cannot understand the SSH agent's response because it "
1738
+        'violates the communications protocol.',
1964 1739
     )
1965 1740
     CANNOT_UPDATE_SETTINGS_NO_SETTINGS = _Commented(
1966
-        comments=r"""
1967
-        TRANSLATORS: The settings_type metavar contains translations for
1968
-        either "global settings" or "service-specific settings"; see the
1969
-        CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL and
1970
-        CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE entries.
1971
-        The first sentence will thus read either "Cannot update the
1972
-        global settings without any given settings." or "Cannot update
1973
-        the service-specific settings without any given settings.".  You
1974
-        may update this entry, and the two metavar entries, in any way
1975
-        you see fit that achieves the desired translations of the first
1976
-        sentence.
1977
-        """,
1741
+        comments='The settings_type metavar contains translations for '
1742
+        'either "global settings" or "service-specific settings"; '
1743
+        'see the CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL and '
1744
+        'CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE entries.  '
1745
+        'The first sentence will thus read either '
1746
+        '"Cannot update the global settings without any given settings." or '
1747
+        '"Cannot update the service-specific settings without any '
1748
+        'given settings.".  '
1749
+        'You may update this entry, and the two metavar entries, '
1750
+        'in any way you see fit that achieves the desired translations '
1751
+        'of the first sentence.',
1978 1752
     )(
1979 1753
         context='Error message',
1980
-        single=r"""
1981
-        Cannot update the {settings_type!s} without any given settings.
1982
-        You must specify at least one of --lower, ..., --symbol, or
1983
-        --phrase or --key.
1984
-        """,
1754
+        single='Cannot update the {settings_type!s} without any given settings.  '
1755
+        'You must specify at least one of --lower, ..., --symbol, '
1756
+        'or --phrase or --key.',
1985 1757
         flags='python-brace-format',
1986 1758
     )
1987 1759
     INVALID_USER_CONFIG = _Commented(
1988
-        comments=r"""
1989
-        TRANSLATORS: "error" is supplied by the operating system
1990
-        (errno/strerror).
1991
-        """,
1760
+        comments='"error" is supplied by the operating system (errno/strerror).',
1992 1761
     )(
1993 1762
         context='Error message',
1994
-        single=r"""
1995
-        The user configuration file is invalid.  {error!s}: {filename!r}.
1996
-        """,
1763
+        single='The user configuration file is invalid.  '
1764
+        '{error!s}: {filename!r}.',
1997 1765
         flags='python-brace-format',
1998 1766
     )
1999 1767
     INVALID_VAULT_CONFIG = _Commented(
2000
-        comments=r"""
2001
-        TRANSLATORS: This error message is a reaction to a validator
2002
-        function saying *that* the configuration is not valid, but not
2003
-        *how* it is not valid.  The configuration file is principally
2004
-        parsable, however.
2005
-        """,
1768
+        comments='This error message is a reaction to a validator function '
1769
+        'saying *that* the configuration is not valid, '
1770
+        'but not *how* it is not valid.  '
1771
+        'The configuration file is principally parsable, however.',
2006 1772
     )(
2007 1773
         context='Error message',
2008 1774
         single='Invalid vault config: {config!r}.',
... ...
@@ -2019,93 +1785,73 @@ class ErrMsgTemplate(enum.Enum):
2019 1785
         comments='',
2020 1786
     )(
2021 1787
         context='Error message',
2022
-        single=r"""
2023
-        Cannot connect to an SSH agent because this Python version does
2024
-        not support UNIX domain sockets.
2025
-        """,
1788
+        single='Cannot connect to an SSH agent because this Python version '
1789
+        'does not support UNIX domain sockets.',
2026 1790
     )
2027 1791
     NO_KEY_OR_PHRASE = _Commented(
2028 1792
         comments='',
2029 1793
     )(
2030 1794
         context='Error message',
2031
-        single=r"""
2032
-        No passphrase or key was given in the configuration.  In this
2033
-        case, the --phrase or --key argument is required.
2034
-        """,
1795
+        single='No passphrase or key was given in the configuration.  '
1796
+        'In this case, the --phrase or --key argument is required.',
2035 1797
     )
2036 1798
     NO_SSH_AGENT_FOUND = _Commented(
2037 1799
         comments='',
2038 1800
     )(
2039 1801
         context='Error message',
2040
-        single="""
2041
-        Cannot find any running SSH agent because SSH_AUTH_SOCK is not set.
2042
-        """,
1802
+        single='Cannot find any running SSH agent because SSH_AUTH_SOCK is not set.',
2043 1803
     )
2044 1804
     NO_SUITABLE_SSH_KEYS = _Commented(
2045 1805
         comments='',
2046 1806
     )(
2047 1807
         context='Error message',
2048
-        single="""
2049
-        The SSH agent contains no keys suitable for {PROG_NAME!s}.
2050
-        """,  # noqa: RUF027
1808
+        single='The SSH agent contains no keys suitable for {PROG_NAME!s}.',  # noqa: RUF027
2051 1809
         flags='python-brace-format',
2052 1810
     )
2053 1811
     PARAMS_MUTUALLY_EXCLUSIVE = _Commented(
2054
-        comments=r"""
2055
-        TRANSLATORS: The params are long-form command-line option names.
2056
-        Typical example: "--key is mutually exclusive with --phrase."
2057
-        """,
1812
+        comments='The params are long-form command-line option names.  '
1813
+        'Typical example: "--key is mutually exclusive with --phrase."',
2058 1814
     )(
2059 1815
         context='Error message',
2060 1816
         single='{param1!s} is mutually exclusive with {param2!s}.',
2061 1817
         flags='python-brace-format',
2062 1818
     )
2063 1819
     PARAMS_NEEDS_SERVICE_OR_CONFIG = _Commented(
2064
-        comments=r"""
2065
-        TRANSLATORS: The param is a long-form command-line option name,
2066
-        the metavar is Label.VAULT_METAVAR_SERVICE.
2067
-        """,
1820
+        comments='The param is a long-form command-line option name, '
1821
+        'the metavar is Label.VAULT_METAVAR_SERVICE.',
2068 1822
     )(
2069 1823
         context='Error message',
2070 1824
         single='{param!s} requires a {service_metavar!s} or --config.',
2071 1825
         flags='python-brace-format',
2072 1826
     )
2073 1827
     PARAMS_NEEDS_SERVICE = _Commented(
2074
-        comments=r"""
2075
-        TRANSLATORS: The param is a long-form command-line option name,
2076
-        the metavar is Label.VAULT_METAVAR_SERVICE.
2077
-        """,
1828
+        comments='The param is a long-form command-line option name, '
1829
+        'the metavar is Label.VAULT_METAVAR_SERVICE.',
2078 1830
     )(
2079 1831
         context='Error message',
2080 1832
         single='{param!s} requires a {service_metavar!s}.',
2081 1833
         flags='python-brace-format',
2082 1834
     )
2083 1835
     PARAMS_NO_SERVICE = _Commented(
2084
-        comments=r"""
2085
-        TRANSLATORS: The param is a long-form command-line option name,
2086
-        the metavar is Label.VAULT_METAVAR_SERVICE.
2087
-        """,
1836
+        comments='The param is a long-form command-line option name, '
1837
+        'the metavar is Label.VAULT_METAVAR_SERVICE.',
2088 1838
     )(
2089 1839
         context='Error message',
2090 1840
         single='{param!s} does not take a {service_metavar!s} argument.',
2091 1841
         flags='python-brace-format',
2092 1842
     )
2093 1843
     SERVICE_REQUIRED = _Commented(
2094
-        comments=r"""
2095
-        TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
2096
-        """,
1844
+        comments='The metavar is Label.VAULT_METAVAR_SERVICE.',
2097 1845
     )(
2098 1846
         context='Error message',
2099 1847
         single='Deriving a passphrase requires a {service_metavar!s}.',
2100 1848
         flags='python-brace-format',
2101 1849
     )
2102 1850
     SET_AND_UNSET_SAME_SETTING = _Commented(
2103
-        comments=r"""
2104
-        TRANSLATORS: The rephrasing "Attempted to unset and set the same
2105
-        setting (--unset={setting!s} --{setting!s}=...) at the same
2106
-        time." may or may not be more suitable as a basis for
2107
-        translation instead.
2108
-        """,
1851
+        comments='The rephrasing '
1852
+        '"Attempted to unset and set the same setting '
1853
+        '(--unset={setting!s} --{setting!s}=...) at the same time."'
1854
+        'may or may not be more suitable as a basis for translation instead.',
2109 1855
     )(
2110 1856
         context='Error message',
2111 1857
         single='Attempted to unset and set --{setting!s} at the same time.',
... ...
@@ -2118,28 +1864,22 @@ class ErrMsgTemplate(enum.Enum):
2118 1864
         single='The requested SSH key is not loaded into the agent.',
2119 1865
     )
2120 1866
     USER_ABORTED_EDIT = _Commented(
2121
-        comments=r"""
2122
-        TRANSLATORS: The user requested to edit the notes for a service,
2123
-        but aborted the request mid-editing.
2124
-        """,
1867
+        comments='The user requested to edit the notes for a service, '
1868
+        'but aborted the request mid-editing.',
2125 1869
     )(
2126 1870
         context='Error message',
2127 1871
         single='Not saving any new notes: the user aborted the request.',
2128 1872
     )
2129 1873
     USER_ABORTED_PASSPHRASE = _Commented(
2130
-        comments=r"""
2131
-        TRANSLATORS: The user was prompted for a master passphrase,
2132
-        but aborted the request.
2133
-        """,
1874
+        comments='The user was prompted for a master passphrase, '
1875
+        'but aborted the request.',
2134 1876
     )(
2135 1877
         context='Error message',
2136 1878
         single='No passphrase was given; the user aborted the request.',
2137 1879
     )
2138 1880
     USER_ABORTED_SSH_KEY_SELECTION = _Commented(
2139
-        comments=r"""
2140
-        TRANSLATORS: The user was prompted to select a master SSH key,
2141
-        but aborted the request.
2142
-        """,
1881
+        comments='The user was prompted to select a master SSH key, '
1882
+        'but aborted the request.',
2143 1883
     )(
2144 1884
         context='Error message',
2145 1885
         single='No SSH key was selected; the user aborted the request.',
2146 1886