@meith/i18n 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2846 @@
1
+ {
2
+ "accountForm.activity.blurb": "What has happened to your account’s sign-in, most recent first. If something here was not you, change your password and sign out everywhere.",
3
+ "accountForm.activity.detail": "{at} · {device} · {address}",
4
+ "accountForm.activity.none": "Nothing recorded yet.",
5
+ "accountForm.activity.title": "Recent security activity",
6
+ "accountForm.avatar.choose": "Choose an image",
7
+ "accountForm.avatar.failed": "That image could not be processed.",
8
+ "accountForm.avatar.hint": "PNG or JPEG, up to {max} MB. It is scaled to fit {width}×{height} and re-encoded, which removes any metadata it carries — including where the photograph was taken.",
9
+ "accountForm.avatar.lockedBody": "A moderator has stopped your avatar from being shown or changed.",
10
+ "accountForm.avatar.lockedTitle": "Your avatar is locked",
11
+ "accountForm.avatar.none": "You have not set one.",
12
+ "accountForm.avatar.pending": "Your new avatar is being processed. It will appear shortly — the image is re-encoded before the board will show it, which is what keeps an upload from carrying anything but pixels.",
13
+ "accountForm.avatar.remove": "Remove my avatar",
14
+ "accountForm.avatar.removeBlurb": "Removing it takes the image down everywhere it appears.",
15
+ "accountForm.avatar.title": "Your avatar",
16
+ "accountForm.avatar.upload": "Upload",
17
+ "accountForm.displayGroup.hint": "Every group you are in is here, and the one you pick decides the title, colour and badge beside your posts. A group you hold only until a date drops off this list when it lapses, and your name goes back to your main group.",
18
+ "accountForm.displayGroup.label": "Shown under your name",
19
+ "accountForm.displayGroup.submit": "Save display group",
20
+ "accountForm.displayGroup.title": "Display group",
21
+ "accountForm.email.current": "Currently {email}.",
22
+ "accountForm.email.new": "New e-mail address",
23
+ "accountForm.email.note": "Nothing changes until you follow the link we send to the new address.",
24
+ "accountForm.email.submit": "Send confirmation",
25
+ "accountForm.email.title": "Change your e-mail address",
26
+ "accountForm.follow.follow": "Follow",
27
+ "accountForm.follow.forum": "Follow this forum",
28
+ "accountForm.follow.frequency": "How often to notify me",
29
+ "accountForm.follow.notifyMe": "Notify me",
30
+ "accountForm.follow.save": "Save",
31
+ "accountForm.follow.stop": "Stop following",
32
+ "accountForm.follow.thread": "Follow this thread",
33
+ "accountForm.follow.unsubscribe": "Unsubscribe",
34
+ "accountForm.linked.blurb": "Anything listed here can open your account without your password. Unlink one and it stops being a way in immediately.",
35
+ "accountForm.linked.link": "Link {provider}",
36
+ "accountForm.linked.linkedNever": "Linked {at}, never used since",
37
+ "accountForm.linked.linkedUsed": "Linked {at}, last used {used}",
38
+ "accountForm.linked.none": "Nothing is linked to your account yet.",
39
+ "accountForm.linked.title": "Linked sign-ins",
40
+ "accountForm.linked.unlink": "Unlink",
41
+ "accountForm.locked.reason": "Reason given: {reason}",
42
+ "accountForm.notifications.blurb": "Everything is always recorded in your notifications, whether or not you receive an e-mail about it.",
43
+ "accountForm.notifications.legend": "Send me an e-mail when…",
44
+ "accountForm.notifications.markAllRead": "Mark all as read",
45
+ "accountForm.notifications.markRead": "Mark as read",
46
+ "accountForm.notifications.submit": "Save preferences",
47
+ "accountForm.options.invisible": "Browse invisibly",
48
+ "accountForm.options.invisibleHint": "You will not appear in the online list, and you will not be counted in it either. Your posts are unaffected, and moderators can still see that you are here.",
49
+ "accountForm.options.locale": "Language",
50
+ "accountForm.options.localeHint": "The language the board writes to you in, and the one dates and numbers are formatted by. Left automatic, it follows whichever language your browser asks for.",
51
+ "accountForm.options.pageSizeHint": "Leave a page size empty to follow the board’s setting, so it keeps up when an administrator changes it.",
52
+ "accountForm.options.pageSizePlaceholder": "Board default ({size})",
53
+ "accountForm.options.postsPerPage": "Posts per page",
54
+ "accountForm.options.submit": "Save options",
55
+ "accountForm.options.threadsPerPage": "Threads per page",
56
+ "accountForm.options.timezone": "Timezone",
57
+ "accountForm.options.timezoneHint": "Every date and time on the board is shown in this zone, and the footer says which one it is. Left automatic, it follows the device you are reading on.",
58
+ "accountForm.passkey.hint": "For your own eyes, so you can tell one device from another later. {limit, plural, one {Up to # passkey per account.} other {Up to # passkeys per account.}}",
59
+ "accountForm.passkey.label": "What to call it",
60
+ "accountForm.passkey.placeholder": "Work laptop",
61
+ "accountForm.passkey.submit": "Add a passkey",
62
+ "accountForm.passkey.unsupported": "This browser cannot create passkeys, so there is nothing to add here. Try one that can, or keep using your password.",
63
+ "accountForm.passkeys.addedNever": "Added {at}, never used",
64
+ "accountForm.passkeys.addedUsed": "Added {at}, last used {used}",
65
+ "accountForm.passkeys.blurb": "A passkey signs you in with the fingerprint, face or security key your device already uses. It never leaves that device, and there is no password to phish.",
66
+ "accountForm.passkeys.none": "You have no passkeys yet.",
67
+ "accountForm.passkeys.remove": "Remove",
68
+ "accountForm.passkeys.title": "Passkeys",
69
+ "accountForm.password.confirm": "New password again",
70
+ "accountForm.password.current": "Current password",
71
+ "accountForm.password.new": "New password",
72
+ "accountForm.password.note": "You will stay signed in here. Every other device is signed out.",
73
+ "accountForm.password.submit": "Change password",
74
+ "accountForm.password.title": "Change your password",
75
+ "accountForm.profile.bio": "About me",
76
+ "accountForm.profile.bioHint": "Plain text. Formatting is not applied here.",
77
+ "accountForm.profile.location": "Location",
78
+ "accountForm.profile.submit": "Save profile",
79
+ "accountForm.profile.website": "Website",
80
+ "accountForm.rate.changeTitle": "Change your rating of {username}",
81
+ "accountForm.rate.justComment": "Just a comment",
82
+ "accountForm.rate.negative": "Negative",
83
+ "accountForm.rate.neutral": "Neutral",
84
+ "accountForm.rate.positive": "Positive",
85
+ "accountForm.rate.thanks": "Thanks",
86
+ "accountForm.rate.title": "Rate {username}",
87
+ "accountForm.rate.why": "Why",
88
+ "accountForm.rate.whyHint": "Plain text, shown on their profile beside your name.",
89
+ "accountForm.rate.whyOptional": "Why (optional)",
90
+ "accountForm.rate.withdraw": "Withdraw",
91
+ "accountForm.sessions.blurb": "Every device holding a live sign-in to your account. Signing one out takes effect at once, and whoever holds it has to sign in again.",
92
+ "accountForm.sessions.detail": "{address} · started {started} · last seen {seen}",
93
+ "accountForm.sessions.signOut": "Sign out",
94
+ "accountForm.sessions.signOutElsewhere": "Sign out everywhere else",
95
+ "accountForm.sessions.thisDevice": "— this device",
96
+ "accountForm.sessions.title": "Where you are signed in",
97
+ "accountForm.signature.hint": "Up to {max} characters. Bold, italic, strikethrough, code and links are allowed; headings, quotes, lists, tables and images are not — a signature repeats under every post you have ever made, and anything that changes its height changes every thread page.",
98
+ "accountForm.signature.label": "Signature",
99
+ "accountForm.signature.lockedBody": "A moderator has stopped your signature from being shown or changed.",
100
+ "accountForm.signature.lockedTitle": "Your signature is locked",
101
+ "accountForm.signature.submit": "Save signature",
102
+ "accountForm.twoFactor.backToSecurity": "Back to account security",
103
+ "accountForm.twoFactor.begin": "Set up an authenticator app",
104
+ "accountForm.twoFactor.blurb": "An authenticator app on your phone shows a six-digit code that changes every thirty seconds. With it switched on, your password alone is not enough to open your account — which is the point, because a password can leak without you ever knowing.",
105
+ "accountForm.twoFactor.cancel": "Cancel",
106
+ "accountForm.twoFactor.codeHint": "Six digits. It changes every thirty seconds.",
107
+ "accountForm.twoFactor.codeLabel": "Code from your app",
108
+ "accountForm.twoFactor.codeProofHint": "Your account has no password, so a code confirms this instead.",
109
+ "accountForm.twoFactor.codeProofLabel": "A current code from your app",
110
+ "accountForm.twoFactor.codes": "{count, plural, one {# recovery code} other {# recovery codes}}",
111
+ "accountForm.twoFactor.enabledTitle": "Your account now asks for a code",
112
+ "accountForm.twoFactor.exhausted": "Replace them now — without one, losing your phone means losing the account.",
113
+ "accountForm.twoFactor.offSubmit": "Turn off two-factor authentication",
114
+ "accountForm.twoFactor.offTitle": "Turn it off",
115
+ "accountForm.twoFactor.passwordLabel": "Your password",
116
+ "accountForm.twoFactor.recoveryBlurb": "Each one signs you in exactly once, in place of a code, if you lose the device your authenticator app is on.",
117
+ "accountForm.twoFactor.recoverySave": "Save these somewhere safe. They are shown once and never again.",
118
+ "accountForm.twoFactor.replaceBlurb": "Ten fresh ones, and the old set stops working the moment they are made.",
119
+ "accountForm.twoFactor.replaceSubmit": "Replace recovery codes",
120
+ "accountForm.twoFactor.replaceTitle": "Replace your recovery codes",
121
+ "accountForm.twoFactor.requiredBlurb": "This board requires it of anyone who can reach the control panel, so you will be asked for it before you can use the panel.",
122
+ "accountForm.twoFactor.requiredOff": "This board requires two-factor authentication of anyone who can reach the control panel, so it cannot be turned off while you hold that access.",
123
+ "accountForm.twoFactor.setupTitle": "Set up your authenticator app",
124
+ "accountForm.twoFactor.status": "On. You have {codes} left.",
125
+ "accountForm.twoFactor.step1": "Open your authenticator app and add an account by hand, or follow {link} on the device the app is on.",
126
+ "accountForm.twoFactor.step1Link": "this link",
127
+ "accountForm.twoFactor.step2": "Enter this key:",
128
+ "accountForm.twoFactor.step3": "Type the six-digit code it shows, to prove the two agree.",
129
+ "accountForm.twoFactor.title": "Two-factor authentication",
130
+ "accountForm.twoFactor.turnOn": "Turn on",
131
+ "accountForm.twoFactor.writtenDown": "{link} once you have written them down.",
132
+ "admin.create": "Create",
133
+ "admin.created": "Created.",
134
+ "admin.none": "— none —",
135
+ "admin.remove": "Remove",
136
+ "admin.saved": "Saved.",
137
+ "adminAction.codeReplayed": "That code has been used already. Wait for the next one.",
138
+ "adminAction.codeWrong": "That code is not right.",
139
+ "adminAction.twoFactorRequired": "This board requires two-factor authentication of anyone who can reach the control panel. Set up an authenticator app on your account security page first.",
140
+ "adminAnnouncements.by": " · by {username}",
141
+ "adminAnnouncements.lede": "A dated notice above the forums. Nobody can reply to one, it disappears on its own date, and removing it removes nothing anybody wrote — which is what makes it a different thing from a pinned thread rather than a worse one.",
142
+ "adminAnnouncements.state.expired": "expired",
143
+ "adminAnnouncements.state.off": "switched off",
144
+ "adminAnnouncements.state.scheduled": "scheduled",
145
+ "adminAnnouncements.state.showing": "showing now",
146
+ "adminAnnouncements.wholeBoard": "the whole board",
147
+ "adminAntispam.answersAfter": ": the question is shown to everybody and anyone can learn the answer by registering once. This stops scripts, not people.",
148
+ "adminAntispam.answersBefore": "Answers are stored as you type them and are",
149
+ "adminAntispam.bypassFlood": "bypass flood check",
150
+ "adminAntispam.different": "different",
151
+ "adminAntispam.emptyChallenge": "Registration is currently open to everybody. Add a question below — until then this setting is doing nothing, which is deliberate: refusing every applicant because the list is empty would be worse.",
152
+ "adminAntispam.firstPosts": "Hold a new member’s first posts",
153
+ "adminAntispam.firstPostsAfter": ".",
154
+ "adminAntispam.firstPostsBefore": "The most effective thing on this page. Spam accounts post once or twice and never return, so a threshold of two or three catches nearly all of it — at the cost of a real new member waiting for a moderator once. Held posts appear in",
155
+ "adminAntispam.hiddenFieldHint": "Free, on by default, and catches the bots that fill every field in a form. A bot that reads your CSS defeats it. There is no reason to turn it off — a real visitor never sees it.",
156
+ "adminAntispam.hostedHint": "Not offered here, and not because it would be hard. A hosted captcha means every visitor’s browser contacting a third party before they can join, which is a decision about your members rather than a setting — so this board ships the seam and not the service.",
157
+ "adminAntispam.hourlyAfter": "are exempt from both.",
158
+ "adminAntispam.hourlyBefore": "A ceiling on how much anybody can do in an hour, counted in the database so every server shares one allowance. They are a",
159
+ "adminAntispam.hourlyBetween": "control from the posting flood interval, which sets a minimum gap between two actions: an interval does nothing about a script posting steadily all night, and a limit does nothing about a double-click. Members with",
160
+ "adminAntispam.ledeEnd": ". This screen holds the questions, and what each control is actually worth.",
161
+ "adminAntispam.minimumTimeHint": "Catches instant submissions. Keep it at a few seconds: a password manager filling a form in two is a real person, and this is the control most likely to turn away somebody genuine.",
162
+ "adminAntispam.moderationQueue": "the moderation queue",
163
+ "adminAntispam.notSecret": "not secret",
164
+ "adminAntispam.providerBefore": "A provider is a small module implementing",
165
+ "adminAntispam.providerBetween": ": issue a challenge, verify an answer. No form and no call site changes. See",
166
+ "adminAntispam.providerEnd": ", or ship it as a plugin.",
167
+ "adminAntispam.questionHint": "Stops scripted registration and does not stop somebody paid to answer it. It is also the only control here that costs every legitimate applicant a moment, so switch it on when you have a problem rather than in advance.",
168
+ "adminAntispam.questionsAfter": ". One is chosen at random per visitor. Pick something a regular here knows and a script does not — the name of a section, an in-joke, the board’s own subject.",
169
+ "adminAntispam.questionsBefore": "Asked on the registration form when the challenge is set to",
170
+ "adminApiTokens.actions": "Actions",
171
+ "adminApiTokens.ledeAfter": ". Every request is still checked against its owner’s permissions — a scope narrows a token, it never widens the account.",
172
+ "adminApiTokens.ledeBefore": "Bearer tokens for",
173
+ "adminApiTokens.name": "Name",
174
+ "adminApiTokens.never": "never",
175
+ "adminApiTokens.owner": "Owner",
176
+ "adminApiTokens.prefix": "Prefix",
177
+ "adminApiTokens.scopes": "Scopes",
178
+ "adminApiTokens.state": "State",
179
+ "adminApiTokens.state.expired": "expired",
180
+ "adminApiTokens.state.live": "live",
181
+ "adminApiTokens.state.revoked": "revoked",
182
+ "adminAttachments.any": "Any",
183
+ "adminAttachments.deletedAccount": "a deleted account",
184
+ "adminAttachments.failed": "Failed",
185
+ "adminAttachments.failure": "Failed: {reason}",
186
+ "adminAttachments.files": "Files",
187
+ "adminAttachments.filter": "Filter",
188
+ "adminAttachments.ledeAfter": ", because an attachment is shown beside a post rather than written into it.",
189
+ "adminAttachments.ledeBefore": "Every file members have uploaded. Deleting one removes it from the list under its post and hands the stored bytes to the hourly sweep —",
190
+ "adminAttachments.ledeStrong": "the post itself is untouched",
191
+ "adminAttachments.meta": "{size} · {type} · {count, plural, one {# download} other {# downloads}} ·",
192
+ "adminAttachments.noFailureReason": "no reason recorded",
193
+ "adminAttachments.pending": "Awaiting processing — not downloadable yet.",
194
+ "adminAttachments.post": "the post",
195
+ "adminAttachments.ready": "Ready",
196
+ "adminAttachments.status": "Status",
197
+ "adminAttachments.stored": "Stored",
198
+ "adminContent.add": "Add",
199
+ "adminContent.added": "Added.",
200
+ "adminContent.announcement.from": "From",
201
+ "adminContent.announcement.message": "Message",
202
+ "adminContent.announcement.messageHint": "Markdown, rendered the same way a post is — including this board’s smilies and directives.",
203
+ "adminContent.announcement.timesUtc": "Times are UTC.",
204
+ "adminContent.announcement.title": "Title",
205
+ "adminContent.announcement.until": "Until",
206
+ "adminContent.announcement.untilHint": "Blank never expires.",
207
+ "adminContent.announcement.where": "Where",
208
+ "adminContent.announcement.whereHint": "A forum’s announcement is shown to whoever can see that forum. A board-wide one is shown on the index and on every forum.",
209
+ "adminContent.announcement.wholeBoard": "The whole board",
210
+ "adminContent.attachment.delete": "Delete",
211
+ "adminContent.captcha.answers": "Accepted answers",
212
+ "adminContent.captcha.answersHint": "One per line. Any of them is accepted, ignoring case and extra spaces.",
213
+ "adminContent.captcha.question": "Question",
214
+ "adminContent.captcha.questionPlaceholder": "What is the name of this forum?",
215
+ "adminContent.directive.block": "Block",
216
+ "adminContent.directive.name": "Name",
217
+ "adminContent.directive.nameHint": "1–16 letters or digits. Written {block} as a block, or {inline} inline.",
218
+ "adminContent.directive.namePlaceholder": "spoiler",
219
+ "adminContent.directive.note": "Note",
220
+ "adminContent.directive.noteHint": "For you. Never shown to members.",
221
+ "adminContent.enabled": "Enabled",
222
+ "adminContent.filter.active": "Active",
223
+ "adminContent.filter.match": "Match",
224
+ "adminContent.filter.removeThis": "Remove this filter",
225
+ "adminContent.filter.showInstead": "Show instead",
226
+ "adminContent.filter.showInsteadHint": "Blank removes the word.",
227
+ "adminContent.filter.wholeWords": "Whole words",
228
+ "adminContent.prefix.add": "Add prefix",
229
+ "adminContent.prefix.displayOrder": "Display order",
230
+ "adminContent.prefix.label": "Label",
231
+ "adminContent.prefix.onlyBranch": "Only in this branch",
232
+ "adminContent.prefix.onlyBranchHint": "A forum path, to scope the prefix to one branch of the tree. Blank offers it everywhere.",
233
+ "adminContent.prefix.styleToken": "Style token",
234
+ "adminContent.prefix.styleTokenHint": "Names a theme token for its colour. Blank uses the default.",
235
+ "adminContent.save": "Save",
236
+ "adminContent.smiley.altText": "Alt text",
237
+ "adminContent.smiley.altTextHint": "Defaults to the code.",
238
+ "adminContent.smiley.code": "Code",
239
+ "adminContent.smiley.codePlaceholder": ":)",
240
+ "adminContent.smiley.image": "Image",
241
+ "adminContent.smiley.imagePlaceholder": "/smilies/smile.png",
242
+ "adminForum.alsoSubforums": "also in subforums",
243
+ "adminForum.appointNote": "One or the other. Appointing somebody who already moderates here replaces what they may do.",
244
+ "adminForum.appointTitle": "Appoint, or change what somebody may do",
245
+ "adminForum.cascade": "Also in every forum beneath this one",
246
+ "adminForum.categoryThreadsHint": "A category holds forums. Turn this on and it holds threads of its own as well, and its page lists them under those forums. Turning it off again stops new ones and returns the page to the forums; threads already there keep their addresses.",
247
+ "adminForum.copied": "Copied. Every forum beneath this one now has the same permissions.",
248
+ "adminForum.copyNote": "You will be asked for your password again if it is more than 15 minutes since you last confirmed it. This rewrites forums you are not looking at and there is no undo.",
249
+ "adminForum.copyTo": "Copy to {count, plural, one {# forum} other {# forums}} ({changes, plural, one {# change} other {# changes}})",
250
+ "adminForum.description": "Description",
251
+ "adminForum.displayOrder": "Display order",
252
+ "adminForum.displayOrderHint": "Its place among the forums beside it, counting from zero. Dragging it on the tree screen writes this for you, and renumbers its siblings to match.",
253
+ "adminForum.inside": "Inside",
254
+ "adminForum.kind": "Kind",
255
+ "adminForum.kind.category": "Category — a heading that holds forums",
256
+ "adminForum.kind.forum": "Forum — holds threads",
257
+ "adminForum.kind.link": "Link — redirects elsewhere",
258
+ "adminForum.linkOnlyHint": "Only for a link row.",
259
+ "adminForum.linkUrl": "Link URL",
260
+ "adminForum.linkUrlHint": "Only meaningful for a link row.",
261
+ "adminForum.may": "May",
262
+ "adminForum.member": "Member",
263
+ "adminForum.moderators": "Moderators",
264
+ "adminForum.moveForum": "Move forum",
265
+ "adminForum.moveInside": "Move inside",
266
+ "adminForum.moveNote": "Everything beneath this forum moves with it, and inherits from wherever it lands — so moving a busy forum under a private category hides its whole subtree. You will be asked for your password again if it is more than 15 minutes since you last confirmed it.",
267
+ "adminForum.moved": "Moved. Its subforums came with it.",
268
+ "adminForum.noModerators": "Nobody moderates this forum.",
269
+ "adminForum.noRights": "No rights — can read the queue and nothing else",
270
+ "adminForum.options": "Options",
271
+ "adminForum.orGroup": "…or a group",
272
+ "adminForum.perm.allowed": "allowed",
273
+ "adminForum.perm.ancestor": "an ancestor",
274
+ "adminForum.perm.denied": "denied",
275
+ "adminForum.perm.deny": "Deny",
276
+ "adminForum.perm.grant": "Grant",
277
+ "adminForum.perm.inherit": "Inherit",
278
+ "adminForum.perm.inheritedDefault": "inherited from the group's own default: {value}",
279
+ "adminForum.perm.inheritedFrom": "inherited from {forum}: {value}",
280
+ "adminForum.perm.notRequired": "not required",
281
+ "adminForum.perm.notRequiredOption": "Not required",
282
+ "adminForum.perm.required": "required",
283
+ "adminForum.perm.requiredOption": "Required",
284
+ "adminForum.perm.setHere": "set here: {value}",
285
+ "adminForum.right.canApproveContent": "Approve content",
286
+ "adminForum.right.canEditPosts": "Edit posts",
287
+ "adminForum.right.canMergeThreads": "Merge threads",
288
+ "adminForum.right.canMoveThreads": "Move threads",
289
+ "adminForum.right.canOpenCloseThreads": "Open and close threads",
290
+ "adminForum.right.canRestorePosts": "Restore posts",
291
+ "adminForum.right.canSoftDeletePosts": "Delete posts",
292
+ "adminForum.right.canSplitThreads": "Split threads",
293
+ "adminForum.right.canStickThreads": "Stick threads",
294
+ "adminForum.saveAppointment": "Save appointment",
295
+ "adminForum.saveForum": "Save forum",
296
+ "adminForum.saveGroup": "Save {group}",
297
+ "adminForum.slug": "Slug",
298
+ "adminForum.slugHint": "Appears in every link to this forum. Lower-case letters, numbers and single hyphens — anything else would have to be escaped, and a URL nobody can paste is worse than an ugly one.",
299
+ "adminForum.title": "Title",
300
+ "adminForum.toggle.allowAttachments": "Allow attachments",
301
+ "adminForum.toggle.allowPolls": "Allow polls",
302
+ "adminForum.toggle.allowReplies": "Allow replies",
303
+ "adminForum.toggle.allowThreads": "Allow new threads",
304
+ "adminForum.toggle.isOpen": "Open for posting",
305
+ "adminForum.toggle.moderateNewPosts": "Hold new replies for approval",
306
+ "adminForum.toggle.moderateNewThreads": "Hold new threads for approval",
307
+ "adminForum.toggle.requiresPrefix": "Require a thread prefix",
308
+ "adminForum.topLevel": "— top level —",
309
+ "adminForum.tree.arrowsHint": "Use the arrows to move a forum up, down, in or out.",
310
+ "adminForum.tree.dragHint": "Drag a row by its handle to move it, sideways to nest it. The arrows do the same from the keyboard.",
311
+ "adminForum.tree.heading": "The tree",
312
+ "adminForum.tree.help": "Moving a forum takes its subforums with it, and they inherit from wherever they land. Re-parenting asks for your password again if it is more than fifteen minutes since you last confirmed it; reordering under the same parent does not.",
313
+ "adminForum.tree.moveHandle": "Move {title}",
314
+ "adminForum.tree.nudge.down": "Move {title} down",
315
+ "adminForum.tree.nudge.in": "Move {title} in, under the forum above it",
316
+ "adminForum.tree.nudge.out": "Move {title} out of its parent",
317
+ "adminForum.tree.nudge.up": "Move {title} up",
318
+ "adminForum.tree.optionsFor": "Options for {title}",
319
+ "adminForum.tree.order.after": "after {after}",
320
+ "adminForum.tree.order.first": "first",
321
+ "adminForum.tree.permissions": "Permissions",
322
+ "adminForum.tree.permissionsFor": "Permissions for {title}",
323
+ "adminForum.tree.placed": "{title}: {where}, {order}.",
324
+ "adminForum.tree.type.category": "category",
325
+ "adminForum.tree.type.forum": "forum",
326
+ "adminForum.tree.type.link": "link",
327
+ "adminForum.tree.where.inside": "inside {parent}",
328
+ "adminForum.tree.where.topLevel": "at the top level",
329
+ "adminForum.usernamePlaceholder": "Username",
330
+ "adminForums.all": "All forums",
331
+ "adminForums.copyPreview": "This would change {changes, plural, one {# setting} other {# settings}} across {forums, plural, one {# forum} other {# forums}}{unchanged, plural, =0 {} other {, leaving # unchanged}}.",
332
+ "adminForums.deny": "Deny",
333
+ "adminForums.inherit": "Inherit",
334
+ "adminForums.lede": "The board’s tree, in the order it renders, and the place to rearrange it. A category holds forums, and threads too where it has been told to; a link is a redirect row.",
335
+ "adminForums.move": "Move",
336
+ "adminForums.optionsLede": "Everything this forum is, apart from where it sits. Order is arranged on the tree screen; the move below is the long way round, for a destination too far to drag to.",
337
+ "adminForums.permissionsLedeBetween": " is not the same as",
338
+ "adminForums.permissionsLedeEnd": ". A cell left on Inherit follows the nearest ancestor that sets it, and the group’s own default if none does — so changing that ancestor later still reaches this forum. Setting Deny pins it here.",
339
+ "adminForums.permissionsTitle": "Permissions: {title}",
340
+ "adminGroup.apply.done": "Done. {count, plural, one {# member} other {# members}} promoted.",
341
+ "adminGroup.apply.note": "Runs the same evaluation you are looking at, and writes its outcomes. You will be asked for your password again.",
342
+ "adminGroup.apply.promote": "Promote {count, plural, one {# member} other {# members}}",
343
+ "adminGroup.copyPermissionsFrom": "Copy permissions from",
344
+ "adminGroup.copyPermissionsFromHint": "Required. Starting from the defaults would deny everything, which makes a group whose members cannot see the board.",
345
+ "adminGroup.createGroup": "Create group",
346
+ "adminGroup.dark": "Dark",
347
+ "adminGroup.deleteGroup": "Delete this group",
348
+ "adminGroup.deleteNote": "You will be asked for your password again. This changes what every member it holds is allowed to do, and there is no undo.",
349
+ "adminGroup.deleted": "Deleted. Its members are in the group you chose.",
350
+ "adminGroup.description": "Description",
351
+ "adminGroup.displayOrder": "Display order",
352
+ "adminGroup.key": "Key",
353
+ "adminGroup.keyHint": "How code refers to the group. Lower-case letters, numbers and underscores; it cannot be changed afterwards.",
354
+ "adminGroup.light": "Light",
355
+ "adminGroup.move.finished": "Finished. {count, plural, one {# member} other {# members}} moved.",
356
+ "adminGroup.move.from": "From",
357
+ "adminGroup.move.moreSoFar": "{count} moved so far — there are more. Press again to continue; the run picks up where it stopped.",
358
+ "adminGroup.move.nextBatch": "Move the next batch",
359
+ "adminGroup.move.note": "Moves up to 500 members per press, so the board stays responsive while a long run works through. You will be asked for your password again.",
360
+ "adminGroup.move.start": "Start moving",
361
+ "adminGroup.move.to": "To",
362
+ "adminGroup.moveMembersTo": "Move its members to",
363
+ "adminGroup.moveMembersToHint": "Required — every member has a primary group, so there is nowhere for them to be left.",
364
+ "adminGroup.nameColour": "Name colour",
365
+ "adminGroup.nameColour.describesDark": "the dark name colour",
366
+ "adminGroup.nameColour.describesLight": "the light name colour",
367
+ "adminGroup.nameColourHint": "Shown wherever a member of this group is named — postbits, thread listings, the online list. Leave a picker empty and their name is the ordinary text colour, which is what every name does by default.",
368
+ "adminGroup.perm.forumDefault": "default for every forum",
369
+ "adminGroup.perm.tickedRestricted": "ticked = restricted",
370
+ "adminGroup.pluginGrantable": "May be granted by plugins",
371
+ "adminGroup.pluginGrantableHint": "Lets an installed plugin put members in this group for a limited time — a paid pass, a trial. Refused for system and staff groups, and for any group whose permissions carry administrative or moderation power. Membership a plugin grants always expires. A plugin may ask for the group to become the member’s primary one, which is what a plugin selling membership normally wants: the group they were primary in becomes a secondary membership and comes back the moment the grant is revoked or lapses. A staff member’s primary group is never displaced — staff is appointed, and a purchase cannot move it.",
372
+ "adminGroup.rule.add": "Add rule",
373
+ "adminGroup.rule.added": "Added. It is enabled straight away.",
374
+ "adminGroup.rule.anyGroup": "Any group",
375
+ "adminGroup.rule.daysRegistered": "Days registered",
376
+ "adminGroup.rule.disable": "Disable this rule",
377
+ "adminGroup.rule.disabledNotice": "Disabled. It stays here and is skipped.",
378
+ "adminGroup.rule.displayOrderHint": "The first rule in this order that matches a member is the one applied.",
379
+ "adminGroup.rule.enable": "Enable this rule",
380
+ "adminGroup.rule.enabledNotice": "Enabled. The scheduled task will apply it.",
381
+ "adminGroup.rule.posts": "Posts",
382
+ "adminGroup.rule.promoteFrom": "Promote from",
383
+ "adminGroup.rule.promoteFromHint": "Their primary group. Any group considers every member the guards allow.",
384
+ "adminGroup.rule.promoteInto": "Promote into",
385
+ "adminGroup.rule.promoteIntoHint": "Becomes their primary and display group.",
386
+ "adminGroup.rule.removeNote": "Removing asks for your password again. Disabling does not, and is the reversible way to stop a rule.",
387
+ "adminGroup.rule.reputation": "Reputation",
388
+ "adminGroup.rule.save": "Save rule",
389
+ "adminGroup.rule.thresholds": "They must have at least",
390
+ "adminGroup.rule.thresholdsHint": "Blank means the rule does not look at that number. At least one has to be filled in — a rule with none matches every member it examines.",
391
+ "adminGroup.rule.titleHint": "Names the rule in the preview and in the admin log. Members never see it.",
392
+ "adminGroup.rule.titlePlaceholder": "Veteran",
393
+ "adminGroup.sampleMember": "A member",
394
+ "adminGroup.saveGroup": "Save group",
395
+ "adminGroup.savePermissions": "Save permissions",
396
+ "adminGroup.select.placeholder": "— choose a group —",
397
+ "adminGroup.staffGroup": "Staff group — listed on the staff page",
398
+ "adminGroup.title": "Title",
399
+ "adminGroupDetail.badge": "Badge",
400
+ "adminGroupDetail.badgeHint": "A small image shown beside a member’s name. Two of them, for the reason the colours have two: an icon drawn for a white page usually disappears on a black one. Upload only the light one and it is used in both.",
401
+ "adminGroupDetail.dark": "Dark",
402
+ "adminGroupDetail.delete": "Delete",
403
+ "adminGroupDetail.deleteSystemHint": "This group is part of how the board works — registration, bans and the control panel resolve it by key — so it cannot be deleted. Its permissions are still yours to change.",
404
+ "adminGroupDetail.details": "Details",
405
+ "adminGroupDetail.light": "Light",
406
+ "adminGroupDetail.members": "{count, plural, one {# member} other {# members}}",
407
+ "adminGroupDetail.permissions": "Permissions",
408
+ "adminGroupDetail.permissionsHint": "These are this group’s answers, not a forum’s. A member in several groups gets the most permissive of them — a tick can only ever grant, never take away — except for the restrictions, where any group that lifts one lifts it everywhere.",
409
+ "adminGroupDetail.systemGroup": "a system group: the board resolves it by key",
410
+ "adminGroups.all": "All groups",
411
+ "adminGroups.default": "default",
412
+ "adminGroups.disabled": " · disabled",
413
+ "adminGroups.edit": "Edit",
414
+ "adminGroups.editLabel": "Edit {title}",
415
+ "adminGroups.examined": "{count, plural, one {# member examined} other {# members examined}}.",
416
+ "adminGroups.forumPermissions": "forum permissions",
417
+ "adminGroups.group": "group {id}",
418
+ "adminGroups.ledeBefore": "A group is a set of permissions and the members who hold it. What a group allows here is the",
419
+ "adminGroups.ledeBetween": "for every forum — a forum may override it, and",
420
+ "adminGroups.ledeEnd": "is where that happens.",
421
+ "adminGroups.member": "member {id}",
422
+ "adminGroups.members": "{count, plural, one {# member} other {# members}}",
423
+ "adminGroups.membershipsAfter": "group, which is what decides their permissions and the badge beside their name. It is not reversible except by moving them back.",
424
+ "adminGroups.membershipsBefore": "This changes members’",
425
+ "adminGroups.membershipsLede": "Moves every member of one group into another, a batch at a time. The counts beside each group are how many members it holds now.",
426
+ "adminGroups.noGroup": "no group",
427
+ "adminGroups.noRules": "No rule is configured, so nothing is ever promoted. Add one below and this page will show who it would move.",
428
+ "adminGroups.nobodyNoRules": "Nobody would be promoted, because there is no rule to promote them by.",
429
+ "adminGroups.nobodyQualified": "Nobody would be promoted. Everyone who qualifies is already where these rules would put them.",
430
+ "adminGroups.primary": "primary",
431
+ "adminGroups.promotionNoteBefore": "A promotion never lifts a ban, never demotes, and never re-applies to somebody already in the target group. Banned members and staff are skipped entirely, whatever the rules say. An enabled rule is also applied without anybody pressing anything, by the",
432
+ "adminGroups.promotionNoteEnd": "task, every six hours.",
433
+ "adminGroups.promotions": "Promotions",
434
+ "adminGroups.promotionsLede": "A promotion rule moves a member into a group once they have earned it. The rules are here, and beneath them is what they would do right now — the same evaluation the scheduled task runs, with the writing turned off.",
435
+ "adminGroups.rules": "Rules",
436
+ "adminGroups.staff": "staff",
437
+ "adminGroups.system": "system",
438
+ "adminHome.allClear": "No posts held for approval, no open reports, and the board is up to date.",
439
+ "adminHome.counted": "Counted",
440
+ "adminHome.emptyTitle": "Nothing is waiting",
441
+ "adminHome.members": "Members",
442
+ "adminHome.newestMember": "Newest member: {username}",
443
+ "adminHome.noMembers": "No members yet",
444
+ "adminHome.noPending": "No posts held for approval and no open reports.",
445
+ "adminHome.open": "Open",
446
+ "adminHome.openReport": "open report",
447
+ "adminHome.openReports": "open reports",
448
+ "adminHome.postHeld": "post held for approval",
449
+ "adminHome.posts": "Posts",
450
+ "adminHome.postsHeld": "posts held for approval",
451
+ "adminHome.review": "Review",
452
+ "adminHome.sessionEnd": ".",
453
+ "adminHome.sessionFrom": " from {address}.",
454
+ "adminHome.system": "the system",
455
+ "adminHome.threads": "Threads",
456
+ "adminLayout.reauth": "It has been a while since you confirmed your password. Anything destructive will ask again.",
457
+ "adminLog.action": "Action",
458
+ "adminLog.everything": "Everything",
459
+ "adminLog.filter": "Filter",
460
+ "adminLog.from": "from {address}",
461
+ "adminNav.admin-antispam.blurb": "The honeypot, the question, the limits, and first-post moderation.",
462
+ "adminNav.admin-antispam.title": "Anti-spam",
463
+ "adminNav.admin-api-tokens.blurb": "Issue and revoke tokens, and see what each one may reach.",
464
+ "adminNav.admin-api-tokens.title": "API tokens",
465
+ "adminNav.admin-content-announcements.title": "Announcements",
466
+ "adminNav.admin-content-attachments.title": "Attachments",
467
+ "adminNav.admin-content.blurb": "Announcements, attachments, and the housekeeping around them.",
468
+ "adminNav.admin-content.title": "Content",
469
+ "adminNav.admin-forums.blurb": "The tree, each forum’s options, and the permission matrix.",
470
+ "adminNav.admin-forums.title": "Forums",
471
+ "adminNav.admin-groups-memberships.title": "Mass membership",
472
+ "adminNav.admin-groups-promotions.title": "Promotions",
473
+ "adminNav.admin-groups.blurb": "What each group allows, promotions, and mass membership changes.",
474
+ "adminNav.admin-groups.title": "Groups",
475
+ "adminNav.admin-log.blurb": "Every administrative and moderation action, with who and from where.",
476
+ "adminNav.admin-log.title": "Admin log",
477
+ "adminNav.admin-plugins.blurb": "What is installed, what it may do, and what has been failing.",
478
+ "adminNav.admin-plugins.title": "Plugins",
479
+ "adminNav.admin-security.blurb": "Sign-ins, refusals, and what members changed about how they get in.",
480
+ "adminNav.admin-security.title": "Sign-in activity",
481
+ "adminNav.admin-settings.blurb": "Every setting this build has, grouped and searchable.",
482
+ "adminNav.admin-settings.title": "Board settings",
483
+ "adminNav.admin-system.blurb": "Scheduled tasks, the search index, caches, and the build.",
484
+ "adminNav.admin-system.title": "System",
485
+ "adminNav.admin-themes.blurb": "Installed themes, their tokens, and this board’s overrides.",
486
+ "adminNav.admin-themes.title": "Themes",
487
+ "adminNav.admin-users-mail.title": "Mass mail",
488
+ "adminNav.admin-users-prune.title": "Prune members",
489
+ "adminNav.admin-users.blurb": "Find an account, change it, merge or prune, or mail the board.",
490
+ "adminNav.admin-users.title": "Users",
491
+ "adminNav.admin.blurb": "What is waiting, the board at a glance, and the latest activity.",
492
+ "adminNav.admin.title": "Overview",
493
+ "adminNav.plugin.blurb": "Every screen {name} adds to the panel.",
494
+ "adminPanel.badge.formats": "PNG, JPEG, WebP or SVG, up to {maxKib} KiB. The contents decide the format, not the file name.",
495
+ "adminPanel.badge.labelSr": "{label} badge",
496
+ "adminPanel.badge.noBadge": "No badge",
497
+ "adminPanel.badge.removed": "Removed.",
498
+ "adminPanel.badge.upload": "Upload",
499
+ "adminPanel.branding.formats": "PNG, JPEG, WebP or SVG, up to {maxKib} KiB. The contents decide the format, not the file name. An SVG containing script is refused.",
500
+ "adminPanel.branding.nothing": "Nothing uploaded — the header shows the board’s name.",
501
+ "adminPanel.branding.removed": "Removed. The header is showing the board’s name again.",
502
+ "adminPanel.branding.saved": "Saved. The header is showing it now.",
503
+ "adminPanel.branding.upload": "Upload",
504
+ "adminPanel.enter": "Enter the control panel",
505
+ "adminPanel.idleNote": "The panel signs you out after {minutes} minutes of inactivity. Your board session is not affected.",
506
+ "adminPanel.leave": "Leave the control panel",
507
+ "adminPanel.mail.driverOverrides": "{name} is set in this deployment’s environment, which overrides everything below.",
508
+ "adminPanel.mail.driverUntilUnset": "The fields on this screen are stored but not used until {name} is unset and the board redeployed.",
509
+ "adminPanel.mail.reachesNobody": "— so password resets, registration confirmations and notification e-mail reach nobody.",
510
+ "adminPanel.mail.send": "Send a test message to me",
511
+ "adminPanel.mail.sending": "Sending…",
512
+ "adminPanel.mail.testNote": "Goes to the address on your own account, through the configuration the board has {saved} — so save any changes below first, or you will be testing the old one. A provider that rejects the message says why, and that message is shown here verbatim.",
513
+ "adminPanel.mail.testNoteSaved": "saved",
514
+ "adminPanel.mail.title": "How this board sends mail",
515
+ "adminPanel.password": "Password",
516
+ "adminPanel.plugin.advanced": " · advanced",
517
+ "adminPanel.plugin.disable": "Disable",
518
+ "adminPanel.plugin.empty": "empty",
519
+ "adminPanel.plugin.enable": "Enable",
520
+ "adminPanel.plugin.envInert": " · set by {name} in the environment — this box is inert",
521
+ "adminPanel.plugin.envOverrides": " · {name} overrides this when set",
522
+ "adminPanel.plugin.off": "off",
523
+ "adminPanel.plugin.on": "on",
524
+ "adminPanel.plugin.save": "Save settings",
525
+ "adminPanel.plugin.saved": "Saved. The plugin reads these on its next call.",
526
+ "adminPanel.plugin.secretFromEnvPlaceholder": "set by the environment",
527
+ "adminPanel.plugin.secretNotSetPlaceholder": "not set",
528
+ "adminPanel.plugin.secretSetPlaceholder": "set — leave blank to keep it",
529
+ "adminPanel.plugin.shipsAs": " · ships as {value}",
530
+ "adminPanel.reason.default": "Confirm your password. This is separate from your board session.",
531
+ "adminPanel.reason.expired": "Your control panel session has expired.",
532
+ "adminPanel.reason.reauth": "Confirm your password to continue. Some actions ask again even while you are signed in.",
533
+ "adminPanel.setting.advanced": "Advanced",
534
+ "adminPanel.setting.changed": "Changed",
535
+ "adminPanel.setting.clearStored": "Clear the stored value and go back to the default",
536
+ "adminPanel.setting.noMatches": "No settings match that search.",
537
+ "adminPanel.setting.save": "Save settings",
538
+ "adminPanel.setting.saved": "Saved, and the caches those settings declare have been cleared.",
539
+ "adminPanel.setting.unchanged": "Nothing was different, so nothing was written.",
540
+ "adminPanel.setting.unchangedPlaceholder": "Unchanged",
541
+ "adminPanel.system.clearForumTree": "Clear the forum tree",
542
+ "adminPanel.system.clearNote": "The forum tree is the only thing the board caches globally under a name this screen can reach. Everything else is either resolved per request or cleared by the write that changed it.",
543
+ "adminPanel.system.cleared": "Cleared {tag}.",
544
+ "adminPanel.system.indexFinished": "{indexed} indexed. Every post on the board is searchable.",
545
+ "adminPanel.system.indexMore": "{indexed} indexed, {pending} still to go. Press again — it resumes where it stopped.",
546
+ "adminPanel.system.indexNext": "Index the next batch of {pending}",
547
+ "adminPanel.system.jobId": "Job id",
548
+ "adminPanel.system.jobIdHint": "One at a time. A job dead-letters after exhausting its attempts, so the reason is usually still true — retrying every one puts the same failures straight back.",
549
+ "adminPanel.system.nothingToIndex": "Nothing to index",
550
+ "adminPanel.system.pruneSessions": "Prune {prunable, plural, one {# expired session} other {# expired sessions}}",
551
+ "adminPanel.system.pruneTokens": "Prune expired tokens",
552
+ "adminPanel.system.recountResult": "{corrected, plural, one {# counter} other {# counters}} corrected in this batch. Press again to continue — it resumes where it stopped.",
553
+ "adminPanel.system.recountRun": "Run one recount batch",
554
+ "adminPanel.system.retried": "Back on the queue.",
555
+ "adminPanel.system.retry": "Retry",
556
+ "adminPanel.system.sessionsRemoved": "{removed} session rows removed.",
557
+ "adminPanel.system.tokensRemoved": "{removed} token rows removed.",
558
+ "adminPanel.title": "Control panel",
559
+ "adminPanel.token.copyNow": "Copy this now — it is not shown again and cannot be recovered.",
560
+ "adminPanel.token.expiresHint": "A whole number of days. Leave it empty for a token that never expires — anything else is refused rather than read as never.",
561
+ "adminPanel.token.expiresInDays": "Expires in (days)",
562
+ "adminPanel.token.expiresPlaceholder": "Leave empty for no expiry",
563
+ "adminPanel.token.issue": "Issue token",
564
+ "adminPanel.token.name": "Name",
565
+ "adminPanel.token.nameHint": "What this token is for, so a later reader knows what breaks if it is revoked.",
566
+ "adminPanel.token.namePlaceholder": "Status page poller",
567
+ "adminPanel.token.revoke": "Revoke",
568
+ "adminPanel.token.scopes": "Scopes",
569
+ "adminPanel.token.scopesHint": "A token can never do more than its owner may. Scopes narrow it further.",
570
+ "adminPanel.twoFactorCode": "Two-factor code",
571
+ "adminPanel.twoFactorCodeHint": "Only if your account asks for one. Leave it empty otherwise.",
572
+ "adminPluginDetail.allPlugins": "All plugins",
573
+ "adminPluginDetail.applied": "applied",
574
+ "adminPluginDetail.calls": "Calls",
575
+ "adminPluginDetail.dependsOn": "Needs {plugins} installed and upgraded first.",
576
+ "adminPluginDetail.every": "every {seconds}s",
577
+ "adminPluginDetail.failures": "Failures",
578
+ "adminPluginDetail.health": "Health",
579
+ "adminPluginDetail.healthHint": "Counted by this server since it started, not across the board and not since the plugin was installed. On a platform that recycles instances these numbers reset without warning, which is why they are a symptom to look at rather than a total to trust.",
580
+ "adminPluginDetail.hooks": "Hooks",
581
+ "adminPluginDetail.lastFailure": "Last failure in {hook}: {message}",
582
+ "adminPluginDetail.migrations": "Migrations",
583
+ "adminPluginDetail.migrationsHint": "Applied by community upgrade, in one transaction each, recorded as they run. There is no button here on purpose: schema changes belong to the deploy that shipped the code expecting them, and a panel that could run them out of band is a panel that can put a board’s schema ahead of its code.",
584
+ "adminPluginDetail.notApplied": "not applied",
585
+ "adminPluginDetail.pluginPageError": "This page failed to render. The plugin’s error is in the server log, and the rest of the panel is unaffected.",
586
+ "adminPluginDetail.pluginPageMetaAfter": "plugin.",
587
+ "adminPluginDetail.pluginPageMetaBefore": "Rendered by the",
588
+ "adminPluginDetail.regions": "Regions",
589
+ "adminPluginDetail.runUpgrade": "Run community upgrade before relying on this plugin — until then its code is running against a schema that does not have what it expects.",
590
+ "adminPluginDetail.runningNo": "no",
591
+ "adminPluginDetail.runningNoDisabled": "no — an administrator turned it off",
592
+ "adminPluginDetail.runningRegisteredDisabled": "registered, but disabled in community.config.ts",
593
+ "adminPluginDetail.runningUndefined": "a key with no definition",
594
+ "adminPluginDetail.screens": "{plugin} screens",
595
+ "adminPluginDetail.settings": "Settings",
596
+ "adminPluginDetail.settingsHint": "Stored under this plugin’s own namespace, so two plugins cannot collide and neither can reach a board setting.",
597
+ "adminPluginDetail.status": "Status",
598
+ "adminPluginDetail.tasksHintAfter": "screen with everything else.",
599
+ "adminPluginDetail.tasksHintBefore": "Registered in the board’s own task registry and run by the same tick. Their runs and failures are on the",
600
+ "adminPluginDetail.whatItAttaches": "What it attaches to",
601
+ "adminPluginDetail.yes": "yes",
602
+ "adminPlugins.configDisabled": "Disabled in community.config.ts. Turning it back on is a change to that file and a redeploy.",
603
+ "adminPlugins.details": "Details",
604
+ "adminPlugins.duplicateHint": "A duplicate key is refused when the configuration loads rather than at first use, so a board that boots has a registry that makes sense.",
605
+ "adminPlugins.hooksHint": "Only hooks something is listening on. The full list of every extension point is in the generated reference, and reproducing all ninety-one here would bury these. Plugins are listed in the order they run — priority first, then key — so where two of them change the same value, the last one named has the final say.",
606
+ "adminPlugins.installingHint": "A plugin is code, so it has to be in the build before it can run: pnpm add the package, add it to the plugins array in community.config.ts, and redeploy. The same three steps a theme takes, and for the same reason — a serverless bundle contains only what the bundler saw.",
607
+ "adminPlugins.ledeAfter": "so the bundler can see it and the compiler can check it. Nothing is discovered by scanning a directory at request time.",
608
+ "adminPlugins.ledeBefore": "Everything installable is named in",
609
+ "adminPlugins.migrationsUnknown": "This board could not be asked which plugin migrations have run, so the rows above do not say. On a board running on sample data there is no such table; on a real one, that is worth looking into.",
610
+ "adminPlugins.pendingMigrations": "{count, plural, one {# migration not applied — run community upgrade.} other {# migrations not applied — run community upgrade.}}",
611
+ "adminPlugins.serverDisabled": "Stopped by this server after repeated failures: {reason}",
612
+ "adminPlugins.uninstallHint": "There is no uninstall button, and that is deliberate: removing a plugin is pnpm remove, a line out of that file, and a redeploy. A button that dropped a plugin’s rows and left its code running would leave the board in a state neither installing nor removing produces.",
613
+ "adminSecurity.everything": "Everything",
614
+ "adminSecurity.filter": "Filter",
615
+ "adminSecurity.kind": "Kind",
616
+ "adminSecurity.lede": "Every authentication event on this board, newest first: who signed in, what was refused, and what members changed about how they get in. Separate from the admin log, which records what was done once somebody was already inside.",
617
+ "adminSecurity.member": "member {id}",
618
+ "adminSecurity.noAccount": "no account named",
619
+ "adminSettings.advancedShown": " Advanced settings are shown.",
620
+ "adminSettings.configureMail": "configure mail",
621
+ "adminSettings.configureMailEnd": ", which takes effect without a redeploy and has a button to prove it works.",
622
+ "adminSettings.environmentAddressAfterUrl": ", from ",
623
+ "adminSettings.environmentAddressBefore": "The board’s address is",
624
+ "adminSettings.environmentAddressEnd": " in this deployment’s environment. It overrides the “Board address” field below, which is stored but not read until APP_URL is unset and the board redeployed.",
625
+ "adminSettings.environmentMailBefore": "complete the",
626
+ "adminSettings.environmentMailBetween": "variables in this deployment’s environment and redeploy —",
627
+ "adminSettings.environmentMailEnd": "is set, so it overrides the mail settings screen.",
628
+ "adminSettings.fixActivationAfter": ", or",
629
+ "adminSettings.fixActivationBefore": "Either set the activation method to",
630
+ "adminSettings.fixActivationBetween": "or",
631
+ "adminSettings.hideAdvanced": "Hide advanced",
632
+ "adminSettings.lede": "Every setting this build has, with what it does. A value equal to its default is not stored, so changing a default in a later release reaches a board that never touched it.",
633
+ "adminSettings.matchCount": "{count, plural, one {# match} other {# matches}} for “{query}”, across every group.",
634
+ "adminSettings.noAddress": "Every link the board sends is built from it, so password resets and confirmations arrive carrying no link at all — they are polite and useless. Feeds and canonical URLs fall back to a localhost address. Set “Board address” below.",
635
+ "adminSettings.searchPlaceholder": "Search every group by name or description",
636
+ "adminSettings.settingCount": "{count, plural, one {# setting} other {# settings}} in {group}.",
637
+ "adminSettings.showAdvanced": "Show {count} advanced",
638
+ "adminSettings.thisGroup": "this group",
639
+ "adminSystem.activationAccounts": "Accounts already stuck at “awaiting activation” can be activated by hand from the member screen.",
640
+ "adminSystem.activationMethod": " · activation method:",
641
+ "adminSystem.activationProblem": "Registration is set to {method}, so every new account waits for a confirmation link — and this board sends no mail: {summary}. Password reset is silently failing for the same reason.",
642
+ "adminSystem.attachments": "{count, plural, one {# attachment} other {# attachments}}",
643
+ "adminSystem.boardMailAfter": "— no redeploy needed — or set the activation method to",
644
+ "adminSystem.boardMailBefore": "Set it up on the",
645
+ "adminSystem.boardMailOr": "or",
646
+ "adminSystem.boardSettings": "board settings",
647
+ "adminSystem.changeMailBefore": "Change it — and send a test message to prove it works — on the",
648
+ "adminSystem.changeMailEnd": ".",
649
+ "adminSystem.configuredFrom": " · configured from",
650
+ "adminSystem.deadLettered": "{count} dead-lettered",
651
+ "adminSystem.environment": "the environment",
652
+ "adminSystem.environmentMailBefore": "Mail is configured from this deployment’s environment, so it has to be fixed there: complete the",
653
+ "adminSystem.environmentMailBetween": "variables and redeploy, or unset",
654
+ "adminSystem.environmentMailEnd": "to configure mail on the board instead.",
655
+ "adminSystem.mail": "Mail",
656
+ "adminSystem.mailDoesNotSend": "— nothing this board sends reaches anybody.",
657
+ "adminSystem.mailSchedule": "Notification and mass mail leave on the tick above, so a stopped scheduler is also a board that sends none of them. Verification and password-reset links are sent as the request happens and do not wait for it.",
658
+ "adminSystem.maintenance": "Maintenance",
659
+ "adminSystem.maintenanceHint": "Each of these is bounded to one batch. Nothing here destroys anything an operator would want back: expired sessions no longer authenticate anybody, expired tokens can no longer be used, and a cleared cache is a copy of data that still exists.",
660
+ "adminSystem.members": "{count, plural, one {# member} other {# members}}",
661
+ "adminSystem.neverRun": "never run",
662
+ "adminSystem.noTasks": "No tasks are registered. A build registers a task only when it has a worker that can genuinely do the work, so an absent one means the feature behind it is not wired up on this deployment.",
663
+ "adminSystem.posts": "{count, plural, one {# post} other {# posts}}",
664
+ "adminSystem.queuedJobs": "{count, plural, one {# job waiting} other {# jobs waiting}}",
665
+ "adminSystem.recount": "Recount & rebuild",
666
+ "adminSystem.recountHint": "Counters are denormalised, so they can drift. The recount walks the content and corrects them in bounded batches, keeping its phase and cursor in the database — so it resumes where it stopped rather than starting over, which is what makes it finish at all on a large board.",
667
+ "adminSystem.recountProgress": "{id}: phase {phase}, cursor {cursor}, {passes, plural, one {# complete pass} other {# complete passes}}, {corrected} corrected",
668
+ "adminSystem.sample": "This board is running on in-memory sample data, so it has no scheduler and nothing to maintain.",
669
+ "adminSystem.schedulerStopped": "Nothing is broken and nothing is lost — the tasks are written to catch up, so they will work through the backlog once it runs again. Check that whatever invokes the scheduled endpoint is still configured and still authorised.",
670
+ "adminSystem.schedulerStoppedAfter": ", digests and notification emails are not sent, counters drift, uploads that failed to process are not retried, and queued mail sits in the queue.",
671
+ "adminSystem.schedulerStoppedBefore": "Every task is overdue, which means the tick is not firing at all. While this is true:",
672
+ "adminSystem.schedulerStoppedStrong": "bans do not expire",
673
+ "adminSystem.searchIndexHint": "A post is indexed when it is written or edited, so this is only ever a backfill — an existing board adopting search, or one whose index was invalidated. It resumes by construction: the batch is “posts with no index entry”, a set that only shrinks, so an interrupted run costs nothing and a repeated one does nothing.",
674
+ "adminSystem.searchIndexIndexed": "{count} indexed",
675
+ "adminSystem.searchIndexPending": "{count} not yet searchable",
676
+ "adminSystem.task.attachmentsSweep.description": "Deletes objects in the file store that nothing owns, and fails uploads whose re-encoding never finished. An object key is recorded before its bytes are written and forgotten when a row takes ownership, so what this collects is exactly what a crash between those two steps left behind — a question that is an indexed query here and a full bucket listing anywhere else. Purely subtractive, and bounded by a grace period, so an upload in flight is never collected out from under itself.",
677
+ "adminSystem.task.attachmentsSweep.title": "Collect abandoned attachment files",
678
+ "adminSystem.task.avatarsSweep.description": "Marks avatar uploads whose re-encode never finished, so the member is told to try again rather than left looking at a spinner that is not there. Separate from the attachment sweep because it acts on users rather than on the object ledger, and because an operator asking why an avatar is stuck should not have to read a task about attachments. Purely corrective, and safe to run twice.",
679
+ "adminSystem.task.avatarsSweep.title": "Fail unfinished avatar uploads",
680
+ "adminSystem.task.bansExpire.description": "Lifts bans whose expiry has passed, restoring each user to the group they held when banned. Acts on outstanding state rather than on what expired since the last run, so a skipped day costs a delay and nothing else, and a doubled tick lifts nothing twice.",
681
+ "adminSystem.task.bansExpire.title": "Expire temporary bans",
682
+ "adminSystem.task.countersReconcile.description": "Recomputes forum and thread counters from source rows. Counters are maintained incrementally on the write path for speed; this is the safety net that repairs drift from a crashed request or a bad import. Idempotent by construction — it writes a computed truth, not a delta.",
683
+ "adminSystem.task.countersReconcile.title": "Reconcile denormalised counters",
684
+ "adminSystem.task.groupsExpire.description": "Deletes secondary group memberships whose expiry has passed and bumps the permission version so derived caches follow. Actor assembly already excludes a lapsed row, so access ended on time regardless — this tidies the table rather than enforcing the boundary, and a doubled tick deletes nothing twice.",
685
+ "adminSystem.task.groupsExpire.title": "Expire timed group memberships",
686
+ "adminSystem.task.outboxRelay.description": "Moves committed events from the outbox onto the queue. Runs most frequently because user-visible side effects (notifications, search indexing) wait on it.",
687
+ "adminSystem.task.outboxRelay.title": "Relay domain events",
688
+ "adminSystem.task.postsRenderBackfill.description": "Rewrites the stored HTML of posts rendered by an older version of the renderer, and converts any body still stored as BBCode. A stale render is rendered live on read, so this never gates correctness — it stops a renderer change, or an import that wrote none, from making every thread page pay for it. Idempotent, and its own progress marker is the row.",
689
+ "adminSystem.task.postsRenderBackfill.title": "Re-render stale post bodies",
690
+ "adminSystem.task.promotionsApply.description": "Moves users into groups whose promotion criteria they now meet. Evaluates current post counts and registration age rather than tracking thresholds crossed, so a missed run catches up on the next tick.",
691
+ "adminSystem.task.promotionsApply.title": "Apply group promotions",
692
+ "adminSystem.task.queueDrain.description": "Executes due jobs. Bounded per run: a large backlog is drained across several ticks rather than risking a function timeout mid-job. Stops between jobs when its budget is spent, handing back the jobs it did not reach.",
693
+ "adminSystem.task.queueDrain.title": "Process queued jobs",
694
+ "adminSystem.task.rateLimitsPrune.description": "Drops anti-spam counters whose window has passed. They are bookkeeping and grow with traffic rather than with content, so nothing is lost and a busy board would otherwise keep a row per member per hour forever.",
695
+ "adminSystem.task.rateLimitsPrune.title": "Prune rate-limit counters",
696
+ "adminSystem.task.searchReindex.description": "Writes the search document for posts that were never indexed, or were indexed under an older definition of it. The write path indexes every post it creates, so this is only ever a catch-up: an import, a seeded board, a board adopting search, or a release that changed what the document holds.",
697
+ "adminSystem.task.searchReindex.title": "Build the search index for posts that have none",
698
+ "adminSystem.task.sessionsPrune.description": "Deletes sessions past the idle timeout. Purely subtractive, so running it twice removes nothing extra.",
699
+ "adminSystem.task.sessionsPrune.title": "Prune idle sessions",
700
+ "adminSystem.task.statsRollup.description": "Recomputes the board totals shown on the index and raises the “most ever online” record when the current count has beaten it. The totals are computed here rather than per page view because the member count is a count of users, and the index is the most-requested page on the board. The page shows when this last ran, so a number ten minutes old is honest rather than wrong. Writes a computed truth, not a delta, so a skipped tick costs freshness and a doubled one costs nothing.",
701
+ "adminSystem.task.statsRollup.title": "Roll up board statistics",
702
+ "adminSystem.task.subscriptionsDigest.description": "Sends the daily and weekly digests that are due. The clock is per member and per cadence rather than per run, so somebody who subscribed on Sunday gets their first weekly digest a week later — not at whatever moment the board tick happened to fire. Hourly, because a digest that is due is a query that finds nobody most of the time, and asking often is what keeps “daily” within an hour of the same time each day.",
703
+ "adminSystem.task.subscriptionsDigest.title": "Send subscription digests",
704
+ "adminSystem.task.subscriptionsInstant.description": "Tells members who follow a thread or forum “as it happens” about posts that have arrived since they were last told. Runs on the shortest interval the scheduler has, which is what “instant” means here: fanning out inside the posting request would put an unbounded loop — one permission check per subscriber — on the board’s hottest write, and couple posting to the mail provider being up. Each subscription carries a watermark, so a skipped tick delays a notification and never loses one — which is also what lets it stop between members when its budget is spent.",
705
+ "adminSystem.task.subscriptionsInstant.title": "Notify subscribers",
706
+ "adminSystem.task.tokensPrune.description": "Clears spent activation and password-reset tokens.",
707
+ "adminSystem.task.tokensPrune.title": "Prune expired tokens",
708
+ "adminSystem.task.viewsFlush.description": "Applies buffered view counts to their threads. Views are buffered on the write path so a busy thread does not rewrite the row behind the listing index on every page view; this is where they land. Bounded, and a skipped run only delays the numbers.",
709
+ "adminSystem.task.viewsFlush.title": "Flush buffered thread views",
710
+ "adminSystem.task.warningsExpire.description": "Recomputes the points total of every member whose cached total still counts a warning that has passed its expiry date, and re-evaluates the restriction their level implies — which is how a suspension ends when the warning behind it ages out. The live-warning predicate already excludes an expired row, so this corrects the cache rather than creating truth: a board whose tick has been down still reports honest totals the moment anything recalculates.",
711
+ "adminSystem.task.warningsExpire.title": "Expire warnings",
712
+ "adminSystem.task.webhooksDeliver.description": "Sends pending webhook deliveries to their subscribers, then records each verdict: delivered, retried with backoff, or dead-lettered.",
713
+ "adminSystem.task.webhooksDeliver.title": "Deliver queued webhooks",
714
+ "adminSystem.taskFailures": "{count, plural, one {# failure in a row} other {# failures in a row}}",
715
+ "adminSystem.taskInterval": "every {seconds}s",
716
+ "adminSystem.taskLastRun": "last ran {time}",
717
+ "adminSystem.taskRunFailed": "failed",
718
+ "adminSystem.taskRunOk": "ok",
719
+ "adminSystem.taskStatus.disabled": "disabled",
720
+ "adminSystem.taskStatus.failing": "failing",
721
+ "adminSystem.taskStatus.healthy": "healthy",
722
+ "adminSystem.taskStatus.late": "late",
723
+ "adminSystem.taskStatus.never-run": "never run",
724
+ "adminSystem.taskStatus.stale": "stale",
725
+ "adminSystem.tasksFailing": "{count, plural, one {# task is failing repeatedly — running, and losing. The log below says why.} other {# tasks are failing repeatedly — running, and losing. The log below says why.}}",
726
+ "adminSystem.tasksOverdue": "{count, plural, one {# task is overdue by several of its own intervals.} other {# tasks are overdue by several of their own intervals.}}",
727
+ "adminSystem.threads": "{count, plural, one {# thread} other {# threads}}",
728
+ "adminSystem.volumes": "Volumes",
729
+ "adminTheme.changes.allSaved": "— all of them saved, and live on the board now.",
730
+ "adminTheme.changes.cssUnsaved": "{name} has unsaved edits. It is not painted in the live sample above — press “Preview without saving” to see it applied.",
731
+ "adminTheme.changes.discardAll": "Discard unsaved changes",
732
+ "adminTheme.changes.live": "Live",
733
+ "adminTheme.changes.notSavedYet": "{count, plural, one {# is not saved yet} other {# are not saved yet}}",
734
+ "adminTheme.changes.nothingOverridden": "Nothing is overridden: this theme is exactly as it ships. Every value below is the theme’s own.",
735
+ "adminTheme.changes.ofWhich": ", of which",
736
+ "adminTheme.changes.overriddenAcross": "overridden across {count, plural, one {# token} other {# tokens}}",
737
+ "adminTheme.changes.stillPainting": "— the board is still painting the left-hand value.",
738
+ "adminTheme.changes.title": "What you are changing",
739
+ "adminTheme.changes.undoToSaved": "Undo — back to the saved value",
740
+ "adminTheme.changes.undoToTheme": "Undo — leave it as the theme has it",
741
+ "adminTheme.changes.unsavedCleared": "Unsaved — back to the theme’s",
742
+ "adminTheme.changes.valueCount": "{count, plural, one {# value} other {# values}}",
743
+ "adminTheme.close": "Close",
744
+ "adminTheme.contrast.failIntro": "Too little contrast: {pair} —",
745
+ "adminTheme.contrast.needs": " (needs {required}:1)",
746
+ "adminTheme.contrast.okIntro": "Contrast: {pair} —",
747
+ "adminTheme.css.hint": "Appended after the theme’s own styles. {import}, {url} and a closing style tag are refused — those are how a stylesheet stops being a stylesheet.",
748
+ "adminTheme.css.hintDefault": "This is the board’s default theme, so what you write here goes into the page unscoped: it applies to every member, including one who has picked another theme. Rules meant for this theme alone belong on a theme that is not the default.",
749
+ "adminTheme.css.hintScoped": "This theme is not the board default, so what you write here is nested under its own selector and stops applying the moment a member picks a different theme; a rule aimed at {root} will not match there, so target {body} or a class instead.",
750
+ "adminTheme.css.label": "Custom CSS",
751
+ "adminTheme.editor.saved": "Saved. The board is rendering these values now.",
752
+ "adminTheme.find.changedOnly": "Only the {count, plural, one {# token} other {# tokens}} this board has changed",
753
+ "adminTheme.find.label": "Find a token",
754
+ "adminTheme.find.nothingOverridden": "Nothing is overridden yet.",
755
+ "adminTheme.find.placeholder": "button, locked, primary…",
756
+ "adminTheme.find.shownCount": "{shown} of {total} shown",
757
+ "adminTheme.group.changedCount": "{count} changed",
758
+ "adminTheme.group.tokenCount": "{count, plural, one {# token} other {# tokens}}",
759
+ "adminTheme.import.done": "Imported. Every override in the file is now this board’s.",
760
+ "adminTheme.import.hint": "Replaces every override this board has. The key inside the file is ignored — copying a look from another board is what this is for.",
761
+ "adminTheme.import.label": "Paste an exported theme",
762
+ "adminTheme.import.submit": "Import",
763
+ "adminTheme.legibility.allPass": "Every pair the board paints clears its WCAG AA threshold.",
764
+ "adminTheme.legibility.alreadyLike": "· already like this on the board",
765
+ "adminTheme.legibility.blurb": "Every pair of colours the board actually puts on top of each other, measured against WCAG AA — 4.5:1 for text, 3:1 for a focus ring or a field’s edge. Measured from the form, so it moves as you do. A value this screen cannot read as a colour — {colorMix}, a {var}, an alpha channel — is reported as not measurable rather than as a pass.",
766
+ "adminTheme.legibility.everyPairIn": "Every pair measured, in {scheme}",
767
+ "adminTheme.legibility.notMeasurable": "not measurable",
768
+ "adminTheme.legibility.on": "on",
769
+ "adminTheme.legibility.passCount": "{passing} of {total} pass AA",
770
+ "adminTheme.legibility.ratioNeeds": "{ratio} — needs {required}:1",
771
+ "adminTheme.legibility.title": "Can it be read?",
772
+ "adminTheme.legibility.unknownCount": ", {count} not measurable",
773
+ "adminTheme.nothingToSave": "Nothing to save — the board is painting what is in this form.",
774
+ "adminTheme.oklch.adjust": "Adjust {describes}",
775
+ "adminTheme.oklch.adjustColour": "Adjust this colour",
776
+ "adminTheme.oklch.chroma": "Chroma",
777
+ "adminTheme.oklch.clear": "Clear, and use the value it ships with",
778
+ "adminTheme.oklch.gamut": "No ordinary screen can show this colour — the swatch is the closest it can manage. Lower the chroma until it stops changing.",
779
+ "adminTheme.oklch.hideSliders": "Hide the colour sliders",
780
+ "adminTheme.oklch.hideSlidersFor": "Hide the sliders for {describes}",
781
+ "adminTheme.oklch.hue": "Hue",
782
+ "adminTheme.oklch.lightness": "Lightness",
783
+ "adminTheme.palette.changed": "changed by this board",
784
+ "adminTheme.palette.unsaved": "changed, not saved yet",
785
+ "adminTheme.presets.blurb": "Sets the accent, its hover step, the text on it and the focus ring, for both schemes at once — the four tokens that brand a board whose palette is otherwise colourless. The board ships with {name}; pressing it again puts back the shipped accent after trying another. Nothing is saved until you press Save.",
786
+ "adminTheme.presets.title": "Brand palettes",
787
+ "adminTheme.preview.blurb": "Painted from the form as you type — nothing here has been saved. Both schemes are shown because they are one decision: a colour that works on white often disappears on black. Custom CSS is not painted here; “Preview without saving” includes it.",
788
+ "adminTheme.preview.clickNote": "{strong} to open the token that paints it — the swatches beside it do the same thing from the keyboard.",
789
+ "adminTheme.preview.clickNoteStrong": "Click anything in the sample",
790
+ "adminTheme.preview.scene.controls.blurb": "Buttons, fields, badges and the moderation queue’s three states.",
791
+ "adminTheme.preview.scene.controls.title": "Controls",
792
+ "adminTheme.preview.scene.forums.blurb": "Categories, forum rows and their read state — the board’s front page.",
793
+ "adminTheme.preview.scene.forums.title": "Forum list",
794
+ "adminTheme.preview.scene.thread.blurb": "Posts, member names by group, and the tints behind a highlighted or held post.",
795
+ "adminTheme.preview.scene.thread.title": "A thread",
796
+ "adminTheme.preview.sceneGroup": "Which part of the board to sample",
797
+ "adminTheme.preview.title": "Live sample",
798
+ "adminTheme.previewWithoutSaving": "Preview without saving",
799
+ "adminTheme.reset.done": "Reset. The board looks exactly as the theme ships.",
800
+ "adminTheme.reset.submit": "Reset to the theme’s own values",
801
+ "adminTheme.sample.adminMeta": "Administrator · 5,391 posts · a moment ago",
802
+ "adminTheme.sample.announcements": "Announcements",
803
+ "adminTheme.sample.archive": "The archive",
804
+ "adminTheme.sample.awaitingApproval": "Awaiting approval",
805
+ "adminTheme.sample.bannedMeta": "Banned · held for a moderator",
806
+ "adminTheme.sample.boardName": "Kestrel Board",
807
+ "adminTheme.sample.breadcrumb": "Kestrel Board → General discussion → {title}",
808
+ "adminTheme.sample.category": "General discussion",
809
+ "adminTheme.sample.closedToNewPosts": "Closed to new posts",
810
+ "adminTheme.sample.delete": "Delete",
811
+ "adminTheme.sample.fieldNote": "A field’s edge is darker than a rule, and the outline is what focus looks like.",
812
+ "adminTheme.sample.heldPost": "A post the spam controls are holding, visible to staff.",
813
+ "adminTheme.sample.hovered": "Hovered",
814
+ "adminTheme.sample.hoveredRow": "A hovered row or menu item, with the text that sits on it.",
815
+ "adminTheme.sample.introductions": "Introductions",
816
+ "adminTheme.sample.lastPostAdmin": "Last post by {name}, an hour ago",
817
+ "adminTheme.sample.lastPostMod": "Last post by {name}, yesterday",
818
+ "adminTheme.sample.lockedThread": "Closed: the old rules thread",
819
+ "adminTheme.sample.moderationQueue": "Moderation queue",
820
+ "adminTheme.sample.movedThread": "Moved to Off-topic",
821
+ "adminTheme.sample.ordinaryLink": "ordinary link",
822
+ "adminTheme.sample.ownPost": "Your own posts carry a gentle tint so you can find yourself in a long thread. An {link} sits in the flow of a sentence.",
823
+ "adminTheme.sample.permalinkNote": "The permalink you followed lands on this post, so it is tinted. Quoted code keeps the board’s monospace face:",
824
+ "adminTheme.sample.pinned": "Pinned",
825
+ "adminTheme.sample.pinnedThread": "Read this first",
826
+ "adminTheme.sample.postReply": "Post reply",
827
+ "adminTheme.sample.previewButton": "Preview",
828
+ "adminTheme.sample.queueApproved": "18 approved",
829
+ "adminTheme.sample.queueDeleted": "1 deleted",
830
+ "adminTheme.sample.queueRejected": "2 rejected",
831
+ "adminTheme.sample.queueWaiting": "3 waiting",
832
+ "adminTheme.sample.signedInAs": "Signed in as ada",
833
+ "adminTheme.sample.supermodMeta": "Super moderator · 2,048 posts · today",
834
+ "adminTheme.sample.threadCount": "{count, plural, one {# thread} other {# threads}}",
835
+ "adminTheme.sample.threadTitle": "Where should the pier go?",
836
+ "adminTheme.sample.threadTitleLabel": "Thread title",
837
+ "adminTheme.save": "Save",
838
+ "adminTheme.saveChanges": "Save {count, plural, one {# change} other {# changes}}",
839
+ "adminTheme.scheme.both": "Both schemes",
840
+ "adminTheme.scheme.dark": "Dark",
841
+ "adminTheme.scheme.light": "Light",
842
+ "adminTheme.state.customise": "Customise",
843
+ "adminTheme.state.customiseFor": "Customise {title}",
844
+ "adminTheme.state.makeDefault": "Make default",
845
+ "adminTheme.state.makeDefaultFor": "Make {title} the default",
846
+ "adminTheme.state.turnOff": "Turn off",
847
+ "adminTheme.state.turnOffFor": "Turn {title} off",
848
+ "adminTheme.state.turnOn": "Turn on",
849
+ "adminTheme.state.turnOnFor": "Turn {title} on",
850
+ "adminTheme.token.describes": "{label}, {scheme}",
851
+ "adminTheme.token.overridden": "Overridden by this board.",
852
+ "adminTheme.token.replaces": "Replaces: {value}",
853
+ "adminTheme.token.themesOwn": "Theme’s own: {value}",
854
+ "adminTheme.token.unsaved": "Unsaved",
855
+ "adminTheme.token.usingOwn": "Using the theme’s own value.",
856
+ "adminTheme.unsavedChanges": "{count, plural, one {# unsaved change} other {# unsaved changes}}. Nothing reaches the board until you save.",
857
+ "adminTheme.useThemesValue": "Use the theme’s value",
858
+ "adminTheme.validated.blurb": "Rendered by the board from values it has validated exactly as a save would, custom CSS included.",
859
+ "adminTheme.validated.title": "Validated preview",
860
+ "adminThemes.all": "All themes",
861
+ "adminThemes.buildMeta": "The board falls back to this theme’s components when nothing else is chosen, so it is what a new visitor sees.",
862
+ "adminThemes.buildsOwn": "The build’s own",
863
+ "adminThemes.dark": "Dark",
864
+ "adminThemes.darkHint": "Used when the reader is in dark mode.",
865
+ "adminThemes.default": "Default",
866
+ "adminThemes.defaultLede": " · what a member who has chosen nothing sees",
867
+ "adminThemes.deployAfterAdd": "the package, add a line to",
868
+ "adminThemes.deployAfterConfig": ", redeploy.",
869
+ "adminThemes.deployAfterExist": ". A theme is code, so it has to be in the build:",
870
+ "adminThemes.deployBefore": "What is still a deploy is which themes",
871
+ "adminThemes.deployEnd": "in that file decides which theme the board falls back to when its table says nothing — everything else is on this page.",
872
+ "adminThemes.disabledLede": " · turned off, so nobody can choose it",
873
+ "adminThemes.enabledLede": " · members may choose it",
874
+ "adminThemes.export": "Export",
875
+ "adminThemes.exportHint": "Everything this board has changed, as a document another board can import. It carries no timestamp and no board identity — only the overrides themselves.",
876
+ "adminThemes.import": "Import",
877
+ "adminThemes.lede": "Every theme this build contains. Turn one on and members can pick it from the appearance control at the foot of every page; the default is what a member who has picked nothing sees.",
878
+ "adminThemes.light": "Light",
879
+ "adminThemes.lightHint": "Used on a light page, and everywhere if there is no dark one.",
880
+ "adminThemes.logo": "Logo",
881
+ "adminThemes.logoHint": "Shown in the header instead of the board’s name. Two images, because one that reads on a white page usually disappears on a black one — upload only the light one and it is used in both. With none, the header shows the name, which is what it does today.",
882
+ "adminThemes.memberChoice": "What a member’s choice changes",
883
+ "adminThemes.memberMeta": "A member who picks this theme gets its components as well as these colours.",
884
+ "adminThemes.noChanges": "no changes — exactly as it ships",
885
+ "adminThemes.off": "Off",
886
+ "adminThemes.reset": "Reset",
887
+ "adminThemes.resetHint": "Removes every override, putting the board back to exactly what the theme ships. Take a copy of the export above first if you might want it back.",
888
+ "adminThemes.tokensOnlyAfter": "tokens is the exception, and is a deliberate one: it has no components to render, so picking it repaints the board and leaves the layout alone. That is how a board offers three looks without maintaining three sets of components.",
889
+ "adminThemes.tokensOnlyBefore": "A theme that ships",
890
+ "adminUser.accountState": "Account state",
891
+ "adminUser.accountStateHint": "Banning is below, and is not a state change.",
892
+ "adminUser.additionalGroupsSr": "Additional groups",
893
+ "adminUser.banLength": "Length in days",
894
+ "adminUser.banLengthHint": "Leave blank for a permanent ban. An expiring ban puts them back in the group they are in now, not in the default one.",
895
+ "adminUser.banMember": "Ban this member",
896
+ "adminUser.banPasswordNote": "You will be asked for your password again. This revokes their sessions immediately.",
897
+ "adminUser.banned": "Banned. Their sessions have been revoked.",
898
+ "adminUser.displayGroup": "Display group",
899
+ "adminUser.displayGroupHint": "Decides only the badge beside their name.",
900
+ "adminUser.email": "Email",
901
+ "adminUser.emailHint": "Changing this does not re-verify it, and does not tell the member.",
902
+ "adminUser.everyMember": "Every member with a verified address ({audience})",
903
+ "adminUser.liftBan": "Lift this ban",
904
+ "adminUser.lifted": "Lifted. They are back in the group they held when they were banned.",
905
+ "adminUser.mailPasswordNote": "You will be asked for your password again. An email cannot be unsent, and a mistake reaches everybody at once.",
906
+ "adminUser.mailQueuedAll": "Queued for all {count, plural, one {# member} other {# members}}. They will go out as the queue drains.",
907
+ "adminUser.mailQueuedMore": "{queued} queued so far, and there are more. Press again to continue.",
908
+ "adminUser.mergeInto": "Merge into {username} ({count, plural, one {# post} other {# posts}})",
909
+ "adminUser.mergeMore": "{count, plural, one {# post} other {# posts}} still to move. Press again — the run picks up where it stopped.",
910
+ "adminUser.mergeNote": "You will be asked for your password again. There is no undo: everything this account ever posted becomes {username}’s, its sessions are destroyed, and the account is closed.",
911
+ "adminUser.merged": "Merged. Everything now belongs to {username}, and this account has been closed.",
912
+ "adminUser.message": "Message",
913
+ "adminUser.messageHint": "Plain text. It is sent as written — there is no template and no unsubscribe link, so keep it to things every member needs to know.",
914
+ "adminUser.moveNextBatch": "Move the next batch",
915
+ "adminUser.primaryGroup": "Primary group",
916
+ "adminUser.primaryGroupHint": "Decides what they may do.",
917
+ "adminUser.primaryGroupRow": "{group} — their primary group, set above.",
918
+ "adminUser.pruneCloseCount": "Close {count, plural, one {# account} other {# accounts}}",
919
+ "adminUser.pruneCloseFirst500": "Close the first 500 accounts",
920
+ "adminUser.pruneFinished": "Finished. {count, plural, one {# account} other {# accounts}} closed in this batch, and none are left.",
921
+ "adminUser.pruneMore": "{pruned} closed, {remaining} still matching. Press again to continue.",
922
+ "adminUser.prunePasswordNote": "You will be asked for your password again. Accounts are closed rather than deleted, so a wrong date can be undone — but they disappear from the board immediately.",
923
+ "adminUser.publicReason": "Reason shown to them",
924
+ "adminUser.publicReasonHint": "Shown when they try to log in. Blank says only that the account is banned.",
925
+ "adminUser.queueMessage": "Queue this message",
926
+ "adminUser.queueNextBatch": "Queue the next batch",
927
+ "adminUser.sameAsPrimary": "— same as primary —",
928
+ "adminUser.saveAccount": "Save account",
929
+ "adminUser.saveGroups": "Save groups",
930
+ "adminUser.saveState": "Save state",
931
+ "adminUser.sendTo": "Send to",
932
+ "adminUser.sendToHint": "A group means members who hold it as their primary group or as an additional one. The number beside each audience is how many members it would reach right now.",
933
+ "adminUser.staffNote": "Staff note",
934
+ "adminUser.staffNoteHint": "Never shown to them. This is where the reasoning goes.",
935
+ "adminUser.state.active": "Active",
936
+ "adminUser.state.awaitingActivation": "Awaiting activation",
937
+ "adminUser.subject": "Subject",
938
+ "adminUser.username": "Username",
939
+ "adminUsers.account": "Account",
940
+ "adminUsers.accountDeleted": " · account deleted",
941
+ "adminUsers.accountsWouldClose": "{count, plural, one {# account would be closed} other {# accounts would be closed}}",
942
+ "adminUsers.active": "Active",
943
+ "adminUsers.additionalGroupsLede": "Groups held as well as the primary one. They grant in exactly the same way — a member gets the most permissive answer across all of them — so an extra group can only ever add.",
944
+ "adminUsers.addressNotRecorded": "an address that was not recorded",
945
+ "adminUsers.allMembers": "All members",
946
+ "adminUsers.andMore": "…and {count} more.",
947
+ "adminUsers.any": "— any —",
948
+ "adminUsers.attachments": "{count, plural, one {# attachment} other {# attachments}}",
949
+ "adminUsers.ban": "Ban",
950
+ "adminUsers.banned": "Banned",
951
+ "adminUsers.bannedStateLede": "This member is banned. Lift the ban below to change their state — flipping the column here would leave the ban record active.",
952
+ "adminUsers.clear": "Clear",
953
+ "adminUsers.deleted": "deleted",
954
+ "adminUsers.edit": "Edit",
955
+ "adminUsers.editLabel": "Edit {username}",
956
+ "adminUsers.emailUnverified": "email unverified",
957
+ "adminUsers.emailVerified": "email verified",
958
+ "adminUsers.find": "Find",
959
+ "adminUsers.group": "Group",
960
+ "adminUsers.inMemorySearch": "This board is running on in-memory sample data, so its members cannot be searched or edited.",
961
+ "adminUsers.keep": "Keep {username}",
962
+ "adminUsers.lastSeen": "last seen {time}",
963
+ "adminUsers.lastSeenFrom": ", last seen from {address}",
964
+ "adminUsers.lede": "Every criterion is combined, and every one is optional — an empty search is everybody. The filter is in the address bar, so this page can be bookmarked or handed to somebody else.",
965
+ "adminUsers.massMailContinues": "A campaign that stops half way is continued, never restarted — restarting would mail everybody a second time.",
966
+ "adminUsers.massMailLede": "Sends one message to every member of a group. It goes only to addresses the board has verified — an unverified address is as often a typo, or somebody else’s mailbox, as it is the member’s.",
967
+ "adminUsers.massMailNoUnsubscribe": "There is no unsubscribe link and no per-member opt-out, so this is for things every member needs to know rather than for anything promotional.",
968
+ "adminUsers.massMailQueued": "Nothing is sent immediately. Messages are queued and go out as the scheduled tick drains them.",
969
+ "adminUsers.memberLede": "#{id} · registered {registered}{lastSeen}{deleted}",
970
+ "adminUsers.memberMeta": "{posts} · {threads} · {reputation} reputation · {warnings} · {email}",
971
+ "adminUsers.memberSummary": "{email} · {group} · {posts} · {lastSeen}",
972
+ "adminUsers.merge": "Merge",
973
+ "adminUsers.mergeBlockedByBan": "One of these accounts is banned. A merge carries the ban record across, which would lock out an account nobody decided to ban — lift it first.",
974
+ "adminUsers.mergeDetailConflict": "Where both accounts had the same subscription, group or preference, the kept account’s wins.",
975
+ "adminUsers.mergeDetailContent": "Every post, thread, message, attachment, warning and report moves, including the names shown beside them.",
976
+ "adminUsers.mergeDetailRelations": "Ratings and relations between the two accounts are removed, because after a merge they would say somebody rated or ignored themselves.",
977
+ "adminUsers.mergeDetailSessions": "The losing account’s sessions and login tokens are destroyed, not moved — a merge is not a way to hand somebody a login.",
978
+ "adminUsers.mergeLede": "Fold this account into another one — for a member who registered twice, or a duplicate made by an importer.",
979
+ "adminUsers.mergeLink": "Merge {username} into another account →",
980
+ "adminUsers.mergePageLede": "{username} is the account that disappears. Everything it ever posted becomes the other account’s, and this one is closed. Check the direction before you press anything — there is no undo.",
981
+ "adminUsers.mergePreview": "{posts}, {threads}, {messages} and {attachments} would move from {from} to {to}.",
982
+ "adminUsers.mergeTitle": "Merge {username}",
983
+ "adminUsers.network": "Network",
984
+ "adminUsers.networkLede": "Registered from {registered}{lastSeen}. Only a prefix is stored, so these are networks rather than machines.",
985
+ "adminUsers.neverSeen": "never seen",
986
+ "adminUsers.noMatches": "No members match. An empty result from a filled-in filter is a real answer — check the spelling before widening it.",
987
+ "adminUsers.noOtherAccountMatches": "No other account matches “{username}”.",
988
+ "adminUsers.permanently": "permanently",
989
+ "adminUsers.posts": "{count, plural, one {# post} other {# posts}}",
990
+ "adminUsers.privateMessages": "{count, plural, one {# private message} other {# private messages}}",
991
+ "adminUsers.pruneLede": "Closes dormant accounts in batches. It will never touch anybody who has posted — including posts still held for approval or already removed — anybody in a staff group or any group carrying staff powers, any forum moderator, or a banned account. Those are exclusions rather than options, because closing one of them does damage a date filter cannot justify.",
992
+ "adminUsers.pruneMemberMeta": "— {email}, registered {date}",
993
+ "adminUsers.pruneNoMatches": "Nothing matches. Every account registered before that date has written something, is staff, moderates a forum, or is banned.",
994
+ "adminUsers.search": "Search",
995
+ "adminUsers.sharedNetwork": "{count, plural, one {# other account on the same network. A household, an office and a campus all look like this.} other {# other accounts on the same network. A household, an office and a campus all look like this.}}",
996
+ "adminUsers.shownToMember": "Shown to them: {reason}",
997
+ "adminUsers.staffNote": "Staff note: {reason}",
998
+ "adminUsers.state": "State",
999
+ "adminUsers.threads": "{count, plural, one {# thread} other {# threads}}",
1000
+ "adminUsers.until": "until",
1001
+ "adminUsers.username": "Username",
1002
+ "adminUsers.warningPoints": "{count, plural, one {# warning point} other {# warning points}}",
1003
+ "appearance.apply": "Apply",
1004
+ "appearance.scheme.dark": "Dark",
1005
+ "appearance.scheme.light": "Light",
1006
+ "appearance.scheme.system": "System",
1007
+ "appearance.schemeGroup": "Colour scheme",
1008
+ "appearance.section": "Appearance",
1009
+ "appearance.theme": "Theme",
1010
+ "authAction.acceptTerms": "Please read the {terms} and tick the box to accept it.",
1011
+ "authAction.codeReplayed": "That code has been used already. Wait for the next one.",
1012
+ "authAction.codeWrong": "That code is not right.",
1013
+ "authAction.resetRequested": "If an account exists for that email, a password reset link has been sent.",
1014
+ "authAction.secondFactorExpired": "That sign-in took too long to finish. Start again from the sign-in page.",
1015
+ "authAction.verificationResent": "If that address has an account waiting to be confirmed, a new link has been sent.",
1016
+ "authEvent.email_change_requested": "An e-mail change was requested",
1017
+ "authEvent.email_changed": "E-mail address changed",
1018
+ "authEvent.identity_linked": "A sign-in provider was linked",
1019
+ "authEvent.identity_unlinked": "A sign-in provider was unlinked",
1020
+ "authEvent.login": "Signed in",
1021
+ "authEvent.login_failed": "A sign-in was refused",
1022
+ "authEvent.logout": "Signed out",
1023
+ "authEvent.passkey_added": "A passkey was added",
1024
+ "authEvent.passkey_removed": "A passkey was removed",
1025
+ "authEvent.password_changed": "Password changed",
1026
+ "authEvent.password_reset": "Password reset",
1027
+ "authEvent.recovery_code_used": "A recovery code was used to sign in",
1028
+ "authEvent.recovery_codes_replaced": "Recovery codes replaced",
1029
+ "authEvent.second_factor_disabled": "Two-factor authentication turned off",
1030
+ "authEvent.second_factor_enabled": "Two-factor authentication turned on",
1031
+ "authEvent.second_factor_failed": "A wrong two-factor code was given",
1032
+ "authEvent.session_revoked": "A session was signed out",
1033
+ "authEvent.sessions_revoked": "Every other session was signed out",
1034
+ "authForm.email": "Email",
1035
+ "authForm.login.identifier": "Username or email",
1036
+ "authForm.login.password": "Password",
1037
+ "authForm.login.remember": "Keep me signed in",
1038
+ "authForm.login.submit": "Sign in",
1039
+ "authForm.or": "or",
1040
+ "authForm.passkey.cancelled": "That was cancelled, so nothing changed.",
1041
+ "authForm.passkey.confirm": "Confirm with a passkey instead",
1042
+ "authForm.passkey.failed": "That did not work. Try again.",
1043
+ "authForm.passkey.noneCreated": "No passkey was created.",
1044
+ "authForm.passkey.noneOffered": "No passkey was offered.",
1045
+ "authForm.passkey.signIn": "Sign in with a passkey",
1046
+ "authForm.passkey.waiting": "Waiting for your device…",
1047
+ "authForm.passwordHint": "{min, plural, one {At least # character.} other {At least # characters.}}",
1048
+ "authForm.register.challengeHint": "A question set by this board, to show you are not a script.",
1049
+ "authForm.register.honeypot": "Leave this field empty",
1050
+ "authForm.register.password": "Password",
1051
+ "authForm.register.submit": "Create account",
1052
+ "authForm.register.terms": "I have read and accept the {policy}.",
1053
+ "authForm.register.username": "Username",
1054
+ "authForm.register.usernameHint": "{min}–{max} characters: letters, numbers, and _ - .",
1055
+ "authForm.resend.submit": "Send another link",
1056
+ "authForm.reset.continue": "Continue to reset your password",
1057
+ "authForm.reset.submit": "Send reset link",
1058
+ "authForm.resetConfirm.confirm": "Confirm new password",
1059
+ "authForm.resetConfirm.password": "New password",
1060
+ "authForm.resetConfirm.submit": "Set new password",
1061
+ "authForm.secondFactor.cancel": "Cancel and sign in as somebody else",
1062
+ "authForm.secondFactor.code": "Code from your authenticator app",
1063
+ "authForm.secondFactor.recoveryHint": "Or one of the recovery codes you saved when you set this up.",
1064
+ "authForm.secondFactor.recoveryHintExhausted": "Or one of the recovery codes you saved when you set this up. You have none left — replace them from your account security page once you are in.",
1065
+ "authForm.secondFactor.submit": "Finish signing in",
1066
+ "authForm.sso.continue": "Continue with {provider}",
1067
+ "authForm.sso.lede": "Signing in this way tells that provider you are a member here, and the board learns the address they hold for you. Nothing else passes between them.",
1068
+ "authForm.sso.registerLede": "Registering this way creates an account here from the address that provider holds for you, and tells them you are a member. No password is set, and you can add one later.",
1069
+ "authLink.alreadyHaveAccount": "Already have an account?",
1070
+ "authLink.alreadyMember": "Already a member?",
1071
+ "authLink.backToSignIn": "Back to sign in",
1072
+ "authLink.createAccount": "Create an account",
1073
+ "authLink.forgotPassword": "Forgot your password?",
1074
+ "authLink.needConfirmation": "Need a new confirmation link?",
1075
+ "authLink.newHere": "New here?",
1076
+ "authLink.requestNewLink": "Request a new link",
1077
+ "authLink.signIn": "Sign in",
1078
+ "authMail.boardFallback": "the forum",
1079
+ "authMail.greeting": "Hello {username},",
1080
+ "authMail.linkHours": "The link is valid for {hours} hours and can be used once.",
1081
+ "authMail.linkMinutes": "The link is valid for {minutes} minutes and can be used once.",
1082
+ "authMail.reset.ignore": "If this was not you, ignore this message. Your password has not changed, and nothing happens until the link is used.",
1083
+ "authMail.reset.intro": "Somebody — we hope you — asked to reset the password for your account on {board}.",
1084
+ "authMail.reset.link": "Reset your password: {link}",
1085
+ "authMail.reset.noLink": "Open {board} and use the “forgot your password” form again once the board has its address configured; the link in this message could not be built.",
1086
+ "authMail.reset.subject": "Reset your password",
1087
+ "authMail.verify.ignore": "If you did not create this account, ignore this message. An unconfirmed account cannot be used.",
1088
+ "authMail.verify.intro": "An account was created for this address on {board}. It cannot be used until the address is confirmed.",
1089
+ "authMail.verify.link": "Confirm your address: {link}",
1090
+ "authMail.verify.noLink": "Open {board} and use the “resend confirmation” link on the sign-in page to get a working link.",
1091
+ "authMail.verify.subject": "Confirm your account",
1092
+ "authNotice.activated": "Your address is confirmed. You can sign in now.",
1093
+ "authNotice.already": "That account is already active. Sign in below.",
1094
+ "authNotice.confirmed": "Your address is confirmed. An administrator will review your account before you can sign in.",
1095
+ "authNotice.installed": "Your board is installed. Sign in with the administrator account you just created.",
1096
+ "authNotice.registered": "Account created. You can sign in now.",
1097
+ "authNotice.registrationClosed": "Registration is closed",
1098
+ "authNotice.registrationClosedLede": "This board is not taking new members at the moment. If you already have an account you can still sign in.",
1099
+ "authNotice.reset": "Your password has been changed. Sign in with your new password.",
1100
+ "authNotice.verifyFailed": "That confirmation link is no longer valid. Ask for a new one below.",
1101
+ "authRoute.passkey.attemptExpired": "That passkey attempt has expired. Start it again.",
1102
+ "authRoute.passkey.disabled": "Passkeys are not switched on for this board.",
1103
+ "authRoute.passkey.managedSignIns": "This board manages sign-ins for its members.",
1104
+ "authRoute.passkey.noneForAccount": "That account has no passkey to confirm with.",
1105
+ "authRoute.passkey.notForAccount": "That passkey does not belong to this account.",
1106
+ "authRoute.passkey.responseIncomplete": "That passkey response was incomplete.",
1107
+ "authRoute.passkey.responseUnreadable": "That passkey response could not be read.",
1108
+ "authRoute.passkey.signInBeforeAdding": "Sign in before adding a passkey.",
1109
+ "authRoute.passkey.signInExpired": "That sign-in took too long to finish. Start again.",
1110
+ "authRoute.resume.topLevel": "A session is resumed by opening the board, not by a subresource.",
1111
+ "authRoute.sso.completeTopLevel": "A sign-in is completed by opening the board, not by a subresource.",
1112
+ "authRoute.sso.startTopLevel": "A sign-in is started by opening this page, not by a subresource.",
1113
+ "authSsoHandOff.continue": "Continue to {provider}",
1114
+ "authSsoHandOff.message": "Sending you to {provider} to sign in.",
1115
+ "authSsoHandOff.title": "Continuing to {provider}",
1116
+ "board.contacts.buddies": "Buddies",
1117
+ "board.contacts.emptyBuddies": "Nobody yet. There is a link on every member’s profile.",
1118
+ "board.contacts.emptyIgnored": "Nobody.",
1119
+ "board.contacts.ignored": "Ignored",
1120
+ "board.contacts.ignoredHint": "Their posts are hidden behind a link rather than removed, so a thread still reads in order and its numbering is the same for everybody. They cannot send you private messages.",
1121
+ "board.contacts.lede": "Add somebody from their profile. {total} of {limit} used.",
1122
+ "board.contacts.message": "Message",
1123
+ "board.contacts.online": "Online",
1124
+ "board.contacts.onlineNow": "{count, plural, one {# online now} other {# online now}}",
1125
+ "board.forum.categoryDescription": "Forums in {title}.",
1126
+ "board.forum.description": "Discussions in {title}.",
1127
+ "board.forum.latest": "Latest",
1128
+ "board.forum.threadOrder": "Thread order",
1129
+ "board.forum.title": "Forum",
1130
+ "board.forum.topRated": "Top rated",
1131
+ "board.index.latestActivity": "Latest activity",
1132
+ "board.ip.both": "registered and last visited from this range",
1133
+ "board.ip.hint": "Finds accounts that share a stored address range with a member. The board never stores a full address, so this is evidence to follow up, not proof. Every lookup is recorded in the moderator log.",
1134
+ "board.ip.lastSeen": "last seen",
1135
+ "board.ip.lastVisit": "last visited from this range",
1136
+ "board.ip.matches": "Accounts sharing a range with {username}",
1137
+ "board.ip.memberId": "Member id",
1138
+ "board.ip.none": "none",
1139
+ "board.ip.ranges": "Ranges on record:",
1140
+ "board.ip.registration": "registered from this range",
1141
+ "board.ip.unknown": "unknown",
1142
+ "board.member.about": "About {username}",
1143
+ "board.member.addBuddy": "Add to buddy list",
1144
+ "board.member.allowed": "allowed",
1145
+ "board.member.ignore": "Ignore this member",
1146
+ "board.member.locked": "locked",
1147
+ "board.member.removeBuddy": "Remove from buddy list",
1148
+ "board.member.reputation": "Reputation",
1149
+ "board.member.signature": "Signature: {status}",
1150
+ "board.member.stopIgnoring": "Stop ignoring",
1151
+ "board.messages.emptyInbox": "No messages. When somebody writes to you, it will appear here.",
1152
+ "board.messages.emptySent": "You have not sent anything yet.",
1153
+ "board.messages.emptyTrash": "The trash is empty.",
1154
+ "board.messages.folders": "Message folders",
1155
+ "board.messages.full": "Your message store is full, so you cannot send or receive anything until you delete some. Emptying the trash frees space — messages in it still count.",
1156
+ "board.messages.new": "New",
1157
+ "board.messages.select": "Select “{subject}”",
1158
+ "board.modcp.forumsHint": "Busiest first. What you may do in each is on My forums.",
1159
+ "board.modcp.noAppointmentsHint": "You hold moderator permissions but are not assigned to any forum. Your group permissions still apply wherever they grant something.",
1160
+ "board.modcp.nothingWaiting": "Nothing is waiting",
1161
+ "board.modcp.nothingWaitingHint": "No posts held for approval and no open reports in the forums you moderate.",
1162
+ "board.modcp.open": "Open",
1163
+ "board.modcp.openReports": "{count, plural, one {# open report} other {# open reports}}",
1164
+ "board.modcp.pending": "{count, plural, one {post held for approval} other {posts held for approval}}",
1165
+ "board.modcp.report": "{count, plural, one {open report} other {open reports}}",
1166
+ "board.modcp.review": "Review",
1167
+ "board.modcp.waiting": "{count, plural, one {# waiting} other {# waiting}}",
1168
+ "board.moderation.alreadyHandled": "{count, plural, one {# had already been handled.} other {# had already been handled.}}",
1169
+ "board.moderation.approved": "{count, plural, one {Approved # item.} other {Approved # items.}}",
1170
+ "board.moderation.awaiting": "{count, plural, one {# item awaiting approval.} other {# items awaiting approval.}}",
1171
+ "board.moderation.notModerated": "{count, plural, one {# was in a forum you do not moderate.} other {# were in forums you do not moderate.}}",
1172
+ "board.moderation.nothingModerated": "You do not moderate any forums",
1173
+ "board.moderation.nothingModeratedHint": "Posts held for approval appear here once you are appointed to a forum, or given a group permission that moderates one.",
1174
+ "board.moderation.nothingWaiting": "Nothing is waiting",
1175
+ "board.moderation.nothingWaitingHint": "Every post held for approval in the forums you moderate has been dealt with.",
1176
+ "board.moderation.rejected": "{count, plural, one {Rejected # item.} other {Rejected # items.}}",
1177
+ "board.modlog.avatar.lock": "Locked an avatar",
1178
+ "board.modlog.avatar.unlock": "Unlocked an avatar",
1179
+ "board.modlog.inline.approve": "Approved a selection",
1180
+ "board.modlog.inline.delete": "Deleted a selection",
1181
+ "board.modlog.inline.lock": "Locked a selection",
1182
+ "board.modlog.inline.move": "Moved a selection",
1183
+ "board.modlog.inline.restore": "Restored a selection",
1184
+ "board.modlog.inline.stick": "Pinned a selection",
1185
+ "board.modlog.inline.unlock": "Unlocked a selection",
1186
+ "board.modlog.inline.unstick": "Unpinned a selection",
1187
+ "board.modlog.ipLookup": "Looked up an address",
1188
+ "board.modlog.moderation.approve": "Approved held content",
1189
+ "board.modlog.moderation.reject": "Rejected held content",
1190
+ "board.modlog.post.delete": "Deleted a post",
1191
+ "board.modlog.post.edit": "Edited a post they did not write",
1192
+ "board.modlog.post.restore": "Restored a post",
1193
+ "board.modlog.report.reject": "Rejected a report",
1194
+ "board.modlog.report.resolve": "Resolved a report",
1195
+ "board.modlog.signature.lock": "Locked a signature",
1196
+ "board.modlog.signature.unlock": "Unlocked a signature",
1197
+ "board.modlog.thread.copy": "Copied a thread",
1198
+ "board.modlog.thread.delete": "Deleted a thread",
1199
+ "board.modlog.thread.lock": "Locked a thread",
1200
+ "board.modlog.thread.merge": "Merged two threads",
1201
+ "board.modlog.thread.move": "Moved a thread",
1202
+ "board.modlog.thread.restore": "Restored a thread",
1203
+ "board.modlog.thread.split": "Split a thread",
1204
+ "board.modlog.thread.stick": "Pinned a thread",
1205
+ "board.modlog.thread.unlock": "Unlocked a thread",
1206
+ "board.modlog.thread.unstick": "Unpinned a thread",
1207
+ "board.modlog.warning.issue": "Issued a warning",
1208
+ "board.modlog.warning.revoke": "Revoked a warning",
1209
+ "board.newThread.closed": "This forum is closed to new threads.",
1210
+ "board.notifications.empty": "You have no notifications. When a moderator warns you, or a report you filed is closed, it will appear here.",
1211
+ "board.notifications.new": "New",
1212
+ "board.notifications.unread": "{count, plural, =0 {Nothing unread.} one {# unread.} other {# unread.}}",
1213
+ "board.notifications.view": "View",
1214
+ "board.online.invisible": "(invisible)",
1215
+ "board.online.record": "Most ever online: {count}",
1216
+ "board.plugin.failed": "This page failed to render. The error is in the server log, and the rest of the board is unaffected.",
1217
+ "board.reply.locked": "This thread is locked.",
1218
+ "board.reports.assignedTo": "Assigned to {username}",
1219
+ "board.reports.deletedAccount": "a deleted account",
1220
+ "board.reports.deletedMember": "a deleted member",
1221
+ "board.reports.dismissed": "Report dismissed.",
1222
+ "board.reports.message": "The reported message",
1223
+ "board.reports.messageDeleted": "This message has since been deleted by everybody who held it.",
1224
+ "board.reports.messageFrom": "The reported message, from {username}",
1225
+ "board.reports.open": "{count, plural, one {# report still open.} other {# reports still open.}}",
1226
+ "board.reports.privateMessage": "Private message",
1227
+ "board.reports.reportedBy": "reported by {username}",
1228
+ "board.reports.resolved": "Report resolved.",
1229
+ "board.reports.unassigned": "Unassigned",
1230
+ "board.search.authorHint": "Usernames, separated by commas. Up to {count}.",
1231
+ "board.search.disabled": "Search is switched off on this board. Browse the forums instead, or ask an administrator to turn it back on.",
1232
+ "board.search.empty": "Type something to search for.",
1233
+ "board.search.flooded": "You are searching very quickly. Try again in {seconds} seconds.",
1234
+ "board.search.hint": "Searches every forum you can see. Put a phrase in quotes to match it exactly, and put a minus in front of a word to exclude it.",
1235
+ "board.search.title": "Search",
1236
+ "board.search.tooLong": "That search is too long to run.",
1237
+ "board.search.tooShort": "That search is too short — one word in it has to be at least {count} characters.",
1238
+ "board.search.unknownAuthor": "Nobody here is called “{name}”.",
1239
+ "board.stats.counted": "Totals counted",
1240
+ "board.stats.inForum": "in {forum}",
1241
+ "board.stats.live": "The tables below are live.",
1242
+ "board.stats.members": "Members",
1243
+ "board.stats.mostReplied": "Most replied-to threads",
1244
+ "board.stats.mostViewed": "Most viewed threads",
1245
+ "board.stats.notCounted": "The totals below have not been counted yet — they are rolled up on a schedule.",
1246
+ "board.stats.posts": "Posts",
1247
+ "board.stats.threads": "Threads",
1248
+ "board.stats.topPosters": "Top {count} posters",
1249
+ "board.usercp.emptyDescription": "No new messages and no new notifications.",
1250
+ "board.usercp.emptyTitle": "Nothing unread",
1251
+ "board.usercp.open": "Open",
1252
+ "board.usercp.profilePrivacy": "Your profile is public. Your options and e-mail address are not.",
1253
+ "board.usercp.read": "Read",
1254
+ "board.usercp.unreadMessage": "{count, plural, one {unread message} other {unread messages}}",
1255
+ "board.usercp.unreadNotification": "{count, plural, one {unread notification} other {unread notifications}}",
1256
+ "board.warnings.aboutPost": "About post #{id}",
1257
+ "board.warnings.by": "by {username}",
1258
+ "board.warnings.item": "{title} — {count, plural, one {# point} other {# points}}",
1259
+ "board.warnings.standing": "{points, plural, one {# point} other {# points}}{threshold, select, none {. No threshold reached.} other { — {threshold} at {thresholdPoints}.}}",
1260
+ "board.warnings.title": "Warnings for {username}",
1261
+ "composer.attachments.hint": "Drop files here, or choose up to {count, plural, one {# file} other {# files}} of {size} each — PNG, JPEG, PDF or ZIP. Images are re-encoded, which removes any metadata they carry.",
1262
+ "composer.attachments.label": "Attachments",
1263
+ "composer.draftSaved": "Draft saved.",
1264
+ "composer.edit.delete": "Delete this post",
1265
+ "composer.edit.deleteBlurb": "Deleting hides this post from the thread. A moderator can put it back.",
1266
+ "composer.edit.reason": "Reason for editing (optional)",
1267
+ "composer.edit.restore": "Restore this post",
1268
+ "composer.edit.restoreBlurb": "This post is deleted. Restoring puts it back in the thread and back into the board’s counts.",
1269
+ "composer.edit.submit": "Save changes",
1270
+ "composer.formatting": "Formatting",
1271
+ "composer.help.bold": "bold",
1272
+ "composer.help.codeBlock": "a code block, closed by another ```",
1273
+ "composer.help.codeInline": "code, inline",
1274
+ "composer.help.heading": "a heading",
1275
+ "composer.help.italic": "italic",
1276
+ "composer.help.link": "a link",
1277
+ "composer.help.list": "a list; 1. for a numbered one",
1278
+ "composer.help.note": "A single Return is a line break, exactly as you typed it. HTML is shown as text, never rendered.",
1279
+ "composer.help.quote": "a quote",
1280
+ "composer.help.struck": "struck out",
1281
+ "composer.help.summary": "Formatting help",
1282
+ "composer.message": "Message",
1283
+ "composer.multiquote.addToReply": "Add to reply",
1284
+ "composer.multiquote.added": "Added to multi-quote — {count, plural, =0 {nothing selected} one {# post selected} other {# posts selected}}.",
1285
+ "composer.multiquote.adding": "Adding…",
1286
+ "composer.multiquote.button": "Multi-quote",
1287
+ "composer.multiquote.clear": "Clear",
1288
+ "composer.multiquote.cleared": "Multi-quote cleared — nothing selected.",
1289
+ "composer.multiquote.noneQuoted": "Nothing could be quoted — your reply is untouched.",
1290
+ "composer.multiquote.quotesAdded": "{added, plural, one {# quote} other {# quotes}} added to your reply.",
1291
+ "composer.multiquote.quotesPartial": "{added, plural, one {# quote} other {# quotes}} added to your reply — {missed} could not be quoted.",
1292
+ "composer.multiquote.removed": "Removed from multi-quote — {count, plural, =0 {nothing selected} one {# post selected} other {# posts selected}}.",
1293
+ "composer.multiquote.selectedToQuote": "{count, plural, =0 {Nothing selected to quote} one {# post selected to quote} other {# posts selected to quote}}",
1294
+ "composer.newThread.addPoll": "Add a poll",
1295
+ "composer.newThread.choosePrefix": "Choose a prefix…",
1296
+ "composer.newThread.noPrefix": "None",
1297
+ "composer.newThread.option": "Option {number}",
1298
+ "composer.newThread.optional": "Optional",
1299
+ "composer.newThread.prefix": "Prefix",
1300
+ "composer.newThread.prefixOptional": "Prefix (optional)",
1301
+ "composer.newThread.question": "Question",
1302
+ "composer.newThread.subject": "Subject",
1303
+ "composer.newThread.submit": "Post thread",
1304
+ "composer.notifyReplies": "Notify me of replies",
1305
+ "composer.placeholder.bold": "bold text",
1306
+ "composer.placeholder.italic": "italic text",
1307
+ "composer.placeholder.struck": "struck out",
1308
+ "composer.preview": "Preview",
1309
+ "composer.previewEmpty": "Nothing to preview yet.",
1310
+ "composer.previewFailed": "The preview could not be rendered. Your post is untouched — switch back to Write.",
1311
+ "composer.rendering": "Rendering…",
1312
+ "composer.reply.draftSaved": "Draft saved",
1313
+ "composer.reply.quick": "Quick reply",
1314
+ "composer.reply.submit": "Post reply",
1315
+ "composer.reply.write": "Write a reply",
1316
+ "composer.saveDraft": "Save draft",
1317
+ "composer.tabs": "Write or preview",
1318
+ "composer.thanks.count": "{count, plural, one {person has thanked this} other {people have thanked this}}",
1319
+ "composer.thanks.thanked": "Thanked",
1320
+ "composer.thanks.thanks": "Thanks",
1321
+ "composer.tool.bold": "Bold",
1322
+ "composer.tool.bulletedList": "Bulleted list",
1323
+ "composer.tool.code": "Code",
1324
+ "composer.tool.heading": "Heading",
1325
+ "composer.tool.italic": "Italic",
1326
+ "composer.tool.link": "Link",
1327
+ "composer.tool.numberedList": "Numbered list",
1328
+ "composer.tool.quote": "Quote",
1329
+ "composer.tool.strikethrough": "Strikethrough",
1330
+ "composer.toolShortcut": "{label} (Ctrl+{key})",
1331
+ "composer.write": "Write",
1332
+ "contacts.added": "{name} is now on your buddy list.",
1333
+ "contacts.ignored": "You are now ignoring {name}. Their posts are hidden behind a link, and they cannot send you private messages.",
1334
+ "contacts.removed": "{name} has been taken off your lists.",
1335
+ "contacts.someMember": "That member",
1336
+ "contentPage.announcements": "Announcements",
1337
+ "contentPage.announcementsHelp": "A dated notice above the forums, board-wide or attached to one. Not a pinned thread: nobody can reply to it, it expires on its own date, and removing it removes nothing anybody wrote.",
1338
+ "contentPage.attachments": "Attachments",
1339
+ "contentPage.attachmentsHelp": "What members have uploaded, what it is costing in storage, and what has failed to process. Its own screen, because it is a listing that pages rather than a vocabulary that fits on one.",
1340
+ "contentPage.directivesHelp": "Markdown’s extension point, and this board’s own additions to it. A directive chooses a name and whether it is inline or block. That is the whole form: there is no replacement template, pattern or HTML field, because output markup belongs in code rather than a web form.",
1341
+ "contentPage.directivesSyntax": "Members write a block one as :::spoiler … ::: and an inline one as :spoiler[the ending]. It renders as a div or span carrying a class your theme can style. Removing one makes posts using it show the markup as written.",
1342
+ "contentPage.lede": "The board-wide vocabularies: what a post may contain, what gets filtered out of it, and what members can label a thread with.",
1343
+ "contentPage.noDirectives": "None configured. Posts use Markdown’s own syntax only.",
1344
+ "contentPage.noSmilies": "None configured, so codes like :) show as typed.",
1345
+ "contentPage.prefixHelp": "Labels a member can put in front of a thread title. Removing one takes it off the threads that used it and leaves them otherwise untouched — which is why a prefix you mistyped is not permanent.",
1346
+ "contentPage.prefixMeta": "order {order}{token, select, none {} other { · {token}}}{path, select, none {} other { · only under {path}}}",
1347
+ "contentPage.smilies": "Smilies",
1348
+ "contentPage.smiliesHelp": "A literal code and an image. The code is matched as text, never as a pattern, and the longest one wins where two overlap. Smilies are never expanded inside a code block.",
1349
+ "contentPage.smiliesRendering": "Unlike a word filter, this changes what a post renders to, so editing it marks every stored render on the board out of date. They are rewritten in the background and read correctly in the meantime. Removing a smiley puts the code back as the characters its author typed.",
1350
+ "contentPage.wordFiltersHelp": "Applied when a post is shown, never to what is stored — so removing a filter brings the word back everywhere, immediately. A filter added now also applies to every post ever written, not just new ones. Staff screens show a post as written.",
1351
+ "contentPage.wordFiltersWholeWords": "Matching is case-insensitive and always literal text — never a pattern language — because this runs on every post the board renders. Whole words is on by default: a filter on a fragment silently mangles place names and surnames.",
1352
+ "contrast.accent-foreground-on-accent": "Text on a hovered row or menu item",
1353
+ "contrast.card-foreground-on-card": "Text in a panel — a post, a forum row",
1354
+ "contrast.card-foreground-on-post-highlight": "A linked-to post’s text",
1355
+ "contrast.card-foreground-on-post-own": "Your own post’s text",
1356
+ "contrast.card-foreground-on-post-unapproved": "A held post’s text",
1357
+ "contrast.destructive-foreground-on-destructive": "The label on “Delete”",
1358
+ "contrast.foreground-on-background": "Body text on the page",
1359
+ "contrast.foreground-on-surface": "Text on a band — the header, a table heading",
1360
+ "contrast.forum-locked-on-card": "A closed forum",
1361
+ "contrast.forum-read-on-card": "A forum with nothing new",
1362
+ "contrast.forum-unread-on-card": "A forum with new posts, in its row",
1363
+ "contrast.group-admin-on-card": "An administrator’s name beside a post",
1364
+ "contrast.group-banned-on-card": "A banned member’s name",
1365
+ "contrast.group-mod-on-card": "A moderator’s name",
1366
+ "contrast.group-supermod-on-card": "A super moderator’s name",
1367
+ "contrast.input-on-card": "A field’s edge in a panel",
1368
+ "contrast.moderation-approved-on-card": "An approved report",
1369
+ "contrast.moderation-pending-on-card": "A report waiting for a decision",
1370
+ "contrast.moderation-rejected-on-card": "A rejected report",
1371
+ "contrast.muted-foreground-on-background": "Timestamps and counts on the page",
1372
+ "contrast.muted-foreground-on-card": "Timestamps and counts in a panel",
1373
+ "contrast.primary-foreground-on-primary": "The label on a primary button",
1374
+ "contrast.primary-foreground-on-primary-hover": "The label on a hovered primary button",
1375
+ "contrast.ring-on-background": "The focus outline on the page",
1376
+ "contrast.ring-on-card": "The focus outline in a panel",
1377
+ "contrast.secondary-foreground-on-secondary": "The label on a secondary button",
1378
+ "contrast.thread-deleted-on-card": "A deleted thread, to staff",
1379
+ "contrast.thread-locked-on-card": "A locked thread’s title",
1380
+ "contrast.thread-moved-on-card": "A moved thread’s stub",
1381
+ "contrast.thread-pinned-on-card": "A pinned thread’s title",
1382
+ "contrast.thread-unapproved-on-card": "A thread awaiting approval",
1383
+ "demo.aria": "About this demo",
1384
+ "demo.loginAs": "Log in as {logins}.",
1385
+ "demo.title": "This is a demo.",
1386
+ "demo.wiped": "Everything you post here is deleted when the board resets.",
1387
+ "demo.wipedIn": "Everything you post here is deleted {when}.",
1388
+ "device.unknown": "Unknown device",
1389
+ "discovery.emptyFirst": "Nothing here right now. Check back later, or start a conversation of your own.",
1390
+ "discovery.emptyMore": "Nothing here right now. You have reached the end of this list.",
1391
+ "discovery.mine.blurb": "Threads you started.",
1392
+ "discovery.mine.label": "My threads",
1393
+ "discovery.new.blurb": "Threads with a reply in the last day.",
1394
+ "discovery.new.label": "New posts",
1395
+ "discovery.next": "Next {count, plural, one {# thread} other {# threads}}",
1396
+ "discovery.participated.blurb": "Threads you have posted in.",
1397
+ "discovery.participated.label": "My posts",
1398
+ "discovery.tabsLabel": "Discovery views",
1399
+ "discovery.title": "Discover",
1400
+ "discovery.today.blurb": "Threads with a reply since midnight, in your timezone.",
1401
+ "discovery.today.label": "Today's posts",
1402
+ "discovery.unanswered.blurb": "Threads nobody has replied to yet — a good place to help.",
1403
+ "discovery.unanswered.label": "Unanswered",
1404
+ "error.accounts.account-already-asks-for-code": "Your account already asks for a code. Turn that off before setting it up again.",
1405
+ "error.accounts.account-already-asks-for-code-2": "Your account already asks for a code.",
1406
+ "error.accounts.account-behind-passkey-longer-exists": "The account behind that passkey no longer exists.",
1407
+ "error.accounts.account-exist": "That account does not exist.",
1408
+ "error.accounts.account-here-already-uses-address": "An account here already uses that address. Sign in with your password first, then link the two from your account security page.",
1409
+ "error.accounts.account-longer-exists": "That account no longer exists.",
1410
+ "error.accounts.account-password-set-so-changed": "This account has no password set, so it cannot be changed here.",
1411
+ "error.accounts.account-used-board-contact-administrator": "This account cannot be used on this board. Contact an administrator if you believe this is a mistake.",
1412
+ "error.accounts.address-already-use-board": "That address is already in use on this board.",
1413
+ "error.accounts.address-already-using": "That is the address you are already using.",
1414
+ "error.accounts.ban-expire-past": "A ban cannot expire in the past.",
1415
+ "error.accounts.ban-filter-needs-pattern": "A ban filter needs a pattern.",
1416
+ "error.accounts.bio-length": "About me may be at most {max} characters.",
1417
+ "error.accounts.board-asks-its-staff-for": "This board asks its staff for a code, so this cannot be turned off while you hold that access.",
1418
+ "error.accounts.board-read-secret-behind-authenticator": "This board cannot read the secret behind your authenticator app. Its AUTH_SECRET has changed, so two-factor authentication must be set up again.",
1419
+ "error.accounts.could-settle-free-username-for": "Could not settle on a free username for that account. Register with a password instead, then link the two from your account security page.",
1420
+ "error.accounts.current-password": "That is not your current password.",
1421
+ "error.accounts.email-already-registered": "That email is already registered.",
1422
+ "error.accounts.github-refused-sign-in-code-start": "GitHub refused the sign-in code. Start again from the sign-in page.",
1423
+ "error.accounts.github-sent-account-with-stable": "GitHub sent an account with no stable identifier.",
1424
+ "error.accounts.group-board": "That is not a group this board has.",
1425
+ "error.accounts.group-one-were-appointed-shown": "Your group is the one you were appointed to, and it is shown as itself. Staff cannot post under another group.",
1426
+ "error.accounts.identity-provider-answered-code-exchange": "The identity provider answered the code exchange without an identity token.",
1427
+ "error.accounts.identity-provider-sent-account-with": "The identity provider sent an account with no stable identifier.",
1428
+ "error.accounts.identity-provider-sent-token-expired": "The identity provider sent a token that has expired.",
1429
+ "error.accounts.identity-provider-sent-token-for": "The identity provider sent a token for a different sign-in attempt.",
1430
+ "error.accounts.identity-provider-sent-token-issued": "The identity provider sent a token issued by somebody else.",
1431
+ "error.accounts.identity-provider-sent-token-issued-2": "The identity provider sent a token issued in the future.",
1432
+ "error.accounts.identity-provider-sent-token-jwt": "The identity provider sent a token that is not a JWT.",
1433
+ "error.accounts.identity-provider-sent-token-meant": "The identity provider sent a token meant for another board.",
1434
+ "error.accounts.identity-provider-sent-token-with": "The identity provider sent a token with a bad signature.",
1435
+ "error.accounts.identity-provider-signed-its-token": "The identity provider signed its token with an algorithm this board does not accept.",
1436
+ "error.accounts.incorrect-username-password": "Incorrect username or password.",
1437
+ "error.accounts.language-board-recognises": "That is not a language this board recognises.",
1438
+ "error.accounts.location-length": "Location may be at most {max} characters.",
1439
+ "error.accounts.look-like-e-mail-address": "That does not look like an e-mail address.",
1440
+ "error.accounts.look-like-web-address": "That does not look like a web address.",
1441
+ "error.accounts.only-shown-as-group-if": "You can only be shown as a group you are in. If a membership has lapsed, so has your claim on its badge.",
1442
+ "error.accounts.page-size-number": "{label} must be a number.",
1443
+ "error.accounts.page-size-range": "{label} must be between {min} and {max}.",
1444
+ "error.accounts.passkey-already-registered-here": "That passkey is already registered here.",
1445
+ "error.accounts.passkey-already-removed": "That passkey was already removed.",
1446
+ "error.accounts.passkey-belongs-different-site": "That passkey belongs to a different site.",
1447
+ "error.accounts.passkey-confirmed-device": "That passkey was not confirmed on the device.",
1448
+ "error.accounts.passkey-registered-board": "That passkey is not registered on this board.",
1449
+ "error.accounts.passkey-replayed-counter-board-already": "That passkey replayed a counter the board has already seen, so it was refused.",
1450
+ "error.accounts.passkey-used-against-different-address": "That passkey was used against a different address.",
1451
+ "error.accounts.password-already-using": "That is the password you are already using.",
1452
+ "error.accounts.password-min": "A password must be at least {min} characters.",
1453
+ "error.accounts.please-enter-valid-email-address": "Please enter a valid email address.",
1454
+ "error.accounts.reset-link-invalid-expired": "This reset link is invalid or has expired.",
1455
+ "error.accounts.sign-in-already-unlinked": "That sign-in was already unlinked.",
1456
+ "error.accounts.sign-in-attempt-expired-started-somewhere": "That sign-in attempt has expired or was started somewhere else. Try again.",
1457
+ "error.accounts.sign-in-took-too-long-finish": "That sign-in took too long to finish. Start again from the sign-in page.",
1458
+ "error.accounts.start-setting-up-authenticator-app": "Start setting up your authenticator app again.",
1459
+ "error.accounts.timezone-board-recognises": "That is not a timezone this board recognises.",
1460
+ "error.accounts.too-many-failed-attempts-please": "Too many failed attempts. Please wait before trying again.",
1461
+ "error.accounts.too-many-wrong-codes-please": "Too many wrong codes. Please wait before trying again.",
1462
+ "error.accounts.user-already-banned-lift-existing": "That user is already banned. Lift the existing ban first.",
1463
+ "error.accounts.user-banned": "That user is not banned.",
1464
+ "error.accounts.username-contains-invalid-characters": "Username contains invalid characters.",
1465
+ "error.accounts.username-reserved-pick-another-board": "That username is reserved. Pick another — the board keeps a few names for itself so an account cannot impersonate it.",
1466
+ "error.accounts.username-taken": "That username is taken.",
1467
+ "error.accounts.website-address-must-start-with": "A website address must start with http:// or https://.",
1468
+ "error.accounts.website-length": "A website address may be at most {max} characters.",
1469
+ "error.app.account-longer-exists": "That account no longer exists.",
1470
+ "error.app.account-longer-post": "Your account can no longer post.",
1471
+ "error.app.attach-files-forum": "You may not attach files in this forum.",
1472
+ "error.app.ban-lasts-whole-number-days": "A ban lasts a whole number of days, or is permanent.",
1473
+ "error.app.board-accept-avatar-uploads": "This board cannot accept avatar uploads.",
1474
+ "error.app.board-accept-file-attachments": "This board cannot accept file attachments.",
1475
+ "error.app.board-accept-posts": "This board cannot accept posts.",
1476
+ "error.app.board-database-so-api": "This board has no database, so it has no API.",
1477
+ "error.app.board-keeps-avatars": "This board keeps no avatars.",
1478
+ "error.app.board-keeps-signatures": "This board keeps no signatures.",
1479
+ "error.app.board-manages-sign-ins-for-its": "This board manages sign-ins for its members.",
1480
+ "error.app.board-offer-two-factor-authentication": "This board does not offer two-factor authentication.",
1481
+ "error.app.board-running-in-memory-sample-data": "This board is running on in-memory sample data, so it keeps no reputation.",
1482
+ "error.app.board-running-in-memory-sample-data-10": "This board is running on in-memory sample data, so it has no signatures to save.",
1483
+ "error.app.board-running-in-memory-sample-data-11": "This board is running on in-memory sample data, which is not indexed for search.",
1484
+ "error.app.board-running-in-memory-sample-data-12": "This board is running on in-memory sample data, so its forums cannot be edited.",
1485
+ "error.app.board-running-in-memory-sample-data-13": "This board is running on in-memory sample data, so it stores no announcements.",
1486
+ "error.app.board-running-in-memory-sample-data-14": "This board is running on in-memory sample data, so it stores no questions.",
1487
+ "error.app.board-running-in-memory-sample-data-15": "This board is running on in-memory sample data, so it keeps no buddy or ignore lists.",
1488
+ "error.app.board-running-in-memory-sample-data-16": "This board is running on in-memory sample data, so it has no notifications.",
1489
+ "error.app.board-running-in-memory-sample-data-17": "This board is running on in-memory sample data, so it has no subscriptions.",
1490
+ "error.app.board-running-in-memory-sample-data-18": "This board is running on in-memory sample data, so its groups cannot be edited.",
1491
+ "error.app.board-running-in-memory-sample-data-19": "This board is running on in-memory sample data, so its promotion rules cannot be edited.",
1492
+ "error.app.board-running-in-memory-sample-data-2": "This board is running on in-memory sample data, so its members cannot be edited.",
1493
+ "error.app.board-running-in-memory-sample-data-20": "This board is running on in-memory sample data, so promotions cannot run.",
1494
+ "error.app.board-running-in-memory-sample-data-21": "This board is running on in-memory sample data, so it has no private messages.",
1495
+ "error.app.board-running-in-memory-sample-data-22": "This board is running on in-memory sample data, so its content settings cannot be edited.",
1496
+ "error.app.board-running-in-memory-sample-data-23": "This board is running on in-memory sample data, so it has no attachments.",
1497
+ "error.app.board-running-in-memory-sample-data-24": "This board is running on in-memory sample data, so its theme cannot be edited.",
1498
+ "error.app.board-running-in-memory-sample-data-25": "This board is running on in-memory sample data, so it has no control panel.",
1499
+ "error.app.board-running-in-memory-sample-data-3": "This board is running on in-memory sample data, so it cannot issue bans.",
1500
+ "error.app.board-running-in-memory-sample-data-4": "This board is running on in-memory sample data, so its accounts cannot be merged.",
1501
+ "error.app.board-running-in-memory-sample-data-5": "This board is running on in-memory sample data, so it has no membership to sweep or mail.",
1502
+ "error.app.board-running-in-memory-sample-data-6": "This board is running on in-memory sample data, so there is nothing to maintain.",
1503
+ "error.app.board-running-in-memory-sample-data-7": "This board is running on in-memory sample data, so its counters are not stored.",
1504
+ "error.app.board-running-in-memory-sample-data-8": "This board is running on in-memory sample data, so it cannot accept posts.",
1505
+ "error.app.board-running-in-memory-sample-data-9": "This board is running on in-memory sample data, so it has no settings to save.",
1506
+ "error.app.board-seal-secret": "This board cannot seal a secret.",
1507
+ "error.app.board-search-index": "This board has no search index.",
1508
+ "error.app.board-thread-index": "This board has no thread index.",
1509
+ "error.app.choose-account-merge-into": "Choose an account to merge into.",
1510
+ "error.app.choose-active-awaiting-activation": "Choose active or awaiting activation.",
1511
+ "error.app.choose-category-forum-link": "Choose a category, a forum or a link.",
1512
+ "error.app.choose-date-members-must-registered": "Choose the date members must have registered before.",
1513
+ "error.app.choose-group-copy-permissions-from": "Choose a group to copy permissions from. Starting from the defaults would deny everything, which makes a group whose members cannot see the board.",
1514
+ "error.app.choose-image-first": "Choose an image first.",
1515
+ "error.app.choose-two-different-accounts": "Choose two different accounts.",
1516
+ "error.app.choose-what-clear": "Choose what to clear.",
1517
+ "error.app.control-panel-available-from-address": "The control panel is not available from this address.",
1518
+ "error.app.control-panel-board": "No control panel on this board.",
1519
+ "error.app.control-panel-sign-in": "Sign in to the control panel and try that again.",
1520
+ "error.app.current-password": "That is not your current password.",
1521
+ "error.app.default-theme-make-another-theme": "This is the default theme. Make another theme the default first, then turn this one off.",
1522
+ "error.app.delete-post": "You cannot delete that post.",
1523
+ "error.app.direction": "That is not a direction.",
1524
+ "error.app.display-order-must-whole-number": "Display order must be a whole number.",
1525
+ "error.app.drafts-unavailable-board": "Drafts are unavailable on this board.",
1526
+ "error.app.edit-post": "You cannot edit that post.",
1527
+ "error.app.enter-code-from-authenticator-app": "Enter the code from your authenticator app as well.",
1528
+ "error.app.enter-current-code-from-authenticator": "Enter a current code from your authenticator app to confirm this.",
1529
+ "error.app.enter-password": "Enter your password.",
1530
+ "error.app.exist": "That does not exist.",
1531
+ "error.app.expires-days-must-whole-number": "Expires in (days) must be a whole number of days above zero. Leave it empty for a token that never expires.",
1532
+ "error.app.file-png-jpeg-webp-svg": "That file is not a PNG, JPEG, WebP or SVG. The name is not what decides this — the contents are.",
1533
+ "error.app.form-submitted-settings": "That form submitted no settings.",
1534
+ "error.app.forum-accept-file-attachments": "This forum does not accept file attachments.",
1535
+ "error.app.forum-exist": "That forum does not exist.",
1536
+ "error.app.forum-go-any-further-direction": "That forum cannot go any further in that direction.",
1537
+ "error.app.forum-its-own-parent": "A forum cannot be its own parent.",
1538
+ "error.app.forum-needs-title": "A forum needs a title.",
1539
+ "error.app.forum-nothing-beneath": "This forum has nothing beneath it.",
1540
+ "error.app.give-token-name-1-80": "Give the token a name of 1–80 characters.",
1541
+ "error.app.group-carries-administrative-moderation-power": "This group carries administrative or moderation power, so plugins may not grant it. Make a separate group for what a plugin hands out.",
1542
+ "error.app.group-needs-title": "A group needs a title.",
1543
+ "error.app.inactivity-date-date": "That inactivity date is not a date.",
1544
+ "error.app.key-contain-lower-case-letters-numbers": "A key may contain lower-case letters, numbers and underscores, and must start with a letter.",
1545
+ "error.app.list": "That is not a list.",
1546
+ "error.app.lost-track-where-run-had": "Lost track of where the run had got to. Start again.",
1547
+ "error.app.moderate-any-forums": "You do not moderate any forums.",
1548
+ "error.app.moderate-anything-here": "You cannot moderate anything here.",
1549
+ "error.app.must-logged": "You must be logged in.",
1550
+ "error.app.must-logged-2": "You must be logged in to do that.",
1551
+ "error.app.must-logged-attach-file": "You must be logged in to attach a file.",
1552
+ "error.app.must-logged-change-avatar": "You must be logged in to change your avatar.",
1553
+ "error.app.must-logged-edit-post": "You must be logged in to edit a post.",
1554
+ "error.app.must-logged-moderate": "You must be logged in to moderate.",
1555
+ "error.app.must-logged-post": "You must be logged in to post.",
1556
+ "error.app.must-logged-rate-thread": "You must be logged in to rate a thread.",
1557
+ "error.app.must-logged-report-anything": "You must be logged in to report anything.",
1558
+ "error.app.must-logged-vote": "You must be logged in to vote.",
1559
+ "error.app.name-member-choose-group-both": "Name a member or choose a group, not both.",
1560
+ "error.app.password-right": "That password is not right.",
1561
+ "error.app.poll-exist": "That poll does not exist.",
1562
+ "error.app.post-exist": "That post does not exist.",
1563
+ "error.app.rating": "That is not a rating.",
1564
+ "error.app.reach-control-panel": "You cannot reach the control panel.",
1565
+ "error.app.restore-post": "You cannot restore that post.",
1566
+ "error.app.say-why-member-shown-reason": "Say why. The member is shown this reason.",
1567
+ "error.app.select-at-least-one-item": "Select at least one item.",
1568
+ "error.app.select-at-least-one-message": "Select at least one message first.",
1569
+ "error.app.sign-see-threads": "Sign in to see your threads.",
1570
+ "error.app.signature-locked-by-moderator-so": "Your signature has been locked by a moderator, so it cannot be changed.",
1571
+ "error.app.slug-contain-lower-case-letters-numbers": "A slug may contain lower-case letters, numbers and single hyphens.",
1572
+ "error.app.something-message": "That is not something you can do to a message.",
1573
+ "error.app.staff-group-granted-by-plugins": "A staff group cannot be granted by plugins — staff is appointed, not sold.",
1574
+ "error.app.such-appointment": "No such appointment.",
1575
+ "error.app.such-badge": "No such badge.",
1576
+ "error.app.such-display-group": "No such display group.",
1577
+ "error.app.such-forum": "No such forum.",
1578
+ "error.app.such-forum-follow": "No such forum to follow.",
1579
+ "error.app.such-group": "No such group.",
1580
+ "error.app.such-job": "No such job.",
1581
+ "error.app.such-logo": "No such logo.",
1582
+ "error.app.such-member": "No such member.",
1583
+ "error.app.such-message": "No such message.",
1584
+ "error.app.such-parent-forum": "No such parent forum.",
1585
+ "error.app.such-post": "No such post.",
1586
+ "error.app.such-promotion-rule": "No such promotion rule.",
1587
+ "error.app.such-rating": "No such rating.",
1588
+ "error.app.such-row": "No such row.",
1589
+ "error.app.such-search": "No such search.",
1590
+ "error.app.such-theme": "No such theme.",
1591
+ "error.app.svg-contains-script-event-handler": "That SVG contains script or an event handler, so it will not be stored. Export it again without interactivity, or upload a PNG.",
1592
+ "error.app.system-group-granted-by-plugins": "A system group cannot be granted by plugins. The board resolves it by key.",
1593
+ "error.app.theme-board-built-with-so": "This is the theme the board is built with, so it always stays available. Change `defaultTheme` in community.config.ts and redeploy to swap it.",
1594
+ "error.app.thread-exist": "That thread does not exist.",
1595
+ "error.app.token-needs-at-least-one": "A token needs at least one scope, or it can do nothing.",
1596
+ "error.app.use-private-messages": "You cannot use private messages.",
1597
+ "error.app.valid-date": "That is not a valid date.",
1598
+ "error.attachments.bad-type": "“{name}” is not a type this board accepts. Attachments may be PNG, JPEG, PDF or ZIP.",
1599
+ "error.attachments.damaged": "“{name}” has a damaged header and cannot be read.",
1600
+ "error.attachments.empty": "“{name}” is empty.",
1601
+ "error.attachments.per-post": "A post may have at most {max, plural, one {# attachment} other {# attachments}}.",
1602
+ "error.attachments.too-large": "“{name}” is {size}, over the {limit} limit.",
1603
+ "error.attachments.too-many-pixels": "“{name}” is {width}×{height}, over the {max} megapixel limit.",
1604
+ "error.attachments.too-short": "“{name}” is too short to be a file of any type this board accepts.",
1605
+ "error.avatars.avatar-must-png-jpeg": "An avatar must be a PNG or a JPEG.",
1606
+ "error.avatars.give-reason-member-shown": "Give a reason. The member is shown it.",
1607
+ "error.avatars.moderator-locked-avatar-so-changed": "A moderator has locked your avatar, so it cannot be changed.",
1608
+ "error.avatars.upload-avatar": "You may not upload an avatar.",
1609
+ "error.configuration": "This server is misconfigured.",
1610
+ "error.conflict": "That action conflicts with the current state.",
1611
+ "error.db.announcement-finish-before-starts": "An announcement cannot finish before it starts.",
1612
+ "error.db.announcement-needs-something": "An announcement needs something in it.",
1613
+ "error.db.announcement-needs-title": "An announcement needs a title.",
1614
+ "error.db.appointment-names-member-group-both": "An appointment names a member or a group, not both.",
1615
+ "error.db.bans-issued-through-ban-screen": "Bans are issued through the ban screen, not here.",
1616
+ "error.db.choose-two-different-accounts": "Choose two different accounts.",
1617
+ "error.db.choose-two-different-groups": "Choose two different groups.",
1618
+ "error.db.customcss-must-text-null": "`customCss` must be text, or null.",
1619
+ "error.db.filter-needs-something-match": "A filter needs something to match.",
1620
+ "error.db.group-part-how-board-works": "That group is part of how the board works and cannot be deleted.",
1621
+ "error.db.member-needs-email-address": "A member needs an email address.",
1622
+ "error.db.member-needs-username": "A member needs a username.",
1623
+ "error.db.members-moved-into-group-being": "Members cannot be moved into the group being deleted.",
1624
+ "error.db.message-needs-body": "A message needs a body.",
1625
+ "error.db.message-needs-subject": "A message needs a subject.",
1626
+ "error.db.one-these-accounts-banned-lift": "One of these accounts is banned. Lift the ban before merging.",
1627
+ "error.db.prefix-needs-label": "A prefix needs a label.",
1628
+ "error.db.question-needs-asked": "A question needs to be asked.",
1629
+ "error.db.question-needs-at-least-one": "A question needs at least one answer, one per line.",
1630
+ "error.db.rule-could-stored": "That rule could not be stored.",
1631
+ "error.db.such-account-state": "No such account state.",
1632
+ "error.db.such-announcement": "No such announcement.",
1633
+ "error.db.such-directive": "No such directive.",
1634
+ "error.db.such-filter": "No such filter.",
1635
+ "error.db.such-group": "No such group.",
1636
+ "error.db.such-member": "No such member.",
1637
+ "error.db.such-member-member-under-ban": "No such member, or the member is under a ban. Lift the ban first.",
1638
+ "error.db.such-message": "No such message.",
1639
+ "error.db.such-promotion-rule": "No such promotion rule.",
1640
+ "error.db.such-question": "No such question.",
1641
+ "error.db.such-smiley": "No such smiley.",
1642
+ "error.db.such-theme": "No such theme.",
1643
+ "error.db.theme-file-json-object": "A theme file is a JSON object.",
1644
+ "error.db.theme-file-needs-tokenoverrides-object": "A theme file needs a `tokenOverrides` object.",
1645
+ "error.db.theme-file-written-by-different": "That theme file was written by a different version of this board and cannot be read.",
1646
+ "error.db.there-group-copy-from": "There is no group to copy from.",
1647
+ "error.db.there-still-posts-move-finish": "There are still posts to move. Finish the run first.",
1648
+ "error.db.thread-exist": "That thread does not exist.",
1649
+ "error.db.valid-json": "That is not valid JSON.",
1650
+ "error.drivers.invalid-file-key": "Invalid file key.",
1651
+ "error.forbidden": "You do not have permission to do that.",
1652
+ "error.forums.forum-follow-longer-there-reload": "The forum it was to follow is no longer there. Reload the tree and try that again.",
1653
+ "error.forums.forum-its-own-parent": "A forum cannot be its own parent.",
1654
+ "error.forums.forum-needs-title": "A forum needs a title.",
1655
+ "error.forums.link-forum-needs-linkurl": "A link forum needs a linkUrl.",
1656
+ "error.internal": "Something went wrong on our end.",
1657
+ "error.messages.body-length": "A message may be at most {max} characters.",
1658
+ "error.messages.message-needs-something": "A message needs something in it.",
1659
+ "error.messages.message-needs-subject": "A message needs a subject.",
1660
+ "error.messages.message-store-full-delete-some": "Your message store is full. Delete some messages before sending another.",
1661
+ "error.messages.name-at-least-one-recipient": "Name at least one recipient.",
1662
+ "error.messages.recipient-limit": "A message may go to at most {max} people. You named {count}.",
1663
+ "error.messages.recipients-closed": "{names} cannot receive private messages.",
1664
+ "error.messages.recipients-full": "{count, plural, one {{names}''s message store is full, so nothing was sent.} other {These members'' message stores are full, so nothing was sent: {names}.}}",
1665
+ "error.messages.send-message-yourself": "You cannot send a message to yourself.",
1666
+ "error.messages.subject-length": "A subject may be at most {max} characters.",
1667
+ "error.messages.such-message": "No such message.",
1668
+ "error.messages.unknown-recipients": "{count, plural, one {There is no member called \"{names}\".} other {No such members: {names}.}}",
1669
+ "error.moderation.choose-forum-copy": "Choose a forum to copy it to.",
1670
+ "error.moderation.choose-forum-move": "Choose a forum to move it to.",
1671
+ "error.moderation.choose-forum-move-them": "Choose a forum to move them to.",
1672
+ "error.moderation.copy-threads-into-forum": "You cannot copy threads into that forum.",
1673
+ "error.moderation.exist": "That does not exist.",
1674
+ "error.moderation.forum-threads-live": "That is not a forum threads can live in.",
1675
+ "error.moderation.inline-chunk": "At most {max} items can be moderated at once.",
1676
+ "error.moderation.look-up-addresses": "You cannot look up addresses.",
1677
+ "error.moderation.member-exist": "That member does not exist.",
1678
+ "error.moderation.merge-threads-here": "You cannot merge threads here.",
1679
+ "error.moderation.merge-threads-into-forum": "You cannot merge threads into that forum.",
1680
+ "error.moderation.move-threads-into-forum": "You cannot move threads into that forum.",
1681
+ "error.moderation.new-thread-needs-title": "The new thread needs a title.",
1682
+ "error.moderation.none-those-posts-thread": "None of those posts are in this thread.",
1683
+ "error.moderation.note-length": "A note may be at most {max} characters.",
1684
+ "error.moderation.points-range": "Points must be between 1 and {max}.",
1685
+ "error.moderation.post-thread": "That post is not in this thread.",
1686
+ "error.moderation.queue-chunk": "At most {max} items can be handled at once. Work through the queue a page at a time.",
1687
+ "error.moderation.reason-length": "A reason may be at most {max} characters.",
1688
+ "error.moderation.report-already-closed": "That report has already been closed.",
1689
+ "error.moderation.report-exist": "That report does not exist.",
1690
+ "error.moderation.revoke-warnings": "You cannot revoke warnings.",
1691
+ "error.moderation.say-what-warning-for": "Say what the warning is for.",
1692
+ "error.moderation.say-what-wrong-with-briefly": "Say what is wrong with it, briefly.",
1693
+ "error.moderation.select-at-least-one-item": "Select at least one item.",
1694
+ "error.moderation.select-posts-split-out": "Select the posts to split out.",
1695
+ "error.moderation.selection-includes-opening-post-move": "That selection includes the opening post. Move the thread instead.",
1696
+ "error.moderation.split-threads-here": "You cannot split threads here.",
1697
+ "error.moderation.thread-already-forum": "That thread is already in that forum.",
1698
+ "error.moderation.thread-board": "That thread is not on the board.",
1699
+ "error.moderation.thread-deleted": "That thread is not deleted.",
1700
+ "error.moderation.thread-exist": "That thread does not exist.",
1701
+ "error.moderation.thread-merged-into-itself": "A thread cannot be merged into itself.",
1702
+ "error.moderation.title-at-most-150-characters": "A title may be at most 150 characters.",
1703
+ "error.moderation.warn-members": "You cannot warn members.",
1704
+ "error.moderation.warn-yourself": "You cannot warn yourself.",
1705
+ "error.moderation.warning-needs-title": "A warning needs a title.",
1706
+ "error.moderation.warning-title-length": "A title may be at most {max} characters.",
1707
+ "error.moderation.warning-type-exist": "That warning type does not exist.",
1708
+ "error.moderation.whole-thread-move-instead-splitting": "That is the whole thread. Move it instead of splitting it.",
1709
+ "error.notFound": "That page could not be found.",
1710
+ "error.polls.choose-rating-from-1-5": "Choose a rating from 1 to 5.",
1711
+ "error.polls.option-count": "A poll needs 2–{max} options.",
1712
+ "error.polls.option-length": "A poll option may be at most {max} characters.",
1713
+ "error.polls.poll-closed-already-voted": "That poll is closed or you have already voted.",
1714
+ "error.polls.poll-must-close-future": "A poll must close in the future.",
1715
+ "error.polls.poll-options-must-distinct": "Poll options must be distinct.",
1716
+ "error.polls.question-length": "A poll question must be 1–{max} characters.",
1717
+ "error.polls.thread-exist": "That thread does not exist.",
1718
+ "error.polls.thread-ratings-switched-off": "Thread ratings are switched off.",
1719
+ "error.polls.vote-polls": "You may not vote in polls.",
1720
+ "error.posts.edit-window": "Posts can only be edited for {minutes} minutes after posting.",
1721
+ "error.posts.first-post-thread-deleted-its": "The first post of a thread cannot be deleted on its own. Delete the thread instead.",
1722
+ "error.posts.forum-closed": "This forum is closed.",
1723
+ "error.posts.post-already-deleted": "That post has already been deleted.",
1724
+ "error.posts.post-deleted": "That post has been deleted.",
1725
+ "error.posts.post-deleted-2": "That post is not deleted.",
1726
+ "error.posts.post-length": "A post may be at most {max} characters.",
1727
+ "error.posts.post-needs-message": "A post needs a message.",
1728
+ "error.posts.thread-available": "That thread is not available.",
1729
+ "error.posts.thread-locked": "This thread is locked.",
1730
+ "error.profile-fields.dropdown-needs-at-least-one": "A dropdown needs at least one option.",
1731
+ "error.profile-fields.field-key-must-2-40": "A field key must be 2–40 characters: a letter, then letters, digits or underscores.",
1732
+ "error.profile-fields.field-needs-label": "A field needs a label.",
1733
+ "error.profile-fields.required": "{label} is required.",
1734
+ "error.rateLimited": "You are doing that too often. Please wait and try again.",
1735
+ "error.relations.lists-full": "Your buddy and ignore lists are full ({max} people). Remove somebody first.",
1736
+ "error.relations.moderators-administrators-ignored-their-posts": "Moderators and administrators cannot be ignored — their posts are often the ones explaining what happened to a thread.",
1737
+ "error.reputation.board-allow-negative-ratings": "This board does not allow negative ratings.",
1738
+ "error.reputation.comment-length": "A comment may be at most {max} characters.",
1739
+ "error.reputation.daily-limit": "You have given as many ratings as you can today ({max}). Try again tomorrow.",
1740
+ "error.reputation.min-posts": "You need at least {min} posts before you can rate anybody.",
1741
+ "error.reputation.rate-other-members": "You cannot rate other members.",
1742
+ "error.reputation.rate-yourself": "You cannot rate yourself.",
1743
+ "error.reputation.rating": "That is not a rating.",
1744
+ "error.reputation.reputation-switched-off-board": "Reputation is switched off on this board.",
1745
+ "error.reputation.say-why-rating-with-reason": "Say why. A rating with no reason is the part people argue about.",
1746
+ "error.signatures.group-use-signature": "Your group cannot use a signature.",
1747
+ "error.signatures.length": "A signature may be at most {max} characters. Yours is {length}.",
1748
+ "error.subscriptions.exist": "That does not exist.",
1749
+ "error.subscriptions.notification-setting": "That is not a notification setting.",
1750
+ "error.threads.attach-poll-forum": "You cannot attach a poll in this forum.",
1751
+ "error.threads.forum-closed-new-threads": "This forum is closed to new threads.",
1752
+ "error.threads.forum-closed-replies": "This forum is closed to replies.",
1753
+ "error.threads.forum-requires-prefix": "This forum requires a prefix.",
1754
+ "error.threads.post-needs-message": "A post needs a message.",
1755
+ "error.threads.posting-privileges-currently-suspended": "Your posting privileges are currently suspended.",
1756
+ "error.threads.prefix-used-forum": "That prefix cannot be used in this forum.",
1757
+ "error.threads.thread-available": "That thread is not available.",
1758
+ "error.threads.thread-locked": "This thread is locked.",
1759
+ "error.threads.threads-posted-here": "Threads cannot be posted here.",
1760
+ "error.threads.title-max": "A title may be at most {max} characters.",
1761
+ "error.threads.title-min": "A title needs at least {min} characters.",
1762
+ "error.validation": "The submitted data was invalid.",
1763
+ "errorNotice.crash.message": "The board could not finish this page. Try again, or return to the forum.",
1764
+ "errorNotice.crash.title": "Something went wrong",
1765
+ "errorNotice.home": "Forum home",
1766
+ "errorNotice.notFound.message": "The page you requested does not exist or is no longer available.",
1767
+ "errorNotice.notFound.title": "Page not found",
1768
+ "form.notSaved": "Not saved.",
1769
+ "form.working": "Working…",
1770
+ "forum.threadDeleted": "The thread was deleted. It is removed rather than destroyed, so a moderator can restore it.",
1771
+ "forum.threadHeld": "Your thread was posted and is waiting for a moderator to approve it.",
1772
+ "forumJump.go": "Go",
1773
+ "forumJump.label": "Jump to forum",
1774
+ "install.account.hint": "The first account on the board, and the only one that can reach the control panel.",
1775
+ "install.account.title": "Your account",
1776
+ "install.board.hint": "What it is called, and where it lives.",
1777
+ "install.board.title": "Your board",
1778
+ "install.boardName.hint": "Shown in the header, in the page title, and on every message it sends.",
1779
+ "install.boardName.label": "Board name",
1780
+ "install.boardUrl.hint": "Every link the board sends is built from this. Filled in from the address you are reading — check it.",
1781
+ "install.boardUrl.label": "Board address",
1782
+ "install.email.hint": "Where the test message goes, so use an address you can read now.",
1783
+ "install.email.label": "Your e-mail",
1784
+ "install.field.boardName": "Board name",
1785
+ "install.field.boardUrl": "Board address",
1786
+ "install.field.email": "Administrator’s e-mail",
1787
+ "install.field.mailEndpoint": "API endpoint",
1788
+ "install.field.mailFrom": "Sender address",
1789
+ "install.field.mailHost": "SMTP host",
1790
+ "install.field.mailPort": "Port",
1791
+ "install.field.mailPreset": "How mail is sent",
1792
+ "install.field.mailSecret": "Mail password or API key",
1793
+ "install.field.mailSecurity": "Security",
1794
+ "install.field.mailUsername": "Mail username",
1795
+ "install.field.password": "Administrator’s password",
1796
+ "install.field.username": "Administrator’s name",
1797
+ "install.mail.envHint": "Decided by this deployment’s environment.",
1798
+ "install.mail.how": "How mail is sent",
1799
+ "install.mail.needs": "What each of these needs before it will send",
1800
+ "install.mail.optionalHint": "Optional, and the one thing that is harder to add later than now.",
1801
+ "install.mail.serverDetails": "Server details — only if yours differ from the choice above",
1802
+ "install.mail.skip": "Skip for now — this board sends no mail",
1803
+ "install.mail.testNote": "A test message is sent to the address above {before} anything is written, so a wrong key costs a retry rather than a board that cannot mail anybody.",
1804
+ "install.mail.testNoteBefore": "before",
1805
+ "install.mail.title": "Sending mail",
1806
+ "install.mailEndpoint.hint": "For the API choices. Leave blank to use the endpoint the choice above already knows.",
1807
+ "install.mailEndpoint.label": "API endpoint",
1808
+ "install.mailFrom.hint": "Must be on a domain the provider has verified. Not needed if you are skipping.",
1809
+ "install.mailFrom.label": "Sender address",
1810
+ "install.mailFromEnv": "{name} is set in this deployment’s environment, which overrides anything stored on the board. Mail is configured there and cannot be changed from this form or from the settings screen — unset it if you would rather configure mail on the board.",
1811
+ "install.mailHost.hint": "Leave blank to use the host the choice above already knows.",
1812
+ "install.mailHost.label": "SMTP host",
1813
+ "install.mailPort.label": "Port",
1814
+ "install.mailPreset.brevo.label": "Brevo (SMTP)",
1815
+ "install.mailPreset.brevo.note": "The most generous free tier — around 300 messages a day. Independent deliverability testing puts it below Postmark and Resend, which matters most for password resets. Verify your domain first.",
1816
+ "install.mailPreset.http.label": "Any other JSON API",
1817
+ "install.mailPreset.http.note": "Only works for a provider whose API takes Resend’s exact field names — from, to, subject, text, html, reply_to — with a Bearer token. Postmark and Mailgun do not; use their SMTP hosts instead.",
1818
+ "install.mailPreset.mailbox.label": "A mailbox I already have (SMTP)",
1819
+ "install.mailPreset.mailbox.note": "The least work by a distance, if you already receive mail on this domain: SPF and DKIM are set up already, so there are no DNS records to add. Use your provider’s SMTP host and an app password — never your login password.",
1820
+ "install.mailPreset.postmark.label": "Postmark (SMTP)",
1821
+ "install.mailPreset.postmark.note": "The best-delivering of these and the stingiest — 100 messages a month free, and an approval step before you can send at all. Username and password are both the server API token. Verify your domain first.",
1822
+ "install.mailPreset.resendHttp.label": "Resend (API)",
1823
+ "install.mailPreset.resendHttp.note": "Free for 3,000 messages a month. You must verify your sending domain with Resend first — until you do, a new account can only mail the address you signed up with, and every other message is rejected.",
1824
+ "install.mailPreset.resendSmtp.label": "Resend (SMTP)",
1825
+ "install.mailPreset.resendSmtp.note": "The same service as the row above, over SMTP. The username is the literal word “resend” and the password is your API key. Verify your domain first.",
1826
+ "install.mailPreset.ses.label": "Amazon SES (SMTP)",
1827
+ "install.mailPreset.ses.note": "The cheapest at volume and the most work to start: a new account is in a sandbox that can only mail verified addresses, and leaving it needs a support request. The host is email-smtp.<your-region>.amazonaws.com, and the credentials are SMTP credentials — not your AWS access keys.",
1828
+ "install.mailPreset.smtp.label": "Any other SMTP server",
1829
+ "install.mailPreset.smtp.note": "Anything that speaks SMTP, including a relay you run yourself.",
1830
+ "install.mailSecret.hint": "Whichever the choice above uses — an app password for SMTP, or the provider’s API key.",
1831
+ "install.mailSecret.label": "Password or API key",
1832
+ "install.mailSecurity.default": "Whatever the choice above uses",
1833
+ "install.mailSecurity.label": "Security",
1834
+ "install.mailSecurity.none": "None — local relay only",
1835
+ "install.mailSecurity.starttls": "STARTTLS, required (port 587)",
1836
+ "install.mailSecurity.tls": "Implicit TLS (port 465)",
1837
+ "install.mailUsername.hint": "For the SMTP choices. Leave blank when the choice above already knows it, and for the API choices.",
1838
+ "install.mailUsername.label": "Username",
1839
+ "install.outcome.answers": "{count, plural, one {Nothing has been installed — one answer needs changing.} other {Nothing has been installed — # answers need changing.}}",
1840
+ "install.outcome.didNotFinish": "“{title}” did not finish.",
1841
+ "install.outcome.oneAnswer": "One answer needs changing:",
1842
+ "install.outcome.passwords": "Passwords are never sent back to this page, so any you typed are empty again — retype them.",
1843
+ "install.password.hint": "At least 12 characters. Nothing on this board can reset it until mail works.",
1844
+ "install.password.label": "Your password",
1845
+ "install.step.admin.detail": "Argon2id, the same registration path a member uses, then promoted.",
1846
+ "install.step.admin.title": "Create the administrator",
1847
+ "install.step.forum.detail": "A category and one forum inside it, so the index is not empty.",
1848
+ "install.step.forum.title": "Create a first forum",
1849
+ "install.step.migrate.detail": "Creates every table, index and seeded usergroup. Forward-only.",
1850
+ "install.step.migrate.title": "Apply migrations",
1851
+ "install.step.seal.detail": "Irreversible. /install answers 404 from here on.",
1852
+ "install.step.seal.title": "Disable the installer",
1853
+ "install.step.settings.detail": "The only settings the installer writes. Everything else has a default and a screen.",
1854
+ "install.step.settings.title": "Record the board’s name and mail settings",
1855
+ "install.steps.count": "{count, plural, one {# step} other {# steps}}",
1856
+ "install.steps.done": "done",
1857
+ "install.steps.failed": "failed",
1858
+ "install.steps.howFar": "How far it got",
1859
+ "install.steps.notRun": "not run",
1860
+ "install.steps.what": "What installing does",
1861
+ "install.submit.idleNote": "Takes a few seconds. When it finishes, this page stops existing.",
1862
+ "install.submit.install": "Install",
1863
+ "install.submit.installing": "Installing…",
1864
+ "install.submit.pendingNote": "Applying migrations. This can take a few seconds — do not reload.",
1865
+ "install.submit.tryAgain": "Try again",
1866
+ "install.urlFromEnv": "The board’s address comes from {name} in this deployment’s environment, which overrides anything stored on the board.",
1867
+ "install.username.hint": "This is what you post under. Reserved, so nothing can impersonate the board: {names}.",
1868
+ "install.username.label": "Your name on the board",
1869
+ "install.validation.boardNameRequired": "Give the board a name.",
1870
+ "install.validation.boardUrl": "Give the absolute address, with no path — https://forum.example.",
1871
+ "install.validation.boardUrlRequired": "The board needs to know its own address.",
1872
+ "install.validation.email": "That does not look like an e-mail address.",
1873
+ "install.validation.mailConfiguration": "Mail settings could not be used.",
1874
+ "install.validation.mailEndpointRequired": "This provider needs an API endpoint.",
1875
+ "install.validation.mailFromRequired": "Mail needs an address to come from.",
1876
+ "install.validation.mailHostRequired": "Give the SMTP server’s hostname.",
1877
+ "install.validation.mailPasswordRequired": "This server is being given a username, so it needs a password too.",
1878
+ "install.validation.mailPort": "A port is a whole number between 1 and 65535.",
1879
+ "install.validation.mailPreset": "Choose one of the listed options.",
1880
+ "install.validation.mailSecretRequired": "This provider needs an API key.",
1881
+ "install.validation.mailUsernameRequired": "A password was given with no username.",
1882
+ "install.validation.nameTooLong": "That name is too long.",
1883
+ "install.validation.passwordMin": "The administrator’s password must be at least 12 characters.",
1884
+ "install.validation.passwordTooLong": "That password is too long.",
1885
+ "install.validation.url": "That is not a URL.",
1886
+ "install.validation.usernameMin": "The administrator’s name must be at least 3 characters.",
1887
+ "installAction.answerRefused": "That answer was refused.",
1888
+ "installAction.mailFailed": "A test message to {email} could not be sent, so nothing has been installed. The provider said: {error}",
1889
+ "installAction.noProviderResponse": "nothing at all.",
1890
+ "installAction.notReady": "The board is not ready to install. Reload this page for the current checks.",
1891
+ "installAction.unknownFailure": "Unknown failure.",
1892
+ "installPreflight.alreadyInstalled.detail": "The installer disabled itself when it finished, and it cannot be run again. Use /admin to configure the board, or the operator CLI if you have lost access.",
1893
+ "installPreflight.alreadyInstalled.title": "This board is already installed",
1894
+ "installPreflight.authSecret.missingDetail": "Sessions and tokens are signed with it and there is no default, deliberately: a shipped default is a board anybody who has read the source can sign a session for.",
1895
+ "installPreflight.authSecret.missingTitle": "AUTH_SECRET is not set",
1896
+ "installPreflight.authSecret.setTitle": "AUTH_SECRET is set",
1897
+ "installPreflight.blocker.one": "That has to be fixed before this board can be installed. Fix it, redeploy if it was an environment variable, and reload this page.",
1898
+ "installPreflight.blocker.other": "Those {count} things have to be fixed before this board can be installed. Fix them, redeploy if they were environment variables, and reload this page.",
1899
+ "installPreflight.connect.acceptedTitle": "The database accepted a connection",
1900
+ "installPreflight.connect.refusedDetail": "Check the host, the password and whether the database allows connections from this deployment. The board cannot install what it cannot reach.",
1901
+ "installPreflight.connect.refusedTitle": "The database refused the connection",
1902
+ "installPreflight.dataSource.detail": "Set DATABASE_URL (and DATA_SOURCE=postgres) and redeploy. Nothing installed into the fixture store would survive the next request, let alone the next deployment.",
1903
+ "installPreflight.dataSource.title": "The board is running on in-memory sample data",
1904
+ "installPreflight.databaseUrl.missingDetail": "Add it to the project environment and redeploy.",
1905
+ "installPreflight.databaseUrl.missingTitle": "DATABASE_URL is not set",
1906
+ "installPreflight.databaseUrl.setTitle": "DATABASE_URL is set",
1907
+ "installPreflight.deferredWarnings": "{warnings, plural, one {# warning} other {# warnings}}{blockers, plural, one {, for after that is fixed} other {, for after those are fixed}}",
1908
+ "installPreflight.fresh.title": "This board has not been installed yet",
1909
+ "installPreflight.hasMembers.detail": "{count, plural, one {There is # account in the database, so this is not a fresh board.} other {There are # accounts in the database, so this is not a fresh board.}} Installing again would add a second administrator to a board that already has members.",
1910
+ "installPreflight.hasMembers.title": "This board already has accounts",
1911
+ "installPreflight.level.blocker": "blocker",
1912
+ "installPreflight.level.ok": "passed",
1913
+ "installPreflight.level.warning": "warning",
1914
+ "installPreflight.mail.configuredTitle": "Mail is configured — {summary}",
1915
+ "installPreflight.mail.incompleteDetail": "The environment says {summary}, which overrides anything this installer or the settings screen could store — and it is missing something it needs. Complete it in the environment and redeploy, or unset MAIL_DRIVER and configure mail on the form below.",
1916
+ "installPreflight.mail.incompleteTitle": "MAIL_DRIVER is set but incomplete",
1917
+ "installPreflight.mail.unconfiguredDetail": "The form below can set it up, and this is the moment to do it. Installing without mail is supported and leaves a board people can still join — new accounts work immediately by default rather than waiting for a confirmation nothing would send. What does not work is the forgotten-password form, for every member and for you. Mail can also be configured later, from the settings screen, without a redeploy.",
1918
+ "installPreflight.mail.unconfiguredTitle": "Mail is not configured yet",
1919
+ "installPreflight.migrations.title": "{count, plural, one {# migration will be applied} other {# migrations will be applied}}",
1920
+ "installPreflight.passed": "{count, plural, one {# check passed} other {# checks passed}}",
1921
+ "installPreflight.publicUrl.formDetail": "Mail, feeds and canonical URLs need an absolute address — there is no request to be relative to when a digest is sent from the worker. The box is filled in from the address you are reading this at; check it before installing, because every link the board ever sends is built from what you confirm.",
1922
+ "installPreflight.publicUrl.formTitle": "The form below sets the board’s address",
1923
+ "installPreflight.publicUrl.setTitle": "The board’s address comes from APP_URL — {url}",
1924
+ "installPreflight.tickSecret.missingDetail": "The scheduled tick is how bans expire, digests send and counters reconcile. Whether that matters here depends on what drives it: a deployment with a worker process runs the tick in-process and never calls the endpoint, so the work happens either way — this is the compose stack the handbook documents. A deployment that drives the tick over HTTP needs the secret, because without it the endpoint refuses every call and nothing fails visibly; the work simply never happens.",
1925
+ "installPreflight.tickSecret.missingTitle": "TICK_SECRET is not set",
1926
+ "installPreflight.tickSecret.setTitle": "TICK_SECRET is set",
1927
+ "installPreflight.warning.one": "You can install without resolving that. Nothing will fail at the time — which is what makes it worth reading.",
1928
+ "installPreflight.warning.other": "You can install without resolving those. Nothing will fail at the time — which is what makes them worth reading.",
1929
+ "legal.page.privacy.footer": "Privacy",
1930
+ "legal.page.privacy.title": "Privacy policy",
1931
+ "legal.page.terms.footer": "Terms",
1932
+ "legal.page.terms.title": "Terms of service",
1933
+ "mailTest.action.failed": "The message could not be sent. {error} (Sent through: {configuration}.)",
1934
+ "mailTest.action.sent": "A test message is on its way to {email}. If it does not arrive within a minute or two, check the spam folder and then the provider’s own log — the board has done everything it can see.",
1935
+ "mailTest.boardFallback": "your board",
1936
+ "mailTest.body": "If you are reading it, the board can send mail: password resets, registration confirmations and notification e-mail will reach your members.",
1937
+ "mailTest.currentConfiguration": "Right now: {configuration}.",
1938
+ "mailTest.intro": "This is a test message from {board}.",
1939
+ "mailTest.sentThrough": "Sent through: {configuration}",
1940
+ "mailTest.subject": "Test message",
1941
+ "markdown.quote.attribution": "{author} wrote:",
1942
+ "markdown.quote.view-post": "View post",
1943
+ "message.deletedMember": "A deleted member",
1944
+ "message.noSubject": "(no subject)",
1945
+ "message.notRead": "Not read yet",
1946
+ "message.sent": "Your message has been sent.",
1947
+ "messageForm.bcc": "Bcc",
1948
+ "messageForm.bccHint": "Optional. These names are hidden from the other recipients.",
1949
+ "messageForm.bodyHint": "Markdown, the same as in a post.",
1950
+ "messageForm.deleteForever": "Delete permanently",
1951
+ "messageForm.emptyTrash": "Empty trash",
1952
+ "messageForm.markRead": "Mark read",
1953
+ "messageForm.markUnread": "Mark unread",
1954
+ "messageForm.moveToTrash": "Move to trash",
1955
+ "messageForm.receipt": "Tell me when it has been read",
1956
+ "messageForm.restore": "Restore to inbox",
1957
+ "messageForm.send": "Send message",
1958
+ "messageForm.subject": "Subject",
1959
+ "messageForm.to": "To",
1960
+ "messageForm.toHint": "One or more usernames, separated by commas.",
1961
+ "messageForm.withSelected": "With selected:",
1962
+ "modCpNav.modcp-forums.blurb": "Where you are appointed, and exactly what you may do in each.",
1963
+ "modCpNav.modcp-forums.title": "My forums",
1964
+ "modCpNav.modcp-ip.blurb": "Who else has posted from an address. Every lookup is logged.",
1965
+ "modCpNav.modcp-ip.title": "Address lookup",
1966
+ "modCpNav.modcp-log.blurb": "What has been done in your forums, by whom, and when.",
1967
+ "modCpNav.modcp-log.title": "Moderator log",
1968
+ "modCpNav.modcp.blurb": "What is waiting across the forums you moderate, and where you may act.",
1969
+ "modCpNav.modcp.title": "Overview",
1970
+ "modCpNav.moderation-reports.blurb": "What members have reported, who has picked it up, and what came of it.",
1971
+ "modCpNav.moderation-reports.title": "Reports",
1972
+ "modCpNav.moderation-warn.title": "Warn a member",
1973
+ "modCpNav.moderation.blurb": "Posts and threads held for approval in the forums you moderate.",
1974
+ "modCpNav.moderation.title": "Approval queue",
1975
+ "modcp.right.approve-content": "Approve content",
1976
+ "modcp.right.delete-posts": "Delete posts",
1977
+ "modcp.right.edit-posts": "Edit posts",
1978
+ "modcp.right.lock-unlock": "Lock and unlock",
1979
+ "modcp.right.merge-threads": "Merge threads",
1980
+ "modcp.right.move-threads": "Move threads",
1981
+ "modcp.right.pin-unpin": "Pin and unpin",
1982
+ "modcp.right.restore-posts": "Restore posts",
1983
+ "modcp.right.split-threads": "Split threads",
1984
+ "moderationForm.inline.approve": "Approve",
1985
+ "moderationForm.inline.delete": "Delete",
1986
+ "moderationForm.inline.moderatePosts": "Moderate selected posts",
1987
+ "moderationForm.inline.moderateThreads": "Moderate selected threads",
1988
+ "moderationForm.inline.restore": "Restore",
1989
+ "moderationForm.inline.splitOut": "Split out",
1990
+ "moderationForm.inline.splitTitleSr": "Title for the new thread",
1991
+ "moderationForm.inline.withPosts": "With selected posts:",
1992
+ "moderationForm.inline.withThreads": "With selected threads:",
1993
+ "moderationForm.lock.avatar": "Lock their avatar",
1994
+ "moderationForm.lock.signature": "Lock their signature",
1995
+ "moderationForm.lock.unlockAvatar": "Unlock their avatar",
1996
+ "moderationForm.lock.unlockSignature": "Unlock their signature",
1997
+ "moderationForm.lock.why": "Why (shown to the member)",
1998
+ "moderationForm.moveTo": "Move to",
1999
+ "moderationForm.newThreadTitle": "New thread title",
2000
+ "moderationForm.queue.approve": "Approve selected",
2001
+ "moderationForm.queue.by": "by {author}",
2002
+ "moderationForm.queue.inForum": "in {forum}",
2003
+ "moderationForm.queue.reject": "Reject selected",
2004
+ "moderationForm.report.dismiss": "Dismiss",
2005
+ "moderationForm.report.hint": "Say what a moderator should look at. The member you are reporting never sees this.",
2006
+ "moderationForm.report.label": "What is wrong with it?",
2007
+ "moderationForm.report.note": "Note for moderators (optional, never shown to the reporter)",
2008
+ "moderationForm.report.putBack": "Put back",
2009
+ "moderationForm.report.resolve": "Resolve",
2010
+ "moderationForm.report.submit": "Send report",
2011
+ "moderationForm.report.take": "Take this",
2012
+ "moderationForm.surgery.fromSr": "Split from post",
2013
+ "moderationForm.surgery.merge": "Merge away",
2014
+ "moderationForm.surgery.mergePlaceholder": "Merge into thread #",
2015
+ "moderationForm.surgery.mergeSr": "Merge into thread number",
2016
+ "moderationForm.surgery.split": "Split",
2017
+ "moderationForm.surgery.splitPoint": "#{number} by {author}",
2018
+ "moderationForm.surgery.titleSr": "New thread title",
2019
+ "moderationForm.tool.copy": "Copy",
2020
+ "moderationForm.tool.deleteThread": "Delete thread",
2021
+ "moderationForm.tool.lock": "Lock",
2022
+ "moderationForm.tool.move": "Move",
2023
+ "moderationForm.tool.pin": "Pin",
2024
+ "moderationForm.tool.unlock": "Unlock",
2025
+ "moderationForm.tool.unpin": "Unpin",
2026
+ "moderationForm.warn.points": "Points",
2027
+ "moderationForm.warn.reason": "Reason",
2028
+ "moderationForm.warn.revoke": "Revoke",
2029
+ "moderationForm.warn.revokePlaceholder": "Why it is being withdrawn",
2030
+ "moderationForm.warn.revokeSr": "Why this warning is being withdrawn",
2031
+ "moderationForm.warn.somethingElse": "Something else (set the title and points below)",
2032
+ "moderationForm.warn.submit": "Issue warning",
2033
+ "moderationForm.warn.title": "Warn {username}",
2034
+ "moderationForm.warn.titleHint": "Used only when no reason above is chosen.",
2035
+ "moderationForm.warn.titleLabel": "Title",
2036
+ "moderationForm.warn.what": "What this is for",
2037
+ "moderationForm.warn.whatHint": "Kept on the record and shown to {username}.",
2038
+ "nav.adminCp": "Admin CP",
2039
+ "nav.home": "Home",
2040
+ "nav.logOut": "Log out",
2041
+ "nav.messages": "Messages",
2042
+ "nav.modCp": "Moderator CP",
2043
+ "nav.moderationQueue": "Moderation queue",
2044
+ "nav.myPosts": "My posts",
2045
+ "nav.newPosts": "New posts",
2046
+ "nav.notifications": "Notifications",
2047
+ "nav.online": "Who's online",
2048
+ "nav.poweredBy": "Powered by Meith",
2049
+ "nav.profile": "Profile",
2050
+ "nav.register": "Register",
2051
+ "nav.reports": "Reports",
2052
+ "nav.search": "Search",
2053
+ "nav.signIn": "Sign in",
2054
+ "nav.subscriptions": "Subscriptions",
2055
+ "nav.unanswered": "Unanswered",
2056
+ "nav.userCp": "Your control panel",
2057
+ "notice.allRead": "All notifications marked as read.",
2058
+ "notice.app.account-e-mail-address-send-test": "Your account has no e-mail address to send a test to.",
2059
+ "notice.app.board-database-api": "This board has no database, so it has no API.",
2060
+ "notice.app.board-reports": "This board has no reports.",
2061
+ "notice.app.board-running-in-memory-sample-data": "This board is running on in-memory sample data, so it has no warnings.",
2062
+ "notice.app.board-running-in-memory-sample-data-2": "This board is running on in-memory sample data, so it has no queue.",
2063
+ "notice.app.board-running-in-memory-sample-data-3": "This board is running on in-memory sample data, so it has no thread tools.",
2064
+ "notice.app.board-running-in-memory-sample-data-4": "This board is running on in-memory sample data, so it has no moderation tools.",
2065
+ "notice.app.board-running-in-memory-sample-data-5": "This board is running on in-memory sample data, so it cannot take reports.",
2066
+ "notice.app.board-running-in-memory-sample-data-6": "This board is running on in-memory sample data, so it cannot accept posts.",
2067
+ "notice.app.board-running-in-memory-sample-data-7": "This board is running on in-memory sample data, so it cannot accept edits.",
2068
+ "notice.app.board-running-in-memory-sample-data-8": "This board is running on in-memory sample data, so it cannot accept changes.",
2069
+ "notice.app.board-working-mail-configuration-there": "This board has no working mail configuration, so there is nothing to test. ",
2070
+ "notice.app.choose-approve-reject": "Choose approve or reject.",
2071
+ "notice.app.choose-post-split-from": "Choose the post to split from.",
2072
+ "notice.app.choose-resolve-dismiss": "Choose resolve or dismiss.",
2073
+ "notice.app.choose-what-with-selected-items": "Choose what to do with the selected items.",
2074
+ "notice.app.enter-number-thread-merge-into": "Enter the number of the thread to merge into.",
2075
+ "notice.app.exist": "That does not exist.",
2076
+ "notice.app.forum-exist": "That forum does not exist.",
2077
+ "notice.app.member-exist": "That member does not exist.",
2078
+ "notice.app.notification-exist": "That notification does not exist.",
2079
+ "notice.app.passkey-could-found": "That passkey could not be found.",
2080
+ "notice.app.post-exist": "That post does not exist.",
2081
+ "notice.app.report-exist": "That report does not exist.",
2082
+ "notice.app.session-could-found": "That session could not be found.",
2083
+ "notice.app.session-could-identified-nothing-signed": "This session could not be identified, so nothing was signed out.",
2084
+ "notice.app.session-had-already-ended": "That session had already ended.",
2085
+ "notice.app.sign-in-could-found": "That sign-in could not be found.",
2086
+ "notice.app.something-went-wrong-please-try": "Something went wrong. Please try again.",
2087
+ "notice.app.such-token": "No such token.",
2088
+ "notice.app.test-could-run": "The test could not be run.",
2089
+ "notice.app.thread-exist": "That thread does not exist.",
2090
+ "notice.app.too-many-calls-endpoint-give": "Too many calls to this endpoint. Give it a moment.",
2091
+ "notice.app.two-new-passwords-match": "The two new passwords do not match.",
2092
+ "notice.app.two-passwords-match": "The two passwords do not match.",
2093
+ "notice.app.unsubscribe-link-valid": "That unsubscribe link is not valid.",
2094
+ "notice.app.warning-exist": "That warning does not exist.",
2095
+ "notice.markedRead": "Marked as read.",
2096
+ "notice.preferencesSaved": "Your notification preferences were saved.",
2097
+ "notification.mail.boardFallback": "the forum",
2098
+ "notification.mail.greeting": "Hello {username},",
2099
+ "notification.pm.receipt.description": "Somebody opens a private message you sent with a read receipt requested. Raised once, on the first read.",
2100
+ "notification.pm.receipt.title": "A message you asked to track is read",
2101
+ "notification.pm.received.description": "Somebody sends you a private message. The notification carries who from and the subject, never the message itself.",
2102
+ "notification.pm.received.title": "You receive a private message",
2103
+ "notification.post.mentioned.description": "Somebody writes @your-name in a post. The notification links to the post so you can read it in place.",
2104
+ "notification.post.mentioned.title": "Somebody mentions you in a post",
2105
+ "notification.post.quoted.description": "Somebody carries your words into their reply with the quote button. The notification links to the reply that quotes you.",
2106
+ "notification.post.quoted.title": "Somebody quotes your post",
2107
+ "notification.render.digest.daily": "daily",
2108
+ "notification.render.digest.entry": "• {title} — {count, plural, one {# post} other {# posts}}{author}",
2109
+ "notification.render.digest.entryAuthor": ", latest from {author}",
2110
+ "notification.render.digest.fallbackTitle": "A thread",
2111
+ "notification.render.digest.more": "• and {count} more",
2112
+ "notification.render.digest.subject": "Your {cadence} digest: {posts, plural, one {# post} other {# posts}} in {threads, plural, one {# thread} other {# threads}}",
2113
+ "notification.render.digest.weekly": "weekly",
2114
+ "notification.render.generic": "Notification: {kind}",
2115
+ "notification.render.mentioned.body": "{by} mentioned you by name in a post in {title}.",
2116
+ "notification.render.mentioned.subject": "{by} mentioned you in {title}",
2117
+ "notification.render.occurrences": "{subject} ({count} times)",
2118
+ "notification.render.pluginFallback": "A plugin has news for you",
2119
+ "notification.render.pm.fallbackSubject": "a private message",
2120
+ "notification.render.pm.messageFallback": "your message",
2121
+ "notification.render.pm.receiptBody": "“{subject}” has been read.",
2122
+ "notification.render.pm.receiptSubject": "{by} read your message",
2123
+ "notification.render.pm.receivedSubject": "New private message from {from}",
2124
+ "notification.render.pm.recipientFallback": "The recipient",
2125
+ "notification.render.points": "{count, plural, one {# point} other {# points}}",
2126
+ "notification.render.quoted.body": "{by} quoted one of your posts in a reply in {title}.",
2127
+ "notification.render.quoted.subject": "{by} quoted your post in {title}",
2128
+ "notification.render.reply.author": "The most recent one is from {author}.",
2129
+ "notification.render.reply.fallbackTitle": "a thread you follow",
2130
+ "notification.render.reply.noAuthor": "There is something new to read.",
2131
+ "notification.render.reply.subject": "{count, plural, one {New reply in {title}} other {# new replies in {title}}}",
2132
+ "notification.render.report.actionedBody": "A moderator reviewed your report about {label} and has acted on it. Thank you for reporting it.",
2133
+ "notification.render.report.actionedSubject": "A report you filed was actioned",
2134
+ "notification.render.report.fallbackLabel": "the content you reported",
2135
+ "notification.render.report.rejectedBody": "A moderator reviewed your report about {label} and decided no action was needed.",
2136
+ "notification.render.report.rejectedSubject": "A report you filed was closed without action",
2137
+ "notification.render.somebody": "Somebody",
2138
+ "notification.render.task.body": "The task “{taskId}” raised an error on its last run. It will be retried on the next tick; a task that keeps failing needs looking at.",
2139
+ "notification.render.task.error": "Error: {error}",
2140
+ "notification.render.task.fallbackId": "a scheduled task",
2141
+ "notification.render.task.subject": "Scheduled task failed: {taskId}",
2142
+ "notification.render.threadFallback": "a thread",
2143
+ "notification.render.warning.banned": "Your account has been suspended.",
2144
+ "notification.render.warning.body": "You received a warning worth {points}. Your total is now {total}.",
2145
+ "notification.render.warning.fallbackTitle": "a rule breach",
2146
+ "notification.render.warning.moderatePosting": "Your posts will be held for approval while the restriction is in force.",
2147
+ "notification.render.warning.reason": "Reason given: {reason}",
2148
+ "notification.render.warning.subject": "You have been warned: {title}",
2149
+ "notification.render.warning.suspendPosting": "You cannot post while the restriction is in force.",
2150
+ "notification.report.actioned.description": "A moderator has resolved or rejected something you reported. The moderator's private note is never included.",
2151
+ "notification.report.actioned.title": "A report you filed is closed",
2152
+ "notification.subscription.digest.description": "A summary of what arrived in the threads and forums you follow on a digest cadence.",
2153
+ "notification.subscription.digest.title": "Your daily or weekly digest is ready",
2154
+ "notification.subscription.reply.description": "Somebody replies in a thread or forum you follow and asked to hear about as it happens.",
2155
+ "notification.subscription.reply.title": "A thread you follow gets a reply",
2156
+ "notification.system.task_failed.description": "A background task raised an error. Counters, digests and search indexing all run this way, so a task failing silently is how a board drifts without anybody noticing.",
2157
+ "notification.system.task_failed.title": "A scheduled task fails",
2158
+ "notification.warning.received.description": "A moderator has warned you. The notification records what it was for and how many points it carried.",
2159
+ "notification.warning.received.title": "You receive a warning",
2160
+ "offline.fallback": "The board is closed for maintenance. Please try again shortly.",
2161
+ "offline.kicker": "Offline",
2162
+ "offline.logIn": "Log in",
2163
+ "offline.title": "The board is closed",
2164
+ "page.account-security": "Account security",
2165
+ "page.add-forum": "Add a forum",
2166
+ "page.add-group": "Add a group",
2167
+ "page.add-rule": "Add a rule",
2168
+ "page.additional-groups": "Additional groups",
2169
+ "page.address-lookup": "Address lookup",
2170
+ "page.admin-log": "Admin log",
2171
+ "page.administrative-moderation-actions-appear-here": "Administrative and moderation actions appear here as they happen.",
2172
+ "page.announcements": "Announcements",
2173
+ "page.announcements-b": "Announcements →",
2174
+ "page.anti-spam": "Anti-spam",
2175
+ "page.api-tokens": "API tokens",
2176
+ "page.approval-queue": "Approval queue",
2177
+ "page.approvals-locks-moves-deletions-forums": "Approvals, locks, moves and deletions in your forums appear here as they happen.",
2178
+ "page.ask-question": "Ask a question",
2179
+ "page.attachments": "Attachments",
2180
+ "page.attachments-b": "Attachments →",
2181
+ "page.avatar": "Your avatar",
2182
+ "page.awaiting-activation": "Awaiting activation",
2183
+ "page.awaiting-processing": "Awaiting processing",
2184
+ "page.back-their-profile": "Back to their profile",
2185
+ "page.before-installing": "Before installing",
2186
+ "page.before-press-it": "Before you press it:",
2187
+ "page.board": "The board",
2188
+ "page.board-settings": "Board settings",
2189
+ "page.board-statistics": "Board statistics",
2190
+ "page.buddies-ignored-members": "Buddies and ignored members",
2191
+ "page.challenge-switched-there-nothing-ask": "The challenge is switched on and there is nothing to ask.",
2192
+ "page.changing-either-e-mail-address-password": "Changing either your e-mail address or your password needs the password you have now. Everything below it is a way into your account, and a record of what has used one.",
2193
+ "page.choose-new-password": "Choose a new password",
2194
+ "page.choose-registration-date-see-what": "Choose a registration date to see what a prune would reach.",
2195
+ "page.choose-which-these-receive-by": "Choose which of these you receive by e-mail",
2196
+ "page.confirm-account": "Confirm your account",
2197
+ "page.confirm-e-mail-address": "Confirm your e-mail address",
2198
+ "page.confirm-it": "Confirm it is you",
2199
+ "page.content": "Content",
2200
+ "page.control-panel": "Control panel",
2201
+ "page.control-panel-2": "Your control panel",
2202
+ "page.copy-subforums": "Copy to subforums",
2203
+ "page.create-account": "Create account",
2204
+ "page.create-account-2": "Create your account",
2205
+ "page.custom-directives": "Custom directives",
2206
+ "page.edit-post": "Edit post",
2207
+ "page.email-cannot-be-unsent": "An email cannot be unsent.",
2208
+ "page.email-contains": "Email contains",
2209
+ "page.enter-address-registered-with-we": "Enter the address you registered with and we will send the confirmation link again.",
2210
+ "page.enter-email-we-ll-send": "Enter your email and we’ll send a reset link.",
2211
+ "page.enter-new-password-for-account": "Enter a new password for your account.",
2212
+ "page.every-administrative-moderation-action-newest": "Every administrative and moderation action, newest first.",
2213
+ "page.every-forum-beneath-this-one": "Every forum beneath this one already matches it. There is nothing to copy.",
2214
+ "page.every-report-forums-moderate-has": "Every report in the forums you moderate has been resolved or dismissed.",
2215
+ "page.everything-about-account-that-decide": "Everything about your account that you decide.",
2216
+ "page.existing-tokens": "Existing tokens",
2217
+ "page.filename-contains": "Filename contains",
2218
+ "page.forum-options": "Forum options",
2219
+ "page.forum-permissions": "Forum permissions",
2220
+ "page.forums": "Forums",
2221
+ "page.forums-2": "Your forums",
2222
+ "page.forums-responsible-for-what-they": "The forums you are responsible for, and what they need from you.",
2223
+ "page.group": "Group",
2224
+ "page.groups": "Groups",
2225
+ "page.hidden-field-trap": "Hidden-field trap",
2226
+ "page.history": "History",
2227
+ "page.hooks-use": "Hooks in use",
2228
+ "page.hourly-limits": "The hourly limits",
2229
+ "page.how-it-looks": "How it looks",
2230
+ "page.include-deleted-accounts": "Include deleted accounts",
2231
+ "page.install": "Install",
2232
+ "page.install-this-board": "Install this board",
2233
+ "page.installed-themes": "Installed themes",
2234
+ "page.installing-plugin": "Installing a plugin",
2235
+ "page.invalid-reset-link": "Invalid reset link",
2236
+ "page.ip-starts-with": "IP starts with",
2237
+ "page.issue-token": "Issue a token",
2238
+ "page.join-discussion": "Join the discussion.",
2239
+ "page.keep-which-account": "Keep which account?",
2240
+ "page.language-timezone-how-much-thread": "Your language and timezone, and how much of a thread fits on a page.",
2241
+ "page.last-used": "Last used",
2242
+ "page.latest-activity": "Latest activity",
2243
+ "page.lists": "Your lists",
2244
+ "page.logo-alt-text": "Logo alt text",
2245
+ "page.look-up": "Look up",
2246
+ "page.losing-account-closed-not-deleted": "The losing account is closed, not deleted. Its username stays taken.",
2247
+ "page.mass-mail": "Mass mail",
2248
+ "page.mass-membership-change": "Mass membership change",
2249
+ "page.member": "Member",
2250
+ "page.member-profile": "Member profile",
2251
+ "page.members": "Members",
2252
+ "page.members-who-have-never-been": "Members who have never been seen at all count as inactive.",
2253
+ "page.merge-account": "Merge account",
2254
+ "page.message-store-nearly-full-deleting": "Your message store is nearly full. Deleting messages and emptying the trash frees space.",
2255
+ "page.minimum-fill-time": "Minimum fill time",
2256
+ "page.moderation-queue": "Moderation queue",
2257
+ "page.moderator-control-panel": "Moderator control panel",
2258
+ "page.moderator-log": "Moderator log",
2259
+ "page.moderator-will-look-at-this": "A moderator will look at this. Your report is private.",
2260
+ "page.my-forums": "My forums",
2261
+ "page.never-warned": "Never warned",
2262
+ "page.new-announcement": "New announcement",
2263
+ "page.new-thread": "New thread",
2264
+ "page.newest-member": "Newest member",
2265
+ "page.no-filters-posts-show-as": "No filters. Posts show as written.",
2266
+ "page.no-forum-appointments": "No forum appointments",
2267
+ "page.no-granular-rights-here-group": "No granular rights here — your group permissions apply.",
2268
+ "page.no-members-online-right-now": "No members are online right now.",
2269
+ "page.no-new-member-can-activate": "No new member can activate their account",
2270
+ "page.no-other-account-has-been": "No other account has been seen on the same network.",
2271
+ "page.no-other-account-shares-recorded": "No other account shares a recorded range with this member.",
2272
+ "page.no-plugins-configured-this-board": "No plugins are configured on this board.",
2273
+ "page.no-posts-yet": "No posts yet",
2274
+ "page.no-shared-range": "No shared range",
2275
+ "page.no-such-member": "No such member.",
2276
+ "page.no-threads-yet": "No threads yet",
2277
+ "page.no-tokens-have-been-issued": "No tokens have been issued.",
2278
+ "page.nobody-can-finish-registering": "Nobody can finish registering",
2279
+ "page.nobody-counted-here": "Nobody is counted here",
2280
+ "page.nobody-has-posted-yet": "Nobody has posted yet.",
2281
+ "page.nobody-has-rated-them-yet": "Nobody has rated them yet.",
2282
+ "page.nobody-here": "Nobody is here",
2283
+ "page.none-board-shows-no-announcements": "None. The board shows no announcements.",
2284
+ "page.none-configured-so-composer-offers": "None configured, so the composer offers no prefixes.",
2285
+ "page.none-yet-challenge-asks-nothing": "None yet. The challenge asks nothing.",
2286
+ "page.not-counted-yet": "Not counted yet",
2287
+ "page.not-seen-since": "Not seen since",
2288
+ "page.nothing-counted-here": "Nothing is counted here",
2289
+ "page.nothing-has-been-logged-yet": "Nothing has been logged yet",
2290
+ "page.nothing-has-run-yet": "Nothing has run yet.",
2291
+ "page.nothing-logged": "Nothing logged.",
2292
+ "page.nothing-logged-yet": "Nothing logged yet",
2293
+ "page.nothing-matches": "Nothing matches.",
2294
+ "page.nothing-outstanding": "Nothing outstanding",
2295
+ "page.nothing-recorded-yet": "Nothing recorded yet.",
2296
+ "page.nothing-reset-this-theme-already": "Nothing to reset — this theme is already exactly as it ships.",
2297
+ "page.nothing-show-yet": "Nothing to show yet.",
2298
+ "page.notification-preferences": "Notification preferences",
2299
+ "page.notifications": "Notifications",
2300
+ "page.older-activity": "Older activity",
2301
+ "page.older-ratings": "Older ratings",
2302
+ "page.older-warnings": "Older warnings",
2303
+ "page.one-more-step": "One more step",
2304
+ "page.only-accounts-still-awaiting-activation": "Only accounts still awaiting activation",
2305
+ "page.only-prefix-ever-stored-so": "Only a prefix is ever stored, so this is a network.",
2306
+ "page.options": "Your options",
2307
+ "page.overview": "Overview",
2308
+ "page.password-was-right-enter-code": "Your password was right. Enter the code your authenticator app is showing.",
2309
+ "page.plugin": "Plugin",
2310
+ "page.plugins": "Plugins",
2311
+ "page.posts-at-least": "Posts at least",
2312
+ "page.posts-at-most": "Posts at most",
2313
+ "page.privacy-policy": "Privacy policy",
2314
+ "page.private-message": "Private message",
2315
+ "page.private-messages": "Private messages",
2316
+ "page.private-messages-not-moderated-but": "Private messages are not moderated, but the person you write to can report one.",
2317
+ "page.profile": "Your profile",
2318
+ "page.promotions": "Promotions",
2319
+ "page.prune-dormant-accounts": "Prune dormant accounts",
2320
+ "page.prune-members": "Prune members",
2321
+ "page.question": "A question",
2322
+ "page.recent-runs": "Recent runs",
2323
+ "page.redirecting": "Redirecting",
2324
+ "page.registered-after": "Registered after",
2325
+ "page.registered-before": "Registered before",
2326
+ "page.registered-without-definition-key-no": "Registered without a definition — a key, and no code.",
2327
+ "page.registration-questions": "Registration questions",
2328
+ "page.reply": "Reply",
2329
+ "page.report": "Report",
2330
+ "page.report-this-message": "Report this message",
2331
+ "page.reports": "Reports",
2332
+ "page.reputation": "Reputation",
2333
+ "page.required-without-it-prune-matches": "Required. Without it a prune matches everybody.",
2334
+ "page.reset-password": "Reset password",
2335
+ "page.reset-password-2": "Reset your password",
2336
+ "page.run-it": "Run it",
2337
+ "page.running-this-server": "Running on this server",
2338
+ "page.scheduled-tasks": "Scheduled tasks",
2339
+ "page.scheduler-not-running": "The scheduler is not running",
2340
+ "page.scoped-forums-moderate-plus-own": "Scoped to the forums you moderate, plus your own actions elsewhere.",
2341
+ "page.search": "Search",
2342
+ "page.search-index": "Search index",
2343
+ "page.search-results": "Search results",
2344
+ "page.search-settings": "Search settings",
2345
+ "page.sections": "Sections",
2346
+ "page.see-all-ratings": "See all ratings",
2347
+ "page.settings-anti-spam": "Settings → Anti-spam",
2348
+ "page.show-me": "Show me",
2349
+ "page.shown-beside-every-post-make": "Shown beside every post you make, and on your profile.",
2350
+ "page.shown-under-every-post-have": "Shown under every post you have made, past and future.",
2351
+ "page.sign": "Sign in",
2352
+ "page.sign-account": "Sign in to your account.",
2353
+ "page.sign-in-activity": "Sign-in activity",
2354
+ "page.signature": "Your signature",
2355
+ "page.skip-content": "Skip to content",
2356
+ "page.slow-calls": "Slow calls",
2357
+ "page.subscriptions": "Subscriptions",
2358
+ "page.subscriptions.noForums": "You are not following any forums.",
2359
+ "page.subscriptions.noThreads": "You are not following any threads.",
2360
+ "page.subscriptions.none": "You are not following anything yet. Use the “Follow” control on a thread or a forum, or tick the box when you post.",
2361
+ "page.subscriptions.since": "Following since {time}",
2362
+ "page.switched-here": "Switched on here",
2363
+ "page.switched-off-here-its-hooks": "Switched off here. Its hooks are not called on any instance.",
2364
+ "page.system-health": "System health",
2365
+ "page.terms-service": "Terms of service",
2366
+ "page.theme": "Theme",
2367
+ "page.themes": "Themes",
2368
+ "page.this-board-does-not-know": "This board does not know its own address",
2369
+ "page.this-board-keeps-no-statistics": "This board keeps no statistics.",
2370
+ "page.this-board-not-tracking-who": "This board is not tracking who is online.",
2371
+ "page.this-board-running-in-memory-sample": "This board is running on in-memory sample data, so it has nobody to mail.",
2372
+ "page.this-board-running-in-memory-sample-2": "This board is running on in-memory sample data, so it has no membership to sweep.",
2373
+ "page.this-board-running-in-memory-sample-3": "This board is running on in-memory sample data, so its content settings are not stored.",
2374
+ "page.this-board-running-in-memory-sample-4": "This board is running on in-memory sample data, so it stores no files.",
2375
+ "page.this-board-running-in-memory-sample-5": "This board is running on in-memory sample data, so it stores no announcements.",
2376
+ "page.this-board-running-in-memory-sample-6": "This board is running on in-memory sample data, so its groups cannot be edited.",
2377
+ "page.this-board-running-in-memory-sample-7": "This board is running on in-memory sample data, so its memberships cannot be edited.",
2378
+ "page.this-board-running-in-memory-sample-8": "This board is running on in-memory sample data, so promotions cannot run.",
2379
+ "page.this-board-running-in-memory-sample-9": "This board is running on in-memory sample data, so it stores no questions.",
2380
+ "page.this-board-running-in-memory-sample-b": "This board is running on in-memory sample data, so it has no API.",
2381
+ "page.this-build": "In this build",
2382
+ "page.this-forum-has-nothing-beneath": "This forum has nothing beneath it.",
2383
+ "page.this-link-missing-its-token": "This link is missing its token. Request a new one to continue.",
2384
+ "page.this-member-has-no-warning": "This member has no warning on record — nothing issued, and nothing lapsed.",
2385
+ "page.this-page-works-once-when": "This page works once. When it finishes it disables itself, and the address stops existing.",
2386
+ "page.thread-prefixes": "Thread prefixes",
2387
+ "page.threads": "Threads",
2388
+ "page.total-time": "Total time",
2389
+ "page.totals": "Totals",
2390
+ "page.totals-rolled-up-by-scheduled": "The totals are rolled up by a scheduled task, and it has not run.",
2391
+ "page.unsubscribe": "Unsubscribe",
2392
+ "page.unsubscribe.emailScope": "This will stop subscription e-mails. What you follow stays as it is, and new posts will still appear in your notifications on the board.",
2393
+ "page.unsubscribe.targetScope": "This will stop notifications about the thread or forum this message was about. Everything else you follow stays as it is.",
2394
+ "page.upgrade-pending": "Upgrade pending.",
2395
+ "page.username-contains": "Username contains",
2396
+ "page.using-hosted-captcha": "Using a hosted captcha",
2397
+ "page.verify.note": "Nothing arrived? Check the spam folder first, then send another link. Each new link replaces the last one.",
2398
+ "page.verify.sentTo": "We have sent a confirmation link to {email}. Follow it to finish setting up your account — until then you will not be able to sign in.",
2399
+ "page.waiting-for": "Waiting for you",
2400
+ "page.warn-member": "Warn a member",
2401
+ "page.we-have-sent-confirmation-link": "We have sent a confirmation link. Follow it to finish setting up your account.",
2402
+ "page.welcome-back": "Welcome back",
2403
+ "page.what-board-does-schedule-whether": "What the board does on a schedule, and whether it is doing it.",
2404
+ "page.what-each-control-worth": "What each control is worth",
2405
+ "page.what-merge-does-full": "What a merge does, in full:",
2406
+ "page.what-would-happen-now": "What would happen now",
2407
+ "page.where-appointed-exactly-what-may": "Where you are appointed, and exactly what you may do in each.",
2408
+ "page.whether-any-it-also-arrives": "Whether any of it also arrives by e-mail",
2409
+ "page.which-board-s-notifications-also": "Which of the board’s notifications also reach you by e-mail.",
2410
+ "page.who-has-read-it": "Who has read it",
2411
+ "page.who-s-online": "Who’s online",
2412
+ "page.whole-log": "The whole log",
2413
+ "page.whole-theme": "The whole theme",
2414
+ "page.word-filters": "Word filters",
2415
+ "page.write-message": "Write a message",
2416
+ "panel.otherPanels": "Other panels",
2417
+ "panel.sections": "Sections",
2418
+ "pollForm.label": "Poll",
2419
+ "pollForm.vote": "Vote",
2420
+ "pollForm.votes": "{count, plural, one {# vote} other {# votes}}",
2421
+ "postForm.backToForum": "Back to {forum}",
2422
+ "postForm.backToThread": "Back to the thread",
2423
+ "postForm.deletedPost": "Deleted post",
2424
+ "postForm.editPost": "Edit post",
2425
+ "postForm.newThread": "Post a new thread in {forum}",
2426
+ "postForm.reply": "Reply to {thread}",
2427
+ "presence.invisible": "{count, plural, one {# browsing invisibly.} other {# browsing invisibly.}}",
2428
+ "presence.reading": "Reading {title}",
2429
+ "presence.somewhere": "Somewhere on the board",
2430
+ "presence.summary": "{total, number} here in the last 15 minutes — {members, plural, one {# member} other {# members}} and {guests, plural, one {# guest} other {# guests}}.",
2431
+ "presence.viewing": "Viewing {title}",
2432
+ "profile.sendMessage": "Send a message",
2433
+ "profile.warnMember": "Warn this member",
2434
+ "queue.newThread": "New thread",
2435
+ "queue.reply": "Reply",
2436
+ "reputation.deletedMember": "A deleted member",
2437
+ "reputation.negative": "{count, number} negative",
2438
+ "reputation.neutral": "{count, number} neutral",
2439
+ "reputation.none": "No ratings yet",
2440
+ "reputation.positive": "{count, number} positive",
2441
+ "reputation.ratingsLeft": "{left, number} of {max, number} ratings left today",
2442
+ "reputation.recorded": "Your rating has been recorded.",
2443
+ "reputation.summary": "{total} ({detail})",
2444
+ "reputation.withdrawn": "Your rating has been withdrawn.",
2445
+ "search.advanced": "Advanced options",
2446
+ "search.anybody": "Anybody",
2447
+ "search.applyFilters": "Apply filters",
2448
+ "search.everyForum": "Every forum",
2449
+ "search.everyVisibleForum": "Every forum I can see",
2450
+ "search.filterLabel": "Filter and sort these results",
2451
+ "search.grouping.posts": "Every matching post",
2452
+ "search.grouping.threads": "One row per thread",
2453
+ "search.includeSubforums": "Include subforums of the forum above",
2454
+ "search.match.everything": "Titles and post text",
2455
+ "search.match.titles": "Thread titles only",
2456
+ "search.matchingIn": "Matching in",
2457
+ "search.nextResults": "Next {count, plural, one {# result} other {# results}}",
2458
+ "search.period.any": "Any time",
2459
+ "search.period.day": "Past 24 hours",
2460
+ "search.period.month": "Past month",
2461
+ "search.period.week": "Past week",
2462
+ "search.period.year": "Past year",
2463
+ "search.posted": "Posted",
2464
+ "search.postedBy": "Posted by",
2465
+ "search.show": "Show",
2466
+ "search.sort.newest": "Newest first",
2467
+ "search.sort.oldest": "Oldest first",
2468
+ "search.sort.relevance": "Best match",
2469
+ "search.sortBy": "Sort by",
2470
+ "search.within": "Search within",
2471
+ "search.withinHint": "Adds your words to the ones above. Everything already typed stays.",
2472
+ "search.withinLabel": "Search within these results",
2473
+ "securityNotice.factorOff": "Two-factor authentication is off. Your password is all that is asked for now.",
2474
+ "securityNotice.factorSetup": "Add the key below to your authenticator app, then confirm a code.",
2475
+ "securityNotice.passkeyAdded": "That passkey is ready. You can sign in with it from now on.",
2476
+ "securityNotice.passkeyRemoved": "That passkey has been removed. It can no longer reach your account.",
2477
+ "securityNotice.sessionRevoked": "That session has been signed out.",
2478
+ "securityNotice.sessionsElsewhere": "Every other session has been signed out.",
2479
+ "setting.antispam.captcha_mode.description": "Off, or a question you set. Swapping in a hosted captcha is a small amount of code against the provider seam, not a setting — see the plugin and anti-spam documentation.",
2480
+ "setting.antispam.captcha_mode.label": "Registration challenge",
2481
+ "setting.antispam.honeypot.description": "Adds a field a person never sees and a bot fills in. Costs a real visitor nothing, and catches the least sophisticated half of them.",
2482
+ "setting.antispam.honeypot.label": "Hidden-field trap",
2483
+ "setting.antispam.login_ip_attempts.description": "The per-account counters catch somebody guessing at one account. This one catches the opposite shape — a single guess against each of a thousand accounts — and shares the lockout window with them. 0 disables it.",
2484
+ "setting.antispam.login_ip_attempts.label": "Failed logins from one address before lockout",
2485
+ "setting.antispam.message_per_hour.description": "Counted per sender, not per recipient — one message to ten people is one send and ten deliveries.",
2486
+ "setting.antispam.message_per_hour.label": "Private messages per hour",
2487
+ "setting.antispam.min_form_seconds.description": "A form submitted faster than this is treated as automated. 0 disables the check. Keep it low — a password manager filling a form in two seconds is a real person.",
2488
+ "setting.antispam.min_form_seconds.label": "Minimum seconds to fill the registration form",
2489
+ "setting.antispam.moderate_first_posts.description": "Posts are held for approval until the account has this many. 0 disables it. The cheapest control a board has: spam accounts post once and never return.",
2490
+ "setting.antispam.moderate_first_posts.label": "Hold a new member’s first posts",
2491
+ "setting.antispam.post_per_hour.description": "Threads and replies together. 0 disables the limit. Members with “bypass flood check” are exempt, as they are from the flood interval.",
2492
+ "setting.antispam.post_per_hour.label": "Posts per hour",
2493
+ "setting.antispam.register_ip_per_hour.description": "Counted per /24 (or /48), so a household or an office shares one allowance. Independent of the challenge: a board with no captcha is the one that needs this most. 0 disables the limit.",
2494
+ "setting.antispam.register_ip_per_hour.label": "Registrations per hour from one address",
2495
+ "setting.antispam.report_per_hour.description": "A limit on reporting is a limit on asking for help, so set it high enough that a member having a bad day is not silenced. 0 disables.",
2496
+ "setting.antispam.report_per_hour.label": "Reports per hour",
2497
+ "setting.antispam.reset_ip_per_hour.description": "The same limit counted per requesting /24, which is what stops one caller working through a list of e-mail addresses. 0 disables it.",
2498
+ "setting.antispam.reset_ip_per_hour.label": "Password reset requests per hour from one address",
2499
+ "setting.antispam.reset_per_hour.description": "How many reset mails one e-mail address can be sent in an hour. Without it, the reset form is an e-mail cannon anybody can point at anybody. 0 disables the limit.",
2500
+ "setting.antispam.reset_per_hour.label": "Password reset requests per hour per address",
2501
+ "setting.antispam.search_per_hour.description": "Searching is the most expensive thing a guest can do. 0 disables.",
2502
+ "setting.antispam.search_per_hour.label": "Searches per hour",
2503
+ "setting.antispam.upload_per_hour.description": "Attachments and avatars. 0 disables the limit.",
2504
+ "setting.antispam.upload_per_hour.label": "Uploads per hour",
2505
+ "setting.board.description.description": "Used as the default meta description for the board index.",
2506
+ "setting.board.description.label": "Board description",
2507
+ "setting.board.legacy_redirects.description": "Answer MyBB addresses — showthread.php, forumdisplay.php, member.php, index.php, and the rewritten Thread-Title-91, Thread-Title--4102 and Forum-Name-3 forms — with a permanent redirect (308) to the imported content. Needs an import: the redirect is a lookup in the legacy id map.",
2508
+ "setting.board.legacy_redirects.label": "Redirect old MyBB URLs",
2509
+ "setting.board.logo_alt.description": "What a screen reader announces in place of the logo. Leave empty to use the board name, which is usually what the logo says anyway.",
2510
+ "setting.board.logo_alt.label": "Logo alt text",
2511
+ "setting.board.logo_dark.description": "Used when the reader is in dark mode. Falls back to the light one.",
2512
+ "setting.board.logo_dark.label": "Logo (dark)",
2513
+ "setting.board.logo_light.description": "Shown in the header in place of the board name. Uploaded, not typed.",
2514
+ "setting.board.logo_light.label": "Logo (light)",
2515
+ "setting.board.name.description": "Shown in the header, page titles, and outgoing e-mail.",
2516
+ "setting.board.name.label": "Board name",
2517
+ "setting.board.offline.description": "Closes every board page to everyone without the \"can view board offline\" permission: they get the offline message instead, and the board’s feeds answer 503. Administrators keep access so they can finish maintenance, and the login screen, the control panel and the health endpoint stay reachable. An offline board is never indexable.",
2518
+ "setting.board.offline.label": "Board offline",
2519
+ "setting.board.offline_message.description": "Shown on the offline page, and returned as the body of the 503 the feeds answer with. Left empty, a plain maintenance line is shown instead.",
2520
+ "setting.board.offline_message.label": "Offline message",
2521
+ "setting.board.url.description": "The absolute public origin, with no trailing slash — https://forum.example. Every link the board sends is built from it, because nothing in a queued job or a mail template knows the request that caused it. Left empty, mail still arrives and carries no link. Setting APP_URL in the environment overrides this and makes the box below inert.",
2522
+ "setting.board.url.label": "Board address",
2523
+ "setting.display.default_locale.description": "The language a page is written in when the reader has expressed no preference — a BCP-47 tag such as en, de or pt-BR. A signed-in member overrides it in their control panel, and a visitor who has not is served whichever language their browser asks for that this board has a catalog for. Left at a language nothing translates, every message falls back to English rather than disappearing.",
2524
+ "setting.display.default_locale.label": "Default language",
2525
+ "setting.display.posts_per_page.description": "Capped to protect the thread-view query budget.",
2526
+ "setting.display.posts_per_page.label": "Posts per page",
2527
+ "setting.display.threads_per_page.description": "Capped to protect the forum-display query budget.",
2528
+ "setting.display.threads_per_page.label": "Threads per page",
2529
+ "setting.federation.github_client_id.description": "From the OAuth app you registered with GitHub.",
2530
+ "setting.federation.github_client_id.label": "GitHub client ID",
2531
+ "setting.federation.github_client_secret.description": "Stored as written and never shown again. Leave the box empty to keep the secret already saved.",
2532
+ "setting.federation.github_client_secret.label": "GitHub client secret",
2533
+ "setting.federation.github_enabled.description": "Off by default, and off is a position: turning it on means GitHub is told the address of this board every time somebody signs in with it, and gets to see who your members are. Needs the client ID and secret below, from a GitHub OAuth app whose callback URL is your board address followed by /auth/sso/github/callback.",
2534
+ "setting.federation.github_enabled.label": "Sign in with GitHub",
2535
+ "setting.federation.google_client_id.description": "From the OAuth 2.0 client you created in the Google Cloud console.",
2536
+ "setting.federation.google_client_id.label": "Google client ID",
2537
+ "setting.federation.google_client_secret.description": "Stored as written and never shown again. Leave the box empty to keep the secret already saved.",
2538
+ "setting.federation.google_client_secret.label": "Google client secret",
2539
+ "setting.federation.google_enabled.description": "Off by default. Turning it on means Google meets your members: it learns this board’s address and who signs in with it. The callback URL to give Google is your board address followed by /auth/sso/google/callback.",
2540
+ "setting.federation.google_enabled.label": "Sign in with Google",
2541
+ "setting.federation.link_from_usercp.description": "On, a member manages their linked providers and passkeys from /usercp/security. Off, existing links keep working and the page stops offering to change them — for a board where identity is decided by the organisation and not by the member.",
2542
+ "setting.federation.link_from_usercp.label": "Let members link and unlink their own sign-ins",
2543
+ "setting.federation.oidc_client_id.description": "The client this board is registered as with that provider.",
2544
+ "setting.federation.oidc_client_id.label": "OpenID client ID",
2545
+ "setting.federation.oidc_client_secret.description": "Stored as written and never shown again. Leave the box empty to keep the secret already saved.",
2546
+ "setting.federation.oidc_client_secret.label": "OpenID client secret",
2547
+ "setting.federation.oidc_enabled.description": "The generic path, and the one an organisation usually wants: any provider that publishes an OpenID Connect discovery document — Entra ID, Okta, Keycloak, Authentik, your own. Off by default. The callback URL is your board address followed by /auth/sso/oidc/callback.",
2548
+ "setting.federation.oidc_enabled.label": "Sign in with your own OpenID provider",
2549
+ "setting.federation.oidc_issuer.description": "The issuer, with no trailing slash and no path of its own — the board asks it for /.well-known/openid-configuration and reads every endpoint from there, so nothing else needs configuring.",
2550
+ "setting.federation.oidc_issuer.label": "Issuer URL",
2551
+ "setting.federation.oidc_label.description": "The button reads “Continue with …” and this fills the gap. Left empty it says “Single sign-on”, which tells a member nothing about which login they are being sent to.",
2552
+ "setting.federation.oidc_label.label": "What to call it on the sign-in page",
2553
+ "setting.federation.oidc_scopes.description": "Space-separated. `openid` is always sent whether or not it is here. The default asks for the address and the display name, which is the least this board can register an account from.",
2554
+ "setting.federation.oidc_scopes.label": "Scopes to ask for",
2555
+ "setting.federation.passkeys_enabled.description": "Lets a member add a passkey from their account security page and sign in with it afterwards — a fingerprint, a face, or a security key, with no password to phish. Nothing leaves this board: the passkey is created against your own address and no third party is involved. A member who has one keeps their password unless they clear it themselves.",
2556
+ "setting.federation.passkeys_enabled.label": "Allow passkeys",
2557
+ "setting.group.antispam": "Anti-spam",
2558
+ "setting.group.board": "Board",
2559
+ "setting.group.display": "Display",
2560
+ "setting.group.federation": "Sign-in providers",
2561
+ "setting.group.legal": "Legal",
2562
+ "setting.group.mail": "Mail",
2563
+ "setting.group.posting": "Posting",
2564
+ "setting.group.registration": "Registration",
2565
+ "setting.group.reputation": "Reputation",
2566
+ "setting.group.search": "Search",
2567
+ "setting.group.security": "Security",
2568
+ "setting.legal.privacy.description": "Markdown, published at /privacy and linked from the footer. Emptied, the page and the link go. It ships as a template describing what this software does by default — your host, your mail provider and anything you have added are yours to describe.",
2569
+ "setting.legal.privacy.label": "Privacy policy",
2570
+ "setting.legal.terms.description": "Markdown, published at /terms and linked from the footer. Registration asks the visitor to accept it before the account is created, so emptying this box takes the page, the footer link and the checkbox away together. What ships is a template written to be replaced: read it, make it say what your community actually does, and take advice on it if it matters.",
2571
+ "setting.legal.terms.label": "Terms of service",
2572
+ "setting.mail.from.description": "The address every message comes from. It must be on a domain the provider has verified — a sender the provider does not recognise is rejected outright, and the rejection is not retried because it would fail identically every time.",
2573
+ "setting.mail.from.label": "Sender address",
2574
+ "setting.mail.from_name.description": "Display name shown beside the sender address. Empty sends the bare address.",
2575
+ "setting.mail.from_name.label": "Sender name",
2576
+ "setting.mail.http_endpoint.description": "Only for the provider-API transport. The board posts Resend’s exact field names with a Bearer token, so this works for Resend and for anything that copies it — and not for Postmark or Mailgun, whose SMTP hosts are the way in.",
2577
+ "setting.mail.http_endpoint.label": "Provider API endpoint",
2578
+ "setting.mail.http_token.description": "Only for the provider-API transport. Stored on the board.",
2579
+ "setting.mail.http_token.label": "Provider API key",
2580
+ "setting.mail.smtp_host.description": "Only for the SMTP transport. For example smtp.resend.com.",
2581
+ "setting.mail.smtp_host.label": "SMTP host",
2582
+ "setting.mail.smtp_password.description": "Use an app password rather than the password you sign in with, wherever the provider offers one. Stored on the board.",
2583
+ "setting.mail.smtp_password.label": "SMTP password",
2584
+ "setting.mail.smtp_port.description": "465 for implicit TLS, 587 for STARTTLS. Picking the security mode below that does not match the port is the usual cause of a connection that hangs rather than failing.",
2585
+ "setting.mail.smtp_port.label": "SMTP port",
2586
+ "setting.mail.smtp_security.description": "Implicit TLS encrypts the socket before the first byte (port 465). STARTTLS connects in the clear and upgrades, and the board refuses to continue if the upgrade fails (port 587). \"None\" is genuinely unencrypted and is for a relay on this machine and nothing else.",
2587
+ "setting.mail.smtp_security.label": "SMTP security",
2588
+ "setting.mail.smtp_username.description": "Empty only for a relay that does not authenticate. Resend wants the literal word “resend” here, with the API key as the password.",
2589
+ "setting.mail.smtp_username.label": "SMTP username",
2590
+ "setting.mail.transport.description": "A provider’s JSON API, an SMTP server, or nothing at all. \"Not sending\" writes each message to the server log and delivers none of them — which is the right default for a board nobody has configured yet, and a broken board the moment registration asks anybody to confirm an address.",
2591
+ "setting.mail.transport.label": "How mail is sent",
2592
+ "setting.posting.edit_grace_seconds.description": "Seconds after posting during which an author fixing their own post leaves no \"edited by\" notice on it. 0 always shows the notice. A moderator editing somebody else's post is never silent, however soon it happens, and the revision history records every edit either way — this hides the line under the post, nothing else.",
2593
+ "setting.posting.edit_grace_seconds.label": "Silent edit window",
2594
+ "setting.posting.flood_seconds.description": "Minimum seconds between posts by one user. 0 disables the check. Users with \"bypass flood check\" are exempt.",
2595
+ "setting.posting.flood_seconds.label": "Post flood interval",
2596
+ "setting.posting.max_length.description": "Characters of source text, before rendering.",
2597
+ "setting.posting.max_length.label": "Maximum post length",
2598
+ "setting.posting.thread_ratings_enabled.description": "Members with permission can give each thread one 1–5 rating.",
2599
+ "setting.posting.thread_ratings_enabled.label": "Thread ratings enabled",
2600
+ "setting.registration.enabled.description": "Off closes the board to new members: the Register link goes, /register says so instead of offering a form, and the action behind it refuses a submission sent straight to it. Existing members sign in as before, the installer still creates the first administrator, and \"community user:create\" still works — closing the door is not the same as locking yourself out.",
2601
+ "setting.registration.enabled.label": "Allow new registrations",
2602
+ "setting.registration.method.description": "\"none\" logs the user straight in. \"email\" requires a link. \"admin\" queues the account for manual approval. \"both\" requires e-mail then admin.",
2603
+ "setting.registration.method.label": "Activation method",
2604
+ "setting.registration.min_password_length.description": "Applied to new passwords only. Raising it does not invalidate existing ones — those are rehashed on next login.",
2605
+ "setting.registration.min_password_length.label": "Minimum password length",
2606
+ "setting.registration.username_max.description": "Must not exceed the 64-character database column.",
2607
+ "setting.registration.username_max.label": "Maximum username length",
2608
+ "setting.registration.username_min.description": "Counted in Unicode code points, not bytes.",
2609
+ "setting.registration.username_min.label": "Minimum username length",
2610
+ "setting.reputation.allow_negative.description": "Members can rate somebody down as well as up. Off makes reputation a thanks button, which is what most boards actually want — and takes the Rate link off posts, since the Thanks button on each one is then the whole of what the rating form could offer.",
2611
+ "setting.reputation.allow_negative.label": "Allow negative ratings",
2612
+ "setting.reputation.comment_required.description": "A rating must say why. A number with no reason attached is the part of reputation people argue about — but it also removes the one-press Thanks button from posts, because one press cannot carry a reason. Off by default: thanking an answer that helped should be a single click, and it is negative ratings that need explaining.",
2613
+ "setting.reputation.comment_required.label": "Require a comment",
2614
+ "setting.reputation.enabled.description": "Members can rate each other. Off hides every control and every total; existing ratings are kept, so switching it back on restores them.",
2615
+ "setting.reputation.enabled.label": "Reputation enabled",
2616
+ "setting.reputation.min_posts_to_give.description": "A brand-new account cannot rate anybody until it has posted this many times. 0 disables the requirement.",
2617
+ "setting.reputation.min_posts_to_give.label": "Posts required before rating",
2618
+ "setting.search.enabled.description": "Off takes the Search link out of the board navigation, replaces /search and any results page still linked to with a line saying so, and answers GET /api/v1/search with a 403. The index is kept and goes on being maintained, so switching it back on needs no reindex.",
2619
+ "setting.search.enabled.label": "Enable search",
2620
+ "setting.search.flood_seconds.description": "Minimum seconds between searches per user. Replaces the per-group searchfloodtime permission, which could not obey the numeric combination rule — see docs/mybb-parity.md.",
2621
+ "setting.search.flood_seconds.label": "Search flood interval",
2622
+ "setting.search.min_word_length.description": "A search is refused unless at least one of its words is this long, so at 3 \"a good post\" runs and \"a b c\" does not. The short words are not dropped — they are still sent to the index, which drops the ones carrying no meaning on its own. Raise it if short words are what your expensive searches turn out to be.",
2623
+ "setting.search.min_word_length.label": "Shortest word a search may rest on",
2624
+ "setting.security.lockout_minutes.description": "How long an account stays locked after too many failures. The window the counts above are measured over, and the one the per-address limit on the anti-spam screen shares.",
2625
+ "setting.security.lockout_minutes.label": "Lockout duration (minutes)",
2626
+ "setting.security.max_account_login_attempts.description": "The same count for one account across every address at once, which is what a guess spread over a botnet meets. Keep it well above the per-address number — it locks the real owner out too, which is the cost of it working at all. 0 disables it.",
2627
+ "setting.security.max_account_login_attempts.label": "Failed login attempts before an account locks everywhere",
2628
+ "setting.security.max_login_attempts.description": "Counted per account per address, so somebody guessing at one account from one place meets this first. 0 disables it.",
2629
+ "setting.security.max_login_attempts.label": "Failed login attempts before lockout",
2630
+ "setting.security.session_idle_days.description": "How long a sign-in lasts, counted from the moment it happened and not extended by use — a session in daily use still ends on its date. Separate from “keep me signed in”, which is a different token with a longer life of its own and does renew as it is used.",
2631
+ "setting.security.session_idle_days.label": "Session lifetime (days)",
2632
+ "setting.security.two_factor_enabled.description": "Lets a member add an authenticator app to their account from /usercp/security, and asks for a code after their password from then on. Needs AUTH_SECRET set, because the secret the app holds is sealed with a key derived from it.",
2633
+ "setting.security.two_factor_enabled.label": "Offer two-factor authentication",
2634
+ "setting.security.two_factor_required_for_staff.description": "An account that can open the control panel is asked to set up an authenticator app before it can be used, and cannot turn it off again while it holds that access. The control panel can rewrite the whole board, so a password on its own is a thin thing to protect it with.",
2635
+ "setting.security.two_factor_required_for_staff.label": "Require it of anyone who can reach the control panel",
2636
+ "sso.approval": "Your account has been created. An administrator reviews new members here, so you cannot sign in until that has happened.",
2637
+ "sso.conflict": "An account here already claims that identity. Sign in the way you did before and manage the link from your account security page.",
2638
+ "sso.expired": "That sign-in attempt had expired by the time it came back, so nothing was done. Start it again from this page.",
2639
+ "sso.failed": "That sign-in did not complete. Nothing changed here, so it is safe to retry.",
2640
+ "sso.forbidden": "That sign-in cannot open an account here. If you already have one, sign in with your password and link the two from your account security page.",
2641
+ "sso.invalid": "The provider did not send enough to open an account with — a confirmed e-mail address, at least. Register with a password instead.",
2642
+ "sso.linked": "That sign-in is now linked to your account.",
2643
+ "sso.off": "That way of signing in is not switched on for this board.",
2644
+ "sso.refused": "The sign-in was cancelled, so nothing changed here.",
2645
+ "sso.slowdown": "Too many accounts have been opened from your connection. Try again later.",
2646
+ "sso.unlinked": "That sign-in has been unlinked. It can no longer reach your account.",
2647
+ "stats.posts": "{count, plural, one {# post} other {# posts}}",
2648
+ "stats.replies": "{count, plural, one {# reply} other {# replies}}",
2649
+ "stats.views": "{count, plural, one {# view} other {# views}}",
2650
+ "subscription.doneOne": "Done — you will not be notified about that any more.",
2651
+ "subscription.emailsOff": "Done — subscription e-mails are off. Your subscriptions are unchanged, and you will still see them in your notifications.",
2652
+ "subscription.followed": "Saved. You are following this.",
2653
+ "subscription.stopped": "You will not be notified about that any more.",
2654
+ "themeToken.accent-foreground.hint": "Usually the same as body text.",
2655
+ "themeToken.accent-foreground.label": "Text on the hover surface",
2656
+ "themeToken.accent.hint": "The tint behind a hovered row or menu item.",
2657
+ "themeToken.accent.label": "Hover surface",
2658
+ "themeToken.background.hint": "Behind the whole board. Also becomes the browser’s own toolbar colour on mobile.",
2659
+ "themeToken.background.label": "Page background",
2660
+ "themeToken.border.hint": "The lines between rows and around panels.",
2661
+ "themeToken.border.label": "Rules and outlines",
2662
+ "themeToken.card-foreground.hint": "Ordinary text inside a panel.",
2663
+ "themeToken.card-foreground.label": "Text on panels",
2664
+ "themeToken.card.hint": "Forum rows, post bodies and the footer.",
2665
+ "themeToken.card.label": "Panel background",
2666
+ "themeToken.density-unit.hint": "Every gap on the board is a multiple of this. Lower it for a denser board.",
2667
+ "themeToken.density-unit.label": "Spacing step",
2668
+ "themeToken.destructive-foreground.hint": "Contrast with the destructive fill.",
2669
+ "themeToken.destructive-foreground.label": "Text on the destructive control",
2670
+ "themeToken.destructive.hint": "The fill of “Delete” and its kin.",
2671
+ "themeToken.destructive.label": "Destructive control",
2672
+ "themeToken.elevation.hint": "A CSS `box-shadow`, or `none` for a flat board with no shadows at all. Its colour is “Panel shadow colour” above, so this is only the geometry.",
2673
+ "themeToken.elevation.label": "Panel shadow",
2674
+ "themeToken.font-heading-stack.hint": "The face headings are set in. Defaults to the body font, so the board reads in one voice; set it to something else — `Georgia, ui-serif, serif` needs no download — to give headings a voice of their own.",
2675
+ "themeToken.font-heading-stack.label": "Heading font",
2676
+ "themeToken.font-mono-stack.hint": "Used for code blocks and token values. A CSS font stack.",
2677
+ "themeToken.font-mono-stack.label": "Monospace font",
2678
+ "themeToken.font-sans-stack.hint": "The face the whole board is read in. A CSS font stack — the browser uses the first name it has.",
2679
+ "themeToken.font-sans-stack.label": "Body font",
2680
+ "themeToken.foreground.hint": "Ordinary text on the page background.",
2681
+ "themeToken.foreground.label": "Body text",
2682
+ "themeToken.forum-locked.hint": "A forum nobody may post in.",
2683
+ "themeToken.forum-locked.label": "Closed forum",
2684
+ "themeToken.forum-read.hint": "The same name once everything has been read.",
2685
+ "themeToken.forum-read.label": "Forum with nothing new",
2686
+ "themeToken.forum-unread.hint": "The forum name when there is something unread in it.",
2687
+ "themeToken.forum-unread.label": "Forum with new posts",
2688
+ "themeToken.group-admin.label": "Administrator",
2689
+ "themeToken.group-banned.label": "Banned",
2690
+ "themeToken.group-mod.label": "Moderator",
2691
+ "themeToken.group-supermod.label": "Super moderator",
2692
+ "themeToken.group.brand.blurb": "The accent, and the four things it marks: the one primary button, the current item in a list, a link’s underline and the focus outline. The rest of the palette holds no hue at all, so these four are the whole of making the board yours. Set them together — a green button with a grey focus ring looks like a board that was half rebranded.",
2693
+ "themeToken.group.brand.title": "Brand",
2694
+ "themeToken.group.destructive-actions.blurb": "Delete, ban, and anything else that cannot be taken back.",
2695
+ "themeToken.group.destructive-actions.title": "Destructive actions",
2696
+ "themeToken.group.forums-and-threads.blurb": "These carry meaning rather than decoration — a locked thread is not merely a different colour — so every state a hue marks is also a word in the page. Changing them is safe; removing the difference between them is not.",
2697
+ "themeToken.group.forums-and-threads.title": "Forums and threads",
2698
+ "themeToken.group.member-groups.blurb": "The colour a member’s name is shown in beside their posts.",
2699
+ "themeToken.group.member-groups.title": "Member groups",
2700
+ "themeToken.group.moderation.blurb": "The moderation queue and the report list.",
2701
+ "themeToken.group.moderation.title": "Moderation",
2702
+ "themeToken.group.other.blurb": "Declared by this theme, and not described by the board’s own token list.",
2703
+ "themeToken.group.other.title": "Other",
2704
+ "themeToken.group.page-and-panels.blurb": "The three surfaces everything else sits on, and the text that sits on them. They are meant to be a stack: the page at the back, a band cut into it, a panel raised off it. Keep them in that order of lightness and the board keeps its depth.",
2705
+ "themeToken.group.page-and-panels.title": "Page and panels",
2706
+ "themeToken.group.posts.blurb": "Backgrounds, not text — they sit behind a whole post, so keep them pale.",
2707
+ "themeToken.group.posts.title": "Posts",
2708
+ "themeToken.group.shape-and-type.blurb": "Not colours, so these apply to light and dark alike — the editor shows one box rather than two.",
2709
+ "themeToken.group.shape-and-type.title": "Shape and type",
2710
+ "themeToken.input.hint": "Deliberately darker than a rule: a field’s edge is information, a rule between two rows is not.",
2711
+ "themeToken.input.label": "Field outline",
2712
+ "themeToken.moderation-approved.label": "Approved",
2713
+ "themeToken.moderation-pending.label": "Waiting for a decision",
2714
+ "themeToken.moderation-rejected.label": "Rejected",
2715
+ "themeToken.muted-foreground.hint": "Timestamps, counts and captions.",
2716
+ "themeToken.muted-foreground.label": "Quiet text",
2717
+ "themeToken.muted.hint": "Table headers, disabled controls and other backgrounds that should recede.",
2718
+ "themeToken.muted.label": "Quiet surface",
2719
+ "themeToken.post-highlight.hint": "The post a permalink pointed at.",
2720
+ "themeToken.post-highlight.label": "Highlighted post",
2721
+ "themeToken.post-own.hint": "A gentle tint so a member can find themselves in a long thread.",
2722
+ "themeToken.post-own.label": "Your own post",
2723
+ "themeToken.post-unapproved.hint": "Held by the spam controls or by a moderator.",
2724
+ "themeToken.post-unapproved.label": "Post awaiting approval",
2725
+ "themeToken.preset.forest": "Forest",
2726
+ "themeToken.preset.meith": "Meith green",
2727
+ "themeToken.preset.ocean": "Ocean",
2728
+ "themeToken.preset.plum": "Plum",
2729
+ "themeToken.preset.rust": "Rust",
2730
+ "themeToken.preset.sand": "Sand",
2731
+ "themeToken.primary-foreground.hint": "Sits on top of the accent colour, so it needs to contrast with it — not with the page.",
2732
+ "themeToken.primary-foreground.label": "Text on the accent",
2733
+ "themeToken.primary-hover.hint": "The same button while it is hovered. Usually a step darker than the accent in light mode and a step lighter in dark.",
2734
+ "themeToken.primary-hover.label": "Accent under the cursor",
2735
+ "themeToken.primary.hint": "The fill of “Post reply”, “Search” and every other primary button, and the colour a link is underlined in.",
2736
+ "themeToken.primary.label": "Button and link accent",
2737
+ "themeToken.radius.hint": "A CSS length. `0px` for square corners, `0.5rem` for the default, `0.75rem` for softer ones.",
2738
+ "themeToken.radius.label": "Corner rounding",
2739
+ "themeToken.ring.hint": "Drawn around whatever has keyboard focus. Keep it visible against both the page and the panels.",
2740
+ "themeToken.ring.label": "Focus outline",
2741
+ "themeToken.secondary-foreground.hint": "Contrast with the secondary fill, not with the page.",
2742
+ "themeToken.secondary-foreground.label": "Text on the secondary button",
2743
+ "themeToken.secondary.hint": "The fill of a second-choice control, like “Preview”.",
2744
+ "themeToken.secondary.label": "Secondary button",
2745
+ "themeToken.shadow-tint.hint": "The colour a panel’s shadow is drawn in. Needs to be far stronger in dark mode than in light — a faint shadow is invisible on a near-black page.",
2746
+ "themeToken.shadow-tint.label": "Panel shadow colour",
2747
+ "themeToken.surface.hint": "The header, a table’s heading row, and a panel’s own toolbar. Sits between the page and a panel.",
2748
+ "themeToken.surface.label": "Band background",
2749
+ "themeToken.thread-deleted.hint": "Soft-deleted; visible to staff only.",
2750
+ "themeToken.thread-deleted.label": "Deleted thread",
2751
+ "themeToken.thread-locked.hint": "Readable, but closed to replies.",
2752
+ "themeToken.thread-locked.label": "Locked thread",
2753
+ "themeToken.thread-moved.hint": "The stub left behind when a thread is moved.",
2754
+ "themeToken.thread-moved.label": "Moved thread",
2755
+ "themeToken.thread-pinned.hint": "Held at the top of its forum.",
2756
+ "themeToken.thread-pinned.label": "Pinned thread",
2757
+ "themeToken.thread-unapproved.hint": "Visible to its author and to staff.",
2758
+ "themeToken.thread-unapproved.label": "Thread awaiting approval",
2759
+ "thread.moderatorTools": "Moderator tools",
2760
+ "thread.rating.countLabel": "{count, plural, one {# rating} other {# ratings}}",
2761
+ "thread.rating.currentValue": "{value} out of 5 — your current rating",
2762
+ "thread.rating.from": ", from {count, plural, one {# rating} other {# ratings}}",
2763
+ "thread.rating.mine": "You rated this {value}",
2764
+ "thread.rating.none": "No ratings yet.",
2765
+ "thread.rating.outOf": "{average} out of 5",
2766
+ "thread.rating.rateIt": "Rate it",
2767
+ "thread.rating.rateValue": "Rate {value} out of 5",
2768
+ "thread.rating.section": "Thread rating",
2769
+ "thread.rating.yours": "Your rating",
2770
+ "thread.threadTools": "Thread tools",
2771
+ "threadPage.defaultTitle": "Thread",
2772
+ "threadPage.discussion": "A discussion in {forum}.",
2773
+ "threadPage.notice.copied": "Thread copied. You are looking at the copy.",
2774
+ "threadPage.notice.deleted": "That post has been deleted.",
2775
+ "threadPage.notice.locked": "Thread locked.",
2776
+ "threadPage.notice.merged": "Threads merged. You are looking at the one that survived.",
2777
+ "threadPage.notice.moderated": "Your post is waiting for a moderator to approve it.",
2778
+ "threadPage.notice.moved": "Thread moved.",
2779
+ "threadPage.notice.pinned": "Thread pinned.",
2780
+ "threadPage.notice.race": "Somebody else replied while you were writing. Your reply was posted below theirs.",
2781
+ "threadPage.notice.restored": "Thread restored.",
2782
+ "threadPage.notice.split": "Thread split. You are looking at the new one.",
2783
+ "threadPage.notice.unchanged": "Nothing changed — that post was already in this state.",
2784
+ "threadPage.notice.unlocked": "Thread unlocked.",
2785
+ "threadPage.notice.unpinned": "Thread unpinned.",
2786
+ "threadPage.postNumber": "post #{number}",
2787
+ "time.day": "{day} {month} {year}",
2788
+ "time.hourCycle": "h23",
2789
+ "time.past": "{day} {month} {year}",
2790
+ "time.thisYear": "{day} {month}, {time}",
2791
+ "time.today": "Today, {time}",
2792
+ "time.yesterday": "Yesterday, {time}",
2793
+ "unsubscribePage.doneAfter": ".",
2794
+ "unsubscribePage.doneBefore": "You can change any of this later from",
2795
+ "unsubscribePage.invalidAfter": "after signing in.",
2796
+ "unsubscribePage.invalidBefore": "That link is not valid — it may have been truncated by a mail client, or the board’s settings may have changed since it was sent. You can still manage everything from",
2797
+ "unsubscribePage.subscriptions": "your subscriptions",
2798
+ "userCpNav.messages-compose.title": "Write a message",
2799
+ "userCpNav.messages.blurb": "Your inbox, and what you have sent.",
2800
+ "userCpNav.messages.title": "Private messages",
2801
+ "userCpNav.notifications-preferences.title": "Preferences",
2802
+ "userCpNav.notifications.blurb": "What the board has told you, and which of it also reaches you by e-mail.",
2803
+ "userCpNav.notifications.title": "Notifications",
2804
+ "userCpNav.subscriptions.blurb": "The threads and forums you follow, and how often you hear about them.",
2805
+ "userCpNav.subscriptions.title": "Subscriptions",
2806
+ "userCpNav.usercp-avatar.blurb": "The picture shown beside your posts.",
2807
+ "userCpNav.usercp-avatar.title": "Avatar",
2808
+ "userCpNav.usercp-contacts.blurb": "Who you follow, and whose posts you would rather not read.",
2809
+ "userCpNav.usercp-contacts.title": "Buddies and ignored members",
2810
+ "userCpNav.usercp-options.blurb": "Your timezone, and how much of a thread fits on a page.",
2811
+ "userCpNav.usercp-options.title": "Options",
2812
+ "userCpNav.usercp-profile.blurb": "What other members see about you.",
2813
+ "userCpNav.usercp-profile.title": "Profile",
2814
+ "userCpNav.usercp-security.blurb": "Your e-mail and password, the accounts linked to yours, and your passkeys.",
2815
+ "userCpNav.usercp-security.title": "Sign-in and security",
2816
+ "userCpNav.usercp-signature.blurb": "What appears under every post you make.",
2817
+ "userCpNav.usercp-signature.title": "Signature",
2818
+ "userCpNav.usercp.blurb": "What is waiting for you, and everything you can change.",
2819
+ "userCpNav.usercp.title": "Overview",
2820
+ "usercp.automaticLocale": "Automatic — whatever your browser asks for",
2821
+ "usercp.automaticTimezone": "Automatic — whatever this device is set to",
2822
+ "usercp.avatarProcessing": "Your new avatar is being processed and will appear shortly.",
2823
+ "usercp.avatarRemoved": "Your avatar has been removed.",
2824
+ "usercp.emailChanged": "Your e-mail address has been changed.",
2825
+ "usercp.emailConfirmSent": "Check the new address for a confirmation link. Nothing changes until you follow it.",
2826
+ "usercp.linkInvalid": "That confirmation link is no longer valid — it may have been used already, expired, or the address may have been taken in the meantime.",
2827
+ "usercp.passwordChanged": "Your password has been changed. You are still signed in here; every other device has been signed out.",
2828
+ "usercp.saved": "Saved.",
2829
+ "usercpMail.boardFallback": "the forum",
2830
+ "usercpMail.greeting": "Hello,",
2831
+ "usercpMail.ignore": "If this was not you, ignore this message. Nothing changes until the link is used.",
2832
+ "usercpMail.intro": "Somebody — we hope you — asked to use this address for their account on {board}.",
2833
+ "usercpMail.link": "Confirm the change: {link}",
2834
+ "usercpMail.noLink": "Open your user control panel on the board and follow the confirmation link there.",
2835
+ "usercpMail.subject": "Confirm your new e-mail address",
2836
+ "usercpMail.ttl": "The link is valid for one hour and can be used once.",
2837
+ "warning.issued": "Warning issued. They are now on {points, plural, one {# point} other {# points}}.",
2838
+ "warning.level.ban": "Banned",
2839
+ "warning.level.moderate_posting": "Posts held for review",
2840
+ "warning.level.suspend_posting": "Suspended from posting",
2841
+ "warning.revoked": "Warning revoked. They are now on {points, plural, one {# point} other {# points}}.",
2842
+ "warning.revokedAlready": "That warning had already been revoked.",
2843
+ "warning.threshold": "That reached a threshold: {level}.",
2844
+ "warning.type": "{title} — {points, plural, one {# point} other {# points}}, never expires",
2845
+ "warning.typeExpiring": "{title} — {points, plural, one {# point} other {# points}}, expires after {days, plural, one {# day} other {# days}}"
2846
+ }