Regenerate PO template
Marco Ricci

Marco Ricci commited on 2025-02-11 23:22:09
Zeige 1 geänderte Dateien mit 739 Einfügungen und 725 Löschungen.

... ...
@@ -7,8 +7,8 @@ msgid ""
7 7
 msgstr ""
8 8
 "Project-Id-Version: derivepassphrase 0.5a1.dev1\n"
9 9
 "Report-Msgid-Bugs-To: software@the13thletter.info\n"
10
-"POT-Creation-Date: 2025-02-11 15:30+0000\n"
11
-"PO-Revision-Date: 2025-02-11 15:30+0000\n"
10
+"POT-Creation-Date: 2025-02-11 22:20+0000\n"
11
+"PO-Revision-Date: 2025-02-11 22:20+0000\n"
12 12
 "Last-Translator: AUTHOR <someone@example.com>\n"
13 13
 "Language: en\n"
14 14
 "Language-Team: English\n"
... ...
@@ -17,1151 +17,1165 @@ msgstr ""
17 17
 "Content-Transfer-Encoding: 8bit\n"
18 18
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19 19
 
20
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  The system stores entries in different "buckets" of a hash table.  Here, we report on a single item (path and value) we discovered after decrypting the whole bucket.  (We ensure the path and value are printable as-is.)
20
+#. TRANSLATORS: This is a short label that will be prepended to a warning message, e.g., "Deprecation warning: A subcommand will be required in v1.0."
21 21
 #. 
22
-#. Message-ID: DebugMsgTemplate.BUCKET_ITEM_FOUND
23
-#, python-brace-format
24
-msgctxt "Debug message"
25
-msgid "Found bucket item: {path} -> {value}"
22
+#. Message-ID: Label.DEPRECATION_WARNING_LABEL
23
+msgctxt "Label :: Diagnostics :: Marker"
24
+msgid "Deprecation warning"
26 25
 msgstr ""
27 26
 
28
-#. TRANSLATORS: "AES256-CBC" and "PKCS#7" are, in essence, names of formats, and should not be translated.  "IV" means "initialization vector", and is specifically a cryptographic term, as are "plaintext" and "ciphertext".
27
+#. TRANSLATORS: This is a short label that will be prepended to a warning message, e.g., "Warning: An empty service name is not supported by vault(1)."
29 28
 #. 
30
-#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_INFO
31
-#, python-brace-format
32
-msgctxt "Debug message"
33
-msgid "Decrypt bucket item contents:\n"
34
-"\n"
35
-"Encryption key (master key): {enc_key}\n"
36
-"Encryption cipher: AES256-CBC with PKCS#7 padding\n"
37
-"Encryption IV: {iv}\n"
38
-"Encrypted ciphertext: {ciphertext}\n"
39
-"Plaintext: {plaintext}"
29
+#. Message-ID: Label.WARNING_LABEL
30
+msgctxt "Label :: Diagnostics :: Marker"
31
+msgid "Warning"
40 32
 msgstr ""
41 33
 
42
-#. TRANSLATORS: Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_KEY_INFO
43
-#, python-brace-format
44
-msgctxt "Debug message"
45
-msgid "Decrypt bucket item:\n"
46
-"\n"
47
-"Plaintext: {plaintext}\n"
48
-"Encryption key (master key): {enc_key}\n"
49
-"Signing key (master key): {sign_key}"
34
+#. TRANSLATORS: This is one of two values of the settings_type metavar used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS entry.  It is only used there.  The full sentence then reads: "Cannot update the global settings without any given settings."
35
+#. 
36
+#. Message-ID: Label.CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL
37
+msgctxt "Label :: Error message :: Metavar"
38
+msgid "global settings"
50 39
 msgstr ""
51 40
 
52
-#. TRANSLATORS: The MAC stands for "message authentication code", which guarantees the authenticity of the message to anyone who holds the corresponding key, similar to a digital signature.  The acronym "MAC" is assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate this term or not, expanded or not.
41
+#. TRANSLATORS: This is one of two values of the settings_type metavar used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS entry.  It is only used there.  The full sentence then reads: "Cannot update the service-specific settings without any given settings."
53 42
 #. 
54
-#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_MAC_INFO
55
-#, python-brace-format
56
-msgctxt "Debug message"
57
-msgid "Decrypt bucket item contents:\n"
58
-"\n"
59
-"MAC key: {sign_key}\n"
60
-"Authenticated content: {ciphertext}\n"
61
-"Claimed MAC value: {claimed_mac}\n"
62
-"Computed MAC value: {actual_mac}"
43
+#. Message-ID: Label.CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE
44
+msgctxt "Label :: Error message :: Metavar"
45
+msgid "service-specific settings"
63 46
 msgstr ""
64 47
 
65
-#. TRANSLATORS: "AES256-CBC" and "PKCS#7" are, in essence, names of formats, and should not be translated.  "IV" means "initialization vector", and is specifically a cryptographic term, as are "plaintext" and "ciphertext".
66
-#. 
67
-#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_SESSION_KEYS_INFO
68
-#, python-brace-format
69
-msgctxt "Debug message"
70
-msgid "Decrypt bucket item session keys:\n"
71
-"\n"
72
-"Encryption key (master key): {enc_key}\n"
73
-"Encryption cipher: AES256-CBC with PKCS#7 padding\n"
74
-"Encryption IV: {iv}\n"
75
-"Encrypted ciphertext: {ciphertext}\n"
76
-"Plaintext: {plaintext}\n"
77
-"Parsed plaintext: {code}"
48
+#. TRANSLATORS: Message-ID: Label.CONFIGURATION_EPILOG
49
+msgctxt "Label :: Help text :: Explanation"
50
+msgid "Use $VISUAL or $EDITOR to configure the spawned editor."
78 51
 msgstr ""
79 52
 
80
-#. TRANSLATORS: The MAC stands for "message authentication code", which guarantees the authenticity of the message to anyone who holds the corresponding key, similar to a digital signature.  The acronym "MAC" is assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate this term or not, expanded or not.
81
-#. 
82
-#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_SESSION_KEYS_MAC_INFO
83
-#, python-brace-format
84
-msgctxt "Debug message"
85
-msgid "Decrypt bucket item session keys:\n"
86
-"\n"
87
-"MAC key (master key): {sign_key}\n"
88
-"Authenticated content: {ciphertext}\n"
89
-"Claimed MAC value: {claimed_mac}\n"
90
-"Computed MAC value: {actual_mac}"
53
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_02
54
+msgctxt "Label :: Help text :: Explanation"
55
+msgid "The currently implemented subcommands are \"vault\" (for the scheme used by vault) and \"export\" (for exporting foreign configuration data).  See the respective `--help` output for instructions.  If no subcommand is given, we default to \"vault\"."
91 56
 msgstr ""
92 57
 
93
-#. TRANSLATORS: Message-ID: DebugMsgTemplate.DERIVED_MASTER_KEYS_KEYS
94
-#, python-brace-format
95
-msgctxt "Debug message"
96
-msgid "Derived master keys' keys:\n"
97
-"\n"
98
-"Encryption key: {enc_key}\n"
99
-"Signing key: {sign_key}\n"
100
-"Password: {pw_bytes}\n"
101
-"Function call: pbkdf2(algorithm={algorithm!r}, length={length!r}, salt={salt!r}, iterations={iterations!r})"
58
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_03
59
+msgctxt "Label :: Help text :: Explanation"
60
+msgid "Deprecation notice: Defaulting to \"vault\" is deprecated.  Starting in v1.0, the subcommand must be specified explicitly."
102 61
 msgstr ""
103 62
 
104
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  Each "directory" in the path contains a list of children it claims to contain, and this list must be matched against the actual discovered items.  Now, at the end, we actually confirm the claim.  (We would have already thrown an error here otherwise.)
105
-#. 
106
-#. Message-ID: DebugMsgTemplate.DIRECTORY_CONTENTS_CHECK_OK
107
-#, python-brace-format
108
-msgctxt "Debug message"
109
-msgid "Directory contents check OK: {path} -> {contents}"
63
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_EPILOG_01
64
+msgctxt "Label :: Help text :: Explanation"
65
+msgid "Configuration is stored in a directory according to the `DERIVEPASSPHRASE_PATH` variable, which defaults to `~/.derivepassphrase` on UNIX-like systems and `C:\\Users\\<user>\\AppData\\Roaming\\Derivepassphrase` on Windows."
110 66
 msgstr ""
111 67
 
112
-#. TRANSLATORS: The MAC stands for "message authentication code", which guarantees the authenticity of the message to anyone who holds the corresponding key, similar to a digital signature.  The acronym "MAC" is assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate this term or not, expanded or not.
113
-#. 
114
-#. Message-ID: DebugMsgTemplate.MASTER_KEYS_DATA_MAC_INFO
115
-#, python-brace-format
116
-msgctxt "Debug message"
117
-msgid "Master keys data:\n"
118
-"\n"
119
-"MAC key: {sign_key}\n"
120
-"Authenticated content: {ciphertext}\n"
121
-"Claimed MAC value: {claimed_mac}\n"
122
-"Computed MAC value: {actual_mac}"
68
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_EXPORT_02
69
+msgctxt "Label :: Help text :: Explanation"
70
+msgid "The only available subcommand is \"vault\", which implements the vault-native configuration scheme.  If no subcommand is given, we default to \"vault\"."
123 71
 msgstr ""
124 72
 
125
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  Each "directory" in the path contains a list of children it claims to contain, and this list must be matched against the actual discovered items.  When emitting this message, we merely indicate that we saved the "claimed" list for this directory for later.
73
+#. TRANSLATORS: The metavar is Label.EXPORT_VAULT_METAVAR_PATH.
126 74
 #. 
127
-#. Message-ID: DebugMsgTemplate.POSTPONING_DIRECTORY_CONTENTS_CHECK
75
+#. Message-ID: Label.DERIVEPASSPHRASE_EXPORT_VAULT_02
128 76
 #, python-brace-format
129
-msgctxt "Debug message"
130
-msgid "Postponing directory contents check: {path} -> {contents}"
77
+msgctxt "Label :: Help text :: Explanation"
78
+msgid "Depending on the configuration format, {path_metavar} may either be a file or a directory.  We support the vault \"v0.2\", \"v0.3\" and \"storeroom\" formats."
131 79
 msgstr ""
132 80
 
133
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  We confirm that we set the entry at the given path to the given value.
81
+#. TRANSLATORS: The metavar is Label.EXPORT_VAULT_METAVAR_PATH.
134 82
 #. 
135
-#. Message-ID: DebugMsgTemplate.SETTING_CONFIG_STRUCTURE_CONTENTS
83
+#. Message-ID: Label.DERIVEPASSPHRASE_EXPORT_VAULT_03
136 84
 #, python-brace-format
137
-msgctxt "Debug message"
138
-msgid "Setting contents: {path} -> {value}"
85
+msgctxt "Label :: Help text :: Explanation"
86
+msgid "If {path_metavar} is explicitly given as `VAULT_PATH`, then use the `VAULT_PATH` environment variable to determine the correct path.  (Use `./VAULT_PATH` or similar to indicate a file/directory actually named `VAULT_PATH`.)"
139 87
 msgstr ""
140 88
 
141
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  We confirm that we set up a currently empty directory at the given path.
89
+#. TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
142 90
 #. 
143
-#. Message-ID: DebugMsgTemplate.SETTING_CONFIG_STRUCTURE_CONTENTS_EMPTY_DIRECTORY
91
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_02
144 92
 #, python-brace-format
145
-msgctxt "Debug message"
146
-msgid "Setting contents (empty directory): {path}"
93
+msgctxt "Label :: Help text :: Explanation"
94
+msgid "If operating on global settings, or importing/exporting settings, then {service_metavar} must be omitted.  Otherwise it is required."
147 95
 msgstr ""
148 96
 
149
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  It is preceded by the info message VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC; see the commentary there concerning the terms and thoughts on translating them.
150
-#. 
151
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_CHECKING_MAC_DETAILS
152
-#, python-brace-format
153
-msgctxt "Debug message"
154
-msgid "MAC details:\n"
155
-"\n"
156
-"MAC input: {mac_input}\n"
157
-"Expected MAC: {mac}"
97
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_EPILOG_01
98
+msgctxt "Label :: Help text :: Explanation"
99
+msgid "WARNING: There is NO WAY to retrieve the generated passphrases if the master passphrase, the SSH key, or the exact passphrase settings are lost, short of trying out all possible combinations.  You are STRONGLY advised to keep independent backups of the settings and the SSH key, if any."
158 100
 msgstr ""
159 101
 
160
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories: in v0.2, the non-standard and deprecated "EVP_bytestokey" function from OpenSSL must be reimplemented from scratch.  The terms "salt" and "IV" (initialization vector) are cryptographic terms.
161
-#. 
162
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_EVP_BYTESTOKEY_INIT
163
-#, python-brace-format
164
-msgctxt "Debug message"
165
-msgid "evp_bytestokey_md5 (initialization):\n"
166
-"\n"
167
-"Input: {data}\n"
168
-"Salt: {salt}\n"
169
-"Key size: {key_size}\n"
170
-"IV size: {iv_size}\n"
171
-"Buffer length: {buffer_length}\n"
172
-"Buffer: {buffer}"
102
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_EPILOG_02
103
+msgctxt "Label :: Help text :: Explanation"
104
+msgid "The configuration is NOT encrypted, and you are STRONGLY discouraged from using a stored passphrase."
173 105
 msgstr ""
174 106
 
175
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories: in v0.2, the non-standard and deprecated "EVP_bytestokey" function from OpenSSL must be reimplemented from scratch.  The terms "salt" and "IV" (initialization vector) are cryptographic terms.This function reports on the final results.
107
+#. TRANSLATORS: This instruction text is shown above the user's old stored notes for this service, if any, if the recommended "modern" editor interface is used.  The next line is the cut marking defined in Label.DERIVEPASSPHRASE_VAULT_NOTES_MARKER.
176 108
 #. 
177
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_EVP_BYTESTOKEY_RESULT
178
-#, python-brace-format
179
-msgctxt "Debug message"
180
-msgid "evp_bytestokey_md5 (result):\n"
181
-"\n"
182
-"Encryption key: {enc_key}\n"
183
-"IV: {iv}"
109
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_INSTRUCTION_TEXT
110
+msgctxt "Label :: Help text :: Explanation"
111
+msgid "# Enter notes below the line with the cut mark (ASCII scissors and\n"
112
+"# dashes).  Lines above the cut mark (such as this one) will be ignored.\n"
113
+"#\n"
114
+"# If you wish to clear the notes, leave everything beyond the cut mark\n"
115
+"# blank.  However, if you leave the *entire* file blank, also removing\n"
116
+"# the cut mark, then the edit is aborted, and the old notes contents are\n"
117
+"# retained.\n"
118
+"#"
184 119
 msgstr ""
185 120
 
186
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories: in v0.2, the non-standard and deprecated "EVP_bytestokey" function from OpenSSL must be reimplemented from scratch.  The terms "salt" and "IV" (initialization vector) are cryptographic terms.This function reports on the updated buffer length and contents after executing one round of hashing.
121
+#. TRANSLATORS: This instruction text is shown if the vault(1)-compatible "legacy" editor interface is used and no previous notes exist.  The interface does not support commentary in the notes, so we fill this with obvious placeholder text instead.  (Please replace this with what *your* language/culture would obviously recognize as placeholder text.)
187 122
 #. 
188
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_EVP_BYTESTOKEY_ROUND
189
-#, python-brace-format
190
-msgctxt "Debug message"
191
-msgid "evp_bytestokey_md5 (round update):\n"
192
-"\n"
193
-"Buffer length: {buffer_length}\n"
194
-"Buffer: {buffer}"
123
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_LEGACY_INSTRUCTION_TEXT
124
+msgctxt "Label :: Help text :: Explanation"
125
+msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
195 126
 msgstr ""
196 127
 
197
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  "padding" and "plaintext" are cryptographic terms.
128
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
198 129
 #. 
199
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_PADDED_PLAINTEXT
130
+#. Message-ID: Label.PASSPHRASE_GENERATION_EPILOG
200 131
 #, python-brace-format
201
-msgctxt "Debug message"
202
-msgid "Padded plaintext: {contents}"
132
+msgctxt "Label :: Help text :: Explanation"
133
+msgid "Use {metavar}=0 to exclude a character type from the output."
203 134
 msgstr ""
204 135
 
205
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  It is preceded by the info message VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC; see the commentary there concerning the terms and thoughts on translating them.
136
+#. TRANSLATORS: The metavar is Label.STORAGE_MANAGEMENT_METAVAR_PATH.
206 137
 #. 
207
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_PARSE_BUFFER
138
+#. Message-ID: Label.STORAGE_MANAGEMENT_EPILOG
208 139
 #, python-brace-format
209
-msgctxt "Debug message"
210
-msgid "Buffer: {contents}\n"
211
-"\n"
212
-"IV: {iv}\n"
213
-"Payload: {payload}\n"
214
-"MAC: {mac}"
140
+msgctxt "Label :: Help text :: Explanation"
141
+msgid "Using \"-\" as {metavar} for standard input/standard output is supported."
215 142
 msgstr ""
216 143
 
217
-#. TRANSLATORS: Message-ID: DebugMsgTemplate.VAULT_NATIVE_PBKDF2_CALL
144
+#. TRANSLATORS: We use this format string to indicate, at the beginning of a command's help text, that this command is deprecated.
145
+#. 
146
+#. Message-ID: Label.DEPRECATED_COMMAND_LABEL
218 147
 #, python-brace-format
219
-msgctxt "Debug message"
220
-msgid "Master key derivation:\n"
221
-"\n"
222
-"PBKDF2 call: PBKDF2-HMAC(password={password!r}, salt={salt!r}, iterations={iterations!r}, key_size={key_size!r}, algorithm={algorithm!r})\n"
223
-"Result (binary): {raw_result}\n"
224
-"Result (hex key): {result_key!r}"
148
+msgctxt "Label :: Help text :: Marker"
149
+msgid "(Deprecated) {text}"
225 150
 msgstr ""
226 151
 
227
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  "plaintext" is a cryptographic term.
152
+#. TRANSLATORS: The marker for separating the text from Label.DERIVEPASSPHRASE_VAULT_NOTES_INSTRUCTION_TEXT from the user's input (below the marker).  The first line starting with this label marks the separation point.
228 153
 #. 
229
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_PLAINTEXT
230
-#, python-brace-format
231
-msgctxt "Debug message"
232
-msgid "Plaintext: {contents}"
154
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_MARKER
155
+msgctxt "Label :: Help text :: Marker"
156
+msgid "# - - - - - >8 - - - - - >8 - - - - - >8 - - - - - >8 - - - - -"
233 157
 msgstr ""
234 158
 
235
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  It is preceded by the info message VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC and the debug message PARSING_NATIVE_PARSE_BUFFER; see the commentary there concerning the terms and thoughts on translating them.
159
+#. TRANSLATORS: This text is used as {metavar} in Label.EXPORT_VAULT_FORMAT_HELP_TEXT, yielding e.g. "Try the following storage format FMT."
236 160
 #. 
237
-#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_V02_PAYLOAD_MAC_POSTPROCESSING
238
-#, python-brace-format
239
-msgctxt "Debug message"
240
-msgid "Postprocessing buffer (v0.2):\n"
241
-"\n"
242
-"Payload: {payload} (decoded from base64)\n"
243
-"MAC: {mac} (decoded from hex)"
161
+#. Message-ID: Label.EXPORT_VAULT_FORMAT_METAVAR_FMT
162
+msgctxt "Label :: Help text :: Metavar :: export vault"
163
+msgid "FMT"
244 164
 msgstr ""
245 165
 
246
-#. TRANSLATORS: "loaded keys" being keys loaded into the agent.
166
+#. TRANSLATORS: This text is used as {metavar} in Label.EXPORT_VAULT_KEY_HELP_TEXT, yielding e.g. "Use K as the storage master key."
247 167
 #. 
248
-#. Message-ID: ErrMsgTemplate.AGENT_REFUSED_LIST_KEYS
249
-msgctxt "Error message"
250
-msgid "The SSH agent failed to or refused to supply a list of loaded keys."
168
+#. Message-ID: Label.EXPORT_VAULT_KEY_METAVAR_K
169
+msgctxt "Label :: Help text :: Metavar :: export vault"
170
+msgid "K"
251 171
 msgstr ""
252 172
 
253
-#. TRANSLATORS: The message to be signed is the vault UUID, but there's no space to explain that here, so ideally the error message does not go into detail.
173
+#. TRANSLATORS: Used as "path_metavar" in Label.DERIVEPASSPHRASE_EXPORT_VAULT_02 and others, yielding e.g. "Depending on the configuration format, PATH may either be a file or a directory."
254 174
 #. 
255
-#. Message-ID: ErrMsgTemplate.AGENT_REFUSED_SIGNATURE
256
-msgctxt "Error message"
257
-msgid "The SSH agent failed to or refused to issue a signature with the selected key, necessary for deriving a service passphrase."
175
+#. Message-ID: Label.EXPORT_VAULT_METAVAR_PATH
176
+msgctxt "Label :: Help text :: Metavar :: export vault"
177
+msgid "PATH"
258 178
 msgstr ""
259 179
 
260
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
180
+#. TRANSLATORS: This metavar is used in Label.PASSPHRASE_GENERATION_EPILOG, Label.DERIVEPASSPHRASE_VAULT_LENGTH_HELP_TEXT and others, yielding e.g. "Ensure a passphrase length of NUMBER characters.".
261 181
 #. 
262
-#. Message-ID: ErrMsgTemplate.CANNOT_CONNECT_TO_AGENT
263
-#, python-brace-format
264
-msgctxt "Error message"
265
-msgid "Cannot connect to the SSH agent: {error!s}: {filename!r}."
182
+#. Message-ID: Label.PASSPHRASE_GENERATION_METAVAR_NUMBER
183
+msgctxt "Label :: Help text :: Metavar :: vault"
184
+msgid "NUMBER"
266 185
 msgstr ""
267 186
 
268
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
187
+#. TRANSLATORS: This metavar is used in Label.STORAGE_MANAGEMENT_EPILOG, Label.DERIVEPASSPHRASE_VAULT_IMPORT_HELP_TEXT and others, yielding e.g. "Ensure a passphrase length of NUMBER characters.".
269 188
 #. 
270
-#. Message-ID: ErrMsgTemplate.CANNOT_CONNECT_TO_AGENT
271
-#, python-brace-format
272
-msgctxt "Error message"
273
-msgid "Cannot connect to the SSH agent: {error!s}."
189
+#. Message-ID: Label.STORAGE_MANAGEMENT_METAVAR_PATH
190
+msgctxt "Label :: Help text :: Metavar :: vault"
191
+msgid "PATH"
274 192
 msgstr ""
275 193
 
276
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
194
+#. TRANSLATORS: This metavar is used as "service_metavar" in multiple help texts, such as Label.DERIVEPASSPHRASE_VAULT_CONFIG_HELP_TEXT, Label.DERIVEPASSPHRASE_VAULT_02, ErrMsgTemplate.SERVICE_REQUIRED, etc.  Sample texts are "Deriving a passphrase requires a SERVICE.", "save the given settings for SERVICE, or global" and "If operating on global settings, or importing/exporting settings, then SERVICE must be omitted."
277 195
 #. 
278
-#. Message-ID: ErrMsgTemplate.CANNOT_DECODEIMPORT_VAULT_SETTINGS
279
-#, python-brace-format
280
-msgctxt "Error message"
281
-msgid "Cannot import vault settings: cannot decode JSON: {error!s}."
196
+#. Message-ID: Label.VAULT_METAVAR_SERVICE
197
+msgctxt "Label :: Help text :: Metavar :: vault"
198
+msgid "SERVICE"
282 199
 msgstr ""
283 200
 
284
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
285
-#. 
286
-#. Message-ID: ErrMsgTemplate.CANNOT_EXPORT_VAULT_SETTINGS
287
-#, python-brace-format
288
-msgctxt "Error message"
289
-msgid "Cannot export vault settings: {error!s}: {filename!r}."
201
+#. TRANSLATORS: Message-ID: Label.DEBUG_OPTION_HELP_TEXT
202
+msgctxt "Label :: Help text :: One-line description"
203
+msgid "Also emit debug information.  Implies --verbose."
290 204
 msgstr ""
291 205
 
292
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
206
+#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
293 207
 #. 
294
-#. Message-ID: ErrMsgTemplate.CANNOT_EXPORT_VAULT_SETTINGS
295
-#, python-brace-format
296
-msgctxt "Error message"
297
-msgid "Cannot export vault settings: {error!s}."
208
+#. Message-ID: Label.DERIVEPASSPHRASE_01
209
+msgctxt "Label :: Help text :: One-line description"
210
+msgid "Derive a strong passphrase, deterministically, from a master secret."
298 211
 msgstr ""
299 212
 
300
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
213
+#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
301 214
 #. 
302
-#. Message-ID: ErrMsgTemplate.CANNOT_IMPORT_VAULT_SETTINGS
303
-#, python-brace-format
304
-msgctxt "Error message"
305
-msgid "Cannot import vault settings: {error!s}: {filename!r}."
215
+#. Message-ID: Label.DERIVEPASSPHRASE_EXPORT_01
216
+msgctxt "Label :: Help text :: One-line description"
217
+msgid "Export a foreign configuration to standard output."
306 218
 msgstr ""
307 219
 
308
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
220
+#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
309 221
 #. 
310
-#. Message-ID: ErrMsgTemplate.CANNOT_IMPORT_VAULT_SETTINGS
311
-#, python-brace-format
312
-msgctxt "Error message"
313
-msgid "Cannot import vault settings: {error!s}."
222
+#. Message-ID: Label.DERIVEPASSPHRASE_EXPORT_VAULT_01
223
+msgctxt "Label :: Help text :: One-line description"
224
+msgid "Export a vault-native configuration to standard output."
314 225
 msgstr ""
315 226
 
316
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
227
+#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
317 228
 #. 
318
-#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_USER_CONFIG
319
-#, python-brace-format
320
-msgctxt "Error message"
321
-msgid "Cannot load user config: {error!s}: {filename!r}."
229
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_01
230
+msgctxt "Label :: Help text :: One-line description"
231
+msgid "Derive a passphrase using the vault derivation scheme."
322 232
 msgstr ""
323 233
 
324
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
234
+#. TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
325 235
 #. 
326
-#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_USER_CONFIG
236
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_CONFIG_HELP_TEXT
327 237
 #, python-brace-format
328
-msgctxt "Error message"
329
-msgid "Cannot load user config: {error!s}."
238
+msgctxt "Label :: Help text :: One-line description"
239
+msgid "Save the given settings for {service_metavar}, or global."
330 240
 msgstr ""
331 241
 
332
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
242
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
333 243
 #. 
334
-#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_VAULT_SETTINGS
244
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_DASH_HELP_TEXT
335 245
 #, python-brace-format
336
-msgctxt "Error message"
337
-msgid "Cannot load vault settings: {error!s}: {filename!r}."
246
+msgctxt "Label :: Help text :: One-line description"
247
+msgid "Ensure at least {metavar} \"-\" or \"_\" characters."
338 248
 msgstr ""
339 249
 
340
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
341
-#. 
342
-#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_VAULT_SETTINGS
343
-#, python-brace-format
344
-msgctxt "Error message"
345
-msgid "Cannot load vault settings: {error!s}."
250
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_DELETE_ALL_HELP_TEXT
251
+msgctxt "Label :: Help text :: One-line description"
252
+msgid "Delete all settings."
346 253
 msgstr ""
347 254
 
348
-#. TRANSLATORS: Unlike the "Cannot load {path!r} as a {fmt!s} vault configuration." message, *this* error message is emitted when we have tried loading the path in each of our supported formats, and failed.  The user will thus see the above "Cannot load ..." warning message potentially multiple times, and this error message at the very bottom.
349
-#. 
350
-#. Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG
351
-#, python-brace-format
352
-msgctxt "Error message"
353
-msgid "Cannot parse {path!r} as a valid vault-native configuration file/directory."
255
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_DELETE_GLOBALS_HELP_TEXT
256
+msgctxt "Label :: Help text :: One-line description"
257
+msgid "Delete the global settings."
354 258
 msgstr ""
355 259
 
356
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
260
+#. TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
357 261
 #. 
358
-#. Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR
262
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_DELETE_HELP_TEXT
359 263
 #, python-brace-format
360
-msgctxt "Error message"
361
-msgid "Cannot parse {path!r} as a valid vault-native configuration file/directory: {error!s}: {filename!r}."
264
+msgctxt "Label :: Help text :: One-line description"
265
+msgid "Delete the settings for {service_metavar}."
362 266
 msgstr ""
363 267
 
364
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
268
+#. TRANSLATORS: The corresponding option is displayed as "--modern-editor-interface / --vault-legacy-editor-interface", so you may want to hint that the default (legacy) is the second of those options.  Though the vault(1) legacy editor interface clearly has deficiencies and (in my opinion) should only be used for compatibility purposes, the one-line help text should try not to sound too judgmental, if possible.
365 269
 #. 
366
-#. Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR
367
-#, python-brace-format
368
-msgctxt "Error message"
369
-msgid "Cannot parse {path!r} as a valid vault-native configuration file/directory: {error!s}."
270
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_EDITOR_INTERFACE_HELP_TEXT
271
+msgctxt "Label :: Help text :: One-line description"
272
+msgid "Edit notes using the modern editor interface or the vault-like legacy one (default)."
370 273
 msgstr ""
371 274
 
372
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
275
+#. TRANSLATORS: The corresponding option is displayed as "--export-as=json|sh", so json refers to the JSON format (default) and sh refers to the POSIX sh format.  Please ensure that it is clear what the "json" and "sh" refer to in your translation... even if you cannot use texutal correspondence like the English text does.
373 276
 #. 
374
-#. Message-ID: ErrMsgTemplate.CANNOT_STORE_VAULT_SETTINGS
375
-#, python-brace-format
376
-msgctxt "Error message"
377
-msgid "Cannot store vault settings: {error!s}: {filename!r}."
277
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_EXPORT_AS_HELP_TEXT
278
+msgctxt "Label :: Help text :: One-line description"
279
+msgid "When exporting, export as JSON (default) or as POSIX sh."
378 280
 msgstr ""
379 281
 
380
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
282
+#. TRANSLATORS: The metavar is Label.STORAGE_MANAGEMENT_METAVAR_PATH.
381 283
 #. 
382
-#. Message-ID: ErrMsgTemplate.CANNOT_STORE_VAULT_SETTINGS
284
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_EXPORT_HELP_TEXT
383 285
 #, python-brace-format
384
-msgctxt "Error message"
385
-msgid "Cannot store vault settings: {error!s}."
286
+msgctxt "Label :: Help text :: One-line description"
287
+msgid "Export all saved settings to {metavar}."
386 288
 msgstr ""
387 289
 
388
-#. TRANSLATORS: This error message is used whenever we cannot make any sense of a response from the SSH agent because the response is ill-formed (truncated, improperly encoded, etc.) or otherwise violates the communications protocol.  Well-formed responses that adhere to the protocol, even if they indicate that the requested operation failed, are handled with a different error message.
290
+#. TRANSLATORS: The metavar is Label.STORAGE_MANAGEMENT_METAVAR_PATH.
389 291
 #. 
390
-#. Message-ID: ErrMsgTemplate.CANNOT_UNDERSTAND_AGENT
391
-msgctxt "Error message"
392
-msgid "Cannot understand the SSH agent's response because it violates the communication protocol."
292
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_IMPORT_HELP_TEXT
293
+#, python-brace-format
294
+msgctxt "Label :: Help text :: One-line description"
295
+msgid "Import saved settings from {metavar}."
393 296
 msgstr ""
394 297
 
395
-#. TRANSLATORS: The settings_type metavar contains translations for either "global settings" or "service-specific settings"; see the CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL and CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE entries.  The first sentence will thus read either "Cannot update the global settings without any given settings." or "Cannot update the service-specific settings without any given settings.".  You may update this entry, and the two metavar entries, in any way you see fit that achieves the desired translations of the first sentence.
396
-#. 
397
-#. Message-ID: ErrMsgTemplate.CANNOT_UPDATE_SETTINGS_NO_SETTINGS
398
-#, python-brace-format
399
-msgctxt "Error message"
400
-msgid "Cannot update the {settings_type!s} without any given settings.  You must specify at least one of --lower, ..., --symbol, --notes, or --phrase or --key."
298
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_KEY_HELP_TEXT
299
+msgctxt "Label :: Help text :: One-line description"
300
+msgid "Select a suitable SSH key from the SSH agent."
401 301
 msgstr ""
402 302
 
403
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
303
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
404 304
 #. 
405
-#. Message-ID: ErrMsgTemplate.INVALID_USER_CONFIG
305
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_LENGTH_HELP_TEXT
406 306
 #, python-brace-format
407
-msgctxt "Error message"
408
-msgid "The user configuration file is invalid.  {error!s}: {filename!r}."
307
+msgctxt "Label :: Help text :: One-line description"
308
+msgid "Ensure a passphrase length of {metavar} characters."
409 309
 msgstr ""
410 310
 
411
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
311
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
412 312
 #. 
413
-#. Message-ID: ErrMsgTemplate.INVALID_USER_CONFIG
313
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_LOWER_HELP_TEXT
414 314
 #, python-brace-format
415
-msgctxt "Error message"
416
-msgid "The user configuration file is invalid.  {error!s}."
315
+msgctxt "Label :: Help text :: One-line description"
316
+msgid "Ensure at least {metavar} lowercase characters."
417 317
 msgstr ""
418 318
 
419
-#. TRANSLATORS: This error message is a reaction to a validator function saying *that* the configuration is not valid, but not *how* it is not valid.  The configuration file is principally parsable, however.
319
+#. TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
420 320
 #. 
421
-#. Message-ID: ErrMsgTemplate.INVALID_VAULT_CONFIG
321
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_HELP_TEXT
422 322
 #, python-brace-format
423
-msgctxt "Error message"
424
-msgid "Invalid vault config: {config!r}."
323
+msgctxt "Label :: Help text :: One-line description"
324
+msgid "With --config and {service_metavar}, spawn an editor to edit notes."
425 325
 msgstr ""
426 326
 
427
-#. TRANSLATORS: Message-ID: ErrMsgTemplate.MISSING_MODULE
327
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
328
+#. 
329
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NUMBER_HELP_TEXT
428 330
 #, python-brace-format
429
-msgctxt "Error message"
430
-msgid "Cannot load the required Python module {module!r}."
331
+msgctxt "Label :: Help text :: One-line description"
332
+msgid "Ensure at least {metavar} digits."
431 333
 msgstr ""
432 334
 
433
-#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_AF_UNIX
434
-msgctxt "Error message"
435
-msgid "Cannot connect to an SSH agent because this Python version does not support UNIX domain sockets."
335
+#. TRANSLATORS: The corresponding option is displayed as "--overwrite-existing / --merge-existing", so you may want to hint that the default (merge) is the second of those options.
336
+#. 
337
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_OVERWRITE_HELP_TEXT
338
+msgctxt "Label :: Help text :: One-line description"
339
+msgid "Overwrite or merge (default) the existing configuration."
436 340
 msgstr ""
437 341
 
438
-#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_KEY_OR_PHRASE
439
-msgctxt "Error message"
440
-msgid "No passphrase or key was given in the configuration.  In this case, the --phrase or --key argument is required."
342
+#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_PHRASE_HELP_TEXT
343
+msgctxt "Label :: Help text :: One-line description"
344
+msgid "Prompt for a master passphrase."
441 345
 msgstr ""
442 346
 
443
-#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_SSH_AGENT_FOUND
444
-msgctxt "Error message"
445
-msgid "Cannot find any running SSH agent because SSH_AUTH_SOCK is not set."
347
+#. TRANSLATORS: The corresponding option is displayed as "--print-notes-before / --print-notes-after", so you may want to hint that the default (after) is the second of those options.
348
+#. 
349
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_PRINT_NOTES_BEFORE_HELP_TEXT
350
+msgctxt "Label :: Help text :: One-line description"
351
+msgid "Print the service notes (if any) before or after (default) the existing configuration."
446 352
 msgstr ""
447 353
 
448
-#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_SUITABLE_SSH_KEYS
354
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
355
+#. 
356
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_REPEAT_HELP_TEXT
449 357
 #, python-brace-format
450
-msgctxt "Error message"
451
-msgid "The SSH agent contains no keys suitable for {PROG_NAME!s}."
358
+msgctxt "Label :: Help text :: One-line description"
359
+msgid "Forbid any run of {metavar} identical characters."
452 360
 msgstr ""
453 361
 
454
-#. TRANSLATORS: The params are long-form command-line option names.  Typical example: "--key is mutually exclusive with --phrase."
362
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
455 363
 #. 
456
-#. Message-ID: ErrMsgTemplate.PARAMS_MUTUALLY_EXCLUSIVE
364
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_SPACE_HELP_TEXT
457 365
 #, python-brace-format
458
-msgctxt "Error message"
459
-msgid "{param1!s} is mutually exclusive with {param2!s}."
366
+msgctxt "Label :: Help text :: One-line description"
367
+msgid "Ensure at least {metavar} spaces."
460 368
 msgstr ""
461 369
 
462
-#. TRANSLATORS: The param is a long-form command-line option name, the metavar is Label.VAULT_METAVAR_SERVICE.
370
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
463 371
 #. 
464
-#. Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE
372
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_SYMBOL_HELP_TEXT
465 373
 #, python-brace-format
466
-msgctxt "Error message"
467
-msgid "{param!s} requires a {service_metavar!s}."
374
+msgctxt "Label :: Help text :: One-line description"
375
+msgid "Ensure at least {metavar} symbol characters."
468 376
 msgstr ""
469 377
 
470
-#. TRANSLATORS: The param is a long-form command-line option name, the metavar is Label.VAULT_METAVAR_SERVICE.
378
+#. TRANSLATORS: The corresponding option is displayed as "--unset=phrase|key|...|symbol", so the "given setting" is referring to "phrase", "key", "lower", ..., or "symbol", respectively.  "with --config" here means that the user must also specify "--config" for this option to have any effect.
471 379
 #. 
472
-#. Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE_OR_CONFIG
473
-#, python-brace-format
474
-msgctxt "Error message"
475
-msgid "{param!s} requires a {service_metavar!s} or --config."
380
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_UNSET_HELP_TEXT
381
+msgctxt "Label :: Help text :: One-line description"
382
+msgid "With --config, also unsets the given setting.  May be specified multiple times."
476 383
 msgstr ""
477 384
 
478
-#. TRANSLATORS: The param is a long-form command-line option name, the metavar is Label.VAULT_METAVAR_SERVICE.
385
+#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
479 386
 #. 
480
-#. Message-ID: ErrMsgTemplate.PARAMS_NO_SERVICE
387
+#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_UPPER_HELP_TEXT
481 388
 #, python-brace-format
482
-msgctxt "Error message"
483
-msgid "{param!s} does not take a {service_metavar!s} argument."
389
+msgctxt "Label :: Help text :: One-line description"
390
+msgid "Ensure at least {metavar} uppercase characters."
484 391
 msgstr ""
485 392
 
486
-#. TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
393
+#. TRANSLATORS: See EXPORT_VAULT_FORMAT_HELP_TEXT.  The format names/labels "v0.3", "v0.2" and "storeroom" should not be translated.
487 394
 #. 
488
-#. Message-ID: ErrMsgTemplate.SERVICE_REQUIRED
489
-#, python-brace-format
490
-msgctxt "Error message"
491
-msgid "Deriving a passphrase requires a {service_metavar!s}."
395
+#. Message-ID: Label.EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT
396
+msgctxt "Label :: Help text :: One-line description"
397
+msgid "Default: v0.3, v0.2, storeroom."
492 398
 msgstr ""
493 399
 
494
-#. TRANSLATORS: The rephrasing "Attempted to unset and set the same setting (--unset={setting!s} --{setting!s}=...) at the same time."may or may not be more suitable as a basis for translation instead.
400
+#. TRANSLATORS: The defaults_hint is Label.EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT, the metavar is Label.EXPORT_VAULT_FORMAT_METAVAR_FMT.
495 401
 #. 
496
-#. Message-ID: ErrMsgTemplate.SET_AND_UNSET_SAME_SETTING
402
+#. Message-ID: Label.EXPORT_VAULT_FORMAT_HELP_TEXT
497 403
 #, python-brace-format
498
-msgctxt "Error message"
499
-msgid "Attempted to unset and set --{setting!s} at the same time."
404
+msgctxt "Label :: Help text :: One-line description"
405
+msgid "Try the following storage format {metavar}.  If specified multiple times, the formats will be tried in order.  {defaults_hint}"
500 406
 msgstr ""
501 407
 
502
-#. TRANSLATORS: Message-ID: ErrMsgTemplate.SSH_KEY_NOT_LOADED
503
-msgctxt "Error message"
504
-msgid "The requested SSH key is not loaded into the agent."
408
+#. TRANSLATORS: See EXPORT_VAULT_KEY_HELP_TEXT.
409
+#. 
410
+#. Message-ID: Label.EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT
411
+msgctxt "Label :: Help text :: One-line description"
412
+msgid "Default: check the VAULT_KEY, LOGNAME, USER, or USERNAME environment variables."
505 413
 msgstr ""
506 414
 
507
-#. TRANSLATORS: The user requested to edit the notes for a service, but aborted the request mid-editing.
415
+#. TRANSLATORS: The defaults_hint is Label.EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT, the metavar is Label.EXPORT_VAULT_KEY_METAVAR_K.
508 416
 #. 
509
-#. Message-ID: ErrMsgTemplate.USER_ABORTED_EDIT
510
-msgctxt "Error message"
511
-msgid "Not saving any new notes: the user aborted the request."
417
+#. Message-ID: Label.EXPORT_VAULT_KEY_HELP_TEXT
418
+#, python-brace-format
419
+msgctxt "Label :: Help text :: One-line description"
420
+msgid "Use {metavar} as the storage master key.  {defaults_hint}"
512 421
 msgstr ""
513 422
 
514
-#. TRANSLATORS: The user was prompted for a master passphrase, but aborted the request.
515
-#. 
516
-#. Message-ID: ErrMsgTemplate.USER_ABORTED_PASSPHRASE
517
-msgctxt "Error message"
518
-msgid "No passphrase was given; the user aborted the request."
423
+#. TRANSLATORS: Message-ID: Label.HELP_OPTION_HELP_TEXT
424
+msgctxt "Label :: Help text :: One-line description"
425
+msgid "Show this help text, then exit."
519 426
 msgstr ""
520 427
 
521
-#. TRANSLATORS: The user was prompted to select a master SSH key, but aborted the request.
522
-#. 
523
-#. Message-ID: ErrMsgTemplate.USER_ABORTED_SSH_KEY_SELECTION
524
-msgctxt "Error message"
525
-msgid "No SSH key was selected; the user aborted the request."
428
+#. TRANSLATORS: Message-ID: Label.QUIET_OPTION_HELP_TEXT
429
+msgctxt "Label :: Help text :: One-line description"
430
+msgid "Suppress even warnings; emit only errors."
526 431
 msgstr ""
527 432
 
528
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  The system stores entries in different "buckets" of a hash table.  After the respective items in the buckets have been decrypted, we then have a list of item paths plus contents to populate.  This must be done in a certain order (we don't yet have an existing directory tree to rely on, but rather must build it on-the-fly), hence the term "assembling".
529
-#. 
530
-#. Message-ID: InfoMsgTemplate.ASSEMBLING_CONFIG_STRUCTURE
531
-msgctxt "Info message"
532
-msgid "Assembling config structure"
433
+#. TRANSLATORS: Message-ID: Label.VERBOSE_OPTION_HELP_TEXT
434
+msgctxt "Label :: Help text :: One-line description"
435
+msgid "Emit extra/progress information to standard error."
533 436
 msgstr ""
534 437
 
535
-#. TRANSLATORS: "fmt" is a string such as "v0.2" or "storeroom", indicating the format which we tried to load the vault configuration as.
536
-#. 
537
-#. Message-ID: InfoMsgTemplate.CANNOT_LOAD_AS_VAULT_CONFIG
538
-#, python-brace-format
539
-msgctxt "Info message"
540
-msgid "Cannot load {path!r} as a {fmt!s} vault configuration."
438
+#. TRANSLATORS: Message-ID: Label.VERSION_OPTION_HELP_TEXT
439
+msgctxt "Label :: Help text :: One-line description"
440
+msgid "Show applicable version information, then exit."
541 441
 msgstr ""
542 442
 
543
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  Having "assembled" the configuration items according to their claimed paths and contents, we then check if the assembled structure is internally consistent.
544
-#. 
545
-#. Message-ID: InfoMsgTemplate.CHECKING_CONFIG_STRUCTURE_CONSISTENCY
546
-msgctxt "Info message"
547
-msgid "Checking config structure consistency"
443
+#. TRANSLATORS: Message-ID: Label.COMMANDS_LABEL
444
+msgctxt "Label :: Help text :: Option group name"
445
+msgid "Commands"
548 446
 msgstr ""
549 447
 
550
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  The system stores entries in different "buckets" of a hash table.  We parse the directory bucket by bucket.  All buckets are numbered in hexadecimal, and typically there are 32 buckets, so 2-digit hex numbers.
551
-#. 
552
-#. Message-ID: InfoMsgTemplate.DECRYPTING_BUCKET
553
-#, python-brace-format
554
-msgctxt "Info message"
555
-msgid "Decrypting bucket {bucket_number}"
448
+#. TRANSLATORS: Message-ID: Label.COMPATIBILITY_OPTION_LABEL
449
+msgctxt "Label :: Help text :: Option group name"
450
+msgid "Compatibility and extension options"
556 451
 msgstr ""
557 452
 
558
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  `.keys` is a filename, from which data about the master keys for this configuration are loaded.
559
-#. 
560
-#. Message-ID: InfoMsgTemplate.PARSING_MASTER_KEYS_DATA
561
-msgctxt "Info message"
562
-msgid "Parsing master keys data from .keys"
453
+#. TRANSLATORS: Message-ID: Label.CONFIGURATION_LABEL
454
+msgctxt "Label :: Help text :: Option group name"
455
+msgid "Configuration"
563 456
 msgstr ""
564 457
 
565
-#. TRANSLATORS: This message immediately follows an error message about a missing library that needs to be installed.  The Python Package Index (PyPI) supports declaring sets of optional dependencies as "extras", so users installing from PyPI can request reinstallation with a named "extra" being enabled.  This would then let the installer take care of the missing libraries automatically, hence this suggestion to PyPI users.
566
-#. 
567
-#. Message-ID: InfoMsgTemplate.PIP_INSTALL_EXTRA
568
-#, python-brace-format
569
-msgctxt "Info message"
570
-msgid "For users installing from PyPI, see the {extra_name!r} extra."
458
+#. TRANSLATORS: Message-ID: Label.LOGGING_LABEL
459
+msgctxt "Label :: Help text :: Option group name"
460
+msgid "Logging"
571 461
 msgstr ""
572 462
 
573
-#. TRANSLATORS: This info message immediately follows the "Using deprecated v0.1-style ..." deprecation warning.
574
-#. 
575
-#. Message-ID: InfoMsgTemplate.SUCCESSFULLY_MIGRATED
463
+#. TRANSLATORS: Message-ID: Label.OPTIONS_LABEL
464
+msgctxt "Label :: Help text :: Option group name"
465
+msgid "Options"
466
+msgstr ""
467
+
468
+#. TRANSLATORS: Message-ID: Label.OTHER_OPTIONS_LABEL
469
+msgctxt "Label :: Help text :: Option group name"
470
+msgid "Other options"
471
+msgstr ""
472
+
473
+#. TRANSLATORS: Message-ID: Label.PASSPHRASE_GENERATION_LABEL
474
+msgctxt "Label :: Help text :: Option group name"
475
+msgid "Passphrase generation"
476
+msgstr ""
477
+
478
+#. TRANSLATORS: Message-ID: Label.STORAGE_MANAGEMENT_LABEL
479
+msgctxt "Label :: Help text :: Option group name"
480
+msgid "Storage management"
481
+msgstr ""
482
+
483
+#. TRANSLATORS: Message-ID: Label.VERSION_INFO_TEXT
576 484
 #, python-brace-format
577
-msgctxt "Info message"
578
-msgid "Successfully migrated to {path!r}."
485
+msgctxt "Label :: Info Message"
486
+msgid "{PROG_NAME} {VERSION}"
579 487
 msgstr ""
580 488
 
581
-#. TRANSLATORS: Message-ID: InfoMsgTemplate.VAULT_NATIVE_CHECKING_MAC
582
-msgctxt "Info message"
583
-msgid "Checking MAC"
489
+#. TRANSLATORS: There is no support for "yes" or "no" in other languages than English, so it is advised that your translation makes it clear that only the strings "y", "yes", "n" or "no" are supported, even if the prompt becomes a bit longer.
490
+#. 
491
+#. Message-ID: Label.CONFIRM_THIS_CHOICE_PROMPT_TEXT
492
+msgctxt "Label :: Interactive prompt"
493
+msgid "Confirm this choice?  (y/N)"
584 494
 msgstr ""
585 495
 
586
-#. TRANSLATORS: Message-ID: InfoMsgTemplate.VAULT_NATIVE_DECRYPTING_CONTENTS
587
-msgctxt "Info message"
588
-msgid "Decrypting contents"
496
+#. TRANSLATORS: This label is the heading of the list of suitable SSH keys.
497
+#. 
498
+#. Message-ID: Label.SUITABLE_SSH_KEYS_LABEL
499
+msgctxt "Label :: Interactive prompt"
500
+msgid "Suitable SSH keys:"
589 501
 msgstr ""
590 502
 
591
-#. TRANSLATORS: Message-ID: InfoMsgTemplate.VAULT_NATIVE_DERIVING_KEYS
592
-msgctxt "Info message"
593
-msgid "Deriving an encryption and signing key"
503
+#. TRANSLATORS: Message-ID: Label.YOUR_SELECTION_PROMPT_TEXT
504
+#, python-brace-format
505
+msgctxt "Label :: Interactive prompt"
506
+msgid "Your selection?  (1-{n}, leave empty to abort)"
594 507
 msgstr ""
595 508
 
596
-#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  "IV" means "initialization vector", and "MAC" means "message authentication code".  They are specifically cryptographic terms, as is "payload".  The acronyms "IV" and "MAC" are assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate these terms or not, expanded or not.
509
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  The system stores entries in different "buckets" of a hash table.  Here, we report on a single item (path and value) we discovered after decrypting the whole bucket.  (We ensure the path and value are printable as-is.)
597 510
 #. 
598
-#. Message-ID: InfoMsgTemplate.VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC
599
-msgctxt "Info message"
600
-msgid "Parsing IV, payload and MAC from the file contents"
511
+#. Message-ID: DebugMsgTemplate.BUCKET_ITEM_FOUND
512
+#, python-brace-format
513
+msgctxt "Debug message"
514
+msgid "Found bucket item: {path} -> {value}"
601 515
 msgstr ""
602 516
 
603
-#. TRANSLATORS: This is a short label that will be prepended to a warning message, e.g., "Deprecation warning: A subcommand will be required in v1.0."
517
+#. TRANSLATORS: "AES256-CBC" and "PKCS#7" are, in essence, names of formats, and should not be translated.  "IV" means "initialization vector", and is specifically a cryptographic term, as are "plaintext" and "ciphertext".
604 518
 #. 
605
-#. Message-ID: Label.DEPRECATION_WARNING_LABEL
606
-msgctxt "Label :: Diagnostics :: Marker"
607
-msgid "Deprecation warning"
519
+#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_INFO
520
+#, python-brace-format
521
+msgctxt "Debug message"
522
+msgid "Decrypt bucket item contents:\n"
523
+"\n"
524
+"Encryption key (master key): {enc_key}\n"
525
+"Encryption cipher: AES256-CBC with PKCS#7 padding\n"
526
+"Encryption IV: {iv}\n"
527
+"Encrypted ciphertext: {ciphertext}\n"
528
+"Plaintext: {plaintext}"
608 529
 msgstr ""
609 530
 
610
-#. TRANSLATORS: This is a short label that will be prepended to a warning message, e.g., "Warning: An empty service name is not supported by vault(1)."
531
+#. TRANSLATORS: Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_KEY_INFO
532
+#, python-brace-format
533
+msgctxt "Debug message"
534
+msgid "Decrypt bucket item:\n"
535
+"\n"
536
+"Plaintext: {plaintext}\n"
537
+"Encryption key (master key): {enc_key}\n"
538
+"Signing key (master key): {sign_key}"
539
+msgstr ""
540
+
541
+#. TRANSLATORS: The MAC stands for "message authentication code", which guarantees the authenticity of the message to anyone who holds the corresponding key, similar to a digital signature.  The acronym "MAC" is assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate this term or not, expanded or not.
611 542
 #. 
612
-#. Message-ID: Label.WARNING_LABEL
613
-msgctxt "Label :: Diagnostics :: Marker"
614
-msgid "Warning"
543
+#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_MAC_INFO
544
+#, python-brace-format
545
+msgctxt "Debug message"
546
+msgid "Decrypt bucket item contents:\n"
547
+"\n"
548
+"MAC key: {sign_key}\n"
549
+"Authenticated content: {ciphertext}\n"
550
+"Claimed MAC value: {claimed_mac}\n"
551
+"Computed MAC value: {actual_mac}"
615 552
 msgstr ""
616 553
 
617
-#. TRANSLATORS: This is one of two values of the settings_type metavar used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS entry.  It is only used there.  The full sentence then reads: "Cannot update the global settings without any given settings."
554
+#. TRANSLATORS: "AES256-CBC" and "PKCS#7" are, in essence, names of formats, and should not be translated.  "IV" means "initialization vector", and is specifically a cryptographic term, as are "plaintext" and "ciphertext".
618 555
 #. 
619
-#. Message-ID: Label.CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL
620
-msgctxt "Label :: Error message :: Metavar"
621
-msgid "global settings"
556
+#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_SESSION_KEYS_INFO
557
+#, python-brace-format
558
+msgctxt "Debug message"
559
+msgid "Decrypt bucket item session keys:\n"
560
+"\n"
561
+"Encryption key (master key): {enc_key}\n"
562
+"Encryption cipher: AES256-CBC with PKCS#7 padding\n"
563
+"Encryption IV: {iv}\n"
564
+"Encrypted ciphertext: {ciphertext}\n"
565
+"Plaintext: {plaintext}\n"
566
+"Parsed plaintext: {code}"
622 567
 msgstr ""
623 568
 
624
-#. TRANSLATORS: This is one of two values of the settings_type metavar used in the CANNOT_UPDATE_SETTINGS_NO_SETTINGS entry.  It is only used there.  The full sentence then reads: "Cannot update the service-specific settings without any given settings."
569
+#. TRANSLATORS: The MAC stands for "message authentication code", which guarantees the authenticity of the message to anyone who holds the corresponding key, similar to a digital signature.  The acronym "MAC" is assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate this term or not, expanded or not.
625 570
 #. 
626
-#. Message-ID: Label.CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE
627
-msgctxt "Label :: Error message :: Metavar"
628
-msgid "service-specific settings"
571
+#. Message-ID: DebugMsgTemplate.DECRYPT_BUCKET_ITEM_SESSION_KEYS_MAC_INFO
572
+#, python-brace-format
573
+msgctxt "Debug message"
574
+msgid "Decrypt bucket item session keys:\n"
575
+"\n"
576
+"MAC key (master key): {sign_key}\n"
577
+"Authenticated content: {ciphertext}\n"
578
+"Claimed MAC value: {claimed_mac}\n"
579
+"Computed MAC value: {actual_mac}"
629 580
 msgstr ""
630 581
 
631
-#. TRANSLATORS: Message-ID: Label.CONFIGURATION_EPILOG
632
-msgctxt "Label :: Help text :: Explanation"
633
-msgid "Use $VISUAL or $EDITOR to configure the spawned editor."
582
+#. TRANSLATORS: Message-ID: DebugMsgTemplate.DERIVED_MASTER_KEYS_KEYS
583
+#, python-brace-format
584
+msgctxt "Debug message"
585
+msgid "Derived master keys' keys:\n"
586
+"\n"
587
+"Encryption key: {enc_key}\n"
588
+"Signing key: {sign_key}\n"
589
+"Password: {pw_bytes}\n"
590
+"Function call: pbkdf2(algorithm={algorithm!r}, length={length!r}, salt={salt!r}, iterations={iterations!r})"
634 591
 msgstr ""
635 592
 
636
-#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
593
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  Each "directory" in the path contains a list of children it claims to contain, and this list must be matched against the actual discovered items.  Now, at the end, we actually confirm the claim.  (We would have already thrown an error here otherwise.)
637 594
 #. 
638
-#. Message-ID: Label.DERIVEPASSPHRASE_01
639
-msgctxt "Label :: Help text :: Explanation"
640
-msgid "Derive a strong passphrase, deterministically, from a master secret."
595
+#. Message-ID: DebugMsgTemplate.DIRECTORY_CONTENTS_CHECK_OK
596
+#, python-brace-format
597
+msgctxt "Debug message"
598
+msgid "Directory contents check OK: {path} -> {contents}"
641 599
 msgstr ""
642 600
 
643
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_02
644
-msgctxt "Label :: Help text :: Explanation"
645
-msgid "The currently implemented subcommands are \"vault\" (for the scheme used by vault) and \"export\" (for exporting foreign configuration data).  See the respective `--help` output for instructions.  If no subcommand is given, we default to \"vault\"."
601
+#. TRANSLATORS: The MAC stands for "message authentication code", which guarantees the authenticity of the message to anyone who holds the corresponding key, similar to a digital signature.  The acronym "MAC" is assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate this term or not, expanded or not.
602
+#. 
603
+#. Message-ID: DebugMsgTemplate.MASTER_KEYS_DATA_MAC_INFO
604
+#, python-brace-format
605
+msgctxt "Debug message"
606
+msgid "Master keys data:\n"
607
+"\n"
608
+"MAC key: {sign_key}\n"
609
+"Authenticated content: {ciphertext}\n"
610
+"Claimed MAC value: {claimed_mac}\n"
611
+"Computed MAC value: {actual_mac}"
646 612
 msgstr ""
647 613
 
648
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_03
649
-msgctxt "Label :: Help text :: Explanation"
650
-msgid "Deprecation notice: Defaulting to \"vault\" is deprecated.  Starting in v1.0, the subcommand must be specified explicitly."
614
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  Each "directory" in the path contains a list of children it claims to contain, and this list must be matched against the actual discovered items.  When emitting this message, we merely indicate that we saved the "claimed" list for this directory for later.
615
+#. 
616
+#. Message-ID: DebugMsgTemplate.POSTPONING_DIRECTORY_CONTENTS_CHECK
617
+#, python-brace-format
618
+msgctxt "Debug message"
619
+msgid "Postponing directory contents check: {path} -> {contents}"
651 620
 msgstr ""
652 621
 
653
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_EPILOG_01
654
-msgctxt "Label :: Help text :: Explanation"
655
-msgid "Configuration is stored in a directory according to the `DERIVEPASSPHRASE_PATH` variable, which defaults to `~/.derivepassphrase` on UNIX-like systems and `C:\\Users\\<user>\\AppData\\Roaming\\Derivepassphrase` on Windows."
622
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  We confirm that we set the entry at the given path to the given value.
623
+#. 
624
+#. Message-ID: DebugMsgTemplate.SETTING_CONFIG_STRUCTURE_CONTENTS
625
+#, python-brace-format
626
+msgctxt "Debug message"
627
+msgid "Setting contents: {path} -> {value}"
656 628
 msgstr ""
657 629
 
658
-#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
630
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories, while "assembling" the items stored in the configuration according to the item's "path".  We confirm that we set up a currently empty directory at the given path.
659 631
 #. 
660
-#. Message-ID: Label.DERIVEPASSPHRASE_EXPORT_01
661
-msgctxt "Label :: Help text :: Explanation"
662
-msgid "Export a foreign configuration to standard output."
632
+#. Message-ID: DebugMsgTemplate.SETTING_CONFIG_STRUCTURE_CONTENTS_EMPTY_DIRECTORY
633
+#, python-brace-format
634
+msgctxt "Debug message"
635
+msgid "Setting contents (empty directory): {path}"
663 636
 msgstr ""
664 637
 
665
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_EXPORT_02
666
-msgctxt "Label :: Help text :: Explanation"
667
-msgid "The only available subcommand is \"vault\", which implements the vault-native configuration scheme.  If no subcommand is given, we default to \"vault\"."
638
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  It is preceded by the info message VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC; see the commentary there concerning the terms and thoughts on translating them.
639
+#. 
640
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_CHECKING_MAC_DETAILS
641
+#, python-brace-format
642
+msgctxt "Debug message"
643
+msgid "MAC details:\n"
644
+"\n"
645
+"MAC input: {mac_input}\n"
646
+"Expected MAC: {mac}"
668 647
 msgstr ""
669 648
 
670
-#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
649
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories: in v0.2, the non-standard and deprecated "EVP_bytestokey" function from OpenSSL must be reimplemented from scratch.  The terms "salt" and "IV" (initialization vector) are cryptographic terms.
671 650
 #. 
672
-#. Message-ID: Label.DERIVEPASSPHRASE_EXPORT_VAULT_01
673
-msgctxt "Label :: Help text :: Explanation"
674
-msgid "Export a vault-native configuration to standard output."
651
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_EVP_BYTESTOKEY_INIT
652
+#, python-brace-format
653
+msgctxt "Debug message"
654
+msgid "evp_bytestokey_md5 (initialization):\n"
655
+"\n"
656
+"Input: {data}\n"
657
+"Salt: {salt}\n"
658
+"Key size: {key_size}\n"
659
+"IV size: {iv_size}\n"
660
+"Buffer length: {buffer_length}\n"
661
+"Buffer: {buffer}"
675 662
 msgstr ""
676 663
 
677
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_EXPORT_VAULT_02
664
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories: in v0.2, the non-standard and deprecated "EVP_bytestokey" function from OpenSSL must be reimplemented from scratch.  The terms "salt" and "IV" (initialization vector) are cryptographic terms.This function reports on the final results.
665
+#. 
666
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_EVP_BYTESTOKEY_RESULT
678 667
 #, python-brace-format
679
-msgctxt "Label :: Help text :: Explanation"
680
-msgid "Depending on the configuration format, {path_metavar!s} may either be a file or a directory.  We support the vault \"v0.2\", \"v0.3\" and \"storeroom\" formats."
668
+msgctxt "Debug message"
669
+msgid "evp_bytestokey_md5 (result):\n"
670
+"\n"
671
+"Encryption key: {enc_key}\n"
672
+"IV: {iv}"
681 673
 msgstr ""
682 674
 
683
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_EXPORT_VAULT_03
675
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories: in v0.2, the non-standard and deprecated "EVP_bytestokey" function from OpenSSL must be reimplemented from scratch.  The terms "salt" and "IV" (initialization vector) are cryptographic terms.This function reports on the updated buffer length and contents after executing one round of hashing.
676
+#. 
677
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_EVP_BYTESTOKEY_ROUND
684 678
 #, python-brace-format
685
-msgctxt "Label :: Help text :: Explanation"
686
-msgid "If {path_metavar!s} is explicitly given as `VAULT_PATH`, then use the `VAULT_PATH` environment variable to determine the correct path.  (Use `./VAULT_PATH` or similar to indicate a file/directory actually named `VAULT_PATH`.)"
679
+msgctxt "Debug message"
680
+msgid "evp_bytestokey_md5 (round update):\n"
681
+"\n"
682
+"Buffer length: {buffer_length}\n"
683
+"Buffer: {buffer}"
687 684
 msgstr ""
688 685
 
689
-#. TRANSLATORS: This is the first paragraph of the command help text, but it also appears (in truncated form, if necessary) as one-line help text for this command.  The translation should thus be as meaningful as possible even if truncated.
686
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  "padding" and "plaintext" are cryptographic terms.
690 687
 #. 
691
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_01
692
-msgctxt "Label :: Help text :: Explanation"
693
-msgid "Derive a passphrase using the vault derivation scheme."
688
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_PADDED_PLAINTEXT
689
+#, python-brace-format
690
+msgctxt "Debug message"
691
+msgid "Padded plaintext: {contents}"
694 692
 msgstr ""
695 693
 
696
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_02
694
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  It is preceded by the info message VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC; see the commentary there concerning the terms and thoughts on translating them.
695
+#. 
696
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_PARSE_BUFFER
697 697
 #, python-brace-format
698
-msgctxt "Label :: Help text :: Explanation"
699
-msgid "If operating on global settings, or importing/exporting settings, then {service_metavar!s} must be omitted.  Otherwise it is required."
698
+msgctxt "Debug message"
699
+msgid "Buffer: {contents}\n"
700
+"\n"
701
+"IV: {iv}\n"
702
+"Payload: {payload}\n"
703
+"MAC: {mac}"
700 704
 msgstr ""
701 705
 
702
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_EPILOG_01
703
-msgctxt "Label :: Help text :: Explanation"
704
-msgid "WARNING: There is NO WAY to retrieve the generated passphrases if the master passphrase, the SSH key, or the exact passphrase settings are lost, short of trying out all possible combinations.  You are STRONGLY advised to keep independent backups of the settings and the SSH key, if any."
706
+#. TRANSLATORS: Message-ID: DebugMsgTemplate.VAULT_NATIVE_PBKDF2_CALL
707
+#, python-brace-format
708
+msgctxt "Debug message"
709
+msgid "Master key derivation:\n"
710
+"\n"
711
+"PBKDF2 call: PBKDF2-HMAC(password={password!r}, salt={salt!r}, iterations={iterations!r}, key_size={key_size!r}, algorithm={algorithm!r})\n"
712
+"Result (binary): {raw_result}\n"
713
+"Result (hex key): {result_key!r}"
705 714
 msgstr ""
706 715
 
707
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_EPILOG_02
708
-msgctxt "Label :: Help text :: Explanation"
709
-msgid "The configuration is NOT encrypted, and you are STRONGLY discouraged from using a stored passphrase."
716
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  "plaintext" is a cryptographic term.
717
+#. 
718
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_PLAINTEXT
719
+#, python-brace-format
720
+msgctxt "Debug message"
721
+msgid "Plaintext: {contents}"
710 722
 msgstr ""
711 723
 
712
-#. TRANSLATORS: This instruction text is shown above the user's old stored notes for this service, if any, if the recommended "modern" editor interface is used.  The next line is the cut marking defined in Label.DERIVEPASSPHRASE_VAULT_NOTES_MARKER.
724
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  It is preceded by the info message VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC and the debug message PARSING_NATIVE_PARSE_BUFFER; see the commentary there concerning the terms and thoughts on translating them.
713 725
 #. 
714
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_INSTRUCTION_TEXT
715
-msgctxt "Label :: Help text :: Explanation"
716
-msgid "# Enter notes below the line with the cut mark (ASCII scissors and\n"
717
-"# dashes).  Lines above the cut mark (such as this one) will be ignored.\n"
718
-"#\n"
719
-"# If you wish to clear the notes, leave everything beyond the cut mark\n"
720
-"# blank.  However, if you leave the *entire* file blank, also removing\n"
721
-"# the cut mark, then the edit is aborted, and the old notes contents are\n"
722
-"# retained.\n"
723
-"#"
726
+#. Message-ID: DebugMsgTemplate.VAULT_NATIVE_V02_PAYLOAD_MAC_POSTPROCESSING
727
+#, python-brace-format
728
+msgctxt "Debug message"
729
+msgid "Postprocessing buffer (v0.2):\n"
730
+"\n"
731
+"Payload: {payload} (decoded from base64)\n"
732
+"MAC: {mac} (decoded from hex)"
724 733
 msgstr ""
725 734
 
726
-#. TRANSLATORS: This instruction text is shown if the vault(1)-compatible "legacy" editor interface is used and no previous notes exist.  The interface does not support commentary in the notes, so we fill this with obvious placeholder text instead.  (Please replace this with what *your* language/culture would obviously recognize as placeholder text.)
735
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  The system stores entries in different "buckets" of a hash table.  After the respective items in the buckets have been decrypted, we then have a list of item paths plus contents to populate.  This must be done in a certain order (we don't yet have an existing directory tree to rely on, but rather must build it on-the-fly), hence the term "assembling".
727 736
 #. 
728
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_LEGACY_INSTRUCTION_TEXT
729
-msgctxt "Label :: Help text :: Explanation"
730
-msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
737
+#. Message-ID: InfoMsgTemplate.ASSEMBLING_CONFIG_STRUCTURE
738
+msgctxt "Info message"
739
+msgid "Assembling config structure"
731 740
 msgstr ""
732 741
 
733
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
742
+#. TRANSLATORS: "fmt" is a string such as "v0.2" or "storeroom", indicating the format which we tried to load the vault configuration as.
734 743
 #. 
735
-#. Message-ID: Label.PASSPHRASE_GENERATION_EPILOG
744
+#. Message-ID: InfoMsgTemplate.CANNOT_LOAD_AS_VAULT_CONFIG
736 745
 #, python-brace-format
737
-msgctxt "Label :: Help text :: Explanation"
738
-msgid "Use {metavar!s}=0 to exclude a character type from the output."
746
+msgctxt "Info message"
747
+msgid "Cannot load {path!r} as a {fmt} vault configuration."
739 748
 msgstr ""
740 749
 
741
-#. TRANSLATORS: The metavar is Label.STORAGE_MANAGEMENT_METAVAR_PATH.
750
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  Having "assembled" the configuration items according to their claimed paths and contents, we then check if the assembled structure is internally consistent.
742 751
 #. 
743
-#. Message-ID: Label.STORAGE_MANAGEMENT_EPILOG
744
-#, python-brace-format
745
-msgctxt "Label :: Help text :: Explanation"
746
-msgid "Using \"-\" as {metavar!s} for standard input/standard output is supported."
752
+#. Message-ID: InfoMsgTemplate.CHECKING_CONFIG_STRUCTURE_CONSISTENCY
753
+msgctxt "Info message"
754
+msgid "Checking config structure consistency"
747 755
 msgstr ""
748 756
 
749
-#. TRANSLATORS: We use this format string to indicate, at the beginning of a command's help text, that this command is deprecated.
757
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  The system stores entries in different "buckets" of a hash table.  We parse the directory bucket by bucket.  All buckets are numbered in hexadecimal, and typically there are 32 buckets, so 2-digit hex numbers.
750 758
 #. 
751
-#. Message-ID: Label.DEPRECATED_COMMAND_LABEL
759
+#. Message-ID: InfoMsgTemplate.DECRYPTING_BUCKET
752 760
 #, python-brace-format
753
-msgctxt "Label :: Help text :: Marker"
754
-msgid "(Deprecated) {text}"
761
+msgctxt "Info message"
762
+msgid "Decrypting bucket {bucket_number}"
755 763
 msgstr ""
756 764
 
757
-#. TRANSLATORS: The marker for separating the text from Label.DERIVEPASSPHRASE_VAULT_NOTES_INSTRUCTION_TEXT from the user's input (below the marker).  The first line starting with this label marks the separation point.
765
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "storeroom"-type configuration directories.  `.keys` is a filename, from which data about the master keys for this configuration are loaded.
758 766
 #. 
759
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_MARKER
760
-msgctxt "Label :: Help text :: Marker"
761
-msgid "# - - - - - >8 - - - - - >8 - - - - - >8 - - - - - >8 - - - - -"
767
+#. Message-ID: InfoMsgTemplate.PARSING_MASTER_KEYS_DATA
768
+msgctxt "Info message"
769
+msgid "Parsing master keys data from .keys"
762 770
 msgstr ""
763 771
 
764
-#. TRANSLATORS: Message-ID: Label.EXPORT_VAULT_FORMAT_METAVAR_FMT
765
-msgctxt "Label :: Help text :: Metavar :: export vault"
766
-msgid "FMT"
772
+#. TRANSLATORS: This message immediately follows an error message about a missing library that needs to be installed.  The Python Package Index (PyPI) supports declaring sets of optional dependencies as "extras", so users installing from PyPI can request reinstallation with a named "extra" being enabled.  This would then let the installer take care of the missing libraries automatically, hence this suggestion to PyPI users.
773
+#. 
774
+#. Message-ID: InfoMsgTemplate.PIP_INSTALL_EXTRA
775
+#, python-brace-format
776
+msgctxt "Info message"
777
+msgid "For users installing from PyPI, see the {extra_name!r} extra."
767 778
 msgstr ""
768 779
 
769
-#. TRANSLATORS: See Label.EXPORT_VAULT_KEY_HELP_TEXT.
780
+#. TRANSLATORS: This info message immediately follows the "Using deprecated v0.1-style ..." deprecation warning.
770 781
 #. 
771
-#. Message-ID: Label.EXPORT_VAULT_KEY_METAVAR_K
772
-msgctxt "Label :: Help text :: Metavar :: export vault"
773
-msgid "K"
782
+#. Message-ID: InfoMsgTemplate.SUCCESSFULLY_MIGRATED
783
+#, python-brace-format
784
+msgctxt "Info message"
785
+msgid "Successfully migrated to {path!r}."
774 786
 msgstr ""
775 787
 
776
-#. TRANSLATORS: Used as "path_metavar" in Label.DERIVEPASSPHRASE_EXPORT_VAULT_02 and others.
777
-#. 
778
-#. Message-ID: Label.EXPORT_VAULT_METAVAR_PATH
779
-msgctxt "Label :: Help text :: Metavar :: export vault"
780
-msgid "PATH"
788
+#. TRANSLATORS: Message-ID: InfoMsgTemplate.VAULT_NATIVE_CHECKING_MAC
789
+msgctxt "Info message"
790
+msgid "Checking MAC"
781 791
 msgstr ""
782 792
 
783
-#. TRANSLATORS: This metavar is also used in a matching epilog.
784
-#. 
785
-#. Message-ID: Label.PASSPHRASE_GENERATION_METAVAR_NUMBER
786
-msgctxt "Label :: Help text :: Metavar :: vault"
787
-msgid "NUMBER"
793
+#. TRANSLATORS: Message-ID: InfoMsgTemplate.VAULT_NATIVE_DECRYPTING_CONTENTS
794
+msgctxt "Info message"
795
+msgid "Decrypting contents"
788 796
 msgstr ""
789 797
 
790
-#. TRANSLATORS: This metavar is also used in multiple one-line help texts.
791
-#. 
792
-#. Message-ID: Label.STORAGE_MANAGEMENT_METAVAR_PATH
793
-msgctxt "Label :: Help text :: Metavar :: vault"
794
-msgid "PATH"
798
+#. TRANSLATORS: Message-ID: InfoMsgTemplate.VAULT_NATIVE_DERIVING_KEYS
799
+msgctxt "Info message"
800
+msgid "Deriving an encryption and signing key"
795 801
 msgstr ""
796 802
 
797
-#. TRANSLATORS: This metavar is also used in multiple one-line help texts.
803
+#. TRANSLATORS: This message is emitted by the vault configuration exporter for "native"-type configuration directories.  "IV" means "initialization vector", and "MAC" means "message authentication code".  They are specifically cryptographic terms, as is "payload".  The acronyms "IV" and "MAC" are assumed to be well-known to the English target audience, or at least discoverable by them; they *are* asking for debug output, after all.  Please use your judgement as to whether to translate these terms or not, expanded or not.
798 804
 #. 
799
-#. Message-ID: Label.VAULT_METAVAR_SERVICE
800
-msgctxt "Label :: Help text :: Metavar :: vault"
801
-msgid "SERVICE"
805
+#. Message-ID: InfoMsgTemplate.VAULT_NATIVE_PARSING_IV_PAYLOAD_MAC
806
+msgctxt "Info message"
807
+msgid "Parsing IV, payload and MAC from the file contents"
802 808
 msgstr ""
803 809
 
804
-#. TRANSLATORS: Message-ID: Label.DEBUG_OPTION_HELP_TEXT
805
-msgctxt "Label :: Help text :: One-line description"
806
-msgid "also emit debug information (implies --verbose)"
810
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.EDITING_NOTES_BUT_NOT_STORING_CONFIG
811
+msgctxt "Warning message"
812
+msgid "Specifying --notes without --config is ineffective.  No notes will be edited."
807 813
 msgstr ""
808 814
 
809
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_CONFIG_HELP_TEXT
815
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.EMPTY_SERVICE_NOT_SUPPORTED
810 816
 #, python-brace-format
811
-msgctxt "Label :: Help text :: One-line description"
812
-msgid "save the given settings for {service_metavar!s}, or global"
817
+msgctxt "Warning message"
818
+msgid "An empty {service_metavar} is not supported by vault(1).  For compatibility, this will be treated as if {service_metavar} was not supplied, i.e., it will error out, or operate on global settings."
813 819
 msgstr ""
814 820
 
815
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
816
-#. 
817
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_DASH_HELP_TEXT
821
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.EMPTY_SERVICE_SETTINGS_INACCESSIBLE
818 822
 #, python-brace-format
819
-msgctxt "Label :: Help text :: One-line description"
820
-msgid "ensure at least {metavar!s} \"-\" or \"_\" characters"
821
-msgstr ""
822
-
823
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_DELETE_ALL_HELP_TEXT
824
-msgctxt "Label :: Help text :: One-line description"
825
-msgid "delete all settings"
826
-msgstr ""
827
-
828
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_DELETE_GLOBALS_HELP_TEXT
829
-msgctxt "Label :: Help text :: One-line description"
830
-msgid "delete the global settings"
823
+msgctxt "Warning message"
824
+msgid "An empty {service_metavar} is not supported by vault(1).  The empty-string service settings will be inaccessible and ineffective.  To ensure that vault(1) and {PROG_NAME} see the settings, move them into the \"global\" section."
831 825
 msgstr ""
832 826
 
833
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_DELETE_HELP_TEXT
827
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
828
+#. 
829
+#. Message-ID: WarnMsgTemplate.FAILED_TO_MIGRATE_CONFIG
834 830
 #, python-brace-format
835
-msgctxt "Label :: Help text :: One-line description"
836
-msgid "delete the settings for {service_metavar!s}"
831
+msgctxt "Warning message"
832
+msgid "Failed to migrate to {path!r}: {error}: {filename!r}."
837 833
 msgstr ""
838 834
 
839
-#. TRANSLATORS: The corresponding option is displayed as "--modern-editor-interface / --vault-legacy-editor-interface", so you may want to hint that the default (legacy) is the second of those options.  Though the vault(1) legacy editor interface clearly has deficiencies and (in my opinion) should only be used for compatibility purposes, the one-line help text should try not to sound too judgmental, if possible.
835
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
840 836
 #. 
841
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_EDITOR_INTERFACE_HELP_TEXT
842
-msgctxt "Label :: Help text :: One-line description"
843
-msgid "edit notes using the modern editor interface or the vault-like legacy one (default)"
837
+#. Message-ID: WarnMsgTemplate.FAILED_TO_MIGRATE_CONFIG
838
+#, python-brace-format
839
+msgctxt "Warning message"
840
+msgid "Failed to migrate to {path!r}: {error}."
844 841
 msgstr ""
845 842
 
846
-#. TRANSLATORS: The corresponding option is displayed as "--export-as=json|sh", so json refers to the JSON format (default) and sh refers to the POSIX sh format.
847
-#. 
848
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_EXPORT_AS_HELP_TEXT
849
-msgctxt "Label :: Help text :: One-line description"
850
-msgid "when exporting, export as JSON (default) or POSIX sh"
843
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.GLOBAL_PASSPHRASE_INEFFECTIVE
844
+msgctxt "Warning message"
845
+msgid "Setting a global passphrase is ineffective because a key is also set."
851 846
 msgstr ""
852 847
 
853
-#. TRANSLATORS: The metavar is Label.STORAGE_MANAGEMENT_METAVAR_SERVICE.
854
-#. 
855
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_EXPORT_HELP_TEXT
848
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.LEGACY_EDITOR_INTERFACE_NOTES_BACKUP
856 849
 #, python-brace-format
857
-msgctxt "Label :: Help text :: One-line description"
858
-msgid "export all saved settings to {metavar!s}"
850
+msgctxt "Warning message"
851
+msgid "A backup copy of the old notes was saved to {filename!r}.  This is a safeguard against editing mistakes, because the vault(1)-compatible legacy editor interface does not allow aborting mid-edit, and because the notes were actually changed."
859 852
 msgstr ""
860 853
 
861
-#. TRANSLATORS: The metavar is Label.STORAGE_MANAGEMENT_METAVAR_SERVICE.
854
+#. TRANSLATORS: The key is a (vault) configuration key, in JSONPath syntax, typically "$.global" for the global passphrase or "$.services.service_name" or "$.services["service with spaces"]" for the services "service_name" and "service with spaces", respectively.  The form is one of the four Unicode normalization forms: NFC, NFD, NFKC, NFKD.  The asterisks are not special.  Please feel free to substitute any other appropriate way to mark up emphasis of the word "displays".
862 855
 #. 
863
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_IMPORT_HELP_TEXT
856
+#. Message-ID: WarnMsgTemplate.PASSPHRASE_NOT_NORMALIZED
864 857
 #, python-brace-format
865
-msgctxt "Label :: Help text :: One-line description"
866
-msgid "import saved settings from {metavar!s}"
858
+msgctxt "Warning message"
859
+msgid "The {key} passphrase is not {form}-normalized.  Its serialization as a byte string may not be what you expect it to be, even if it *displays* correctly.  Please make sure to double-check any derived passphrases for unexpected results."
867 860
 msgstr ""
868 861
 
869
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_KEY_HELP_TEXT
870
-msgctxt "Label :: Help text :: One-line description"
871
-msgid "select a suitable SSH key from the SSH agent"
862
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.SERVICE_NAME_INCOMPLETABLE
863
+#, python-brace-format
864
+msgctxt "Warning message"
865
+msgid "The service name {service!r} contains an ASCII control character, which is not supported by our shell completion code.  This service name will therefore not be available for completion on the command-line.  You may of course still type it in manually in whatever format your shell accepts, but we highly recommend choosing a different service name instead."
872 866
 msgstr ""
873 867
 
874
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
868
+#. TRANSLATORS: The key that is set need not necessarily be set at the service level; it may be a global key as well.
875 869
 #. 
876
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_LENGTH_HELP_TEXT
870
+#. Message-ID: WarnMsgTemplate.SERVICE_PASSPHRASE_INEFFECTIVE
877 871
 #, python-brace-format
878
-msgctxt "Label :: Help text :: One-line description"
879
-msgid "ensure a passphrase length of {metavar!s} characters"
872
+msgctxt "Warning message"
873
+msgid "Setting a service passphrase is ineffective because a key is also set: {service}."
880 874
 msgstr ""
881 875
 
882
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
883
-#. 
884
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_LOWER_HELP_TEXT
876
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.STEP_REMOVE_INEFFECTIVE_VALUE
885 877
 #, python-brace-format
886
-msgctxt "Label :: Help text :: One-line description"
887
-msgid "ensure at least {metavar!s} lowercase characters"
878
+msgctxt "Warning message"
879
+msgid "Removing ineffective setting {path} = {old}."
888 880
 msgstr ""
889 881
 
890
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_NOTES_HELP_TEXT
882
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.STEP_REPLACE_INVALID_VALUE
891 883
 #, python-brace-format
892
-msgctxt "Label :: Help text :: One-line description"
893
-msgid "spawn an editor to edit notes for {service_metavar!s}"
884
+msgctxt "Warning message"
885
+msgid "Replacing invalid value {old} for key {path} with {new}."
894 886
 msgstr ""
895 887
 
896
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
897
-#. 
898
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_NUMBER_HELP_TEXT
888
+#. TRANSLATORS: Message-ID: WarnMsgTemplate.V01_STYLE_CONFIG
899 889
 #, python-brace-format
900
-msgctxt "Label :: Help text :: One-line description"
901
-msgid "ensure at least {metavar!s} digits"
890
+msgctxt "Warning message :: Deprecation"
891
+msgid "Using deprecated v0.1-style config file {old!r}, instead of v0.2-style {new!r}.  Support for v0.1-style config filenames will be removed in v1.0."
902 892
 msgstr ""
903 893
 
904
-#. TRANSLATORS: The corresponding option is displayed as "--overwrite-existing / --merge-existing", so you may want to hint that the default (merge) is the second of those options.
894
+#. TRANSLATORS: This deprecation warning may be issued at any level, i.e. we may actually be talking about subcommands, or sub-subcommands, or sub-sub-subcommands, etc., which is what the "here" is supposed to indicate.
905 895
 #. 
906
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_OVERWRITE_HELP_TEXT
907
-msgctxt "Label :: Help text :: One-line description"
908
-msgid "overwrite or merge (default) the existing configuration"
909
-msgstr ""
910
-
911
-#. TRANSLATORS: Message-ID: Label.DERIVEPASSPHRASE_VAULT_PHRASE_HELP_TEXT
912
-msgctxt "Label :: Help text :: One-line description"
913
-msgid "prompt for a master passphrase"
896
+#. Message-ID: WarnMsgTemplate.V10_SUBCOMMAND_REQUIRED
897
+msgctxt "Warning message :: Deprecation"
898
+msgid "A subcommand will be required here in v1.0.  See --help for available subcommands.  Defaulting to subcommand \"vault\"."
914 899
 msgstr ""
915 900
 
916
-#. TRANSLATORS: The corresponding option is displayed as "--print-notes-before / --print-notes-after", so you may want to hint that the default (after) is the second of those options.
901
+#. TRANSLATORS: "loaded keys" being keys loaded into the agent.
917 902
 #. 
918
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_PRINT_NOTES_BEFORE_HELP_TEXT
919
-msgctxt "Label :: Help text :: One-line description"
920
-msgid "print the service notes (if any) before or after (default) the existing configuration"
903
+#. Message-ID: ErrMsgTemplate.AGENT_REFUSED_LIST_KEYS
904
+msgctxt "Error message"
905
+msgid "The SSH agent failed to or refused to supply a list of loaded keys."
921 906
 msgstr ""
922 907
 
923
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
908
+#. TRANSLATORS: The message to be signed is the vault UUID, but there's no space to explain that here, so ideally the error message does not go into detail.
924 909
 #. 
925
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_REPEAT_HELP_TEXT
926
-#, python-brace-format
927
-msgctxt "Label :: Help text :: One-line description"
928
-msgid "forbid any run of {metavar!s} identical characters"
910
+#. Message-ID: ErrMsgTemplate.AGENT_REFUSED_SIGNATURE
911
+msgctxt "Error message"
912
+msgid "The SSH agent failed to or refused to issue a signature with the selected key, necessary for deriving a service passphrase."
929 913
 msgstr ""
930 914
 
931
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
915
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
932 916
 #. 
933
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_SPACE_HELP_TEXT
917
+#. Message-ID: ErrMsgTemplate.CANNOT_CONNECT_TO_AGENT
934 918
 #, python-brace-format
935
-msgctxt "Label :: Help text :: One-line description"
936
-msgid "ensure at least {metavar!s} spaces"
919
+msgctxt "Error message"
920
+msgid "Cannot connect to the SSH agent: {error}: {filename!r}."
937 921
 msgstr ""
938 922
 
939
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
923
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
940 924
 #. 
941
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_SYMBOL_HELP_TEXT
925
+#. Message-ID: ErrMsgTemplate.CANNOT_CONNECT_TO_AGENT
942 926
 #, python-brace-format
943
-msgctxt "Label :: Help text :: One-line description"
944
-msgid "ensure at least {metavar!s} symbol characters"
927
+msgctxt "Error message"
928
+msgid "Cannot connect to the SSH agent: {error}."
945 929
 msgstr ""
946 930
 
947
-#. TRANSLATORS: The corresponding option is displayed as "--unset=phrase|key|...|symbol", so the "given setting" is referring to "phrase", "key", "lower", ..., or "symbol", respectively.  "with --config" here means that the user must also specify "--config" for this option to have any effect.
931
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
948 932
 #. 
949
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_UNSET_HELP_TEXT
950
-msgctxt "Label :: Help text :: One-line description"
951
-msgid "with --config, also unsets the given setting; may be specified multiple times"
933
+#. Message-ID: ErrMsgTemplate.CANNOT_DECODEIMPORT_VAULT_SETTINGS
934
+#, python-brace-format
935
+msgctxt "Error message"
936
+msgid "Cannot import vault settings: cannot decode JSON: {error}."
952 937
 msgstr ""
953 938
 
954
-#. TRANSLATORS: The metavar is Label.PASSPHRASE_GENERATION_METAVAR_NUMBER.
939
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
955 940
 #. 
956
-#. Message-ID: Label.DERIVEPASSPHRASE_VAULT_UPPER_HELP_TEXT
941
+#. Message-ID: ErrMsgTemplate.CANNOT_EXPORT_VAULT_SETTINGS
957 942
 #, python-brace-format
958
-msgctxt "Label :: Help text :: One-line description"
959
-msgid "ensure at least {metavar!s} uppercase characters"
943
+msgctxt "Error message"
944
+msgid "Cannot export vault settings: {error}: {filename!r}."
960 945
 msgstr ""
961 946
 
962
-#. TRANSLATORS: See EXPORT_VAULT_FORMAT_HELP_TEXT.  The format names/labels "v0.3", "v0.2" and "storeroom" should not be translated.
947
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
963 948
 #. 
964
-#. Message-ID: Label.EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT
965
-msgctxt "Label :: Help text :: One-line description"
966
-msgid "(default: v0.3, v0.2, storeroom)"
949
+#. Message-ID: ErrMsgTemplate.CANNOT_EXPORT_VAULT_SETTINGS
950
+#, python-brace-format
951
+msgctxt "Error message"
952
+msgid "Cannot export vault settings: {error}."
967 953
 msgstr ""
968 954
 
969
-#. TRANSLATORS: The defaults_hint is Label.EXPORT_VAULT_FORMAT_DEFAULTS_HELP_TEXT, the metavar is Label.EXPORT_VAULT_FORMAT_METAVAR_FMT.
955
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
970 956
 #. 
971
-#. Message-ID: Label.EXPORT_VAULT_FORMAT_HELP_TEXT
957
+#. Message-ID: ErrMsgTemplate.CANNOT_IMPORT_VAULT_SETTINGS
972 958
 #, python-brace-format
973
-msgctxt "Label :: Help text :: One-line description"
974
-msgid "try the following storage format {metavar!s}; may be specified multiple times, formats will be tried in order {defaults_hint!s}"
959
+msgctxt "Error message"
960
+msgid "Cannot import vault settings: {error}: {filename!r}."
975 961
 msgstr ""
976 962
 
977
-#. TRANSLATORS: See EXPORT_VAULT_KEY_HELP_TEXT.
963
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
978 964
 #. 
979
-#. Message-ID: Label.EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT
980
-msgctxt "Label :: Help text :: One-line description"
981
-msgid "(default: check the `VAULT_KEY`, `LOGNAME`, `USER`, or `USERNAME` environment variables)"
965
+#. Message-ID: ErrMsgTemplate.CANNOT_IMPORT_VAULT_SETTINGS
966
+#, python-brace-format
967
+msgctxt "Error message"
968
+msgid "Cannot import vault settings: {error}."
982 969
 msgstr ""
983 970
 
984
-#. TRANSLATORS: The defaults_hint is Label.EXPORT_VAULT_KEY_DEFAULTS_HELP_TEXT, the metavar is Label.EXPORT_VAULT_KEY_METAVAR_K.
971
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
985 972
 #. 
986
-#. Message-ID: Label.EXPORT_VAULT_KEY_HELP_TEXT
973
+#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_USER_CONFIG
987 974
 #, python-brace-format
988
-msgctxt "Label :: Help text :: One-line description"
989
-msgid "use {metavar!s} as the storage master key {defaults_hint!s}"
990
-msgstr ""
991
-
992
-#. TRANSLATORS: Message-ID: Label.HELP_OPTION_HELP_TEXT
993
-msgctxt "Label :: Help text :: One-line description"
994
-msgid "show this help text, then exit"
995
-msgstr ""
996
-
997
-#. TRANSLATORS: Message-ID: Label.QUIET_OPTION_HELP_TEXT
998
-msgctxt "Label :: Help text :: One-line description"
999
-msgid "suppress even warnings, emit only errors"
975
+msgctxt "Error message"
976
+msgid "Cannot load user config: {error}: {filename!r}."
1000 977
 msgstr ""
1001 978
 
1002
-#. TRANSLATORS: Message-ID: Label.VERBOSE_OPTION_HELP_TEXT
1003
-msgctxt "Label :: Help text :: One-line description"
1004
-msgid "emit extra/progress information to standard error"
979
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
980
+#. 
981
+#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_USER_CONFIG
982
+#, python-brace-format
983
+msgctxt "Error message"
984
+msgid "Cannot load user config: {error}."
1005 985
 msgstr ""
1006 986
 
1007
-#. TRANSLATORS: Message-ID: Label.VERSION_OPTION_HELP_TEXT
1008
-msgctxt "Label :: Help text :: One-line description"
1009
-msgid "show applicable version information, then exit"
987
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
988
+#. 
989
+#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_VAULT_SETTINGS
990
+#, python-brace-format
991
+msgctxt "Error message"
992
+msgid "Cannot load vault settings: {error}: {filename!r}."
1010 993
 msgstr ""
1011 994
 
1012
-#. TRANSLATORS: Message-ID: Label.COMMANDS_LABEL
1013
-msgctxt "Label :: Help text :: Option group name"
1014
-msgid "Commands"
995
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
996
+#. 
997
+#. Message-ID: ErrMsgTemplate.CANNOT_LOAD_VAULT_SETTINGS
998
+#, python-brace-format
999
+msgctxt "Error message"
1000
+msgid "Cannot load vault settings: {error}."
1015 1001
 msgstr ""
1016 1002
 
1017
-#. TRANSLATORS: Message-ID: Label.COMPATIBILITY_OPTION_LABEL
1018
-msgctxt "Label :: Help text :: Option group name"
1019
-msgid "Compatibility and extension options"
1003
+#. TRANSLATORS: Unlike the "Cannot load {path!r} as a {fmt} vault configuration." message, *this* error message is emitted when we have tried loading the path in each of our supported formats, and failed.  The user will thus see the above "Cannot load ..." warning message potentially multiple times, and this error message at the very bottom.
1004
+#. 
1005
+#. Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG
1006
+#, python-brace-format
1007
+msgctxt "Error message"
1008
+msgid "Cannot parse {path!r} as a valid vault-native configuration file/directory."
1020 1009
 msgstr ""
1021 1010
 
1022
-#. TRANSLATORS: Message-ID: Label.CONFIGURATION_LABEL
1023
-msgctxt "Label :: Help text :: Option group name"
1024
-msgid "Configuration"
1011
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1012
+#. 
1013
+#. Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR
1014
+#, python-brace-format
1015
+msgctxt "Error message"
1016
+msgid "Cannot parse {path!r} as a valid vault-native configuration file/directory: {error}: {filename!r}."
1025 1017
 msgstr ""
1026 1018
 
1027
-#. TRANSLATORS: Message-ID: Label.LOGGING_LABEL
1028
-msgctxt "Label :: Help text :: Option group name"
1029
-msgid "Logging"
1019
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1020
+#. 
1021
+#. Message-ID: ErrMsgTemplate.CANNOT_PARSE_AS_VAULT_CONFIG_OSERROR
1022
+#, python-brace-format
1023
+msgctxt "Error message"
1024
+msgid "Cannot parse {path!r} as a valid vault-native configuration file/directory: {error}."
1030 1025
 msgstr ""
1031 1026
 
1032
-#. TRANSLATORS: Message-ID: Label.OPTIONS_LABEL
1033
-msgctxt "Label :: Help text :: Option group name"
1034
-msgid "Options"
1027
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1028
+#. 
1029
+#. Message-ID: ErrMsgTemplate.CANNOT_STORE_VAULT_SETTINGS
1030
+#, python-brace-format
1031
+msgctxt "Error message"
1032
+msgid "Cannot store vault settings: {error}: {filename!r}."
1035 1033
 msgstr ""
1036 1034
 
1037
-#. TRANSLATORS: Message-ID: Label.OTHER_OPTIONS_LABEL
1038
-msgctxt "Label :: Help text :: Option group name"
1039
-msgid "Other options"
1035
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1036
+#. 
1037
+#. Message-ID: ErrMsgTemplate.CANNOT_STORE_VAULT_SETTINGS
1038
+#, python-brace-format
1039
+msgctxt "Error message"
1040
+msgid "Cannot store vault settings: {error}."
1040 1041
 msgstr ""
1041 1042
 
1042
-#. TRANSLATORS: Message-ID: Label.PASSPHRASE_GENERATION_LABEL
1043
-msgctxt "Label :: Help text :: Option group name"
1044
-msgid "Passphrase generation"
1043
+#. TRANSLATORS: This error message is used whenever we cannot make any sense of a response from the SSH agent because the response is ill-formed (truncated, improperly encoded, etc.) or otherwise violates the communications protocol.  Well-formed responses that adhere to the protocol, even if they indicate that the requested operation failed, are handled with a different error message.
1044
+#. 
1045
+#. Message-ID: ErrMsgTemplate.CANNOT_UNDERSTAND_AGENT
1046
+msgctxt "Error message"
1047
+msgid "Cannot understand the SSH agent's response because it violates the communication protocol."
1045 1048
 msgstr ""
1046 1049
 
1047
-#. TRANSLATORS: Message-ID: Label.STORAGE_MANAGEMENT_LABEL
1048
-msgctxt "Label :: Help text :: Option group name"
1049
-msgid "Storage management"
1050
+#. TRANSLATORS: The settings_type metavar contains translations for either "global settings" or "service-specific settings"; see the CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_GLOBAL and CANNOT_UPDATE_SETTINGS_METAVAR_SETTINGS_TYPE_SERVICE entries.  The first sentence will thus read either "Cannot update the global settings without any given settings." or "Cannot update the service-specific settings without any given settings.".  You may update this entry, and the two metavar entries, in any way you see fit that achieves the desired translations of the first sentence.
1051
+#. 
1052
+#. Message-ID: ErrMsgTemplate.CANNOT_UPDATE_SETTINGS_NO_SETTINGS
1053
+#, python-brace-format
1054
+msgctxt "Error message"
1055
+msgid "Cannot update the {settings_type} without any given settings.  You must specify at least one of --lower, ..., --symbol, --notes, or --phrase or --key."
1050 1056
 msgstr ""
1051 1057
 
1052
-#. TRANSLATORS: Message-ID: Label.VERSION_INFO_TEXT
1058
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1059
+#. 
1060
+#. Message-ID: ErrMsgTemplate.INVALID_USER_CONFIG
1053 1061
 #, python-brace-format
1054
-msgctxt "Label :: Info Message"
1055
-msgid "{PROG_NAME!s} {VERSION}"
1062
+msgctxt "Error message"
1063
+msgid "The user configuration file is invalid.  {error}: {filename!r}."
1056 1064
 msgstr ""
1057 1065
 
1058
-#. TRANSLATORS: There is no support for "yes" or "no" in other languages than English, so it is advised that your translation makes it clear that only the strings "y", "yes", "n" or "no" are supported, even if the prompt becomes a bit longer.
1066
+#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1059 1067
 #. 
1060
-#. Message-ID: Label.CONFIRM_THIS_CHOICE_PROMPT_TEXT
1061
-msgctxt "Label :: Interactive prompt"
1062
-msgid "Confirm this choice?  (y/N)"
1068
+#. Message-ID: ErrMsgTemplate.INVALID_USER_CONFIG
1069
+#, python-brace-format
1070
+msgctxt "Error message"
1071
+msgid "The user configuration file is invalid.  {error}."
1063 1072
 msgstr ""
1064 1073
 
1065
-#. TRANSLATORS: This label is the heading of the list of suitable SSH keys.
1074
+#. TRANSLATORS: This error message is a reaction to a validator function saying *that* the configuration is not valid, but not *how* it is not valid.  The configuration file is principally parsable, however.
1066 1075
 #. 
1067
-#. Message-ID: Label.SUITABLE_SSH_KEYS_LABEL
1068
-msgctxt "Label :: Interactive prompt"
1069
-msgid "Suitable SSH keys:"
1076
+#. Message-ID: ErrMsgTemplate.INVALID_VAULT_CONFIG
1077
+#, python-brace-format
1078
+msgctxt "Error message"
1079
+msgid "Invalid vault config: {config!r}."
1070 1080
 msgstr ""
1071 1081
 
1072
-#. TRANSLATORS: Message-ID: Label.YOUR_SELECTION_PROMPT_TEXT
1082
+#. TRANSLATORS: Message-ID: ErrMsgTemplate.MISSING_MODULE
1073 1083
 #, python-brace-format
1074
-msgctxt "Label :: Interactive prompt"
1075
-msgid "Your selection?  (1-{n}, leave empty to abort)"
1084
+msgctxt "Error message"
1085
+msgid "Cannot load the required Python module {module!r}."
1076 1086
 msgstr ""
1077 1087
 
1078
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.EDITING_NOTES_BUT_NOT_STORING_CONFIG
1079
-msgctxt "Warning message"
1080
-msgid "Specifying --notes without --config is ineffective.  No notes will be edited."
1088
+#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_AF_UNIX
1089
+msgctxt "Error message"
1090
+msgid "Cannot connect to an SSH agent because this Python version does not support UNIX domain sockets."
1081 1091
 msgstr ""
1082 1092
 
1083
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.EMPTY_SERVICE_NOT_SUPPORTED
1084
-#, python-brace-format
1085
-msgctxt "Warning message"
1086
-msgid "An empty {service_metavar!s} is not supported by vault(1).  For compatibility, this will be treated as if {service_metavar!s} was not supplied, i.e., it will error out, or operate on global settings."
1093
+#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_KEY_OR_PHRASE
1094
+msgctxt "Error message"
1095
+msgid "No passphrase or key was given in the configuration.  In this case, the --phrase or --key argument is required."
1087 1096
 msgstr ""
1088 1097
 
1089
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.EMPTY_SERVICE_SETTINGS_INACCESSIBLE
1090
-#, python-brace-format
1091
-msgctxt "Warning message"
1092
-msgid "An empty {service_metavar!s} is not supported by vault(1).  The empty-string service settings will be inaccessible and ineffective.  To ensure that vault(1) and {PROG_NAME!s} see the settings, move them into the \"global\" section."
1098
+#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_SSH_AGENT_FOUND
1099
+msgctxt "Error message"
1100
+msgid "Cannot find any running SSH agent because SSH_AUTH_SOCK is not set."
1093 1101
 msgstr ""
1094 1102
 
1095
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1096
-#. 
1097
-#. Message-ID: WarnMsgTemplate.FAILED_TO_MIGRATE_CONFIG
1103
+#. TRANSLATORS: Message-ID: ErrMsgTemplate.NO_SUITABLE_SSH_KEYS
1098 1104
 #, python-brace-format
1099
-msgctxt "Warning message"
1100
-msgid "Failed to migrate to {path!r}: {error!s}: {filename!r}."
1105
+msgctxt "Error message"
1106
+msgid "The SSH agent contains no keys suitable for {PROG_NAME}."
1101 1107
 msgstr ""
1102 1108
 
1103
-#. TRANSLATORS: "error" is supplied by the operating system (errno/strerror).
1109
+#. TRANSLATORS: The params are long-form command-line option names.  Typical example: "--key is mutually exclusive with --phrase."
1104 1110
 #. 
1105
-#. Message-ID: WarnMsgTemplate.FAILED_TO_MIGRATE_CONFIG
1111
+#. Message-ID: ErrMsgTemplate.PARAMS_MUTUALLY_EXCLUSIVE
1106 1112
 #, python-brace-format
1107
-msgctxt "Warning message"
1108
-msgid "Failed to migrate to {path!r}: {error!s}."
1113
+msgctxt "Error message"
1114
+msgid "{param1} is mutually exclusive with {param2}."
1109 1115
 msgstr ""
1110 1116
 
1111
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.GLOBAL_PASSPHRASE_INEFFECTIVE
1112
-msgctxt "Warning message"
1113
-msgid "Setting a global passphrase is ineffective because a key is also set."
1117
+#. TRANSLATORS: The param is a long-form command-line option name, the metavar is Label.VAULT_METAVAR_SERVICE.
1118
+#. 
1119
+#. Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE
1120
+#, python-brace-format
1121
+msgctxt "Error message"
1122
+msgid "{param} requires a {service_metavar}."
1114 1123
 msgstr ""
1115 1124
 
1116
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.LEGACY_EDITOR_INTERFACE_NOTES_BACKUP
1125
+#. TRANSLATORS: The param is a long-form command-line option name, the metavar is Label.VAULT_METAVAR_SERVICE.
1126
+#. 
1127
+#. Message-ID: ErrMsgTemplate.PARAMS_NEEDS_SERVICE_OR_CONFIG
1117 1128
 #, python-brace-format
1118
-msgctxt "Warning message"
1119
-msgid "A backup copy of the old notes was saved to {filename!r}.  This is a safeguard against editing mistakes, because the vault(1)-compatible legacy editor interface does not allow aborting mid-edit, and because the notes were actually changed."
1129
+msgctxt "Error message"
1130
+msgid "{param} requires a {service_metavar} or --config."
1120 1131
 msgstr ""
1121 1132
 
1122
-#. TRANSLATORS: The key is a (vault) configuration key, in JSONPath syntax, typically "$.global" for the global passphrase or "$.services.service_name" or "$.services["service with spaces"]" for the services "service_name" and "service with spaces", respectively.  The form is one of the four Unicode normalization forms: NFC, NFD, NFKC, NFKD.  The asterisks are not special.  Please feel free to substitute any other appropriate way to mark up emphasis of the word "displays".
1133
+#. TRANSLATORS: The param is a long-form command-line option name, the metavar is Label.VAULT_METAVAR_SERVICE.
1123 1134
 #. 
1124
-#. Message-ID: WarnMsgTemplate.PASSPHRASE_NOT_NORMALIZED
1135
+#. Message-ID: ErrMsgTemplate.PARAMS_NO_SERVICE
1125 1136
 #, python-brace-format
1126
-msgctxt "Warning message"
1127
-msgid "The {key!s} passphrase is not {form!s}-normalized.  Its serialization as a byte string may not be what you expect it to be, even if it *displays* correctly.  Please make sure to double-check any derived passphrases for unexpected results."
1137
+msgctxt "Error message"
1138
+msgid "{param} does not take a {service_metavar} argument."
1128 1139
 msgstr ""
1129 1140
 
1130
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.SERVICE_NAME_INCOMPLETABLE
1141
+#. TRANSLATORS: The metavar is Label.VAULT_METAVAR_SERVICE.
1142
+#. 
1143
+#. Message-ID: ErrMsgTemplate.SERVICE_REQUIRED
1131 1144
 #, python-brace-format
1132
-msgctxt "Warning message"
1133
-msgid "The service name {service!r} contains an ASCII control character, which is not supported by our shell completion code.  This service name will therefore not be available for completion on the command-line.  You may of course still type it in manually in whatever format your shell accepts, but we highly recommend choosing a different service name instead."
1145
+msgctxt "Error message"
1146
+msgid "Deriving a passphrase requires a {service_metavar}."
1134 1147
 msgstr ""
1135 1148
 
1136
-#. TRANSLATORS: The key that is set need not necessarily be set at the service level; it may be a global key as well.
1149
+#. TRANSLATORS: The rephrasing "Attempted to unset and set the same setting (--unset={setting} --{setting}=...) at the same time."may or may not be more suitable as a basis for translation instead.
1137 1150
 #. 
1138
-#. Message-ID: WarnMsgTemplate.SERVICE_PASSPHRASE_INEFFECTIVE
1151
+#. Message-ID: ErrMsgTemplate.SET_AND_UNSET_SAME_SETTING
1139 1152
 #, python-brace-format
1140
-msgctxt "Warning message"
1141
-msgid "Setting a service passphrase is ineffective because a key is also set: {service!s}."
1153
+msgctxt "Error message"
1154
+msgid "Attempted to unset and set --{setting} at the same time."
1142 1155
 msgstr ""
1143 1156
 
1144
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.STEP_REMOVE_INEFFECTIVE_VALUE
1145
-#, python-brace-format
1146
-msgctxt "Warning message"
1147
-msgid "Removing ineffective setting {path!s} = {old!s}."
1157
+#. TRANSLATORS: Message-ID: ErrMsgTemplate.SSH_KEY_NOT_LOADED
1158
+msgctxt "Error message"
1159
+msgid "The requested SSH key is not loaded into the agent."
1148 1160
 msgstr ""
1149 1161
 
1150
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.STEP_REPLACE_INVALID_VALUE
1151
-#, python-brace-format
1152
-msgctxt "Warning message"
1153
-msgid "Replacing invalid value {old!s} for key {path!s} with {new!s}."
1162
+#. TRANSLATORS: The user requested to edit the notes for a service, but aborted the request mid-editing.
1163
+#. 
1164
+#. Message-ID: ErrMsgTemplate.USER_ABORTED_EDIT
1165
+msgctxt "Error message"
1166
+msgid "Not saving any new notes: the user aborted the request."
1154 1167
 msgstr ""
1155 1168
 
1156
-#. TRANSLATORS: Message-ID: WarnMsgTemplate.V01_STYLE_CONFIG
1157
-#, python-brace-format
1158
-msgctxt "Warning message :: Deprecation"
1159
-msgid "Using deprecated v0.1-style config file {old!r}, instead of v0.2-style {new!r}.  Support for v0.1-style config filenames will be removed in v1.0."
1169
+#. TRANSLATORS: The user was prompted for a master passphrase, but aborted the request.
1170
+#. 
1171
+#. Message-ID: ErrMsgTemplate.USER_ABORTED_PASSPHRASE
1172
+msgctxt "Error message"
1173
+msgid "No passphrase was given; the user aborted the request."
1160 1174
 msgstr ""
1161 1175
 
1162
-#. TRANSLATORS: This deprecation warning may be issued at any level, i.e. we may actually be talking about subcommands, or sub-subcommands, or sub-sub-subcommands, etc., which is what the "here" is supposed to indicate.
1176
+#. TRANSLATORS: The user was prompted to select a master SSH key, but aborted the request.
1163 1177
 #. 
1164
-#. Message-ID: WarnMsgTemplate.V10_SUBCOMMAND_REQUIRED
1165
-msgctxt "Warning message :: Deprecation"
1166
-msgid "A subcommand will be required here in v1.0.  See --help for available subcommands.  Defaulting to subcommand \"vault\"."
1178
+#. Message-ID: ErrMsgTemplate.USER_ABORTED_SSH_KEY_SELECTION
1179
+msgctxt "Error message"
1180
+msgid "No SSH key was selected; the user aborted the request."
1167 1181
 msgstr ""
1168 1182