## Every string the daemon mails to an author. Operator CLI output is not ## here, deliberately: see the i18n module header. ## ## House style, in short. Write to "you" and use contractions. Sentence case. ## Start with a verb where you can. Say what happened and what to do next, ## without blaming anyone and without the words invalid, illegal or fatal. ## Use the words the clients use: "header", not frontmatter field; "Requests ## folder", not requests tier; "post", not record, twt or entry. No em dashes. ## ## These are read in plain-text mail clients and on phones, so keep lines ## short and leave markup out. ## Replies about a message we couldn't publish reply-subject = twtxt: { $reason } reply-body = { $reason } Here's the message: { $quoted } ## Reasons. Each one is a whole sentence: it becomes the subject line, and ## the body opens with it. ## ## Each MUST be a single line, however long. A reason goes into a mail header, ## and a line break there breaks the whole header block, so the reply arrives ## with no subject at all. Fluent keeps the newlines in a wrapped value, so ## there's no safe way to wrap these. `every_reason_is_a_single_line` checks ## it. When the fix needs more room, put it in a detail paragraph below. reason-body-not-utf8 = We couldn't read the text in this message. Try sending it again. reason-post-not-canonical = We couldn't rebuild this message exactly as you sent it, so we can't prove it's yours. Send the text on its own. reason-repost-not-canonical = We couldn't rebuild this repost exactly as you sent it. Send it again with only the Twt-Repost header. reason-fields-beyond-reply-to = This post carries extra headers. Send it again with just the text. reason-nick-invalid = A nick can use a-z, 0-9 and hyphens, up to 30 characters. reason-delete-needs-timestamp = Twt-Delete needs the time of the post to remove, like 2026-10-14T19:39:39Z. reason-prune-mode-unknown = Twt-Prune takes fifo or off, not "{ $got }". ## Limits on what a post can contain reason-too-many-codepoints = A post can be up to 160 characters. Shorten it and send it again. reason-too-many-bytes = A post can be up to 640 bytes, and accents and emoji use several each. Shorten it and send it again. reason-forbidden-char = A post has to fit on one line. Take out the line breaks and tabs, then send it again. reason-bad-timestamp = That isn't a time we can read. Use the form 2026-10-14T19:39:39Z. reason-duplicate-timestamp = Your feed already has a post at that time. ## Quota and retention reason-over-quota-post = You've reached today's limit for posts. Try again tomorrow. reason-over-quota-repost = You've reached today's limit for reposts. Try again tomorrow. reason-collision = Your feed already has a post at { $timestamp }. Wait a second, then send it again. reason-feed-full = Your feed is full. Remove a post with Twt-Delete, or send Twt-Prune: fifo to drop the oldest ones from now on. reason-reply-to-changed = This feed belongs to { $author }. Send your posts from that address. reason-no-record-at = Your feed has no post at { $timestamp }. ## Commands reason-one-command-per-mail = Send one command per message. Twt-Register, Twt-Help, Twt-Admit, Twt-Block and Twt-Registration each need their own, and feed commands need another. reason-bad-address = "{ $got }" isn't a smolmail address. reason-registration-mode-unknown = Twt-Registration takes open, closed or silent, not "{ $got }". ## An accept token in a post. The author didn't do anything wrong: their ## client added the token because they accepted this address. The fix depends ## on which client they use, so it goes in a detail paragraph. reason-accept-field-on-post = A post can't carry the accept token your client attached. reason-accept-field-on-first-post = Your first post carried an accept token, which we can't publish. ## Detail paragraphs, added to the end of the reply when one line isn't ## enough room for the fix. Most reasons don't need one. reason-accept-field-on-post-detail = We publish your post by rebuilding exactly what you signed, so anyone can check it was you. A token can't be part of that. We've got your token now, so send the same post again and it should go up. If it's refused again, your client is adding the token to every message instead of sending it once. Block this address in your client and send the post again. Blocking only moves our replies back to your Requests folder. reason-accept-field-on-first-post-detail = Your feed is fine. It's there and it's waiting for its first post. We publish your post by rebuilding exactly what you signed, so anyone can check it was you. A token can't be part of that. We've got your token now, so send that post again and it should go up. If it's refused again, your client is adding the token to every message instead of sending it once. Block this address in your client and send the post again. Blocking only moves our replies back to your Requests folder. ## Warning as a feed fills up cap-warning-subject = twtxt: your feed is nearly full cap-warning-body = Your feed has reached 90% of its { $cap } limit. When it's full, new posts are refused. Remove some with Twt-Delete, or send Twt-Prune: fifo and we'll drop the oldest ones to make room. ## The mail that hands over the accept token welcome-subject = twtxt: your feed is ready welcome-body = Your feed is live: { $url } Send a message to this address and it becomes a post. To manage your feed, add one of these headers: Twt-Nick, Twt-Delete, Twt-Repost or Twt-Prune. Send Twt-Help for what each one does. ## First contact from someone who doesn't have a feed info-subject = twtxt: how to get a feed info-body = You can publish a twtxt feed here by sending mail. To get one, send a message to this address with this header: Twt-Register: yournick Headers sit next to the subject in most clients, often behind a button marked "+ header". Leave the value empty and we'll use your username. Our reply arrives in your Requests folder, not your inbox, because you haven't accepted this address. We recommend leaving it that way. We publish nothing until you ask, and this is the only mail you'll get until you do. ## First contact while registration is closed info-closed-subject = twtxt: we're not taking new feeds info-closed-body = Thanks for writing. We're not taking new feeds right now, so there's nothing to do here yet. Nothing was published and nothing was kept. ## Twt-Help help-subject = twtxt: your commands help-body = Your feed: { $url } Send a message to this address and it becomes a post. We publish exactly what you write, up to 160 characters, on one line. To manage your feed, add one of these headers. One per message. Twt-Nick: yournick change the name shown on your feed Twt-Delete: