{
  "bot": {
    "achievements": {
      "error": {
        "already_unlocked": "You already have that achievement.",
        "bad_kind": "That is not something the bot can count. Pick one of the listed objectives.",
        "bad_threshold": "A target has to be a whole number between {minimum} and {maximum}.",
        "bad_tier": "That is not a tier the bot knows about.",
        "duplicate_key": "A badge with that id already exists in this server.",
        "no_name": "An achievement needs a name and a key.",
        "not_earned": "You have not earned that achievement yet.",
        "not_found": "There is no achievement by that name."
      },
      "kind": {
        "auctions_won": "Auctions won",
        "commands": "Commands used",
        "currency_earned": "Currency earned",
        "currency_spent": "Currency spent",
        "gathers": "Times gathered",
        "items_crafted": "Items crafted",
        "level": "Level reached",
        "messages": "Messages sent",
        "quests_completed": "Quests completed",
        "reactions": "Reactions added",
        "streak_days": "Daily streak",
        "trades_completed": "Trades completed",
        "trivia_correct": "Trivia answers correct",
        "voice_minutes": "Minutes in voice"
      },
      "tier": {
        "bronze": "Bronze",
        "gold": "Gold",
        "platinum": "Platinum",
        "silver": "Silver"
      }
    },
    "afk": {
      "afk_description": "Mark yourself AFK; Vex answers anyone who mentions you.",
      "arg_note": "Optional note shown to people who mention you"
    },
    "alertrouting": {
      "error": {
        "bad_pattern": "That alert pattern is not valid. Use something like `antinuke.ban`, `antinuke.*`, or `*`.",
        "bad_severity": "Severity has to be info, warning, or critical.",
        "no_channel": "A route needs a channel to send to.",
        "no_default": "Set a default alert channel first. Alerts with no matching route go there.",
        "too_many_mentions": "A route can mention at most {maximum} roles and people combined.",
        "too_many_routes": "You can have at most {maximum} routes."
      },
      "namespace": {
        "antinuke": "Anti-nuke",
        "automod": "Automod",
        "moderation": "Moderation",
        "plugins": "Plugins",
        "raid": "Raid",
        "staff": "Staff",
        "verification": "Verification"
      },
      "severity": {
        "critical": "Only the serious ones",
        "info": "Anything",
        "warning": "Warnings and worse"
      },
      "type": {
        "antinuke": {
          "ban": "Anti-nuke: mass ban",
          "channel_delete": "Anti-nuke: channels deleted",
          "kick": "Anti-nuke: mass kick",
          "role_delete": "Anti-nuke: roles deleted"
        },
        "automod": {
          "escalation": "Automod: escalation triggered",
          "violation": "Automod: a rule fired on a message"
        },
        "moderation": {
          "mass_action": "Moderation: mass action"
        },
        "plugins": {
          "runtime_error": "Plugins: a plugin errored"
        },
        "raid": {
          "age_gate": "Raid: account held by the age gate",
          "alt_detected": "Possible alt account detected",
          "ended": "Raid ended",
          "impersonation": "Possible impersonation of staff",
          "join_burst": "Raid detected",
          "lockdown": "Raid: server locked down"
        },
        "staff": {
          "burnout": "Staff: burnout signal",
          "inactivity": "Staff: inactivity flagged",
          "suspension": "Staff: suspension applied"
        },
        "verification": {
          "denied": "Verification: member denied",
          "flagged": "Verification: flagged member verified",
          "grant_failed": "Verification: roles could not be given",
          "review": "Verification: waiting for review"
        }
      }
    },
    "antinuke": {
      "banned_actor": "Banned <@{actor_id}>."
    },
    "appeals": {
      "arg_case": "The case number you're appealing (optional)",
      "arg_cooldown_hours": "Hours to wait after a denial before appealing again. 0 allows it immediately.",
      "arg_infraction": "The Infraction ID of a staff action you want to appeal.",
      "arg_max_denied": "How many denied appeals before no more are accepted. 0 means no limit.",
      "arg_reason": "Explain why the punishment should be lifted",
      "case_not_yours": "That case number isn't one of yours in this server. Check the number, or leave it out and describe what happened instead.",
      "channel_description": "Set the appeals notification channel (mods).",
      "limits_description": "Set how soon somebody can appeal again after being denied.",
      "link_not_valid": "This appeal link is not valid for your account. Open the link that was sent to you, or go to the appeal page and submit an appeal from there.",
      "resubmit_cooldown": "Your last appeal was denied. You can submit another in {duration}.",
      "resubmit_exhausted": "You have had {count} appeals denied in this server, so no further appeals are being accepted.",
      "submit_description": "Submit an appeal for review."
    },
    "applications": {
      "error": {
        "already_applied": "You already have an application waiting for review.",
        "answer_too_long": "An answer can be at most {maximum} characters.",
        "bad_quorum": "The number of reviewers needed has to be a whole number of at least 1.",
        "bad_vote": "A vote has to be yes, no, or abstain.",
        "missing_answer": "Please answer every required question.",
        "no_name": "An application form needs a name.",
        "no_questions": "An application form needs at least one question, and every question needs a prompt.",
        "not_found": "That application does not exist.",
        "not_open": "That application has already been decided.",
        "own_application": "You cannot vote on your own application.",
        "question_too_long": "A question can be at most {maximum} characters.",
        "too_many_questions": "A form can have at most {maximum} questions.",
        "unknown_question": "That question is not on this form. The form may have changed since you started."
      }
    },
    "auctions": {
      "error": {
        "already_winning": "You are already the highest bidder.",
        "bad_duration": "An auction has to run for between {minimum} and {maximum}.",
        "bad_price": "That price is not valid. A buyout has to be higher than the starting bid.",
        "bad_quantity": "You have to auction at least one item.",
        "closed": "That auction has finished.",
        "has_bids": "That auction already has bids, so it cannot be cancelled.",
        "not_enough_items": "You do not have that many of that item.",
        "not_found": "That auction does not exist.",
        "not_seller": "Only the seller can do that.",
        "own_auction": "You cannot bid on your own auction.",
        "too_low": "The next bid has to be at least {minimum}.",
        "too_poor": "You do not have enough to cover that bid. Bids are held until the auction ends."
      }
    },
    "automod": {
      "alerts_description": "Set the channel automod posts alerts to.",
      "arg_rule_action": "What happens to the author when the rule fires. The message is deleted by default.",
      "arg_rule_preset": "The punishment preset to hand off to, when the action is 'preset'.",
      "rule_description": "Turn a rule on or off and set its action.",
      "show_description": "Show automod rule status.",
      "word_description": "Add or remove a banned word or phrase. Wildcards are supported."
    },
    "autoresponder": {
      "add_description": "Add a rule that replies when a message matches a trigger.",
      "arg_case_sensitive": "Treat upper and lower case as different.",
      "arg_cooldown": "How many seconds the rule waits before it can fire again in the same channel.",
      "arg_match_mode": "How the trigger is compared against a message.",
      "arg_response": "What Vex replies with.",
      "arg_rule_id": "The id of the rule, from /autoresponder list.",
      "arg_trigger": "The text to look for.",
      "error": {
        "backreference": "Backreferences such as \\1 are not allowed in a trigger. They make matching slow and they are not needed to spot a phrase.",
        "bad_cooldown": "The cooldown has to be between 0 and 3600 seconds.",
        "invalid_regex": "Vex could not read that regular expression. Check the brackets and the escapes.",
        "nested_quantifier": "This pattern repeats a group that already repeats, like (a+)+. Patterns shaped like that can take minutes to run on a short message, so Vex will not accept them. Repeat the inner part or the group, but not both.",
        "no_response": "A rule needs either a reply or an embed template.",
        "not_found": "There is no rule with that id in this server.",
        "pattern_too_long": "A regular expression can be at most 200 characters. Longer ones are slow to run against every message.",
        "quantified_alternation": "This pattern repeats a group that contains a choice, like (a|aa)+. Vex cannot tell whether the choices overlap, and overlapping ones are extremely slow, so it refuses the whole shape. Write the choices without repeating the group.",
        "repeat_too_large": "A repeat count in this pattern is above 100. Use a smaller count.",
        "response_too_long": "A reply cannot be longer than 2000 characters, because Discord will not send it.",
        "trigger_empty": "A rule needs a trigger.",
        "trigger_too_long": "That trigger is too long.",
        "two_responses": "A rule replies with either text or an embed template, not both. Clear one of them.",
        "unknown_match_mode": "That is not a match mode Vex knows."
      },
      "list_description": "Show every auto responder rule in this server.",
      "remove_description": "Delete a rule.",
      "toggle_description": "Turn one rule on or off."
    },
    "birthdays": {
      "arg_day": "Day of the month, 1 to 31.",
      "arg_month": "The month, as a name or a number. March, Mar and 3 all work.",
      "arg_year": "Your birth year (optional)",
      "config_description": "Set the birthday channel/role (mods only).",
      "remove_description": "Remove your birthday.",
      "set_description": "Set your birthday.",
      "upcoming_description": "See upcoming birthdays."
    },
    "burnout": {
      "reason": {
        "new_load": "This person has no earlier workload to compare against.",
        "spike": "This person's recent workload is well above their own normal.",
        "steady": "This person's recent workload is close to their own normal.",
        "too_few": "This person has handled too few actions for the comparison to mean anything."
      },
      "report_description": "Show the burnout report."
    },
    "cases": {
      "arg_history_type": "Only show cases of this type",
      "arg_history_user": "Whose record to show. Leave it empty for your own.",
      "arg_mod_history_user": "The staff member whose actions to show. Leave it empty for your own.",
      "delete_description": "Soft-delete a case (admins only by default).",
      "edit_description": "Change a case's reason. The edit history is kept.",
      "history_description": "Show a user's moderation history.",
      "mod_history_description": "Every moderation action this person has taken.",
      "view_description": "Show the full details of a case."
    },
    "channels": {
      "blocked_channel": "That command cannot be used in this channel.",
      "wrong_channel": "That command cannot be used in this channel. Try {channels}."
    },
    "clans": {
      "accept_description": "Accept someone's request to join your clan.",
      "already_in_clan": "You're already in a clan. Leave it before joining another.",
      "already_invited": "That person has already been invited.",
      "already_owner": "You already own this clan.",
      "already_requested": "You've already asked to join that clan.",
      "arg_amount": "How much currency to move.",
      "arg_clan": "The clan's name or tag.",
      "arg_clan_optional": "The clan to look at. Leave this empty to see your own.",
      "arg_description": "The text to show on your clan's profile.",
      "arg_name": "The name of your clan.",
      "arg_policy": "Who is allowed to join.",
      "arg_tag": "A short tag, letters and numbers only. It shows next to the name.",
      "arg_user": "The member to act on.",
      "bad_amount": "Enter an amount above zero.",
      "bad_policy": "That isn't a join policy.",
      "bad_rank": "You can only set someone to officer or member. Use /clan transfer to hand over ownership.",
      "cannot_afford": "Founding a clan costs {amount} and you don't have enough.",
      "cannot_rank_owner": "The owner's rank can't be changed. Use /clan transfer instead.",
      "clan_full": "**{clan}** is full.",
      "create_description": "Found a new clan and become its owner.",
      "created": "Clan **{clan}** founded. You are its owner.",
      "demote_description": "Demote an officer back to member.",
      "deny_description": "Deny someone's request to join your clan.",
      "deposit_description": "Put currency into your clan bank.",
      "deposited": "Deposited {amount} into the clan bank.",
      "describe_description": "Set your clan's description.",
      "description_set": "Clan description updated.",
      "disband_description": "Delete your clan. Only the owner can do this.",
      "disbanded": "Clan **{clan}** has been disbanded.",
      "info_description": "Show a clan's profile and roster.",
      "insufficient_bank": "The clan bank doesn't have {amount}.",
      "insufficient_wallet": "You don't have {amount} to deposit.",
      "invite_declined": "Invitation to **{clan}** declined.",
      "invite_description": "Invite someone to your clan.",
      "invite_only": "**{clan}** is invitation only.",
      "invited": "Invited {user} to **{clan}**.",
      "join_description": "Join a clan that is open, or one that invited you.",
      "joined": "You joined **{clan}**.",
      "just_join": "**{clan}** is open to everyone. Use /clan join instead.",
      "kick_description": "Remove a member from your clan.",
      "kicked": "{user} has been removed from the clan.",
      "leave_description": "Leave the clan you are in.",
      "left": "You left the clan.",
      "list_description": "Show every clan in this server, best first.",
      "name_bad_characters": "Clan names can only use letters, numbers, spaces, and the characters - ' & and a full stop.",
      "name_taken": "A clan with that name already exists here.",
      "name_too_long": "That clan name is too long.",
      "name_too_short": "Clan names need at least {min} characters.",
      "need_officer": "You need to be an officer to do that.",
      "need_owner": "Only the clan owner can do that.",
      "no_invite": "You don't have an invitation from that clan.",
      "no_request": "That person hasn't asked to join your clan.",
      "not_a_member": "That person isn't in your clan.",
      "not_found": "There is no clan by that name or tag.",
      "not_in_clan": "You aren't in a clan.",
      "outranked": "You can't do that to someone at your rank or above.",
      "owner_cannot_leave": "You own this clan. Hand it over with /clan transfer, or disband it.",
      "owner_kept": "The owner left the server, so the clan was left as it is.",
      "policy_description": "Choose who is allowed to join your clan.",
      "policy_set": "Anyone joining your clan now goes through: {policy}.",
      "promote_description": "Promote a member to officer.",
      "rank_set": "{user} is now {rank}.",
      "request_accepted": "{user} is now a member of **{clan}**.",
      "request_denied": "Request from {user} denied.",
      "request_description": "Ask a clan to let you join.",
      "request_required": "**{clan}** takes requests. Use /clan request to ask.",
      "requested": "Your request to join **{clan}** has been sent.",
      "tag_bad_characters": "Tags can only use letters and numbers.",
      "tag_bad_length": "Tags need to be between 1 and 8 characters.",
      "tag_taken": "A clan with that tag already exists here.",
      "target_in_clan": "That person is already in a clan.",
      "transfer_description": "Hand your clan over to another member.",
      "transferred": "{user} now owns the clan. You are an officer.",
      "withdraw_description": "Take currency out of your clan bank.",
      "withdrew": "Withdrew {amount} from the clan bank."
    },
    "config": {
      "adminrole_description": "Add or remove an admin role.",
      "arg_action": "What happens when triggered",
      "arg_duration": "For jail/timeout: how long, e.g. 1h, 1d. Ignored for kick/ban",
      "arg_modlog_channel": "The channel for case embeds. Leave empty to clear",
      "arg_threshold": "Active warnings needed to trigger this rung",
      "arg_window_days": "Only count warns from the last X days. Set 0 to use the warn decay setting.",
      "dm_description": "Toggle whether users get a DM when they're actioned.",
      "escalation_add_description": "Add a rung to the warn escalation ladder.",
      "escalation_remove_description": "Remove a ladder rung by its threshold.",
      "jailrole_description": "Set the jail role (you create and manage the role yourself).",
      "modlog_description": "Set or clear the mod log channel.",
      "modrole_description": "Add or remove a moderator role.",
      "show_description": "Show the current configuration.",
      "warndecay_description": "How many days until warnings stop counting. Set 0 so they never expire."
    },
    "counting": {
      "counting_description": "Show the counting record for this server."
    },
    "crafting": {
      "error": {
        "bad_batch": "You can craft between 1 and {maximum} at a time.",
        "bad_quantity": "Quantities have to be whole numbers between {minimum} and {maximum}.",
        "disabled": "That recipe is turned off right now.",
        "duplicate_ingredient": "That item is listed twice. List each ingredient once with the total quantity.",
        "missing_items": "You do not have everything this recipe needs.",
        "net_positive": "That recipe would produce more of an ingredient than it uses, so it could be repeated forever.",
        "no_ingredients": "A recipe needs at least one ingredient.",
        "no_name": "A recipe needs a name.",
        "not_found": "There is no recipe by that name.",
        "nothing_consumed": "A recipe has to use something up. One that only needs tools and costs nothing would make items out of nothing.",
        "too_many_ingredients": "A recipe can have at most {maximum} ingredients.",
        "too_poor": "You cannot afford the {cost} this recipe costs."
      }
    },
    "currency": {
      "error": {
        "bad_amount": "An amount has to be a whole number greater than zero.",
        "unknown_source": "That is not a money source the report knows about."
      }
    },
    "economy": {
      "adjust_description": "Add to or take from a member's balance.",
      "balance_description": "Check what you or someone else is holding.",
      "bank_amount": "Enter an amount above zero.",
      "bank_description": "See your wallet and bank balance",
      "bank_empty": "You have nothing in the bank to withdraw.",
      "bank_full": "Your bank is full.",
      "bank_no_funds": "You have nothing in your wallet to deposit.",
      "buy_description": "Buy something from the shop.",
      "daily_description": "Claim your daily payout.",
      "deposit_description": "Move currency from your wallet into the bank",
      "fish_bucket_description": "See the fish someone is holding",
      "fish_description": "Cast a line and see what you catch",
      "fish_sell_description": "Sell everything in your bucket",
      "fishing_cooldown": "Your line is still in the water. Try again in {wait}.",
      "fishing_nothing_to_sell": "You have no fish to sell.",
      "fishing_unconfigured": "There are no fish set up on this server yet.",
      "fishing_unpriced": "None of your fish can be sold right now.",
      "gamble_above_max": "The largest bet on this server is {max}.",
      "gamble_below_min": "The smallest bet on this server is {min}.",
      "gamble_bet_positive": "You have to bet at least one coin.",
      "gamble_description": "Bet some of your balance on a double or nothing roll.",
      "gamble_insufficient": "You do not have that much to bet.",
      "gift_description": "Give one of your items to another member",
      "gift_self": "You cannot gift an item to yourself.",
      "insufficient": "You do not have enough to do that.",
      "inventory_description": "See what you or someone else owns.",
      "inventory_missing": "You do not own that.",
      "jobs_description": "See the work jobs on this server and which one you have",
      "lottery_amount": "Buy at least one ticket.",
      "lottery_buy_description": "Buy lottery tickets",
      "lottery_draw_description": "Draw the lottery and pay the winner (admin)",
      "lottery_info_description": "See the current pot and how many tickets are in",
      "lottery_limit": "You already hold as many tickets as this server allows ({limit}).",
      "lottery_no_entries": "Nobody has bought a ticket yet, so there is nothing to draw.",
      "pay_amount_positive": "You have to send at least one coin.",
      "pay_description": "Send some of your balance to another member.",
      "pay_insufficient": "You do not have that much to send.",
      "pay_self": "You cannot pay yourself.",
      "rich_description": "See who is holding the most.",
      "rob_cooldown": "You robbed someone too recently. Try again in {wait}.",
      "rob_description": "Try to take some of another member's balance.",
      "rob_self": "You cannot rob yourself.",
      "rob_target_changed": "Their balance moved before you got there, so you came away with nothing.",
      "rob_target_too_poor": "That member is not holding enough to be worth robbing. The floor on this server is {floor}.",
      "shop_description": "See what the server sells.",
      "shop_insufficient": "You do not have enough to buy that.",
      "shop_limit_reached": "You have already bought as many of those as you are allowed.",
      "shop_no_item": "That item is not in the shop.",
      "shop_out_of_stock": "That item is sold out.",
      "use_description": "Use one of the items you own.",
      "weekly_description": "Claim your weekly payout.",
      "wheel_description": "Spin the wheel and risk a bet",
      "wheel_unconfigured": "The wheel has no slices set up yet.",
      "withdraw_description": "Move currency from the bank back to your wallet",
      "work_description": "Do a job and get paid."
    },
    "embeds": {
      "arg_channel": "Where to post it. Defaults to the current channel.",
      "arg_message_id": "The id of the message to replace the embed on.",
      "arg_template": "Which saved template to use.",
      "edit_description": "Replace the embed on a message Vex already sent.",
      "error": {
        "author_too_long": "The author name is {actual} characters. Discord allows {limit}.",
        "bad_color": "The color has to be a number between 0 and 16777215.",
        "bad_emoji": "That is not an emoji Vex can put on a button. Use a real emoji, or a custom one written as <:name:id>. Discord refuses the whole message over a bad one.",
        "bad_name": "A template name needs at least one letter or number.",
        "bad_url": "A link has to start with http:// or https://.",
        "button_label_too_long": "A button label can be {limit} characters. This one is {actual}.",
        "button_no_label": "Every button needs a label.",
        "button_no_url": "Every button needs a link. Vex only supports link buttons here, because a template has no code behind it to answer a click.",
        "components_bad": "Those buttons are not laid out in a way Discord accepts.",
        "description_too_long": "The description is {actual} characters. Discord allows {limit}.",
        "empty": "An embed needs at least a title, a description, a field, an image, an author, or a footer.",
        "field_name_empty": "A field needs a name.",
        "field_name_too_long": "A field name is {actual} characters. Discord allows {limit}.",
        "field_value_empty": "A field needs a value.",
        "field_value_too_long": "A field value is {actual} characters. Discord allows {limit}.",
        "footer_too_long": "The footer is {actual} characters. Discord allows {limit}.",
        "name_taken": "This server already has a template with that name.",
        "not_an_object": "An embed has to be an object.",
        "not_found": "That template does not exist.",
        "pages_bad": "A page has to be an embed.",
        "title_too_long": "The title is {actual} characters. Discord allows {limit}.",
        "too_many_buttons": "A row holds {limit} buttons. This one has {actual}.",
        "too_many_fields": "This embed has {actual} fields. Discord allows {limit}.",
        "too_many_pages": "Discord allows {limit} pages. This template has {actual}.",
        "too_many_rows": "Buttons can fill {limit} rows. This template uses {actual}.",
        "total_too_long": "This embed is {actual} characters in total. Discord allows {limit} across the whole embed."
      },
      "list_description": "Show every embed template saved for this server.",
      "send_description": "Post a saved embed template in a channel.",
      "web_timeout": "The bot did not respond in time. It may be offline. Check the channel before sending again."
    },
    "events": {
      "arg_description": "Optional details",
      "arg_starts_in": "When it starts, e.g. 2h, 1d",
      "cancel_description": "Cancel an event.",
      "create_description": "Create an event.",
      "decision_dm_body_approved": "Good news. Your event **{title}** was approved, so you are cleared to host it.\nNote from the team: {note}",
      "decision_dm_body_denied": "Your event idea **{title}** was not approved this time.\nNote from the team: {note}",
      "decision_dm_no_note": "none",
      "decision_dm_title_approved": "Your event was approved",
      "decision_dm_title_denied": "Your event was not approved",
      "list_description": "List upcoming events.",
      "submit_description": "Pitch an event idea for a manager to review."
    },
    "gambling": {
      "error": {
        "bad_duration": "That length is outside what this server allows.",
        "bad_limit": "A limit has to be a whole number between {minimum} and {maximum}.",
        "disabled": "Gambling is turned off in this server.",
        "lift_pending": "Your request to lift the exclusion is already counting down. It lifts on {when}.",
        "loss_limit": "That would take you past your loss limit. You have {remaining} of it left.",
        "not_excluded": "You have not excluded yourself from gambling here.",
        "self_excluded": "You have excluded yourself from gambling in this server.",
        "stake_too_high": "The most you can stake at once here is {maximum}.",
        "stake_too_low": "A stake has to be a whole number of at least {minimum}."
      }
    },
    "gathering": {
      "error": {
        "bad_rarity": "That is not a rarity the bot knows about.",
        "bad_tier": "That is not a valid tool tier.",
        "bad_weight": "A loot table weight has to be a whole number of at least 1.",
        "broken_tool": "Your tool has broken. You will need a new one.",
        "no_table": "There is nothing to find here yet. An admin can set up the loot table from the dashboard.",
        "on_cooldown": "You need to wait {retry} before doing that again.",
        "tool_too_weak": "Your tool is not good enough for that yet.",
        "unknown_activity": "That is not something you can do here."
      }
    },
    "general": {
      "about_description": "About Vex.",
      "ping_description": "Check that Vex is online and measure latency."
    },
    "giveaways": {
      "arg_at_hour": "The hour of the day to post at, in the server's timezone",
      "arg_bl_duration": "How long the bar lasts. Leave empty for no end date.",
      "arg_bl_reason": "Why they are being barred",
      "arg_bl_role": "The role to bar",
      "arg_bl_target": "The user or role ID to unbar",
      "arg_bl_user": "The person to bar",
      "arg_cancel_reason": "Why the giveaway is being called off",
      "arg_cohost": "The person to add or remove",
      "arg_description": "Extra details shown in the giveaway message",
      "arg_duration": "e.g. 1h, 2d",
      "arg_entry_cap": "Stop taking entries after this many people",
      "arg_every": "How often it repeats, for example 1d or 7d",
      "arg_extend": "How much longer, for example 2h or 1d",
      "arg_host": "Who the giveaway is credited to. Defaults to you.",
      "arg_image": "A link to an image to show in the giveaway",
      "arg_kind": "How people win. Standard draws at the end; drop is first come, first served.",
      "arg_ping_role": "A role to mention when the giveaway is posted",
      "arg_prize": "What you're giving away",
      "arg_recurrence": "The ID of the repeating giveaway",
      "arg_starts_in": "Wait this long before entries open, for example 1d",
      "arg_stats_days": "Only count the last this many days. Leave empty for all time.",
      "arg_template_name": "The name of the template",
      "arg_template_source": "The giveaway to copy the settings from",
      "arg_times": "How many times to run. Leave empty to run until stopped.",
      "arg_winners": "How many winners",
      "blacklist_add_description": "Bar a user or a role from entering giveaways.",
      "blacklist_list_description": "Show who is barred from entering giveaways.",
      "blacklist_remove_description": "Let a user or role enter giveaways again.",
      "cancel_description": "Stop a giveaway without picking any winners.",
      "cohost_description": "Add or remove somebody who can manage this giveaway.",
      "denied": {
        "account_too_new": "Your Discord account has to be at least {needed_days} days old to enter. It is {have_days} days old.",
        "blacklisted": "You can't enter giveaways in this server.",
        "blocked_role": "One of your roles is not allowed to enter this giveaway.",
        "missing_role": "You need the <@&{role_id}> role to enter this giveaway.",
        "not_boosting": "Only server boosters can enter this giveaway.",
        "not_enough_messages": "You need {needed} messages in this server to enter. You have {have}.",
        "not_in_that_voice": "You have to be in <#{channel_id}> to enter this giveaway.",
        "not_in_voice": "You have to be in a voice channel to enter this giveaway.",
        "tenure_too_short": "You have to have been in this server for {needed_days} days to enter. You have been here {have_days} days.",
        "too_many_entries": "You have already entered {limit} giveaways in the last {days} days.",
        "too_many_wins": "You have already won {limit} giveaways in the last {days} days.",
        "unknown": "You can't enter this giveaway right now."
      },
      "edit_description": "Change a running giveaway's prize, winners, description or image.",
      "end_description": "End a giveaway now.",
      "excluded": {
        "blacklisted": "was blacklisted after entering",
        "left_guild": "left the server",
        "lost_requirement": "no longer meets the requirements",
        "previous_winner": "already won this giveaway"
      },
      "export_description": "Download a giveaway's entry list as a CSV.",
      "extend_description": "Give a running giveaway more time.",
      "info_description": "Show everything about one giveaway.",
      "list_description": "List giveaways.",
      "pause_description": "Stop accepting entries without ending the giveaway.",
      "repeat_description": "Run a saved template on a schedule.",
      "repeat_list_description": "Show the repeating giveaways and their IDs.",
      "repeat_stop_description": "Stop a recurring giveaway.",
      "reroll_description": "Reroll a giveaway's winners.",
      "resume_description": "Start accepting entries again.",
      "start_description": "Start a giveaway.",
      "stats_description": "Show this server's giveaway statistics.",
      "template_delete_description": "Delete a saved template.",
      "template_list_description": "Show the saved templates.",
      "template_save_description": "Save an existing giveaway's settings under a name.",
      "template_use_description": "Start a giveaway from a saved template."
    },
    "handover": {
      "error": {
        "bad_window": "A handover has to cover between {minimum} and {maximum}.",
        "nothing_to_report": "There is nothing to hand over for that period."
      },
      "line": {
        "notable": "{kind} on <@{user_id}> (case #{case}).",
        "quiet": "Nothing to report. No moderation actions during this shift.",
        "repeat": "<@{user_id}> was actioned {count} times. Worth keeping an eye on.",
        "total": "{count} moderation actions this shift.",
        "truncated": "Only the first {limit} are listed. See the case log for the rest."
      }
    },
    "help": {
      "arg_command": "A command to explain, for example ban or warnings clear.",
      "description": "Show what Vex can do, and what you can run here."
    },
    "highlights": {
      "add_description": "Watch a keyword and get a DM when someone says it.",
      "added": "Now watching **{keyword}**. You have {count} of {limit} keywords.",
      "arg_keyword": "The word or phrase to watch for.",
      "arg_mute_channel": "The channel to stop hearing about.",
      "arg_mute_user": "The person to stop hearing about.",
      "clear_description": "Stop watching every keyword in this server.",
      "duplicate": "You're already watching **{keyword}**.",
      "limit": "You've reached the limit of {limit} keywords. Remove one before adding another.",
      "list_description": "Show the keywords you watch in this server.",
      "mute_description": "Never highlight me from this person or channel.",
      "not_found": "You aren't watching **{keyword}**.",
      "remove_description": "Stop watching one of your keywords.",
      "removed": "Stopped watching **{keyword}**. You have {count} keywords left.",
      "too_long": "Keywords can be at most {max} characters.",
      "too_short": "Keywords need at least {min} characters. Very short keywords match almost everything.",
      "unmute_description": "Start highlighting me from this person or channel again."
    },
    "invites": {
      "reason": {
        "new_account": "The invited account is newer than this server allows, so this join does not count.",
        "rejoin": "This member has joined and left before, so this join does not count."
      }
    },
    "jail": {
      "arg_jail_duration": "How long, e.g. 1h, 2d. Leave empty to jail them until /unjail",
      "arg_jail_user": "The member to jail",
      "arg_reason": "Reason (sent to the user and logged)",
      "jail_description": "Jail a member. Their roles are removed and the jail role is applied.",
      "unjail_description": "Release a jailed member and give their roles back."
    },
    "kudos": {
      "arg_days": "How many days to count. The default is 30.",
      "arg_member": "The person you want to thank.",
      "arg_note": "What they did. This is the part people actually remember.",
      "check": {
        "bot": "You can't give a bot kudos.",
        "cooldown": "You gave kudos recently. Wait a little before giving more.",
        "daily_limit": "You have given all {limit} of your kudos for today. You get more tomorrow.",
        "not_eligible": "That person isn't set up to receive kudos in this server.",
        "ok": "This kudos can be given.",
        "same_person": "You already gave this person kudos in the last {hours} hours. Spread it around.",
        "self": "You can't give yourself kudos."
      },
      "give_description": "Thank another member for something they did.",
      "leaderboard_description": "Show who has received the most kudos."
    },
    "leveling": {
      "leaderboard_description": "Show the XP leaderboard.",
      "rank_description": "Show your rank and XP, or someone else's.",
      "set_description": "Set a member's level."
    },
    "loa": {
      "arg_duration": "How long the leave lasts. Use forms like 3d, 2w, or 1w3d.",
      "arg_number": "The request number.",
      "arg_reason": "Why you need the time off. Everyone who reviews the request sees this.",
      "arg_starts_in": "How long until the leave starts. Leave this out to start now.",
      "cancel_description": "Cancel a leave request you filed.",
      "check": {
        "backwards": "The end of the leave has to be after the start.",
        "ended": "That leave has already ended, so there is nothing to request.",
        "ok": "This leave request looks fine.",
        "overlaps": "You already have a leave request open. Cancel it before filing another one.",
        "too_long": "That leave is longer than this server allows. The longest leave you can ask for is {max_days} days."
      },
      "request_description": "Ask for time off from staff duties.",
      "return_description": "End your leave early and come back now.",
      "who_description": "List the staff members who are away right now."
    },
    "marketplace": {
      "review": {
        "bad_rating": "A rating has to be a whole number of stars from 1 to 5.",
        "no_listing": "That plugin is not on the marketplace.",
        "own_listing": "You cannot review your own plugin."
      }
    },
    "massactions": {
      "arg_lock_channel": "The channel to lock. Defaults to the one you are in.",
      "arg_lockdown_action": "Lock or unlock",
      "arg_lockdown_reason": "Shown in the audit log",
      "arg_lockdown_scope": "Just this channel, or the whole server",
      "arg_purge_bots_only": "Only delete messages from bots",
      "arg_purge_contains": "Only delete messages containing this text",
      "arg_purge_count": "How many messages to scan (1-500)",
      "arg_purge_embeds_only": "Only delete messages with embeds or attachments",
      "arg_purge_user": "Only delete messages from this user",
      "arg_slowmode_channel": "The channel to set it on (defaults to this one)",
      "arg_slowmode_delay": "A duration like 10s / 5m / 1h, or 0 to turn slowmode off",
      "lock_description": "Lock a channel so members cannot send messages.",
      "lockdown_description": "Lock or unlock a channel, or every text channel, for @everyone.",
      "purge_description": "Bulk delete recent messages, with optional filters.",
      "slowmode_description": "Set a channel's slowmode, e.g. 5s, 2m, 1h. Use 0 to turn it off.",
      "unlock_description": "Unlock a channel that was locked."
    },
    "moderation": {
      "arg_ban_user": "The user to ban",
      "arg_kick_user": "The member to kick",
      "arg_reason": "Reason (sent to the user and logged)",
      "arg_softban_user": "The member to softban",
      "arg_timeout_duration": "How long, e.g. 10m, 1h, 3d (max 28d)",
      "arg_timeout_user": "The member to time out",
      "arg_unban_reason": "Reason (logged)",
      "arg_unban_user": "The banned user (paste their ID)",
      "ban_description": "Ban a user, even if they've already left the server.",
      "kick_description": "Kick a member from the server.",
      "note_description": "Add a staff-only note to a user. This doesn't DM or punish them.",
      "softban_description": "Softban a member (kicks them and deletes their recent messages).",
      "timeout_description": "Time out a member for up to 28 days.",
      "unban_description": "Unban a user by their ID or mention.",
      "untimeout_description": "Remove a member's timeout early."
    },
    "modquotas": {
      "error": {
        "bad_factor": "The multiplier has to be a number between {minimum} and {maximum}.",
        "bad_floor": "The minimum action count has to be a whole number between {minimum} and {maximum}."
      }
    },
    "music": {
      "clear_description": "Remove everything waiting in the queue.",
      "denied": {
        "dj_only": "Only a DJ can do that while other people are listening.",
        "not_in_voice": "Join a voice channel first.",
        "other_channel": "You have to be in the same voice channel as Vex to do that.",
        "seek_out_of_range": "That position is outside the track.",
        "seek_stream": "This is a live stream, so there is nothing to seek through.",
        "seek_unknown_length": "Vex does not know how long this track is, so it cannot seek through it.",
        "skip_vote_needed": "Someone else queued this track, so skipping it goes to a vote."
      },
      "dj_description": "Set the role that always controls the player.",
      "dj_role": "Leave this empty to let everyone in the voice channel control it.",
      "join_description": "Bring Vex into your voice channel.",
      "leave_description": "Send Vex out of the voice channel and clear the queue.",
      "loop_description": "Repeat the current track, the whole queue, or nothing.",
      "loop_mode": "What to repeat.",
      "move_description": "Move a track to another spot in the queue.",
      "move_position": "The track to move.",
      "move_to": "Where it should end up.",
      "nowplaying_description": "Show what is playing, with the controls.",
      "pause_description": "Pause the current track.",
      "play_description": "Play a track, or add it to the queue.",
      "play_query": "A search term, or a link to a track or playlist.",
      "queue_description": "Show what is lined up.",
      "queue_empty": "The queue is empty. Add something with /music play.",
      "queue_full": "The queue is full. Remove something from it, or ask an admin to raise the limit.",
      "queue_full_partial": "Some of those tracks did not fit, so the queue was filled up to its limit.",
      "queue_page": "Which page of the queue to show.",
      "remove_description": "Remove one track from the queue.",
      "remove_position": "The position shown by /music queue.",
      "resume_description": "Resume the current track.",
      "seek_description": "Jump to a position in the current track.",
      "seek_position": "Where to jump to, written as m:ss or h:mm:ss.",
      "shuffle_description": "Shuffle the tracks waiting in the queue.",
      "skip_description": "Skip the current track, or vote to skip it.",
      "skip_vote_pending": "Voted to skip. That makes {votes} of the {needed} votes it takes.",
      "stop_description": "Stop playing and clear the queue.",
      "volume_description": "Set the player volume.",
      "volume_percent": "0 to 200. Anything above 100 gets louder but also rougher.",
      "web_bot_offline": "Vex is offline, so the live queue is not available right now.",
      "web_done": "Done."
    },
    "nicknames": {
      "arg_nickname": "The nickname to hold them at.",
      "arg_reason": "Why. This shows on the case.",
      "arg_user": "The member to act on.",
      "empty": "Enter a nickname.",
      "force_description": "Set a member's nickname and stop them changing it.",
      "list_description": "Show everyone with a forced nickname.",
      "release_description": "Let a member change their own nickname again.",
      "too_long": "A nickname can be at most {max} characters."
    },
    "onboarding": {
      "error": {
        "already_done": "That task is already done.",
        "duplicate_key": "That task already exists on the checklist.",
        "needs_lead": "A lead has to sign that one off.",
        "no_checklist": "This server has not set up an onboarding checklist yet.",
        "no_title": "A checklist task needs a title.",
        "not_done": "That task has not been done yet.",
        "not_found": "There is no task by that name on the checklist.",
        "title_too_long": "A task title can be at most {maximum} characters.",
        "too_many_tasks": "A checklist can have at most {maximum} tasks."
      }
    },
    "pause": {
      "paused": "Vex is switched off in this server right now. Only people who manage the bot here can use its commands. Ask a server admin if you think this is a mistake."
    },
    "pets": {
      "error": {
        "already_adopted": "You already have a pet. You can only look after one at a time.",
        "bad_species": "That is not a pet you can adopt here.",
        "feed_cooldown": "Your pet is not hungry yet. Try again in {retry}.",
        "name_too_long": "A pet name can be at most {maximum} characters.",
        "no_name": "Your pet needs a name.",
        "no_pet": "You do not have a pet yet. Use `/pet adopt` to get one.",
        "too_poor": "You need {cost} to feed your pet and you have {balance}."
      }
    },
    "plugins": {
      "approval": {
        "approved": "This plugin has been approved.",
        "no_request": "This plugin can act outside the sandbox, so a second admin has to approve it first. Request a review from the plugin's page.",
        "not_required": "This plugin does not need a second admin to approve it.",
        "pending": "This plugin is waiting for a second admin to review it.",
        "self_approval": "You requested this review, so somebody else has to approve it.",
        "stale": "The source has changed since this plugin was approved. It needs to be reviewed again."
      },
      "quota": {
        "key_too_long": "That key is too long. A key can be at most {limit} characters.",
        "out_of_space": "This plugin has used all {limit} bytes of its storage. Delete some entries before storing more.",
        "too_many_entries": "This plugin has reached its limit of {limit} stored entries. Delete some before storing more.",
        "unserializable": "That value cannot be stored. Storage holds text, numbers, lists and dictionaries.",
        "value_too_large": "That value is too big to store. A single value can be at most {limit} bytes."
      }
    },
    "polls": {
      "arg_anonymous": "Hide the tally until the poll closes",
      "arg_duration": "Auto-close after e.g. 1h, 30m, 2d. Omit to stay open.",
      "arg_multi": "Let people pick more than one option",
      "arg_options": "Options separated by | (e.g. Python | Rust | Go)",
      "arg_poll_id": "The poll's ID (shown on the dashboard)",
      "arg_question": "What are you asking?",
      "close_description": "Close a poll early and show the final result.",
      "create_description": "Post a poll with up to 10 options."
    },
    "punish": {
      "arg_preset": "Which offence this is, for example Spamming.",
      "arg_reason": "Extra detail. The preset's own reason is used if you leave this empty.",
      "arg_user": "The member to punish.",
      "field_action": "Action: {value}",
      "field_case": "Case: #{value}",
      "field_duration": "Duration: {value}",
      "field_offence": "Offence: #{value}",
      "list_description": "Show every punishment preset and what it does.",
      "punish_description": "Punish a member using one of the server's presets.",
      "undo_arg_preset": "Only undo a punishment from this preset. Leave empty for the most recent one.",
      "undo_arg_reason": "Why this is being undone. Written to the audit log.",
      "undo_arg_user": "The member whose last punishment should be reversed.",
      "undo_description": "Reverse the last punishment applied to a member and remove its case."
    },
    "quests": {
      "error": {
        "already_claimed": "You have already claimed that quest today.",
        "bad_kind": "That is not something the bot can count. Pick one of the listed objectives.",
        "bad_reward": "A quest reward has to be a whole number between {minimum} and {maximum}.",
        "bad_target": "A quest target has to be a whole number between {minimum} and {maximum}.",
        "empty_pool": "This server has no quests set up yet. An admin can add some from the dashboard.",
        "no_name": "A quest needs a name.",
        "not_complete": "You have not finished that quest yet."
      }
    },
    "raid": {
      "action": {
        "ban": "Ban all",
        "delete": "Delete their messages",
        "delete_messages": "Messages deleted",
        "kick": "Kick all",
        "lock_channel": "Channels locked",
        "lockdown": "Lock down",
        "notraid": "Not a raid",
        "pause_joins": "Joins paused",
        "quarantine": "Quarantine all",
        "slowmode": "Slowmode",
        "timeout": "Time out all",
        "unlock": "End lockdown"
      },
      "agegate_description": "Reject accounts younger than this many days. Set 0 to turn it off.",
      "alert_backlog": "Near-duplicate avatar matching is behind by {count} changes. Exact matches are still being checked.",
      "alerts_description": "Set the raid alert channel and an optional ping role.",
      "allow_add_description": "Add to the raid allowlist",
      "allow_list_description": "Show the raid allowlist",
      "allow_remove_description": "Remove from the raid allowlist",
      "arg_action_role": "A role that may use the raid buttons. Pick it again to remove it.",
      "arg_auto_remove": "Kick or ban automatically at a very high score",
      "arg_contain": "What to do to the accounts at the Contain level",
      "arg_delete_messages": "Delete the accounts' matching messages at Contain",
      "arg_lock_channel": "The channel to lock. Defaults to this one.",
      "arg_lock_channels": "Lock affected channels at Lockdown",
      "arg_member": "The member",
      "arg_pause_joins": "Pause joins at Lockdown",
      "arg_quarantine_role": "The role held members are given",
      "arg_raid": "The raid number",
      "arg_role": "The role",
      "arg_scenario": "Which kind of raid to simulate",
      "arg_slowmode_seconds": "Slowmode for affected channels at Contain. 0 turns it off.",
      "arg_timeout_minutes": "How long a raid timeout or quarantine lasts",
      "arg_value": "The link domain, invite code or name",
      "baseline_kind": {
        "avatar": "Avatar",
        "domain": "Link",
        "invite": "Invite",
        "name": "Name",
        "phrase": "Message"
      },
      "baseline_strength": {
        "allowed": "always allowed",
        "common": "counts for less"
      },
      "button": {
        "ban": "Ban All",
        "delete": "Delete Messages",
        "kick": "Kick All",
        "lockdown": "Lockdown",
        "notraid": "Not a Raid",
        "quarantine": "Quarantine All",
        "timeout": "Time Out All",
        "unlock": "End Lockdown"
      },
      "channel_description": "Set how raid protection treats a channel",
      "detector": {
        "automod": {
          "hits": "Automod caught several new accounts"
        },
        "avatar": {
          "exact": "Identical avatars",
          "near": "Near-identical avatars"
        },
        "join": {
          "bare": "Accounts with no avatar or badges",
          "created": "Accounts created at the same time",
          "floor": "Join rate over your limit",
          "invite": "Joined with the same invite",
          "wave": "Join rate far above normal"
        },
        "message": {
          "attachment": "Same attachment",
          "exact": "Identical messages",
          "invite": "Same invite link",
          "link": "Same link",
          "near": "Near-identical messages",
          "velocity": "Message burst from new accounts"
        },
        "name": {
          "pattern": "Names from one template",
          "random": "Random-looking names",
          "same": "Same name"
        }
      },
      "detector_description": "Turn one detector on or off",
      "doctor_description": "Check raid protection's permissions and setup",
      "history_description": "List recent raids",
      "info_description": "Show one raid with its evidence",
      "joinrate_description": "Set the join rate threshold.",
      "level": {
        "alert": "Alert",
        "contain": "Contain",
        "lockdown": "Lockdown",
        "none": "Quiet",
        "watch": "Watch"
      },
      "lockdown_end_description": "End the current raid and lift its lockdown",
      "lockdown_start_description": "Lock a channel and pause joins now",
      "preset": {
        "balanced": "Balanced",
        "relaxed": "Relaxed",
        "strict": "Strict"
      },
      "preset_description": "Choose how much evidence raid protection needs before acting",
      "raid_status": {
        "active": "in progress",
        "dismissed": "not a raid",
        "ended": "ended"
      },
      "response_description": "Choose what raid protection does at each level",
      "roles_description": "Set the quarantine role and who may use the raid buttons",
      "scenario": {
        "avatar": "Accounts switching to one avatar",
        "homoglyph": "Disguised copies of one message",
        "invite": "New accounts posting one invite",
        "names": "Template names posting spam"
      },
      "shadow_description": "Turn observe-only mode on or off",
      "show_description": "Show the raid protection settings.",
      "status": {
        "done": "{count} done",
        "failed": "{count} failed",
        "queued": "{count} waiting",
        "reversed": "{count} reversed",
        "skipped": "{count} skipped",
        "would_have": "{count} would have been done"
      },
      "status_description": "Show what raid protection is watching right now",
      "test_description": "Run a simulated raid through your settings without acting on anyone",
      "test_nothing": "Nothing. It would only be reported to staff."
    },
    "reactionroles": {
      "delete_description": "Delete a role menu.",
      "list_description": "List this server's role menus.",
      "publish_description": "Post a menu in a channel, or refresh one that's already posted."
    },
    "reports": {
      "no_data": "There is nothing to report for the last {days} day(s). Vex will send the next digest on schedule."
    },
    "rolemanage": {
      "arg_color": "A hex colour like FF0000 or #f00.",
      "arg_emoji": "An emoji to use as the icon.",
      "arg_name": "The name for the new role.",
      "arg_role": "The role to change.",
      "arg_second_color": "A second hex colour, for a gradient.",
      "color_description": "Set a role's colour, or a two-colour gradient.",
      "create_description": "Create a new role.",
      "icon_description": "Give a role an emoji icon."
    },
    "rolerestore": {
      "arg_user": "The member to restore roles for",
      "description": "Give a member back the roles they had when they left"
    },
    "roles": {
      "rotation": {
        "below_minimum": "Nobody reached the minimum activity, so the role did not move.",
        "no_qualifier": "Nobody new was active enough to win this time.",
        "no_role": "No role is set for rotation."
      }
    },
    "scheduled": {
      "arg_repeat": "Repeat interval, e.g. 1d. Leave empty for a one-off",
      "arg_run_in": "First send after, e.g. 1h, 1d",
      "cancel_description": "Cancel a scheduled message.",
      "create_description": "Schedule a message.",
      "list_description": "List active scheduled messages."
    },
    "seasons": {
      "error": {
        "already_ended": "That season has already finished.",
        "bad_length": "A season has to run for between {minimum} and {maximum}.",
        "bad_podium": "The hall of fame can remember between 1 and {maximum} places.",
        "no_active_season": "There is no season running in this server right now.",
        "no_name": "A season needs a name.",
        "not_found": "There is no season by that name.",
        "season_running": "A season is already running. End it before starting another."
      },
      "unknown_board": "That leaderboard cannot run a season."
    },
    "secondopinion": {
      "error": {
        "bad_action": "That is not an action you can ask a second opinion on.",
        "bad_ttl": "A request has to stay open for between {minimum} and {maximum}.",
        "lapsed": "That request has expired. Raise a new one if it still applies.",
        "not_found": "That request does not exist.",
        "not_pending": "That request has already been decided.",
        "not_requester": "Only the person who raised it can withdraw it. If you disagree, reject it instead.",
        "own_request": "You cannot approve your own request. That is what a second opinion is for.",
        "self_target": "You cannot raise a request against yourself.",
        "stale": "The action changed after it was approved, so it needs reviewing again."
      }
    },
    "serverlog": {
      "arg_channel": "Leave empty to fall back to the default channel",
      "channel_description": "Send one category to a specific channel.",
      "default_description": "Set the fallback log channel for all categories.",
      "ignore_description": "Add or remove a channel or role from the ignore list.",
      "show_description": "Show the current logging configuration.",
      "toggle_description": "Turn a logging category on or off."
    },
    "shifts": {
      "error": {
        "already_cancelled": "That shift has already been cancelled.",
        "bad_window": "A shift has to end after it starts.",
        "not_found": "That shift does not exist.",
        "not_yours": "That is not your shift.",
        "overlaps_own": "That overlaps a shift you are already on.",
        "too_far_ahead": "You can only book shifts up to {maximum} in advance.",
        "too_long": "A shift can be at most {maximum} long.",
        "too_short": "A shift has to be at least {minimum} long."
      }
    },
    "shoproles": {
      "error": {
        "already_permanent": "You already have that role permanently, so there is nothing to buy.",
        "at_maximum": "You already have close to the maximum time on that role. Wait until some of it runs down before buying more.",
        "bad_duration": "A role has to last between {minimum} and {maximum}, or be permanent.",
        "bad_price": "A price has to be a whole number between {minimum} and {maximum}.",
        "disabled": "That role is not for sale right now.",
        "not_found": "That role is not in the shop.",
        "out_of_stock": "That role is sold out.",
        "role_dangerous": "That role carries moderation or management permissions, so it cannot be sold. Anyone who bought it would gain staff powers. Make a cosmetic role with no permissions instead.",
        "role_everyone": "The everyone role cannot be sold. Every member already has it.",
        "role_managed": "That role is managed by Discord or another app, so Vex cannot hand it out. Bot roles, integration roles and the booster role all work this way.",
        "role_missing": "That role no longer exists in this server.",
        "role_too_high": "That role sits above Vex's own highest role, so Vex cannot give it to anyone. Move Vex's role above it in Server Settings, then try again.",
        "too_poor": "You need {price} to buy that role and you have {balance}."
      }
    },
    "slowmode": {
      "arg_always": "A slowmode this channel always keeps. Use 0 to turn it off.",
      "arg_announce": "Post a notice in this channel when slowmode is applied or removed.",
      "arg_channel": "The channel these settings apply to.",
      "arg_lift_after": "How many calm seconds pass before the delay is removed.",
      "arg_messages": "How many messages it takes to engage slowmode here.",
      "arg_slowmode": "The delay to apply here when a burst engages slowmode.",
      "arg_within": "The number of seconds those messages have to arrive in.",
      "clear_description": "Remove a channel's own settings so it follows the server default.",
      "set_description": "Give one channel its own slowmode settings.",
      "show_description": "Show the slowmode settings that apply to a channel."
    },
    "snipe": {
      "arg_clear": "Moderators only. Forget every deleted message in this channel.",
      "arg_number": "Which one to show. 1 is the most recent.",
      "description": "Show a recently deleted message in this channel"
    },
    "staff_actions": {
      "arg": {
        "announce_channel": "Channel for signed notices.",
        "apply_roles": "Whether Vex changes the roles itself.",
        "approvals": "How many approvals it needs.",
        "approver_role": "Add a role that can approve this type.",
        "clear_extra_roles": "Remove every extra role from this rank.",
        "code": "The case ID.",
        "days": "Only cases from the last this many days.",
        "delete": "Delete this action type.",
        "dm_member": "Whether the member is sent the notice.",
        "effect": "What it does to the member's rank.",
        "emoji": "Emoji shown after the reviewer ping.",
        "evidence": "A file to keep as evidence.",
        "evidence_channel": "Channel where evidence files are kept.",
        "expires_days": "Days until it stops counting. 0 means never.",
        "expiry_hours": "Hours before an undecided case expires. 0 means never.",
        "extra_role": "Another role given with this rank.",
        "file": "A settings file exported from Vex.",
        "followup_days": "Days until a follow-up review. 0 means none.",
        "log_channel": "Channel for Staff Actions logs.",
        "manager": "Only cases filed by this manager.",
        "member": "The staff member.",
        "min_days": "Days a member must hold this rank before a promotion.",
        "name": "The name.",
        "notes": "Extra notes shown on the notice.",
        "on_leave": "What happens if the member is on leave.",
        "position": "Where it goes on the track. 1 is the lowest.",
        "probation_days": "Days of probation after promotion into this rank.",
        "public_notice": "Whether a notice is posted.",
        "rank": "The rank to move to. Leave empty for the next or previous rank.",
        "reason": "Why. Leave empty to write it in a larger box.",
        "reminder_hours": "Hours before expiry that reviewers are reminded.",
        "remove": "Remove instead of add.",
        "requires_approval": "Whether it needs approval.",
        "reset": "Reset it to the default.",
        "review_channel": "Private channel where cases are reviewed.",
        "role": "The role.",
        "role_list": "Which list to change.",
        "self_approval": "Let the filer approve their own case.",
        "status": "Only cases with this status.",
        "strike_weight": "How much it counts toward strike thresholds.",
        "suspension_days": "Suspension length in days. 0 means until ended.",
        "template": "Which notice layout it uses.",
        "template_kind": "Which layout.",
        "track": "The rank track, if the member is on more than one.",
        "type": "The kind of action.",
        "type_key": "The action type's short name.",
        "user_id": "The user ID of someone who has left the server.",
        "weight": "The active strike weight that triggers a proposal."
      },
      "button": {
        "accept": "Accept",
        "accepted": "Accepted",
        "denied": "Denied",
        "deny": "Deny",
        "expired": "Expired",
        "failed": "Failed",
        "legacy_approve": "Approve",
        "legacy_deny": "Deny",
        "retry": "Retry",
        "revoked": "Revoked",
        "withdrawn": "Withdrawn"
      },
      "cmd": {
        "action": "File a staff action for review.",
        "case_edit": "Edit a pending case you filed.",
        "case_revoke": "Reverse an accepted case.",
        "case_view": "Show a staff case and its full record.",
        "case_withdraw": "Withdraw a pending case.",
        "config_channels": "Set the Staff Actions channels.",
        "config_escalation": "Add or remove a strike threshold.",
        "config_export": "Download the Staff Actions settings.",
        "config_import": "Import Staff Actions settings from a file.",
        "config_options": "Change approval and expiry options.",
        "config_roles": "Add or remove reviewer, manager and approver roles.",
        "config_template": "Preview a layout, or reset it to the default.",
        "config_type": "Add, change or delete an action type.",
        "demote": "Propose a demotion.",
        "doctor": "Check Staff Actions for problems.",
        "history": "Browse staff cases.",
        "profile": "Show a staff member's rank, record and activity.",
        "promote": "Propose a promotion.",
        "rank_add": "Add a rank to a track.",
        "rank_edit": "Change a rank.",
        "rank_remove": "Remove a rank.",
        "ranks_list": "Show the rank tracks.",
        "setup": "Set up Staff Actions step by step.",
        "track_add": "Add a rank track.",
        "track_remove": "Remove a rank track."
      },
      "deny": {
        "approver_rank": "You can only decide cases about members below your own top role.",
        "bot": "Bots cannot be the subject of a staff action.",
        "expired": "This case has expired.",
        "filer_rank": "You can only file actions against members below your own top role.",
        "not_approver": "You are not an approver for this kind of action.",
        "not_manager": "Only staff managers can file staff actions.",
        "not_pending": "This case is no longer waiting for a decision.",
        "own_case": "You cannot decide a case about yourself.",
        "self_approval": "You filed this case, so someone else has to decide it.",
        "self_file": "You cannot file an action against yourself.",
        "unresolved": "Vex could not look up the members involved. Nothing was changed. Try again in a moment."
      },
      "module_disabled": "Staff Actions is turned off in this server.",
      "move": {
        "already_bottom": "This member already holds the lowest rank. Use Termination to remove them from the track.",
        "already_top": "This member already holds the highest rank on the track.",
        "empty_track": "That rank track has no ranks yet.",
        "no_tracks": "No rank tracks are set up yet. Run /staff setup or /staff ranks track-add first.",
        "not_higher": "The target rank must be higher than the member's current rank.",
        "not_lower": "The target rank must be lower than the member's current rank.",
        "not_on_track": "This member does not hold a rank on that track.",
        "pick_track": "This member is not on any rank track. Choose a track or a target rank.",
        "rank_no_role": "The target rank has no role set, so nobody can be moved into it.",
        "several_tracks": "This member is on more than one rank track. Choose which one.",
        "unknown_rank": "There is no rank with that name.",
        "unknown_track": "There is no rank track with that name."
      },
      "not_found": "No staff case matches that ID.",
      "ok": "OK.",
      "roles": {
        "above_bot": "Vex's highest role must be above this role:",
        "deleted": "This role no longer exists:",
        "managed": "This role is managed by an integration and cannot be given or removed:",
        "no_manage_roles": "Vex needs the Manage Roles permission."
      },
      "sample": {
        "reason": "This is an example reason."
      },
      "tpl": {
        "case_body": "**User Information**\n> **User:** {subject} (`{subject_id}`)\n> **Roles:** {roles}\n\n**Case Information**\n> **Manager:** {manager}\n> **Action:** {action}\n> **Reason:** {reason_quoted}",
        "case_title": "Infraction Case | #{code}",
        "discipline_body": "• **Staff Member:** {subject}\n• **Action:** {action}\n• **Reason:** {reason}\n• **Notes:** {notes}\n\n**Infraction ID | {code}**",
        "discipline_title": "Staff Consequences & Discipline",
        "footer": {
          "accepted": "Accepted by {name}",
          "denied": "Denied by {name}",
          "expired": "Expired without a decision",
          "failed": "Approved by {name}. The role change failed.",
          "revoked": "Revoked by {name}",
          "withdrawn": "Withdrawn by {name}"
        },
        "footer_nobody": {
          "accepted": "Accepted",
          "denied": "Denied",
          "expired": "Expired without a decision",
          "failed": "The role change failed.",
          "revoked": "Revoked",
          "withdrawn": "Withdrawn"
        },
        "more_roles": "+{n} more",
        "no_rank": "None",
        "no_roles": "None",
        "promotion_body": "• **User:** {subject}\n• **Updated Rank:** {rank}\n• **Reason:** {reason}\n\nCongratulations on getting promoted! If you have any questions ping a member of the administrative team.",
        "promotion_title": "Staff Promotion",
        "revoked_line": "**Revoked** by {by}. Reason: {reason}",
        "signed": "Signed, {signer}",
        "system_filer": "Vex (automatic proposal)"
      },
      "type_name": {
        "activity_notice": "Activity Notice"
      },
      "unknown_type": "There is no action type with that name."
    },
    "staffdirectory": {
      "error": {
        "bio_too_long": "A bio can be at most {maximum} characters.",
        "label_too_long": "A role label needs a name of at most {maximum} characters.",
        "no_roles": "No roles have been chosen for the directory yet. An admin can pick some from the dashboard.",
        "not_staff": "That member does not hold any of the roles shown on the directory."
      }
    },
    "stafffeedback": {
      "arg_channel": "The channel notes go to. Leave this out to turn delivery off.",
      "arg_message": "What you want to say. Vex does not record who sent this.",
      "check": {
        "empty": "The note is empty.",
        "no_inbox": "Nobody has set an inbox channel for staff feedback, so Vex has nowhere to deliver this.",
        "ok": "This note can be sent.",
        "rate_limited": "You have already sent {max} notes in the last {hours} hours. Wait a while before sending another one."
      },
      "inbox_description": "Choose where anonymous notes are delivered.",
      "module_disabled": "Staff feedback is turned off in this server. An admin can turn it on from the dashboard.",
      "send_description": "Send an anonymous note to server leadership."
    },
    "staffgoals": {
      "error": {
        "bad_metric": "That is not something the bot can count toward a goal.",
        "bad_period": "A goal has to run weekly or monthly.",
        "bad_target": "A target has to be a whole number between {minimum} and {maximum}.",
        "duplicate": "That role already has a goal for that metric.",
        "not_found": "There is no goal set for that role and metric."
      },
      "metric": {
        "appeals_handled": "Appeals handled",
        "cases": "Cases opened",
        "messages": "Messages sent",
        "reviews_given": "Reviews given",
        "shifts_worked": "Shifts worked",
        "tickets_closed": "Tickets closed",
        "voice_minutes": "Minutes in voice"
      },
      "period": {
        "monthly": "Per month",
        "weekly": "Per week"
      }
    },
    "staffinactivity": {
      "reason": {
        "few_actions": "This person has handled fewer actions than the minimum.",
        "never_seen": "Vex has never recorded any activity from this person.",
        "no_activity": "This person hasn't been seen for longer than the inactivity limit.",
        "ok": "This person is active and handling moderation.",
        "on_leave": "This person is on approved leave."
      },
      "report_description": "Show the staff inactivity report."
    },
    "stafflist": {
      "arg_channel": "Where to post it. Defaults to the current channel.",
      "arg_member": "Whose card to edit. Admins only; defaults to yourself.",
      "arg_staff_since": "When you joined the team, as YYYY-MM-DD. A promotion record wins over this.",
      "arg_timezone": "An IANA name such as Europe/London. Leave empty to keep the current one.",
      "bad_timezone": "That is not a timezone Vex knows. Use an IANA name such as Europe/London or America/New_York.",
      "post_description": "Post the staff list panel in a channel.",
      "profile_description": "Set your timezone and start date on the list.",
      "refresh_description": "Rebuild the staff list panel."
    },
    "staffmonth": {
      "standings_description": "Show who is leading the Staff of the Month standings."
    },
    "staffnotes": {
      "error": {
        "about_self": "You cannot write a performance note about yourself.",
        "bad_kind": "A note has to be praise, a concern, or neutral.",
        "empty": "A note needs something written in it.",
        "not_author": "Only the person who wrote a note can change or remove it.",
        "not_found": "That note does not exist.",
        "not_visible": "You do not have access to that note.",
        "too_long": "A note can be at most {maximum} characters.",
        "too_many": "There are already {maximum} notes about that person. Remove some old ones first."
      }
    },
    "staffsuspension": {
      "arg_user": "The staff member.",
      "end_description": "End a suspension early and give the roles back.",
      "list_description": "Show who is currently suspended."
    },
    "starboard": {
      "channel_description": "Set or clear the starboard channel.",
      "settings_description": "Set the starboard emoji and star threshold."
    },
    "suggestions": {
      "archive_description": "Take a suggestion off the board.",
      "arg_archives": "Take it off the active list.",
      "arg_bl_duration": "How long, like 7d. Empty is forever.",
      "arg_bl_expired": "Include bars that have ended.",
      "arg_bl_reason": "Why. Only staff see this.",
      "arg_bl_submit": "Bar them from posting.",
      "arg_bl_user": "The member to bar.",
      "arg_bl_vote": "Bar them from voting.",
      "arg_board": "The board to act on.",
      "arg_canned_body": "The reply text.",
      "arg_canned_name": "A short name for this reply.",
      "arg_canned_status": "A status to apply with it.",
      "arg_color": "A hex color like #2ecc71.",
      "arg_comment_body": "What you want to say.",
      "arg_comment_id": "The comment's number.",
      "arg_digest_cadence": "How often it is posted.",
      "arg_digest_channel": "Where the summary is posted.",
      "arg_digest_days": "How many days to cover.",
      "arg_digest_enabled": "Whether the summary is posted.",
      "arg_digest_hour": "The hour to post at, in UTC.",
      "arg_dm_enabled": "Whether Vex may send these.",
      "arg_dm_scope": "This server, or every server.",
      "arg_emoji": "An emoji shown beside the label.",
      "arg_import_file": "The file from the export command.",
      "arg_is_resolved": "Count this as a decision made.",
      "arg_label": "The name shown on the card.",
      "arg_leaderboard_kind": "Rank by filed, or by accepted.",
      "arg_locked": "Whether voting is closed.",
      "arg_locks_discussion": "Close the discussion thread.",
      "arg_locks_voting": "Close voting.",
      "arg_new_content": "The new wording.",
      "arg_note_body": "The note. Staff only.",
      "arg_notifies_author": "Tell the author it reached this.",
      "arg_number": "The suggestion number.",
      "arg_numbers": "Numbers, separated by spaces.",
      "arg_on_roadmap": "Show these on the roadmap.",
      "arg_page": "Which page to show.",
      "arg_report_detail": "Anything else staff should know.",
      "arg_report_id": "The report's number.",
      "arg_report_reason": "What is wrong with it.",
      "arg_response": "Shown on the card. The author is told.",
      "arg_review_reason": "Why it is refused. The author sees this.",
      "arg_role": "The role. Empty shows the list.",
      "arg_role_kind": "Which list to change.",
      "arg_role_remove": "Take the role out instead.",
      "arg_search_archived": "Search archived ones instead.",
      "arg_search_author": "Only this member's suggestions.",
      "arg_search_text": "Words to look for.",
      "arg_setup_channel": "Where suggestions are posted.",
      "arg_setup_name": "What to call the board.",
      "arg_setup_panel": "Also post a submit button.",
      "arg_setup_review": "Hold suggestions for approval here.",
      "arg_slug": "A machine name, in lowercase.",
      "arg_source": "The one folded in. It is archived.",
      "arg_split_content": "What the new suggestion should say.",
      "arg_stats_days": "How many days to cover.",
      "arg_status": "The status to use.",
      "arg_tag": "The forum tag to link.",
      "arg_tag_label": "The name shown on the card.",
      "arg_tag_name": "The tag.",
      "arg_tag_slug": "A machine name, in lowercase.",
      "arg_target": "The one the votes are added to.",
      "arg_threshold_highlight": "Post a link in the highlight channel.",
      "arg_threshold_lock": "Close voting.",
      "arg_threshold_ping": "Tell staff.",
      "arg_threshold_score": "The score to trigger at.",
      "arg_threshold_status": "A status to apply.",
      "arg_weight_cap": "The most one vote can be worth.",
      "arg_weight_role": "The role being weighted.",
      "arg_weight_stacking": "How several role weights combine.",
      "arg_weight_value": "What one vote is worth. 0 removes it.",
      "blacklist_add_description": "Bar a member.",
      "blacklist_list_description": "Show who is barred.",
      "blacklist_remove_description": "Lift a member's bar.",
      "board_create_description": "Create a suggestion board.",
      "board_digest_description": "Post a board summary on a schedule.",
      "board_list_description": "List this server's boards.",
      "board_roles_description": "Choose which roles may use a board.",
      "bulk_description": "Move several suggestions at once.",
      "button_down": "Downvote",
      "button_neutral": "No opinion",
      "button_up": "Upvote",
      "canned_add_description": "Save a staff reply.",
      "canned_list_description": "Show saved replies.",
      "canned_remove_description": "Delete a saved reply.",
      "canned_use_description": "Answer with a saved reply.",
      "channel_description": "Set the suggestions channel.",
      "comment_description": "Leave a comment on a suggestion.",
      "comments_description": "Show a suggestion's discussion.",
      "delete_description": "Delete a suggestion.",
      "digest_board_disabled": "The board is disabled.",
      "digest_description": "Post a summary of the board.",
      "digest_no_board": "The board no longer exists.",
      "digest_no_channel": "The board has no summary channel.",
      "digest_off": "The scheduled summary is off for this board.",
      "dms_description": "Choose whether Vex sends you updates.",
      "doctor": {
        "board_cannot_post": "Vex cannot send messages in the channel for the board {board}.",
        "board_channel_gone": "The channel for the board {board} no longer exists.",
        "board_no_channel": "The board {board} has no channel set, so nothing can be posted to it.",
        "channel_board_on_forum": "The board {board} posts single messages, but its channel is a forum. Set its destination to forum.",
        "digest_cannot_post": "Vex cannot post in the summary channel for **{board}**.",
        "digest_channel_gone": "The summary channel for **{board}** no longer exists.",
        "digest_no_channel": "The scheduled summary for **{board}** is on but has no channel, so it will never post.",
        "forum_board_not_forum": "The board {board} posts forum threads, but its channel is not a forum.",
        "forum_no_tags": "No status on the board {board} is linked to a forum tag, so forum posts will not be labelled.",
        "forum_tags_full": "The forum for the board {board} has the maximum of 20 tags, so no new status can be given one.",
        "forum_tags_gone": "{count} statuses on the board {board} point at forum tags that have been deleted.",
        "highlight_no_channel": "The trigger at {score} points on the board {board} posts a highlight, but the board has no highlight channel.",
        "missing_blocked_roles": "The board {board} blocks {count} roles that no longer exist.",
        "missing_required_roles": "The board {board} requires {count} roles that no longer exist, so nobody can post to it.",
        "missing_staff_roles": "The board {board} names {count} staff roles that no longer exist.",
        "missing_vote_roles": "The board {board} restricts voting to {count} roles that no longer exist, so nobody can vote on it.",
        "missing_weight_roles": "The board {board} gives vote weight to {count} roles that no longer exist.",
        "no_boards": "This server has no suggestion board yet. Use /suggestion board create to make one.",
        "no_default_status": "No status is marked as the one new suggestions start in. Vex is using the first one in the list instead.",
        "no_resolved_status": "No status counts as a decision, so nothing on this board can ever be marked as settled.",
        "no_roadmap_status": "No status appears on the roadmap, so /suggestion view roadmap has nothing to show.",
        "no_statuses": "This server has no suggestion statuses, so a new suggestion has nowhere to go.",
        "no_vote_buttons": "The board {board} has every vote button switched off, so nobody can respond to anything on it.",
        "ping_no_channel": "The trigger at {score} points on the board {board} tells staff, but the board has no log or review channel to tell them in.",
        "reaction_voting": "The board {board} still uses reaction voting. Reactions cannot tell who voted, so vote counts on it cannot be checked.",
        "review_no_channel": "The board {board} holds suggestions for review but has no review channel, so staff are never shown them.",
        "suggestions_without_a_board": "{count} suggestions are not on any board, so they cannot be posted or updated.",
        "suggestions_without_a_status": "{count} suggestions have no status, so they do not appear in any filtered list.",
        "threshold_status_gone": "The trigger at {score} points on the board {board} sets a status that no longer exists.",
        "two_default_statuses": "{count} statuses are marked as the starting status. Only one can be, so which one is used is unpredictable.",
        "window_backwards": "The board {board} closes before it opens, so it is never open."
      },
      "doctor_description": "Check the setup for problems.",
      "edit_description": "Edit your own suggestion.",
      "embed_title": "Suggestion #{number}",
      "error": {
        "already_merged": "#{number} has already been folded into another suggestion.",
        "already_reported": "You have already reported that suggestion.",
        "already_voted": "You have already voted on this suggestion.",
        "bad_export": "That file is not a suggestion setup Vex can read.",
        "bad_status_slug": "A status name can only use lowercase letters, numbers and underscores, and can be at most 32 characters.",
        "bad_tag_slug": "A tag name can only use lowercase letters, numbers, underscores and dashes, and can be at most 32 characters.",
        "bulk_too_many": "That is {given} suggestions. One bulk change can move at most {max} at a time, because each one edits a card and messages an author.",
        "canned_too_long": "A saved reply can be at most {max} characters.",
        "cannot_report_own": "You cannot report your own suggestion. If you want it taken down, ask staff.",
        "comment_empty": "A comment needs some text.",
        "comment_too_long": "A comment can be at most {max} characters.",
        "comments_disabled": "Comments are switched off on this board.",
        "content_too_long": "A suggestion can be at most {max} characters.",
        "cross_guild": "Those suggestions are not both from this server.",
        "discussion_locked": "The discussion on this suggestion is closed.",
        "duplicate_board_name": "A board called {name} already exists.",
        "duplicate_canned_name": "A saved reply called {name} already exists.",
        "duplicate_status_slug": "A status called {slug} already exists in this server.",
        "duplicate_tag": "A tag called {slug} already exists in this server.",
        "duplicate_threshold": "This board already has a trigger at {score} points. Remove it first if you want to change what it does.",
        "edit_window_closed": "The edit window for this suggestion has closed. It was {seconds} seconds long.",
        "edits_disabled": "Authors cannot edit suggestions on this board.",
        "empty_content": "A suggestion needs some text.",
        "export_version": "That file was made by a different version of Vex. It says version {found} and this one reads version {expected}.",
        "last_default_status": "That is the status new suggestions land in, so it cannot be deleted. Make another status the default first.",
        "merge_chain": "#{number} has itself been folded into another suggestion. Fold into that one instead.",
        "merge_into_itself": "A suggestion cannot be folded into itself.",
        "no_vote_buttons": "A board needs at least one vote button, or nobody can respond to anything on it.",
        "not_the_author": "You can only edit your own suggestions.",
        "not_your_comment": "You can only remove your own comments.",
        "nothing_to_block": "Choose at least one thing to bar them from. A bar that blocks nothing would sit in the list looking like a punishment.",
        "report_detail_too_long": "The extra detail can be at most {max} characters.",
        "response_too_long": "A staff response can be at most {max} characters.",
        "review_reason_too_long": "A refusal reason can be at most {max} characters.",
        "status_in_use": "{count} suggestions still use that status. Move them first.",
        "threshold_does_nothing": "Choose at least one thing for the trigger to do. A trigger with no actions would sit in the list looking like a rule while having no effect.",
        "too_many_follows": "You already follow {max} suggestions in this server. Unfollow one first.",
        "too_many_roles": "That list can hold at most {limit} roles.",
        "too_many_tags": "This server already has {max} tags. Delete one first.",
        "too_many_tags_on_suggestion": "A suggestion can carry at most {max} tags. A card with a dozen labels on it is a card nobody reads.",
        "too_many_thresholds": "A board can have at most {max} score triggers. Each one is checked every time a card updates.",
        "unknown_board_field": "That board has no setting called {fields}.",
        "unknown_canned": "This server has no saved reply called {name}.",
        "unknown_destination": "{value} is not a destination Vex knows.",
        "unknown_report_reason": "{value} is not a report reason Vex knows.",
        "unknown_role_list": "That is not a list this board has.",
        "unknown_stacking": "{value} is not a weight stacking mode Vex knows.",
        "unknown_status": "This server has no status called {value}.",
        "unknown_vote_mode": "{value} is not a voting mode Vex knows.",
        "unknown_vote_value": "That is not a vote Vex understands.",
        "vote_button_disabled": "That vote option is switched off on this board.",
        "voting_locked": "Voting is closed on this suggestion."
      },
      "export_description": "Download this server's setup.",
      "field_response": "Staff response",
      "field_status": "Status",
      "follow_description": "Get told when a suggestion changes.",
      "following_description": "Show the suggestions you follow.",
      "footer": "#{number}",
      "form": {
        "bad_lengths": "That field's minimum length is above its maximum, so nothing could satisfy it.",
        "duplicate_key": "Two fields share the same key.",
        "label_too_long": "A field label can be at most {max} characters.",
        "pattern": "{label} is not in the format this board expects. {message}",
        "required": "{label} is required.",
        "select_needs_choices": "A choice field needs at least one option.",
        "too_long": "{label} can be at most {max} characters.",
        "too_many_fields": "A form can have at most {max} fields.",
        "too_short": "{label} needs at least {min} characters.",
        "unknown_kind": "{kind} is not a field type Vex knows."
      },
      "forum": {
        "no_mapping": "That status is not linked to a forum tag on this board, so the post's tags were left alone.",
        "tag_gone": "The forum tag that status used has been deleted, so the post's tags were left alone.",
        "tags_full": "That post already has the maximum of 5 tags, so the status tag could not be added."
      },
      "gate": {
        "account_too_new": "Your account needs to be {days} days old to use this board. About {hours_left} hours to go.",
        "author_may_not_vote": "You cannot vote on your own suggestion here.",
        "blacklisted": "You are not allowed to use the suggestion board in this server.",
        "blocked_role": "One of your roles is blocked from this board.",
        "board_closed": "This board has closed.",
        "board_disabled": "This board is switched off right now.",
        "board_not_open_yet": "This board is not open yet.",
        "button_disabled": "That vote option is switched off on this board.",
        "cooldown": "You are posting too quickly. Try again in {seconds} seconds.",
        "missing_role": "You do not have a role that can use this board.",
        "staff_may_not_vote": "Staff cannot vote on this board.",
        "tenure_too_short": "You need to have been in this server for {days} days. About {hours_left} hours to go.",
        "too_many_open": "You already have {limit} suggestions open here. Wait for one to be decided first.",
        "voting_locked": "Voting is closed on this suggestion."
      },
      "history_description": "Show what a suggestion used to say.",
      "import_description": "Load a setup from a file.",
      "info_description": "Show a suggestion's history.",
      "inspect_description": "Look at a suggestion's voting pattern.",
      "leaderboard_description": "Show who suggests the most.",
      "lock_description": "Close or reopen voting by hand.",
      "merge_description": "Fold one suggestion into another.",
      "move_description": "Move a suggestion to another board.",
      "note_description": "Leave a staff-only note.",
      "panel_description": "Post a panel with a submit button.",
      "queue_description": "Show suggestions awaiting review.",
      "report_description": "Tell staff about a problem.",
      "reports_dismiss_description": "Mark a report as nothing to act on.",
      "reports_list_description": "Show reports waiting for staff.",
      "reports_resolve_description": "Mark a report as dealt with.",
      "respond_description": "Write a staff response.",
      "review_approve_description": "Post a suggestion held for review.",
      "review_deny_description": "Refuse a suggestion held for review.",
      "roadmap_description": "Show what this server has planned.",
      "search_description": "Find a suggestion.",
      "set_description": "Approve, deny, or consider a suggestion.",
      "setup_description": "Set up suggestions in one go.",
      "signal": {
        "burst": "{count} votes arrived within {minutes} minutes.",
        "lopsided": "{top} of {total} votes went the same way.",
        "young": "{young} of {total} voters have accounts less than {days} days old."
      },
      "split_description": "Split part of a suggestion out.",
      "stats_description": "Show how the board is doing.",
      "status_apply_description": "Move a suggestion to a status.",
      "status_create_description": "Add a status.",
      "status_default_description": "Choose where new suggestions start.",
      "status_delete_description": "Remove a status.",
      "status_edit_description": "Change a status.",
      "status_list_description": "List this server's statuses.",
      "status_reconcile_description": "Check a forum board's tags.",
      "status_tag_description": "Link a status to a forum tag.",
      "suggest_description": "Submit a suggestion.",
      "tag_add_description": "Put a tag on a suggestion.",
      "tag_create_description": "Create a tag.",
      "tag_delete_description": "Delete a tag.",
      "tag_list_description": "Show this server's tags.",
      "tag_remove_description": "Take a tag off a suggestion.",
      "threshold_add_description": "Add a score trigger.",
      "threshold_list_description": "Show a board's score triggers.",
      "threshold_remove_description": "Remove a score trigger.",
      "unarchive_description": "Put an archived suggestion back.",
      "uncomment_description": "Remove a comment.",
      "voters_description": "Show who voted on a suggestion.",
      "votes_hidden": "Votes are hidden until this is decided.",
      "votes_plain": "{up} up, {down} down",
      "votes_weighted": "{up} up, {down} down - score {score} from {voters} voters",
      "weight_list_description": "Show a board's vote weights.",
      "weight_mode_description": "Choose how weights combine.",
      "weight_set_description": "Set what a role's vote is worth."
    },
    "tags": {
      "arg_name": "The tag to show",
      "create_description": "Create a tag (mods only).",
      "delete_description": "Delete a tag (mods only).",
      "edit_description": "Edit a tag (mods only).",
      "list_description": "List all tags.",
      "show_description": "Show a tag."
    },
    "tickets": {
      "add_description": "Add someone to this ticket.",
      "blacklist_description": "Stop someone from opening tickets, or let them again.",
      "claim_description": "Take this ticket, so other staff know you are handling it.",
      "close_description": "Close the current ticket.",
      "config_description": "Set the ticket category and log channel.",
      "denied": {
        "account_too_new": "Your Discord account has to be at least {days} days old to open this.",
        "blacklisted": "You can't open tickets in this server.",
        "blacklisted_role": "One of your roles is blocked from opening tickets.",
        "cooldown": "You opened a ticket recently. You can open another one in {seconds} seconds.",
        "member_too_new": "You have to have been in this server for at least {days} days to open this.",
        "missing_role": "You don't have the role this kind of ticket needs.",
        "no_type": "This ticket type no longer exists. Ask a staff member to check the panel.",
        "too_many_of_type": "You already have {limit} of this kind of ticket open.",
        "too_many_open": "You already have {limit} tickets open. Close one first.",
        "type_disabled": "This kind of ticket is closed right now.",
        "unknown_roles": "I couldn't check your roles, so I can't open this ticket. Try again in a moment."
      },
      "form": {
        "duplicate_key": "Two questions on this form have the same field key. Each key has to be different.",
        "min_over_max": "A question's minimum length is longer than its maximum length.",
        "select_without_options": "A dropdown question needs at least one option to choose from.",
        "too_many_fields": "A ticket form can ask at most 5 questions. Discord does not allow more in one popup."
      },
      "panel": {
        "disabled": "This panel is turned off. Turn it on to post it.",
        "no_types": "This panel doesn't offer any ticket types yet. Add at least one.",
        "too_many_types": "A panel can offer at most 25 ticket types. Discord does not allow more in one message.",
        "unknown_type": "This panel points at a ticket type that no longer exists."
      },
      "panel_description": "Post the 'Open a ticket' button.",
      "priority_description": "Set how urgent this ticket is.",
      "remove_description": "Remove someone from this ticket.",
      "reply_description": "Send one of the server's saved replies.",
      "tag_description": "Add a tag to this ticket.",
      "transcript_deleted": "(deleted)",
      "transcript_needs_scripts": "This transcript needs JavaScript to draw the conversation. Open it in a browser with scripts enabled, or ask a staff member for the plain text copy that is posted in the ticket log.",
      "transfer_description": "Hand this ticket to another staff member."
    },
    "toggles": {
      "disabled_globally": "That command is temporarily switched off across all servers. This is not a setting on your server, so there is nothing to change here.",
      "disabled_here": "That command is switched off in this server."
    },
    "trading": {
      "error": {
        "bad_currency": "That is not a valid amount of currency.",
        "bad_expiry": "A trade has to stay open for between {minimum} and {maximum}.",
        "bad_quantity": "Item quantities have to be whole numbers of at least 1.",
        "empty_trade": "Neither side is offering anything.",
        "expired": "That trade has expired. Start a new one.",
        "missing_items": "Somebody no longer has what they offered.",
        "not_a_party": "You are not part of that trade.",
        "not_confirmed": "Both people have to confirm before a trade goes ahead.",
        "not_open": "That trade has already finished.",
        "self_trade": "You cannot trade with yourself.",
        "stale_confirmation": "The offer changed after somebody confirmed, so both of you need to confirm again.",
        "too_many_items": "You can offer at most {maximum} different items.",
        "too_poor": "Somebody can no longer afford what they offered."
      }
    },
    "training": {
      "error": {
        "bad_ttl": "Actions have to wait between {minimum} and {maximum} for approval.",
        "lapsed": "That action expired before anybody reviewed it, so it was not carried out.",
        "not_approved": "That action has not been approved.",
        "not_found": "That action does not exist.",
        "not_in_training": "That member is not in training mode.",
        "not_pending": "That action has already been decided.",
        "own_action": "You cannot approve your own action while you are in training."
      }
    },
    "trivia": {
      "error": {
        "bad_duration": "A round has to run for between {minimum} and {maximum} seconds.",
        "bad_index": "The correct answer has to be one of the choices you listed.",
        "duplicate_choices": "Two choices are the same. Every choice has to be different, or one of them can never be marked correct.",
        "no_answer": "A written-answer question needs at least one accepted answer.",
        "no_prompt": "A question needs something to ask.",
        "too_few_choices": "A multiple-choice question needs at least {minimum} choices.",
        "too_many_choices": "A multiple-choice question can have at most {maximum} choices."
      }
    },
    "utility": {
      "arg_remind_duration": "e.g. 10m, 2h, 1d",
      "arg_remind_message": "What to remind you about",
      "arg_remind_repeat": "Repeat every, e.g. 1d or 1w. Minimum 30m. Leave empty for a one-off.",
      "arg_reminders_number": "The number shown in /reminders list",
      "avatar_description": "Show a user's avatar.",
      "profile_description": "Get a link to your profile on the website.",
      "remind_description": "Set a reminder.",
      "reminders_cancel_description": "Cancel one of your reminders by its number.",
      "reminders_clear_description": "Cancel all of your reminders in this server.",
      "reminders_list_description": "List your pending reminders in this server.",
      "serverinfo_description": "Show info about this server.",
      "userinfo_description": "Show info about a member."
    },
    "verification": {
      "arg_channel": "The channel for the verification panel.",
      "arg_unverified_role": "A role members hold until they verify. Optional.",
      "arg_verified_role": "The role members get when they verify.",
      "doctor_description": "Check the verification setup for problems.",
      "history_description": "Show a member's verification history.",
      "lockdown_description": "Pause verification. New arrivals wait for staff.",
      "setup_description": "Choose the verified role and channel, and post the verification panel.",
      "unverify_description": "Remove a member's verified roles.",
      "verify_description": "Verify a member by hand."
    },
    "voice": {
      "action_description": "Mute, deafen, or disconnect a member in voice.",
      "arg_action": "What to do",
      "arg_member": "The member to action",
      "arg_move_channel": "The channel to move them to",
      "arg_move_member": "The member to move",
      "arg_reason": "Reason (goes in the case and mod log)",
      "denied": {
        "above_bot": "I can't do that. Their highest role is above mine.",
        "not_below_actor": "You can't do that. Their highest role is the same as or above yours.",
        "not_in_voice": "They're not in a voice channel.",
        "owner": "You can't do that to the server owner.",
        "unknown_action": "Unknown voice action."
      },
      "move_description": "Move a member to another voice channel.",
      "need_move_members": "You need the Move Members permission to do that.",
      "web_bot_offline": "The bot did not respond in time. It may be offline."
    },
    "voice_leveling": {
      "leaderboard_description": "Show the voice XP leaderboard.",
      "rank_description": "Show your voice rank and voice XP, or someone else's.",
      "set_description": "Set a member's voice level."
    },
    "warnings": {
      "arg_warn_reason": "Reason (sent to the user and logged)",
      "arg_warn_user": "The member to warn",
      "clear_description": "Clear ALL of a user's warnings.",
      "remove_description": "Remove a single warning by its case number.",
      "view_description": "List a user's warnings, both active and expired.",
      "warn_description": "Warn a member. Warnings count towards auto-escalation."
    },
    "welcome": {
      "arg_template": "Placeholders: {user} {username} {tag} {server} {count}",
      "autorole_description": "Add or remove a role that's automatically given on join.",
      "channel_description": "Set the welcome or leave channel.",
      "message_description": "Set the welcome or leave message template.",
      "test_description": "Preview the welcome message for yourself."
    }
  },
  "common": {
    "announce_time": {
      "hour": "Announce at",
      "hour_hint": "The hour the daily post goes out. Before this, Vex waits. It used to post at whatever time the bot was last restarted.",
      "timezone": "Timezone",
      "timezone_hint": "Which clock the hour and the date are measured on. An IANA name like America/New_York. UTC if you are not sure."
    },
    "back": "Back",
    "boards": {
      "economy": "Economy",
      "kudos": "Kudos",
      "levels": "Levels"
    },
    "cancel": "Cancel",
    "case_type": {
      "ban": "Ban",
      "jail": "Jail",
      "kick": "Kick",
      "nickname_lock": "Nickname locked",
      "nickname_release": "Nickname released",
      "note": "Note",
      "softban": "Softban",
      "timeout": "Timeout",
      "unban": "Unban",
      "unjail": "Released from jail",
      "untimeout": "Timeout removed",
      "voice_deafen": "Voice deafen",
      "voice_disconnect": "Disconnected from voice",
      "voice_move": "Moved in voice",
      "voice_mute": "Voice mute",
      "voice_undeafen": "Voice undeafen",
      "voice_unmute": "Voice unmute",
      "warn": "Warning"
    },
    "caution": "Caution",
    "close_dialog": "Close dialog",
    "confirm": "Confirm",
    "deleted_channel": "deleted-channel",
    "deleted_role": "deleted-role",
    "disabled": "Disabled",
    "discard": "Discard",
    "edit": "Edit",
    "enabled": "Enabled",
    "error": "Something went wrong.",
    "hours": "{n} hours",
    "minutes": "{n} minutes",
    "module": "Module",
    "months": {
      "april": "April",
      "august": "August",
      "december": "December",
      "february": "February",
      "january": "January",
      "july": "July",
      "june": "June",
      "march": "March",
      "may": "May",
      "november": "November",
      "october": "October",
      "september": "September"
    },
    "months_short": {
      "april": "Apr",
      "august": "Aug",
      "december": "Dec",
      "february": "Feb",
      "january": "Jan",
      "july": "Jul",
      "june": "Jun",
      "march": "Mar",
      "may": "May",
      "november": "Nov",
      "october": "Oct",
      "september": "Sep"
    },
    "needs_tier": "This feature needs Vex Premium. Upgrade from Billing to unlock it.",
    "never": "Never",
    "next": "Next",
    "no_reason": "No reason given",
    "none_set": "Not set",
    "off": "Off",
    "on": "On",
    "one_hour": "1 hour",
    "one_minute": "1 minute",
    "previous": "Previous",
    "remove": "Remove",
    "reports": {
      "growth": {
        "description": "Joins and leaves per day, and the net change.",
        "label": "Member Growth"
      },
      "heatmap": {
        "description": "Message activity by weekday and hour of the day.",
        "label": "Activity Heatmap"
      },
      "retention": {
        "description": "How many of the people who joined in a week are still here.",
        "label": "Retention Cohorts"
      },
      "stat": {
        "cohort_joined": "Joined",
        "joins": "Joins",
        "leaves": "Leaves",
        "messages": "Messages",
        "net": "Net change",
        "peak_hour": "Busiest hour (UTC)",
        "retained_pct": "Retained",
        "still_here": "Still here",
        "voice_hours": "Voice hours",
        "voice_members": "Members in voice"
      },
      "voice": {
        "description": "Time spent in voice channels, per member.",
        "label": "Voice Stats"
      }
    },
    "save": "Save Changes",
    "save_failed": "Failed to save",
    "saving": "Saving...",
    "unsaved_changes": "Unsaved changes"
  },
  "web": {
    "access": {
      "add": "Add",
      "add_role": "Add a role",
      "add_role_hint": "Everyone with the role gets these permissions. This is the right choice most of the time.",
      "add_role_title": "Give a role access",
      "add_user_hint": "Use this when one person needs access and you do not want to create a role for it. Their permissions are added to whatever their roles already give them.",
      "add_user_title": "Give one person access",
      "admin_note": "The server owner and anyone with the Manage Server permission always have full access. You cannot change that here, because they can already change it in Discord.",
      "bad_user_id": "That is not a Discord User ID. Turn on Developer Mode in Discord, right click a member, and choose Copy User ID.",
      "clear_all": "Clear all",
      "danger_note": "Changing server settings and writing plugins are the two permissions that let a role change anything else. Grant them deliberately.",
      "granted_count": "{count} of {total} permissions",
      "group": {
        "community": "Community",
        "insights": "Insights",
        "moderation": "Moderation",
        "server": "Server",
        "staff": "Staff"
      },
      "kind_role": "Role",
      "kind_user": "Person",
      "no_grants_description": "Only the owner and members with Manage Server can open this dashboard. Add a role to let your staff in.",
      "no_grants_title": "No roles have access yet",
      "permission_column": "Permission",
      "preset": "Start from a preset",
      "preset_manager": "Manager",
      "preset_moderator": "Moderator",
      "preset_support": "Support",
      "preset_viewer": "Viewer",
      "remove": "Remove",
      "remove_role": "Remove",
      "role_already_added": "That role already has permissions set.",
      "saved": "Dashboard access saved.",
      "subtitle": "Choose what each role and person can see and do on this dashboard.",
      "title": "Dashboard Access",
      "user_already_added": "That person already has permissions set.",
      "user_id_placeholder": "Discord User ID"
    },
    "achievements": {
      "add": "Add a badge",
      "add_failed": "That badge could not be created.",
      "add_title": "Define a badge",
      "added": "Badge created.",
      "cancel": "Cancel",
      "delete": "Retire",
      "delete_failed": "That badge could not be retired.",
      "deleted": "Badge retired. Members who already earned it keep it.",
      "desc_hint": "Shown to members. Leave it empty if the name says enough.",
      "desc_label": "Description",
      "description": "Badges members earn by passing a counter. Define what counts and how far they have to get.",
      "empty_body": "Define a badge and members start earning it the next time their counter moves. Nothing is awarded retroactively.",
      "empty_title": "No Badges Yet",
      "hidden_badge": "Hidden",
      "hidden_hint": "Members will not see this badge listed until they unlock it.",
      "hidden_label": "Hidden until earned",
      "hide_holders": "Hide",
      "holders_many": "{count} members have this",
      "holders_none": "Nobody has earned this yet",
      "holders_one": "1 member has this",
      "key_hint": "A short id used internally. It cannot be changed later.",
      "key_label": "Badge id",
      "kind_label": "Counts",
      "manual_note": "Badges cannot be awarded by hand. Every one is earned by passing its target, which is what makes holding one mean something.",
      "name_label": "Name",
      "points": "{points} pts",
      "retire_note": "Retiring a badge stops it being offered. Members who already earned it keep it and keep its points.",
      "revoke": "Take back",
      "revoke_failed": "That badge could not be taken back.",
      "revoked": "Badge taken back from that member.",
      "show_holders": "Who has it",
      "target": "Target {threshold}",
      "threshold_hint": "How far a member has to get before the badge unlocks.",
      "threshold_label": "Target",
      "tier_hint": "Tiers are cosmetic, but each one is worth a different number of points.",
      "tier_label": "Tier",
      "title": "Achievements"
    },
    "activation": {
      "back": "Back to your servers",
      "body": "Vex is a premium bot, and this server hasn't been authorized yet. Give the bot owner the server ID below and ask them to activate it.",
      "copied": "Copied",
      "copy": "Copy",
      "server_id": "Server ID",
      "title": "This server isn't activated"
    },
    "afk": {
      "away_description": "Members who have been away the longest are listed first. You can clear anyone who set a note and never came back.",
      "away_for": "away {when}",
      "away_title": "Currently Away",
      "clear": "Clear",
      "clear_failed": "The AFK note could not be cleared.",
      "cleared": "AFK note cleared.",
      "disabled_saved": "The AFK system is now disabled and synced to the bot.",
      "empty_description": "Members who run /afk show up here.",
      "empty_title": "Nobody is AFK",
      "enabled_saved": "The AFK system is now enabled and synced to the bot.",
      "no_note": "no note",
      "subtitle": "Members set an away note with /afk. Vex replies to anyone who mentions them while they are away.",
      "title": "AFK System"
    },
    "alertrouting": {
      "add": "Add a rule",
      "channel_label": "Post in",
      "default_hint": "Everything with no matching rule goes here. Alerts are never dropped, so this channel needs to be one somebody reads.",
      "default_label": "Default channel",
      "description": "Which channel each kind of alert is posted in, and who gets pinged.",
      "empty_body": "Without any rules every alert goes to the default channel. Add a rule to send a particular kind somewhere else.",
      "empty_title": "No Rules Yet",
      "enabled_label": "Rule is on",
      "fallback_note": "An alert that matches no rule is posted in the default channel rather than dropped. A new alert type shipping with no rule is the case nobody tests, and an alert that silently stops arriving is not something anybody notices.",
      "mention_hint": "Pings are added on top of the channel post. There is no way to make an alert a ping only, because an alert that only reaches somone who is asleep is one nobody sees.",
      "mention_roles_label": "Also ping these roles",
      "no_default": "Pick a default channel before adding rules. Without one there is nowhere for an unmatched alert to go.",
      "pattern_all": "Every alert",
      "pattern_group": "Everything in {namespace}",
      "pattern_hint": "Pick one alert, everything in a group, or everything. The most specific rule wins, so a rule for one alert beats a rule for its whole group.",
      "pattern_label": "Applies to",
      "remove": "Remove",
      "routes_title": "Rules",
      "save_failed": "That routing could not be saved.",
      "saved": "Alert routing saved.",
      "severity_hint": "An alert below this level is not dropped. It goes to the default channel instead.",
      "severity_label": "Only when",
      "title": "Alerts Routing",
      "unrouted_hint": "These alerts go to the default channel. That is fine if the default is where you want them. It is listed so you find out here rather than during an incident.",
      "unrouted_none": "Every alert type has a rule.",
      "unrouted_title": "No rule covers these"
    },
    "analytics": {
      "acquisition": {
        "attributed": "Credited to an invite",
        "attributed_hint": "{n} joins.",
        "conf_ambiguous": "Ambiguous",
        "conf_ambiguous_hint": "Several invites moved at once, so no one of them can be credited.",
        "conf_exact": "Certain",
        "conf_exact_hint": "One invite's counter rose and one person joined.",
        "conf_likely": "Likely",
        "conf_likely_hint": "One candidate invite, but several people joined at the same time.",
        "conf_none": "Unknown",
        "conf_none_hint": "Nothing moved. A vanity URL, a widget join, a deleted invite, or Vex lacking the Manage Server permission.",
        "confidence": "How certain the attribution is",
        "confidence_hint": "Discord does not report which invite was used. Vex works it out by comparing invite use counts across each join.",
        "confidence_note": "Ambiguous joins are counted as joins and are not credited to any invite. Crediting them to whichever invite happened to sort first would look more informative and would not be.",
        "description": "Where joins came from, and how much of that is a guess.",
        "empty_body": "Nobody joined in this period, or invite collection is switched off.",
        "empty_title": "No joins recorded",
        "joins": "Joins",
        "no_inviter": "Inviter unknown",
        "sources": "Where joins came from",
        "sources_hidden": "Invite codes are hidden. An invite code is a working link into the server, so it needs the member level analytics permission.",
        "sources_hint": "Invite codes are shown because you can view member level analytics.",
        "title": "Acquisition",
        "unknown": "Could not be credited",
        "unknown_hint": "A vanity URL, a deleted invite, or several people joining at once."
      },
      "alert": {
        "reason_cooldown": "Recently fired, so it is waiting out its cooldown.",
        "reason_coverage": "Part of this period was not observed, so the comparison is suppressed.",
        "reason_metric": "The metric this alert watches is no longer available.",
        "reason_sample": "Not enough observations to say anything yet.",
        "reason_unmet": "The threshold has not been crossed."
      },
      "annotation": {
        "preset": "Collection preset changed to {preset}.",
        "settings": "Collection settings were changed."
      },
      "by_type": "By type",
      "cadence": {
        "daily": "Daily",
        "monthly": "Monthly",
        "weekly": "Weekly"
      },
      "cases_per_day": "Cases per day",
      "cat": {
        "commands": "Commands",
        "commands_desc": "Which commands and buttons people use.",
        "content": "Attachments and links",
        "content_desc": "Counts of attachments by file type and of messages containing links. This reads message contents, so it is switched off by default and is in none of the presets.",
        "features": "Vex features",
        "features_desc": "Which parts of Vex the server uses, and when settings are changed.",
        "invites": "Invites",
        "invites_desc": "Which invite a join came from, where that can be worked out. Vex needs the Manage Server permission for this.",
        "members": "Members",
        "members_desc": "Joins, departures, rejoins, boosts, and the member count over time.",
        "messages": "Messages",
        "messages_desc": "Message counts by channel and by hour, plus edits, deletions and replies.",
        "moderation": "Moderation",
        "moderation_desc": "Cases, automod triggers, and bans that happened outside Vex. Staff only.",
        "reactions": "Reactions",
        "reactions_desc": "Reactions added and removed, and which emoji are used.",
        "roles": "Roles",
        "roles_desc": "Roles given and taken away over time.",
        "stage": "Stages",
        "stage_desc": "Time spent as a speaker and as an audience member on Stages.",
        "support": "Tickets and verification",
        "support_desc": "Ticket volume, first response times and verification completion. Staff only, and no ticket content is ever collected.",
        "threads": "Threads and forums",
        "threads_desc": "Threads created and messages posted inside them.",
        "voice": "Voice",
        "voice_desc": "How long people spend in voice, how busy channels get, and whether people who open a channel are joined by anybody."
      },
      "channels": {
        "busiest": "Busiest channels",
        "busiest_hint": "Select one to narrow every chart on this page to it.",
        "categories": "By category",
        "categories_hint": "Useful when channels are grouped by topic.",
        "click_hint": "Selecting a channel keeps your date range and comparison.",
        "description": "Where the conversation is happening, and where it used to be.",
        "filtered_hint": "Charts on this page are narrowed to the selected channels.",
        "other": "Another {value} messages were posted outside the channels listed.",
        "selected_chart": "Messages in the {n} selected channels",
        "title": "Channels and conversations"
      },
      "chart": {
        "cohort": "Joined in",
        "day_n": "Day {n}",
        "dropped": "{n} did not reach the next step",
        "fri": "Fri",
        "joined": "People",
        "less": "Less",
        "mon": "Mon",
        "more": "More",
        "no_baseline": "No baseline",
        "no_data": "Nothing was recorded for this period.",
        "no_voice": "Nobody used voice in this period.",
        "not_observed": "Not observed",
        "not_yet": "This checkpoint has not been reached yet for everybody in this group.",
        "of_previous": "{pct}% of the step before",
        "partial": "This period is not over yet.",
        "partial_coverage": "Vex was not watching for all of this period.",
        "period": "Period",
        "sat": "Sat",
        "show_table": "Show the numbers",
        "sun": "Sun",
        "thu": "Thu",
        "times_in": "Times shown in {tz}.",
        "tue": "Tue",
        "vs_previous": "vs previous",
        "wed": "Wed"
      },
      "compare": {
        "none": "Nothing",
        "previous": "Previous period",
        "year": "Same period last year"
      },
      "controls": {
        "clear": "Clear {n} filters",
        "compare": "Compare to",
        "exclude_staff": "Leave out staff",
        "range": "Date range",
        "timezone": "Reporting in {tz}"
      },
      "definition_for": "What does {metric} mean?",
      "dim": {
        "actor_kind": "Humans, bots and webhooks",
        "category": "Channel category",
        "channel": "Channel",
        "hour": "Hour of the day",
        "key": "Detail",
        "member": "Member",
        "role": "Role",
        "source": "Source",
        "total": "No breakdown",
        "weekday": "Day of the week"
      },
      "empty_body": "No {what} has been recorded in this period.",
      "empty_title": "Nothing recorded yet",
      "engagement": {
        "description": "How much is being said, and how many different people are saying it.",
        "emoji": "Most used reactions",
        "emoji_hint": "Counts how often a reaction was added, not how many are on messages now.",
        "emoji_other": "Another {value} reactions used emoji outside the top ten.",
        "reaction_table": "Show reactions by period",
        "rhythm": "When this server is awake",
        "rhythm_hint": "Messages by day of the week and hour.",
        "title": "Engagement",
        "volume_vs_people": "Volume and participation",
        "volume_vs_people_hint": "Messages against the number of different people posting.",
        "volume_vs_people_note": "When these two move apart, the same people are talking more and fewer of them are talking. A message count on its own would read that as growth."
      },
      "error_body": "Something went wrong fetching this. Try again in a moment.",
      "error_title": "That did not load",
      "estimate_note": "This number is an estimate. Open the definition to see how it is worked out.",
      "explore": {
        "breakdown": "By {dimension}",
        "description": "Pick a metric and look at it however you want. The whole query is in the address bar, so a view is shareable by copying it.",
        "dimension": "Break down by",
        "empty_body": "Pick a metric to start, or use one of the templates.",
        "empty_title": "Nothing selected",
        "export": "Export CSV",
        "grain": "Group by",
        "metric": "Metric",
        "refused": "That combination is not available",
        "rows": "Values",
        "templates": "Start from:",
        "title": "Explore",
        "top_share": "Largest share",
        "tpl_busiest_channels": "Busiest channels",
        "tpl_command_use": "Command use",
        "tpl_voice_by_channel": "Voice by channel",
        "tpl_who_is_active": "Active members",
        "try_one": "Show me an example"
      },
      "feature": {
        "economy": "Economy",
        "events": "Events",
        "giveaways": "Giveaways",
        "leveling": "Leveling",
        "polls": "Polls",
        "reaction_roles": "Reaction roles",
        "starboard": "Starboard",
        "suggestions": "Suggestions",
        "tickets": "Tickets",
        "verification": "Verification",
        "voice_leveling": "Voice leveling",
        "welcome": "Welcome"
      },
      "features": {
        "commands": "Most used commands",
        "commands_hint": "Which commands people run.",
        "components": "Buttons and menus",
        "components_hint": "Which of Vex's buttons people press.",
        "description": "Which parts of Vex this server actually uses. The useful finding here is usually the absence.",
        "modules": "Feature activity",
        "modules_hint": "Things that happened inside Vex features, such as a giveaway entry or a suggestion vote.",
        "no_arguments": "The command name is recorded. What was typed into the command is never collected.",
        "no_events": "No feature activity was recorded. Either these features are not in use, or they are not instrumented yet.",
        "other_commands": "Another {value} uses were commands outside the top fifteen.",
        "title": "Vex feature usage"
      },
      "grain": {
        "day": "By day",
        "hour": "By hour",
        "month": "By month",
        "week": "By week"
      },
      "growth": {
        "compare_note": "Net growth was {current} this period and {previous} in the one before it.",
        "departures": "Departures",
        "departures_hint": "How many members the server lost.",
        "departures_note": "Discord reports a leave, a kick and a ban the same way. The reason is recorded as unknown unless Vex performed the action itself.",
        "description": "Who arrived, who left, and whether the two add up to a community that is growing.",
        "flow": "Joins and departures",
        "flow_hint": "Both on one scale, because the difference between them is the story.",
        "members_hint": "Observed every 30 minutes. Gaps are hours when Vex was offline.",
        "new_vs_returning": "First time and returning",
        "new_vs_returning_hint": "Rejoins are people who had been a member before.",
        "title": "Growth"
      },
      "health": {
        "aggregate_only": "This server collects totals only, so no information about individual members is stored.",
        "bot_excluded": "Bots are excluded from collection.",
        "buffer": "Waiting to be processed",
        "buffer_hint": "Events buffered but not yet stored.",
        "buffer_overflow": "The collection buffer filled up and some events were dropped. Totals for this hour are lower than what actually happened.",
        "category_off": "This category is not being collected.",
        "channel_excluded": "This channel is excluded from collection.",
        "degraded_hours": "Hours with gaps",
        "description": "Whether any of this is actually being measured. An empty chart because a permission is missing looks exactly like an empty chart because nothing happened.",
        "disabled": "Analytics collection is switched off for this server.",
        "disconnected": "Vex was disconnected from Discord and was not collecting.",
        "dropped": "Events dropped",
        "dropped_hint": "Lost because the buffer filled up.",
        "limit_history": "Nothing exists from before collection started. Discord does not provide history for any of this, and Vex does not invent it.",
        "limit_private": "Channels that are not visible to everyone are excluded from breakdowns. Their activity is still counted in the totals.",
        "limit_reasons": "Discord reports a leave, a kick and a ban identically. Departure reasons are recorded as unknown unless Vex performed the action.",
        "limit_voice": "Voice numbers measure connection time and observed settings. Vex never joins a voice channel and cannot tell whether anybody was speaking.",
        "limits_title": "What these numbers cannot tell you",
        "member_excluded": "This member is excluded from collection.",
        "missing_intent": "This signal needs a gateway intent that is not enabled.",
        "missing_permission": "Vex is missing a Discord permission that this category needs.",
        "needs_permission": "Vex needs this Discord permission here.",
        "no_gaps": "Nothing is missing for what this server collects.",
        "observed": "Vex observed {observed} hours out of {expected}, which is {percent}%.",
        "ok_hours": "Hours fully observed",
        "open_voice": "{n} voice sessions are still open. They will appear once they end.",
        "paused": "Collection is paused. Nothing new is being recorded.",
        "requirements": "What Vex needs here",
        "requirements_hint": "Permissions and intents the enabled categories depend on.",
        "silent": "Enabled but recording nothing",
        "silent_hint": "These categories are switched on and produced no data in this period. That is usually a missing permission rather than a quiet server.",
        "since": "Collecting since",
        "staff_excluded": "Staff are excluded from community analytics.",
        "state_bad": "Large gaps in collection",
        "state_good": "Collecting normally",
        "state_off": "Not collecting",
        "state_warn": "Collecting with gaps",
        "title": "Collection health"
      },
      "insight": {
        "activation_down": "Only {current}% of new members posted in their first week, down {points} points from {previous}%.",
        "activation_up": "{current}% of new members posted in their first week, up {points} points from {previous}%.",
        "actives_down": "Only {current} different people took part, down {percent}% from {previous}.",
        "actives_up": "{current} different people took part, up {percent}% from {previous}.",
        "cases_down": "Moderation cases fell {percent}%, from {previous} to {current}.",
        "cases_up": "Moderation cases rose {percent}%, from {previous} to {current}.",
        "concentrating": "Messages are up {messages}% while the number of people posting is down {members}%. The same people are talking more, and fewer of them are talking.",
        "coverage_gap": "Vex was only watching for {percent}% of this period, so these numbers are incomplete. Other findings are hidden until coverage recovers.",
        "events_dropped": "{count} events were dropped because the collection buffer filled up. Totals for the affected hours are lower than what actually happened.",
        "inert_joiners": "{percent}% of new members have not posted, reacted or joined voice at all. That is {count} people.",
        "joins_down": "Joins fell {percent}%, from {previous} to {current}.",
        "joins_up": "Joins rose {percent}%, from {previous} to {current}.",
        "messages_down": "Messages fell {percent}%, from {previous} to {current}.",
        "messages_up": "Messages rose {percent}%, from {previous} to {current}.",
        "net_negative": "The server lost members this period. Net growth was {net}.",
        "ticket_backlog": "{opened} tickets were opened and {closed} were closed. The backlog is growing.",
        "verification_down": "Verification completion fell {points} points, from {previous}% to {current}%.",
        "voice_healthy": "{percent}% of people who opened an empty voice channel were joined by somebody else.",
        "voice_lonely": "{percent}% of people who opened an empty voice channel were never joined by anybody. They waited about {wait} minutes before leaving."
      },
      "limit": {
        "automod_trigger": "This counts rule matches. It cannot tell you how many of those matches were correct, and the number of appeals is not a measure of that either.",
        "command_use": "The command name is recorded. What was typed into the command is never collected.",
        "config_change": "This records that a setting changed and who changed it. The full before and after values live in the audit log.",
        "feature_event": "Feature activity records the name of what happened. Command arguments, form answers and message content are never included.",
        "foreign_action": "Vex sees that a ban happened. Matching it to a moderator needs the audit log, and a match is only recorded when the evidence is unambiguous.",
        "invite_attribution": "Discord does not say which invite a member used. Vex works it out by comparing invite use counts across the join, so several people joining at once, a deleted invite, a vanity URL, or a missing permission all produce an unknown result. Every attributed join carries how confident the match is.",
        "member_boost": "Vex sees a member start boosting. Discord does not report how many boosts an individual member is contributing.",
        "member_join": "Discord reports a join the moment it happens. It does not say how the member found the server.",
        "member_leave": "Discord reports a departure the same way whether the member left, was kicked, or was banned. Unless Vex performed the action itself, the reason is recorded as unknown.",
        "member_roles": "Role changes are recorded from the moment collection started. Vex cannot tell you which roles somebody held before that.",
        "member_snapshot": "The member count is observed every 30 minutes rather than continuously. Hours when Vex was offline have no observation, and those are shown as a gap instead of a zero.",
        "message_attachment": "Only the attachment's type and the number of links are recorded. File names, file contents and the links themselves are never stored.",
        "message_create": "Only channels Vex can read are counted. A channel Vex cannot see produces no data at all, which looks the same as a quiet channel.",
        "message_delete": "When the deleted message was not already known to Vex, there is no author, no original timestamp and no content. The deletion is counted and nothing about the message is recorded.",
        "message_edit": "Discord sends only the parts of a message that changed, so an edit to a message Vex has not seen carries no author. Edits are counted per channel and are never attributed by guessing.",
        "message_reply": "Only Discord's reply feature can be detected. Somebody answering a question in a normal message is a reply in every sense except the one that is measurable.",
        "reaction_add": "This counts the act of adding a reaction. It is not the same as the reactions currently sitting on a message, because reactions can be removed.",
        "reaction_remove": "Discord reports a removal without saying who removed it in every case, so removals are counted per channel rather than per member.",
        "stage_state": "Vex can see whether somebody was a speaker or in the audience. It cannot tell whether a speaker said anything.",
        "thread_create": "Threads are counted when they are created. Threads that existed before collection started are not included.",
        "thread_message": "Thread messages are part of the message total rather than an addition to it.",
        "ticket_lifecycle": "Ticket timing is recorded. What was said inside a ticket is never collected.",
        "verification_funnel": "Verification steps are recorded. The answers somebody gave are never collected.",
        "vex_case": "This covers moderation Vex performed. Actions taken directly in Discord are recorded separately and are never merged into these numbers.",
        "voice_occupancy": "Occupancy is worked out from when people joined and left. If Vex was offline during a session, the part it could not see is marked as uncertain rather than being counted or thrown away.",
        "voice_session": "This measures time connected to a voice channel. Vex never joins a voice channel and never receives audio, so it cannot tell whether anybody was speaking or listening.",
        "voice_state_flags": "These measure how long a setting was switched on. Being unmuted is not the same as speaking, and having a stream running is not the same as anybody watching it."
      },
      "m": {
        "active_members": "Active members",
        "active_members_def": "How many different people posted a message, spent time in voice, reacted, or posted in a thread. Running a command is not counted as taking part. This is a count of different people over the whole period, so it cannot be added up across days.",
        "attachments": "Attachments",
        "attachments_def": "How many files were attached to messages, grouped by file type. Only the type is recorded. File names and contents are never collected.",
        "automod_triggers": "Automod triggers",
        "automod_triggers_def": "How many times an automod rule matched a message.",
        "boosts": "New boosts",
        "boosts_def": "How many members started boosting the server during the period. Boosts that were already active before the period are not counted again.",
        "bulk_deletes": "Bulk deletions",
        "bulk_deletes_def": "How many messages were removed by a purge or by Discord's own bulk delete. Counted separately from single deletions, because one moderator action can remove hundreds of messages at once.",
        "cases": "Moderation cases",
        "cases_def": "Moderation actions Vex performed, including warnings, timeouts, kicks and bans. Actions taken directly in Discord are counted separately.",
        "commands": "Commands used",
        "commands_def": "How many Vex commands were run. The command name is recorded. What was typed into it is never collected.",
        "components": "Buttons and menus used",
        "components_def": "How many times somebody used a button or a select menu that Vex posted.",
        "config_changes": "Settings changed",
        "config_changes_def": "How many times a setting was changed on the dashboard.",
        "feature_events": "Feature activity",
        "feature_events_def": "Things that happened inside Vex features, such as a giveaway entry or a suggestion vote. Break it down by feature to see which parts of the bot the server actually uses.",
        "foreign_actions": "Actions outside Vex",
        "foreign_actions_def": "Bans and unbans Vex observed but did not perform. These are kept apart from Vex's own cases so that one action is never counted twice.",
        "invite_joins": "Joins by invite",
        "invite_joins_def": "Joins credited to a particular invite. Discord does not report which invite was used, so this is worked out by comparing invite use counts before and after each join. Joins that cannot be credited appear in the unknown group.",
        "joins": "Joins",
        "joins_def": "How many times somebody joined the server. A member who joins, leaves and joins again counts twice here. Use Unique joiners for the number of different people.",
        "leaves": "Departures",
        "leaves_def": "How many times somebody stopped being a member. Discord reports a leave, a kick and a ban the same way, so the reason is recorded as unknown unless Vex performed the action itself.",
        "links": "Links",
        "links_def": "How many messages contained at least one link. The links themselves are never stored.",
        "member_count": "Members",
        "member_count_def": "How many members the server had, as counted by Vex every 30 minutes. This is an observation rather than a running total of joins minus leaves, because a running total drifts away from the truth over months. Hours when Vex was offline have no observation and are shown as a gap.",
        "message_authors": "People posting",
        "message_authors_def": "How many different people posted at least one message in the period.",
        "message_deletes": "Deletions",
        "message_deletes_def": "How many messages were deleted. When Vex has not seen the original message, the deletion is still counted and nothing about the message is recorded.",
        "message_edits": "Edits",
        "message_edits_def": "How many times a message was edited. An edit never counts as a new message.",
        "messages": "Messages",
        "messages_def": "How many messages were posted in channels Vex can see and that are included in collection. Each message is counted once. Editing a message does not create another one.",
        "messages_per_author": "Messages per person",
        "messages_per_author_def": "Messages divided by the number of different people who posted. This rises when the same people talk more, and it rises when fewer people talk. Read it next to Active members rather than on its own.",
        "net_growth": "Net growth",
        "net_growth_def": "Joins minus departures. A positive number means the server grew over the period.",
        "reacting_members": "People reacting",
        "reacting_members_def": "How many different people added at least one reaction in the period.",
        "reactions_added": "Reactions added",
        "reactions_added_def": "How many times somebody added a reaction. This counts the action, not the reactions currently sitting on messages.",
        "reactions_removed": "Reactions removed",
        "reactions_removed_def": "How many times somebody removed a reaction they had added.",
        "rejoins": "Rejoins",
        "rejoins_def": "Joins by somebody who had been a member before. A high number next to flat net growth usually means the same people are cycling in and out.",
        "replies": "Replies",
        "replies_def": "How many messages used Discord's reply feature. Replies are part of the Messages total rather than an addition to it. A message that answers another one without using the reply feature cannot be detected and is not counted.",
        "reply_rate": "Reply rate",
        "reply_rate_def": "The share of messages that were replies. A useful signal for whether people are talking to each other or posting alongside each other.",
        "role_grants": "Roles given",
        "role_grants_def": "How many times a role was added to a member.",
        "role_removals": "Roles removed",
        "role_removals_def": "How many times a role was taken from a member.",
        "thread_messages": "Thread messages",
        "thread_messages_def": "How many messages were posted inside threads. These are part of the Messages total rather than an addition to it.",
        "threads_created": "Threads started",
        "threads_created_def": "How many threads and forum posts were created.",
        "ticket_first_response_seconds": "Median first response",
        "ticket_first_response_seconds_def": "How long a member typically waits for the first staff reply on a ticket. Calculated by adding up every first response time and dividing by the number of tickets that received one.",
        "ticket_response_seconds_total": "Total first response time",
        "ticket_response_seconds_total_def": "Every first response time added together. This exists so that the average can be calculated correctly over any period, and it is not meant to be read on its own.",
        "ticket_responses": "Tickets answered",
        "ticket_responses_def": "How many tickets received a first staff reply.",
        "tickets_closed": "Tickets closed",
        "tickets_closed_def": "How many support tickets were closed.",
        "tickets_opened": "Tickets opened",
        "tickets_opened_def": "How many support tickets were opened.",
        "unique_joiners": "Unique joiners",
        "unique_joiners_def": "How many different people joined in the period. Always lower than or equal to Joins, and the difference is people who came back.",
        "verification_rate": "Verification rate",
        "verification_rate_def": "The share of members who started verification and finished it. A drop here usually means a step in the flow stopped working.",
        "verifications_completed": "Verifications completed",
        "verifications_completed_def": "How many members finished verification.",
        "verifications_failed": "Verification checks failed",
        "verifications_failed_def": "How many times a verification check did not pass. A member can fail and then succeed, so this is not the number of people who were turned away.",
        "verifications_started": "Verifications started",
        "verifications_started_def": "How many members began the verification flow.",
        "voice_afk_seconds": "Time in the AFK channel",
        "voice_afk_seconds_def": "Time members spent in the server's AFK channel. Discord moves people there automatically, so this is counted separately and is never included in voice participation.",
        "voice_group_conversion": "Sessions that became group calls",
        "voice_group_conversion_def": "Of the people who opened an empty voice channel, the share who were joined by at least one other person before they left.",
        "voice_group_seconds": "Time with others",
        "voice_group_seconds_def": "Time members spent in a voice channel with at least one other person present.",
        "voice_members": "People in voice",
        "voice_members_def": "How many different people spent time in a voice channel during the period.",
        "voice_occupancy": "Average people in voice",
        "voice_occupancy_def": "The average number of people connected to voice at any moment, weighted by how long they were there. A value of 1.5 means that across the whole period there was typically somebody and a half in voice.",
        "voice_peak_concurrent": "Busiest moment",
        "voice_peak_concurrent_def": "The largest number of people connected to voice at the same instant. The peak over a week is the busiest single moment in that week, not the sum of the busiest moment on each day.",
        "voice_seconds": "Voice time",
        "voice_seconds_def": "Total time members spent connected to voice channels, added up across everybody. This measures connection time. Vex never joins a voice channel and cannot tell whether anybody was speaking or listening.",
        "voice_self_deaf_seconds": "Time self deafened",
        "voice_self_deaf_seconds_def": "Time members spent with their own audio turned off. This describes the deafen setting and not whether they were listening.",
        "voice_self_mute_seconds": "Time self muted",
        "voice_self_mute_seconds_def": "Time members spent with their own microphone muted. This describes the mute setting and not whether they were speaking.",
        "voice_server_mute_seconds": "Time server muted",
        "voice_server_mute_seconds_def": "Time members spent muted by a moderator rather than by themselves.",
        "voice_sessions": "Voice sessions",
        "voice_sessions_def": "How many times somebody joined a voice channel. Moving between channels ends one session and starts another.",
        "voice_solo_seconds": "Time alone",
        "voice_solo_seconds_def": "Time members spent in a voice channel with nobody else present.",
        "voice_stage_speaker_seconds": "Stage speaking time",
        "voice_stage_speaker_seconds_def": "Time members spent as a speaker on a Stage rather than in the audience. This describes the speaker role and not whether they spoke.",
        "voice_stream_seconds": "Time streaming",
        "voice_stream_seconds_def": "Time members spent sharing their screen. This measures how long the stream ran and not whether anybody watched it.",
        "voice_video_seconds": "Time on camera",
        "voice_video_seconds_def": "Time members spent with their camera turned on."
      },
      "nav": {
        "acquisition": "Acquisition",
        "channels": "Channels",
        "engagement": "Engagement",
        "explore": "Explore",
        "features": "Vex usage",
        "group_community": "Community",
        "group_manage": "Manage",
        "group_operations": "Operations",
        "growth": "Growth",
        "health": "Collection health",
        "label": "Analytics sections",
        "operations": "Moderation",
        "overview": "Overview",
        "reports": "Reports and alerts",
        "retention": "Retention",
        "settings": "Settings",
        "voice": "Voice"
      },
      "no_activity": "No moderation activity yet.",
      "no_cases": "No cases.",
      "no_moderator_actions": "No moderator actions.",
      "note": {
        "daily_resolution": "Counts of different people are stored per day, so this chart cannot show hours.",
        "grain_coarsened": "This period is long enough that the chart is grouped into wider buckets.",
        "uncertain_voice": "Some voice sessions were interrupted while Vex was offline. Those durations are a lower bound.",
        "utc_days": "Counts of different people are grouped by UTC day rather than by your reporting timezone."
      },
      "open_section": "Open",
      "operations": {
        "automod_note": "This counts rule matches. It cannot tell you how many were correct, and appeal volume does not measure that either.",
        "automod_rules": "Automod rules that fired",
        "automod_rules_hint": "Which rules are doing the work.",
        "backlog": "Backlog change",
        "backlog_hint": "Opened minus closed in this period.",
        "by_type": "Cases by type",
        "by_type_hint": "What kind of action was taken.",
        "description": "Staff workload and the shape of it. This section is separate from the community numbers and is not included in reports posted to general channels.",
        "no_ranking": "Deliberately not broken down by moderator. A moderator who handles the hardest channel is not worse than one who handles a quiet one, and counting punishments rewards the wrong thing.",
        "sources": "Where moderation happened",
        "sources_hint": "Actions Vex performed, against actions taken directly in Discord.",
        "sources_note": "These are kept apart so that one incident seen by both is never counted twice.",
        "support": "Tickets",
        "support_hint": "Volume and response time. No ticket content is collected.",
        "title": "Moderation and support",
        "verification_hint": "The share of members who started verification and finished it."
      },
      "overview": {
        "both": "Both",
        "chart_hint": "Pick a number above to chart it.",
        "coverage_body": "It observed {observed} hours out of {expected}. Numbers below are lower than what actually happened.",
        "coverage_title": "Vex was watching for {percent}% of this period.",
        "dau": "Today",
        "growth": "Joining and leaving",
        "growth_hint": "Joins, departures and the difference between them.",
        "insights": "What changed",
        "mau": "This month",
        "participation": "Who is taking part",
        "participation_hint": "Different people, not messages.",
        "stickiness": "The average member shows up on about {days} days a month. That is {ratio}% of days.",
        "stickiness_none": "There is not enough activity yet to say how often people come back.",
        "text_only": "Text only",
        "voice_only": "Voice only",
        "wau": "This week"
      },
      "paused_badge": "Collection paused",
      "preset": {
        "advanced": "Advanced",
        "advanced_desc": "Every supported category except attachments and links. Includes moderation and ticket analytics, which stay behind the staff permission whatever preset is chosen.",
        "community": "Community",
        "community_desc": "Everything in Essential, plus reactions, threads, roles and invites. This is what retention, funnels and cohorts need in order to work.",
        "essential": "Essential",
        "essential_desc": "Growth, message counts, voice participation and feature usage. Four questions most servers ask in their first week."
      },
      "range": {
        "14d": "14d",
        "180d": "180d",
        "24h": "24h",
        "28d": "28d",
        "365d": "1y",
        "7d": "7d",
        "90d": "90d"
      },
      "report": {
        "coverage_skip": "Too much of this period went unobserved to report on. Nothing was sent.",
        "coverage_warn": "Vex was not watching for part of this period, so these numbers are lower than what actually happened."
      },
      "reports": {
        "alerts": "Alerts",
        "cadence": "How often",
        "cadence_line": "{cadence} at {hour}:00 UTC, posted to {channel}.",
        "channel": "Post to",
        "channel_hint": "The channel's permissions are checked again when the message is about to be posted, because a channel's audience changes.",
        "cmp_above": "Fires when {metric} rises above {threshold} over {days} days.",
        "cmp_above_label": "Rises above",
        "cmp_below": "Fires when {metric} falls below {threshold} over {days} days.",
        "cmp_below_label": "Falls below",
        "cmp_change_pct": "Fires when {metric} changes by {threshold}% or more over {days} days.",
        "cmp_change_pct_label": "Changes by more than",
        "comparison": "Fire when it",
        "confirm_delete": "Delete {name}?",
        "cooldown": "Do not repeat for (hours)",
        "cooldown_hint": "A threshold that stays crossed is still one situation.",
        "create": "Create",
        "created": "Created.",
        "deleted": "Deleted {name}.",
        "description": "Scheduled summaries posted to a channel, and alerts when a number moves.",
        "failed": "That did not work.",
        "first_run_note": "The first summary goes out at the next scheduled time rather than immediately.",
        "history": "Delivery history",
        "hour": "Hour",
        "hour_hint": "In the timezone set in analytics settings.",
        "kind_alert": "Alert",
        "kind_schedule": "Summary",
        "metric": "Watch",
        "min_sample": "Minimum observations",
        "min_sample_hint": "Below this it does not fire at all. Three messages becoming zero is a 100% drop and is nothing.",
        "name": "Name",
        "new_alert": "New alert",
        "new_schedule": "New summary",
        "next": "next {when}",
        "no_alerts": "No alerts",
        "no_alerts_hint": "An alert fires when a number crosses a threshold you set.",
        "no_history": "Nothing has been delivered yet.",
        "no_schedules": "No scheduled summaries",
        "no_schedules_hint": "A weekly summary posted to a staff channel is the usual starting point.",
        "off": "Off",
        "preview": "Preview",
        "preview_empty": "Nothing happened in this period, so this summary would not be posted. A weekly digest saying nothing happened teaches a server to ignore the channel.",
        "preview_note": "This is built the same way the posted version is. Previewing sends nothing.",
        "preview_of": "Preview of {name}",
        "quiet": "This is not firing right now.",
        "schedules": "Scheduled summaries",
        "section_engagement": "Engagement",
        "section_growth": "Growth",
        "section_moderation": "Moderation",
        "section_retention": "Retention",
        "section_voice": "Voice",
        "sections": "Include",
        "short_window_warning": "A window under a week compares against a different day of the week, so a normal weekend will look like a change. Seven days or a multiple of seven avoids that.",
        "status_failed": "Failed",
        "status_sent": "Sent",
        "status_skipped": "Not sent",
        "threshold": "Threshold",
        "threshold_hint": "The value to compare against.",
        "threshold_pct_hint": "A negative number means a fall. Use -25 for a drop of a quarter or more.",
        "title": "Reports and alerts",
        "window": "Measured over (days)",
        "would_fire": "This would fire right now. The current value is {value}."
      },
      "retention": {
        "cohort_note": "Retained means active, not still a member. Somebody who is technically in the server but has not opened it for three weeks did not retain.",
        "cohorts": "Retention by join date",
        "description": "Did the people who arrived stay, and did they ever start taking part.",
        "exact_hint": "Exact day: were they active on that specific day.",
        "first_steps": "How long new members take",
        "first_steps_hint": "Median time from joining to doing each thing for the first time.",
        "grain": "Group people by",
        "grain_day": "Day",
        "grain_month": "Month",
        "grain_week": "Week",
        "immature": "{n} joined too recently to judge.",
        "inert": "Did nothing",
        "inert_hint": "Never posted, reacted or joined voice.",
        "joined": "Joined",
        "median_note": "These are medians rather than averages. One member who first posted eight months after joining would drag an average into uselessness.",
        "mode": "Retention mode",
        "mode_exact": "Exact day",
        "mode_rolling": "Rolling",
        "of_eligible": "Of {n} who have had a fair chance.",
        "posted": "Posted something",
        "rolling_hint": "Rolling: were they active at any point up to that day.",
        "seg_30": "Active in the last month",
        "seg_7": "Active in the last week",
        "seg_90": "Quiet for 1 to 3 months",
        "seg_churned": "Left the server",
        "seg_never": "Never did anything",
        "seg_old": "Quiet for over 3 months",
        "segments": "Where the membership sits",
        "segments_hint": "By how recently anybody saw them do anything.",
        "segments_note": "Members who left are counted separately. They are not a re-engagement opportunity, and mixing them in would make both numbers useless.",
        "spoke": "Joined voice",
        "title": "Retention and cohorts",
        "to_message": "First message",
        "to_verify": "Verified",
        "to_voice": "First voice"
      },
      "retry": "Try again",
      "see_evidence": "See the evidence",
      "settings": {
        "confirm_all": "Delete all analytics for this server, including the totals? This cannot be undone.",
        "confirm_members": "Delete every row that names a member? Totals and charts will keep working. This cannot be undone.",
        "days": "days",
        "delete": "Delete collected data",
        "delete_all": "Delete everything",
        "delete_hint": "Removing per member data keeps every total working and leaves nothing on disk that names anybody. Deleting everything removes the totals as well. Both are permanent.",
        "delete_members": "Delete per member data",
        "delete_note": "Deletion also clears anything still waiting to be processed, so a replay cannot bring it back.",
        "deleted": "Deleted {rows} rows.",
        "description": "What is collected, about whom, and for how long.",
        "detail": "How much detail",
        "exclude_bots": "Leave out bots",
        "exclude_bots_hint": "A bot posting a feed is not engagement.",
        "exclude_staff": "Leave out staff",
        "exclude_staff_hint": "Off by default. In a small server the staff are the community, and removing them describes a server nobody is in.",
        "exclude_webhooks": "Leave out webhooks",
        "exclude_webhooks_hint": "Webhook posts usually come from another service rather than from a member.",
        "excluded_channels": "Channels never collected",
        "excluded_channels_hint": "Activity in these channels is not recorded at all.",
        "excluded_roles": "Roles never counted",
        "excluded_roles_hint": "Members holding any of these are left out entirely.",
        "history_note": "Changing these settings changes what is collected from now on. It does not delete what was already collected, and it does not recalculate past periods. Every change is marked on the timeline so a step in a chart has a visible cause.",
        "included_channels": "Only these channels",
        "included_channels_hint": "When this is set, nothing outside it is collected. Leave it empty to collect everywhere except the exclusions.",
        "keep_for": "Keep for",
        "member_level": "Store per member information",
        "member_level_hint": "Switching this off keeps every total working and stops storing anything that names a member. Leaderboards, member journeys and cohorts stop being available.",
        "min_cohort": "Smallest group to show",
        "min_cohort_hint": "Groups smaller than this are hidden, so a handful of people cannot be identified from a row.",
        "needs": "Vex needs: {list}",
        "pause": "Pause collection",
        "paused": "Collection paused. Nothing new is being recorded.",
        "privileged": "Needs a privileged intent.",
        "read_only": "You can see these settings but not change them. That needs the manage analytics permission.",
        "resume": "Resume collection",
        "resumed": "Collection resumed.",
        "saved": "Collection settings saved.",
        "separate_bots": "Count bots separately",
        "separate_bots_hint": "Keep bot activity in its own series instead of mixing it into the human numbers.",
        "staff_only": "Staff only",
        "staff_roles": "Staff roles",
        "staff_roles_hint": "Leave empty to use the moderator and admin roles from the moderation settings.",
        "timezone": "Reporting timezone",
        "timezone_hint": "Daily and weekly numbers are grouped by this clock.",
        "title": "Collection settings",
        "week_start": "Weeks start on",
        "what": "What is collected",
        "what_hint": "Each category can be switched off on its own. Switching one off stops collecting it from now on and does not delete what is already stored.",
        "where": "Where it is collected",
        "where_hint": "Ticket and appeal categories are excluded automatically. You do not need to list them.",
        "who": "Who is counted",
        "who_hint": "These apply to community engagement numbers."
      },
      "setup": {
        "changeable": "You can change any of this afterwards.",
        "done": "Collection started.",
        "failed": "That did not save.",
        "permissions": "Permissions Vex needs for this",
        "permissions_hint": "Without these, the categories that depend on them record nothing. The collection health page shows which.",
        "promise_1": "Nothing is collected until you choose. Vex does not start storing information about your members because an update shipped.",
        "promise_2": "Message contents, attachments and links are never collected by any of these. Turning that on is a separate, deliberate choice in the settings.",
        "signals": "Collects {n} kinds of signal.",
        "start": "Start collecting"
      },
      "stat_active_mods": "Active mods",
      "stat_cases": "Cases (30d)",
      "stat_daily_avg": "Daily avg",
      "subtitle": "Moderation trends over the last {days} days.",
      "subtitle2": "What is happening in this server, and what changed.",
      "suggest": {
        "concentrating": "Something to try: look at which channels lost people rather than which gained messages. A quiet channel that used to be busy is easier to fix than a whole server. This is a suggestion and not a diagnosis.",
        "onboarding": "Something to try: shorten the onboarding steps, or post a welcome message that names one specific channel to go to. This is a suggestion and not a diagnosis.",
        "verification": "Something to try: open the verification flow yourself and check every step still works. A drop this size is usually a broken step rather than a change in who is joining. This is a suggestion and not a diagnosis.",
        "voice_lonely": "Something to try: schedule a regular time when somebody is reliably in voice, so the first person to arrive is not always alone. This is a suggestion and not a diagnosis."
      },
      "title": "Analytics",
      "title2": "Server Analytics",
      "top_moderators": "Top moderators",
      "views": {
        "description": "Questions this server asks often, kept under a name. Loading a view runs it with your own permissions.",
        "empty": "No views are saved yet. Build a query below and save it to find it here next time.",
        "load": "Load",
        "name_label": "Name",
        "name_placeholder": "Weekend voice in the lounge",
        "name_taken": "A saved view with that name already exists. Choose a different name.",
        "needs_manage": "You can open saved views. Saving and deleting them needs the analytics manage permission.",
        "private_badge": "Only you",
        "remove": "Delete",
        "removed": "The view was deleted.",
        "save": "Save this view",
        "saved": "The view was saved.",
        "saving": "Saving...",
        "share_hint": "A shared view shows other people the question, not the answer. Vex runs it with the permissions of whoever opens it.",
        "share_label": "Share with everyone who can see analytics",
        "shared_badge": "Shared",
        "title": "Saved views",
        "too_many": "This server has as many saved views as it can keep. Delete one before saving another."
      },
      "voice": {
        "afk_note": "Members spent {time} in the AFK channel. Discord moves people there automatically, so it is never counted as taking part.",
        "alone_vs_together": "Time alone and time with others",
        "alone_vs_together_hint": "These two add up to the total voice time.",
        "channels": "Busiest voice channels",
        "channels_hint": "Total time members spent connected.",
        "description": "How busy the voice channels are, and whether the people who open one are ever joined.",
        "empty_body": "No voice sessions were recorded in this period.",
        "empty_title": "Nobody used voice",
        "gave_up": "Typical time alone",
        "gave_up_hint": "Median time {n} people waited before leaving an empty channel.",
        "group_definition": "A group session means at least one other person was present at the same time, for any length of time. There is no minimum.",
        "len_1_5m": "1 to 5 min",
        "len_30m_2h": "30 min to 2h",
        "len_5_30m": "5 to 30 min",
        "len_over_2h": "Over 2h",
        "len_under_1m": "Under a minute",
        "lengths": "How long sessions last",
        "lengths_hint": "A lot of very short sessions usually means people are looking in and leaving.",
        "nobody_came": "Nobody came",
        "occupancy_chart_hint": "Weighted by how long people were connected.",
        "occupancy_hint": "Average people connected at any moment.",
        "opened_empty": "Opened an empty channel",
        "participants": "People in voice",
        "starting": "Opening a channel",
        "starting_hint": "The number most servers can act on: how often somebody opens an empty channel and is left waiting.",
        "title": "Voice",
        "truncated": "This period contains more voice sessions than one query returns. The numbers cover as many as could be read.",
        "uncertain": "{percent}% of this voice time came from sessions that were interrupted while Vex was offline. Those durations are a lower bound.",
        "wait": "Typical wait",
        "wait_hint": "Median time before a second person arrived, counting only the times somebody did.",
        "were_joined": "Somebody joined them",
        "were_joined_hint": "{n} of them.",
        "when": "When voice is busy",
        "when_hint": "Average people connected, by day of the week and hour."
      }
    },
    "anniversaries": {
      "add": "Add",
      "announce_description": "Vex checks join dates once a day. This also works for members who joined long before Vex, because Discord already stores their join date.",
      "announce_title": "Announcement",
      "channel": "Channel",
      "channel_hint": "If empty, milestone roles are still granted, but nothing is posted.",
      "duplicate_years_one": "Another tier already uses {years} year.",
      "duplicate_years_other": "Another tier already uses {years} years.",
      "empty_description": "Add one to reward members for staying in the server.",
      "empty_title": "No tenure roles",
      "invalid": "Every tier needs a role, and no two tiers can use the same number of years.",
      "message": "Message",
      "placeholders": "Placeholders: {list}",
      "remove": "Remove",
      "remove_milestone": "Remove milestone",
      "role_label": "Grant Role",
      "roles_description": "A member is granted every tier they have passed, and these roles are never taken away.",
      "roles_title": "Tenure Roles",
      "saved": "Anniversary settings saved and synced to the bot.",
      "subtitle": "Celebrate how long members have been in your server, and grant a role for each year they reach.",
      "title": "Anniversaries",
      "years_label": "After (Years)"
    },
    "antinuke": {
      "action_group_aria": "What Vex does to whoever goes over a limit",
      "actions": {
        "alert": "Alert only",
        "alert_hint": "Notify staff only. Nothing happens to the person.",
        "ban": "Ban them",
        "ban_hint": "The strongest option. Recommended if you think the account is compromised.",
        "kick": "Kick them",
        "kick_hint": "Kicks them from the server. They can rejoin, but without their roles.",
        "strip_roles": "Strip their roles",
        "strip_roles_hint": "Removes every role Vex is able to remove. Stops them without kicking or banning."
      },
      "alert_channel": "Alert Channel",
      "alert_channel_hint": "If not set, alerts go to your mod log channel.",
      "alerts_description": "Where Vex posts the alert when anti-nuke triggers.",
      "alerts_title": "Alerts",
      "audit_note": "Anti-nuke needs the View Audit Log permission to work out who did what. Without it, nothing can be attributed and it won't trigger.",
      "count_aria": "Count for {action}",
      "enable_aria": "Watch {action}",
      "exempt_roles": "Exempt Roles",
      "exempt_roles_hint": "Members with any of these roles are never acted on.",
      "exempt_users": "Exempt members",
      "exempt_users_hint": "Specific members who are never limited by Anti-Nuke, on top of the exempt roles. Paste a user ID and press Enter. Use this for a trusted admin who should never be caught, not as a way to whitelist a role.",
      "exemptions_description": "The server owner and Vex are always exempt. Vex deletes channels as part of normal features (like closing a ticket), and it can't act on the owner anyway.",
      "exemptions_title": "Exemptions",
      "hints": {
        "ban": "Banning members in bulk is the fastest way to empty a server.",
        "channel_create": "How many channels one person can create in the window before Vex acts. Off by default, since a server being built out creates many at once.",
        "channel_delete": "A compromised account usually starts by deleting every channel it can.",
        "kick": "Kicked members can rejoin, so a kick spree does less lasting damage than a ban spree.",
        "role_create": "How many roles one person can create in the window before Vex acts. Off by default.",
        "role_delete": "Deleting roles takes away everyone's access without touching the channels."
      },
      "ignore_bots": "Ignore other bots",
      "ignore_bots_hint": "Keep this off unless one of your bots legitimately bulk deletes things. Stolen bot tokens are a common way servers get nuked.",
      "low_threshold": "One or two actions is normal staff work. This limit will probably trigger during ordinary moderation.",
      "none_enabled": "Nothing is being watched right now. Turn on at least one limit below, or anti-nuke will never trigger.",
      "ping_role": "Ping Role",
      "ping_role_hint": "This role gets pinged whenever anti-nuke triggers.",
      "response_description": "What happens to whoever goes over a limit. This can't undo anything they've already done, it just stops them from doing more.",
      "response_title": "Response",
      "row_off": "Vex is not watching this action.",
      "rows": {
        "ban": "Banning members",
        "channel_create": "Channel creations",
        "channel_delete": "Deleting channels",
        "kick": "Kicking members",
        "role_create": "Role creations",
        "role_delete": "Deleting roles"
      },
      "saved": "Anti-nuke settings saved and synced to the bot.",
      "seconds_unit": "seconds",
      "subtitle": "Automatically stop compromised or rogue staff accounts from mass deleting and mass banning.",
      "summary": {
        "alert": "If one person goes over any limit below, Vex posts an alert. Nothing happens to the person who did it.",
        "ban": "If one person goes over any limit below, Vex bans that person and posts an alert.",
        "kick": "If one person goes over any limit below, Vex kicks that person from the server and posts an alert.",
        "strip_roles": "If one person goes over any limit below, Vex removes every role it can from that person and posts an alert."
      },
      "title": "Anti-Nuke",
      "watched_description": "Each action is counted per person. If one admin goes over a limit, anti-nuke only triggers on them, not the whole server.",
      "watched_title": "Watched Actions",
      "window_aria": "Window in seconds for {action}",
      "within": "within"
    },
    "apikeys": {
      "col_last_used": "Last used",
      "col_limit": "Limit",
      "copied": "Copied to your clipboard.",
      "copy": "Copy",
      "create": "Create key",
      "create_hint": "You will see the key once, on this screen, and never again. Copy it somewhere safe before you leave the page.",
      "create_title": "Create a key",
      "created_body": "This is the only time it will be shown. Copy it now. If you lose it, revoke this key and create another one.",
      "created_title": "Here is your key",
      "created_toast": "Key created. Copy it now, it will not be shown again.",
      "docs_base": "Base URL",
      "docs_body": "Send the key in an Authorization header. Never put it in a URL: query strings are recorded by proxies and kept in browser history, so a key in one should be treated as leaked.",
      "docs_endpoints": "Endpoints",
      "docs_title": "Using a key",
      "done": "I have saved it",
      "existing": "Keys",
      "intro": "A key is a password. Anybody holding it can read everything its scopes allow, from anywhere, without logging in. Treat one like a database password: keep it on a server, never in a web page or a public repository.",
      "name": "Name",
      "name_hint": "What this key is for, so you can revoke the right one later.",
      "name_placeholder": "Website leaderboard",
      "never_used": "Never",
      "none": "No API keys yet.",
      "problem": {
        "not_found": "That API key does not exist. It may already have been deleted."
      },
      "rate_limit": "Requests per minute",
      "rate_limit_hint": "How many requests this key may make each minute. Going over gets a 429 response until the minute rolls over.",
      "revoke": "Revoke",
      "revoke_confirm": "Revoke this key? Anything using it will stop working immediately, and this cannot be undone.",
      "revoked": "Revoked",
      "revoked_toast": "Key revoked. It stopped working straight away.",
      "rotate_note": "Changing the API secret in your server configuration invalidates every key here. You would need to create them again.",
      "scope": {
        "analytics_read": "Read analytics",
        "analytics_read_hint": "Message and member activity totals over a period you choose.",
        "cases_read": "Read moderation cases",
        "cases_read_hint": "Warnings, bans and every other case, including the reason text a moderator wrote. Deleted cases are never returned.",
        "economy_read": "Read economy",
        "economy_read_hint": "Balances, bank balances and the richest members.",
        "levels_read": "Read message levels",
        "levels_read_hint": "The XP leaderboard and any member's level, XP and rank.",
        "voice_levels_read": "Read voice levels",
        "voice_levels_read_hint": "The voice XP leaderboard and any member's voice level, XP and minutes earned."
      },
      "scopes": "Scopes",
      "scopes_hint": "A key can only read what you tick here. Grant as little as the integration actually needs.",
      "sensitive_badge": "Sensitive",
      "sensitive_warning": "This scope exposes personal or moderation data, including reasons your moderators typed. Only grant it to a system you control.",
      "subtitle": "Give another system read-only access to this server's data over the public REST API.",
      "title": "API Keys"
    },
    "appeals": {
      "appeal_number": "Appeal #{number}",
      "approve": "Approve",
      "ban_channel_label": "Ban appeals go to",
      "case_number": "Case #{number}",
      "category_hint": "Used as a fallback: the first text channel in it receives announcements when no channel is set.",
      "category_label": "Appeals category",
      "channel_hint": "Where staff are told about a new appeal.",
      "channel_label": "Announcement channel",
      "cooldown_hint": "How long somebody waits after an appeal is denied before submitting another. Set 0 to allow it straight away.",
      "cooldown_label": "Wait after a denial (hours)",
      "deny": "Deny",
      "empty_archive": "No appeals have been decided yet. An appeal moves here once you approve or deny it.",
      "empty_title": "No appeals yet",
      "failed": "Failed",
      "jail_channel_label": "Jail appeals go to",
      "jail_link_hint": "A jailed member cannot be DMed reliably and cannot see the rest of the server. Without this channel they have no way to reach the appeal page.",
      "jail_link_label": "Jail link channel",
      "max_denied_hint": "How many denied appeals before no more are accepted. Set 0 for no limit.",
      "max_denied_label": "Denied appeals allowed",
      "note": "Note: {note}",
      "pin_jail_link": "Pin the jail link",
      "pin_jail_link_hint": "Off by default. Discord allows 50 pins per channel, and a busy jail reaches that limit and starts failing.",
      "reviewed": "Appeal #{number} {status}.",
      "routing_hint": "Leave empty to use the announcement channel above.",
      "saved": "Appeals settings saved and synced to the bot.",
      "settings_description": "Where new appeals are announced, and how soon somebody can appeal again.",
      "settings_title": "Settings",
      "subtitle_1": "Members appeal punishments with",
      "subtitle_2": "; review them here.",
      "title": "Appeals"
    },
    "appealsubmit": {
      "appeal_number": "Appeal #{number}",
      "case_number_label": "Case number (optional)",
      "case_number_placeholder": "e.g. 42",
      "continue_with_discord": "Continue with Discord",
      "error_already_pending": "You already have an appeal waiting for a decision.",
      "error_generic": "Something went wrong.",
      "error_not_accepting": "This server isn't accepting appeals right now.",
      "error_unknown_server": "That server was not found.",
      "has_pending": "You already have a pending appeal for this server. Please wait for staff to review it.",
      "heading": "Appeal",
      "heading_a_punishment": "a punishment",
      "login_prompt": "Log in with Discord to verify your identity and submit your appeal.",
      "not_enabled": "This server isn't accepting appeals right now.",
      "reason_counter": "{count}/2000 · minimum 10 characters",
      "reason_label": "Why should this be lifted?",
      "reason_placeholder": "Explain your side. Be honest and specific.",
      "staff_response": "Staff response: {note}",
      "submit": "Submit Appeal",
      "submitted_body": "Staff have been notified and will review it. You'll be contacted with the outcome.",
      "submitted_title": "Appeal #{number} submitted",
      "submitting_as": "Submitting as {name}",
      "subtitle": "Submit an appeal for review by the server's staff.",
      "verified_ban": "You were banned from this server. The case number is optional. If you know it, filling it in helps staff find your ban faster.",
      "verified_jail": "You were jailed in this server. The case you are appealing has been filled in for you.",
      "your_appeals": "Your appeals"
    },
    "archive": {
      "active": "Active",
      "archive": "Archive",
      "next": "Next",
      "page_of": "Page {page} of {pages}",
      "previous": "Previous",
      "tablist_label": "Show active or archived items"
    },
    "audit": {
      "analytics_delete": "deleted collected analytics data",
      "analytics_delete_member": "deleted one member's analytics data",
      "analytics_settings": "changed the analytics collection settings",
      "analytics_setup": "changed the analytics collection preset",
      "analytics_view_saved": "saved the analytics view {name}",
      "raid_baseline_add": "marked a name as normal for raid protection: {label}",
      "raid_baseline_remove": "removed an entry from raid protection's known normal list",
      "raid_staff_action": "used a raid action on raid #{raid}: {action}",
      "verification_approved": "approved a verification",
      "verification_blacklist_add": "blocked a member from verifying",
      "verification_blacklist_remove": "let a member verify again",
      "verification_captcha_secret": "saved a captcha key for {provider}",
      "verification_captcha_secret_cleared": "removed the captcha key",
      "verification_config": "changed the verification settings",
      "verification_denied": "denied a verification",
      "verification_dismiss_link": "marked two members as not the same person",
      "verification_erase_guild": "erased all verification data for this server",
      "verification_erase_member": "erased a member's verification data",
      "verification_import": "imported verification settings",
      "verification_manual_unverify": "unverified a member",
      "verification_manual_verify": "verified a member by hand",
      "verification_self_erasure": "a member erased their own verification data"
    },
    "automod": {
      "action": "Action",
      "actions": {
        "ban": "Ban",
        "jail": "Jail",
        "kick": "Kick",
        "none": "Delete only",
        "preset": "Punishment preset",
        "timeout": "Timeout",
        "warn": "Warn"
      },
      "alert_channel": "Alert Channel",
      "alert_channel_hint": "Where automod posts what it caught. If not set, alerts go to the mod log channel.",
      "delete_message": "Delete the message",
      "delete_message_hint": "Deletes the offending message when this rule fires.",
      "duration_minutes": "Duration (minutes)",
      "exempt_channels": "Exempt Channels",
      "exempt_channels_hint": "Automod ignores messages in these channels.",
      "exempt_roles": "Exempt Roles",
      "exempt_roles_hint": "Members with any of these roles skip all automod checks.",
      "exemptions_description": "Roles and channels that bypass automod, and where alerts are posted.",
      "exemptions_title": "Exemptions & Alerts",
      "fields": {
        "allow_own": "Allow invites to this server",
        "block_scam": "Block known scam domains",
        "domains": "Domains (one per line)",
        "domains_hint": "e.g. example.com",
        "fuzzy": "Fuzzy match (catches b4d, b-a-d)",
        "max_attachments": "Max attachments",
        "max_chars_in_window": "Characters in the window",
        "max_chars_in_window_hint": "Every character one member posts inside the window, added up across their messages.",
        "max_consecutive": "Messages in a row",
        "max_consecutive_hint": "How many messages one member may post with nobody else speaking in between.",
        "max_emojis": "Max emojis",
        "max_lines": "Lines in one message",
        "max_lines_hint": "Blank lines count. They are what pushes the rest of the channel out of view.",
        "max_mentions": "Max mentions",
        "max_messages": "Max messages",
        "max_ratio": "Max caps %",
        "min_length": "Min length",
        "min_length_hint": "Messages shorter than this are ignored",
        "mode": "Mode",
        "preset": "Punishment preset",
        "preset_hint": "The preset's ladder decides what happens, counting how many times this member has already tripped it. A first offence and a fifth stop being treated the same.",
        "regexes": "Regex patterns (one per line)",
        "window_seconds": "Per (seconds)",
        "words": "Words / phrases (one per line)"
      },
      "no_presets": "No punishment presets are set up yet. Create one on the Punishments page first.",
      "options": {
        "allowlist": "allowlist",
        "blocklist": "blocklist"
      },
      "rules": {
        "attachments": "Attachment flood",
        "attachments_desc": "Too many attachments in one message.",
        "caps": "Excessive caps",
        "caps_desc": "Messages that are mostly UPPERCASE.",
        "emoji": "Emoji spam",
        "emoji_desc": "Too many emojis in one message.",
        "flood": "Channel flood",
        "flood_desc": "One member filling the channel up. This catches how much screen they take, which a rate limit does not see: a single message carrying two hundred blank lines pushes the history off the page without posting quickly at all.",
        "invites": "Invite links",
        "invites_desc": "Discord invite links.",
        "links": "External links",
        "links_desc": "Block or allow specific domains, plus a built-in scam list.",
        "mentions": "Mention spam",
        "mentions_desc": "Too many user/role mentions in one message.",
        "spam": "Message rate",
        "spam_desc": "Too many messages in a short window. This catches how fast somebody posts.",
        "words": "Banned words",
        "words_desc": "Words, phrases (with * wildcards), or regex.",
        "zalgo": "Zalgo text",
        "zalgo_desc": "Glitchy text made with combining characters."
      },
      "saved": "Automod settings saved and synced to the bot.",
      "subtitle": "Automatically catch spam, mass mentions, invite links, scam links, and banned words.",
      "title": "Automod"
    },
    "automodactivity": {
      "description": "The last few messages automod acted on.",
      "empty_title": "Automod has not acted on anything yet",
      "title": "Recent automod activity"
    },
    "autoresponder": {
      "allowed_channels": "Only in these channels",
      "allowed_roles": "Only for these roles",
      "case_sensitive": "Case sensitive",
      "case_sensitive_hint": "When this is off, HELLO and hello both match.",
      "cooldown": "Cooldown (seconds)",
      "cooldown_hint": "After the rule fires, it stays quiet in that channel for this long. Set it to 0 to answer every time.",
      "created": "Rule created.",
      "delete_confirm": "Delete this rule?",
      "deleted": "Rule deleted.",
      "denied_channels": "Never in these channels",
      "denied_roles": "Never for these roles",
      "disabled_toast": "Rule turned off.",
      "empty_description": "Add a rule and Vex will answer the next person who says the trigger.",
      "empty_title": "No rules yet",
      "enabled_toast": "Rule turned on.",
      "match_mode": "Match mode",
      "mode": {
        "contains": "The message contains the trigger",
        "exact": "The whole message is the trigger",
        "regex": "The message matches a regular expression",
        "starts_with": "The message starts with the trigger"
      },
      "mode_short": {
        "contains": "Contains",
        "exact": "Exact",
        "regex": "Regex",
        "starts_with": "Starts with"
      },
      "module_saved": "Auto responder module setting saved.",
      "new_rule": "New rule",
      "no_templates": "This server has no embed templates yet. Build one on the Embed Builder page first.",
      "pick_template": "Template",
      "regex_help": "Vex refuses patterns that can hang, such as a repeated group that already repeats. If a pattern is rejected, the reason says what to change.",
      "response": "Response",
      "response_embed": "A saved embed template",
      "response_kind": "Reply with",
      "response_placeholder": "What Vex says back.",
      "response_text": "Text",
      "rules": "Rules",
      "rules_description": "Rules are checked oldest first, and the first one that matches replies.",
      "saved": "Rule saved.",
      "scope": "Where it applies",
      "scope_description": "Leave a list empty to put no limit on it. A denied channel or role always wins over an allowed one.",
      "subtitle": "Reply automatically when someone says something. One rule, one trigger, one answer.",
      "test": "Test your trigger",
      "test_description": "Type a message the way someone would send it. Vex checks it with the same matcher the bot uses.",
      "test_match": "This message would trigger the rule.",
      "test_no_match": "This message would not trigger the rule.",
      "test_placeholder": "Type a sample message.",
      "test_waiting": "Type a sample message to see whether it matches.",
      "title": "Auto Responder",
      "trigger": "Trigger",
      "trigger_placeholder": "e.g. how do I open a ticket"
    },
    "billing": {
      "active_title": "What Vex Premium Unlocked",
      "badge_free": "Free",
      "badge_premium": "Vex Premium",
      "buy_busy": "Opening checkout...",
      "buy_button": "Buy Vex Premium",
      "celebration_body": "Every paid module is unlocked for this server, for good. There is no subscription and nothing to renew.",
      "celebration_close": "Close",
      "celebration_continue": "Start setting up",
      "celebration_eyebrow": "Payment complete",
      "celebration_note": "Your receipt has been emailed to you.",
      "celebration_title": "This server is now on",
      "celebration_title_accent": "Vex Premium.",
      "checkout_note": "Payment is handled by Paddle. The final price, including any tax, is shown at checkout.",
      "current_plan_title": "Current Plan",
      "detail_payment": "Payment",
      "detail_payment_value": "One-time purchase",
      "detail_processor": "Processor",
      "detail_processor_value": "Paddle",
      "detail_refunds": "Refunds",
      "detail_scope": "Scope",
      "detail_scope_value": "This server only",
      "details_title": "License Details",
      "error_generic": "Could not start checkout",
      "error_no_price": "No Paddle price is configured for Vex Premium.",
      "error_not_configured": "Billing is not configured on this server yet.",
      "free_included_title": "Already Included In Free",
      "included_title": "What Vex Premium Adds",
      "not_configured": "Billing is not configured on this instance, so nothing can be purchased. Every feature that does not require a licence keeps working.",
      "premium_price": "$19.99",
      "premium_price_note": "one-time",
      "purchased_on": "Purchased {date}",
      "refresh": "Refresh",
      "refund_policy_link": "Refund policy",
      "refunds_description": "Vex Premium is a one-time purchase, not a subscription. There is nothing to cancel or renew. The refund policy explains when a purchase can be refunded.",
      "state_free_body": "This server is on the free plan. Every feature that does not need a license is already working.",
      "state_premium_body": "This server has Vex Premium. Every paid feature is unlocked, and there is nothing to renew or cancel.",
      "subtitle": "Vex is licensed per server. This page covers this server only.",
      "title": "Billing"
    },
    "birthdays": {
      "channel": "Announcement Channel",
      "empty_hint": "Members can set theirs with /birthday set.",
      "empty_title": "No birthdays yet",
      "failed": "Failed",
      "message": "Message",
      "message_hint": "Placeholders: {user} {username}",
      "months": {
        "1": "Jan",
        "10": "Oct",
        "11": "Nov",
        "12": "Dec",
        "2": "Feb",
        "3": "Mar",
        "4": "Apr",
        "5": "May",
        "6": "Jun",
        "7": "Jul",
        "8": "Aug",
        "9": "Sep"
      },
      "role": "Birthday Role",
      "role_hint": "Given on their birthday and removed the day after (optional).",
      "save": "Save",
      "saved": "Saved.",
      "settings_description": "Announce birthdays and optionally give members a role for the day.",
      "settings_title": "Birthdays",
      "subtitle": "Celebrate your members automatically.",
      "tab_list": "Birthdays",
      "tab_settings": "Settings",
      "title": "Birthdays"
    },
    "boosts": {
      "active_count": "{count} active",
      "announce_description": "Posted when a member starts boosting the server.",
      "announce_stop": "Also post when someone stops boosting",
      "announce_stop_hint": "This is off by default. Announcing that a member stopped boosting singles them out in public.",
      "announce_title": "Thank-You Post",
      "booster_meta": "{total} total · {times} times · started {when}",
      "boosters_description": "Vex compares this list against Discord on startup, so boosts that started or ended while the bot was offline are still recorded.",
      "boosters_title": "Boosters",
      "boosting": "Boosting",
      "channel": "Channel",
      "channel_hint": "If empty, boosts are still tracked, but nothing is posted.",
      "empty_description": "Boosters show up here as soon as someone boosts the server.",
      "empty_title": "No boosters tracked yet",
      "message": "Message",
      "perks_description": "Granted while a member is boosting. Vex removes them automatically once the boost ends.",
      "perks_hint": "Each role has to sit below Vex's highest role.",
      "perks_label": "Roles",
      "perks_title": "Perk Roles",
      "placeholders": "Placeholders: {list}",
      "saved": "Boost settings saved and synced to the bot.",
      "stopped": "Stopped",
      "subtitle": "Thank your boosters, grant them perk roles, and keep a record of every boost.",
      "title": "Boost Tracking"
    },
    "burnout": {
      "action_note": "Vex never acts on this by itself. The right response to a workload that has doubled is a conversation, and a bot taking someone's permissions away would only make that conversation harder.",
      "baseline": "Compare Against (Days)",
      "baseline_hint": "The earlier stretch of time, ending where the recent one starts.",
      "channel": "Alert Channel",
      "channel_hint": "Vex copies the report here when someone runs /burnout report and anyone is flagged. Leave this empty to post nothing.",
      "col_baseline": "Usual",
      "col_change": "Change",
      "col_member": "Member",
      "col_rate": "Per day",
      "col_recent": "Recent",
      "col_status": "Status",
      "empty_description": "Vex found nobody holding a staff role. Set the moderator and admin roles in your moderation settings, and this report fills in as your team handles cases.",
      "empty_title": "No staff to report on",
      "how_body": "Everyone is compared against themselves, never against the team. A moderator who handles forty cases a week isn't in trouble if that is what they always do, and one who went from two a week to eight might be. The two stretches of time never overlap, so a busy week can't quietly raise the bar it is measured against.",
      "how_title": "How this works",
      "min_actions": "Minimum Actions",
      "min_actions_hint": "Ignore anyone with fewer actions than this. A jump from one action to three is not a burnout signal.",
      "no_baseline": "No history",
      "no_roster_description": "Only the bot knows which members hold your staff roles, and it publishes that list every half hour. If the bot is online, this page fills in shortly.",
      "no_roster_title": "Vex hasn't sent the staff list yet",
      "percent": "{percent}%",
      "pill_flagged": "Spike",
      "pill_steady": "Steady",
      "report_description": "The last {days} days against the {baseline} days before that.",
      "report_title": "Report",
      "saved": "Burnout settings saved and synced to the bot.",
      "spike": "Flag Above (%)",
      "spike_hint": "200 means the recent rate is twice their usual rate.",
      "subtitle": "Spot a staff member whose workload has jumped well past their own normal, before they quit or go quiet.",
      "summary": "{flagged} of {total} staff members are above their own normal.",
      "threshold_description": "How big a jump has to be before Vex says anything.",
      "threshold_title": "When to Flag",
      "title": "Burnout Monitor",
      "window": "Recent (Days)",
      "window_hint": "The stretch of time that gets checked, ending today.",
      "windows_description": "The recent stretch, and the earlier stretch it is compared against.",
      "windows_title": "Time Windows"
    },
    "cases": {
      "action": "Action",
      "action_ban": "Ban",
      "action_ban_hint": "Ban the user. Works even if they've already left.",
      "action_failed": "Action failed",
      "action_kick": "Kick",
      "action_kick_hint": "Remove the member; they can rejoin.",
      "action_note": "Note",
      "action_note_hint": "Staff-only note. Doesn't DM the user or take any action.",
      "action_softban": "Softban",
      "action_softban_hint": "Bans then immediately unbans to clear their recent messages.",
      "action_timeout": "Timeout",
      "action_timeout_hint": "Mute the member for a set time (max 28d).",
      "action_unban": "Unban",
      "action_unban_hint": "Lift an existing ban by user ID.",
      "action_untimeout": "Remove timeout",
      "action_untimeout_hint": "End an active timeout early.",
      "action_warn": "Warn",
      "action_warn_hint": "Counts towards the auto-escalation ladder.",
      "active_warnings": "active warnings",
      "cancel": "Cancel",
      "clear": "Clear",
      "col_actions": "Actions",
      "col_case": "Case",
      "col_duration": "Duration",
      "col_moderator": "Moderator",
      "col_reason": "Reason",
      "col_type": "Type",
      "col_user": "User",
      "col_when": "When",
      "days": "days",
      "duration": "Duration",
      "edit_reason": "Edit Reason",
      "edit_reason_note": "The edit is logged (the previous reason is kept) and the mod log embed updates in Discord.",
      "edit_reason_placeholder": "Why this action was taken...",
      "edit_reason_title": "Edit Reason - Case #{number}",
      "empty_description": "Moderation actions from Discord will show up here.",
      "empty_matching_description": "Try adjusting your search or filters.",
      "empty_matching_title": "No Matching Cases",
      "empty_title": "No Cases Yet",
      "export_csv": "Export CSV",
      "filter_by_type": "Filter by type",
      "history": "History",
      "hours": "hours",
      "imported_badge": "From {source}",
      "imported_tooltip": "Read from another bot's mod-log. Vex did not perform this action and cannot change it.",
      "invalid_user_id": "Enter a valid user ID (numbers only).",
      "minutes": "minutes",
      "new_action": "New Action",
      "no_cases_on_record": "No cases on record.",
      "optional": "(optional)",
      "pagination_range": "{from}-{to} of {total}",
      "punish_badge": "{preset} · {n} offence",
      "reason": "Reason",
      "reason_placeholder": "Shown to the user for actions that DM them, and logged.",
      "revoke_body_1": "This soft-deletes the case. It stays in the archive (visible with",
      "revoke_body_2": ") and the mod log embed is marked deleted, but it no longer counts towards the user's active history.",
      "revoke_case": "Revoke Case",
      "revoke_confirm_title": "Revoke Case #{number}?",
      "revoke_failed": "Couldn't revoke case",
      "revoke_include_deleted": "include deleted",
      "revoked": "revoked",
      "revoked_toast": "Case #{number} revoked.",
      "search_placeholder": "Search reasons...",
      "subtitle": "Every moderation action, searchable and exportable.",
      "take_action": "Take Action",
      "title": "Cases",
      "total_cases": "total cases",
      "type": "Type",
      "update_failed": "Couldn't update case",
      "updated": "Case #{number} updated.",
      "user_id": "User ID",
      "user_id_hint": "Right-click a user in Discord → Copy User ID (needs Developer Mode).",
      "user_id_placeholder": "e.g. 372112197964398592",
      "user_record": "User Record",
      "view_user_record": "View User Record"
    },
    "channels": {
      "allowed_label": "Allowed channels",
      "blocked_hint": "Commands are never allowed in these channels, even if they are also on the allowed list. Use this to keep a busy chat clear.",
      "blocked_label": "Blocked channels",
      "description": "If you pick any channels, these commands only work there. Leave it empty to allow them everywhere. Threads count as the channel they are in.",
      "exempt_staff": "Staff can use them anywhere",
      "exempt_staff_hint": "People with dashboard access ignore this rule. Turn it off to apply the rule to everyone.",
      "title": "Where these commands can be used"
    },
    "clans": {
      "announce": "Announcement channel",
      "announce_hint": "Where Vex posts when a clan is founded or disbanded. Leave this empty to announce nothing.",
      "col_bank": "Bank",
      "col_members": "Members",
      "col_owner": "Owner",
      "confirm_disband": "Disband {name}? This removes the clan, its roster, and whatever is in its bank. It cannot be undone.",
      "contributed": "{xp} XP",
      "cost": "Cost to found a clan",
      "cost_hint": "Taken from the founder's wallet in server currency. Set this to 0 to make founding a clan free.",
      "create_roles": "Give every clan its own role",
      "create_roles_hint": "Vex creates a role when a clan is founded and keeps it in step with the roster. Vex needs the Manage Roles permission for this. If a role cannot be created the clan is still founded.",
      "creator_roles": "Roles that can found a clan",
      "creator_roles_hint": "Holding any one of these is enough. Leave it empty and anybody can found a clan. Use this instead of a level requirement if your server does not run Vex leveling.",
      "detail_created": "Founded",
      "detail_pending": "Waiting",
      "detail_policy": "Joining",
      "detail_roster": "Roster",
      "disband": "Disband",
      "disband_hint": "This removes the clan, its roster, and whatever is in its bank. It cannot be undone.",
      "disbanded": "{name} has been disbanded.",
      "discord_description": "The role each clan gets, and where Vex announces new clans.",
      "discord_title": "Discord side",
      "founding_description": "What it takes to start one, and how many the server allows.",
      "founding_title": "Founding a clan",
      "growth_description": "How big a clan gets, and how quickly it levels up.",
      "growth_title": "Size and levelling",
      "level_label": "Level {level}",
      "list_description": "Every clan that exists, best first. Select one to see its roster.",
      "list_empty": "No clans have been founded yet.",
      "list_empty_hint": "Members create clans from Discord with the /clan create command.",
      "list_title": "Clans in this server",
      "max_clans": "Most clans allowed",
      "max_clans_hint": "The most clans that can exist here at once. Set this to 0 for no limit.",
      "max_members": "Members per clan",
      "max_members_hint": "The most members one clan can hold, counting its owner.",
      "min_level": "Minimum level to found a clan",
      "min_level_hint": "The personal level somebody needs before they can found a clan. This only works if Vex leveling is on. Set 0 to ask for no level.",
      "min_name": "Shortest clan name",
      "min_name_hint": "The fewest characters a clan name can have.",
      "no_description": "This clan hasn't written a description yet.",
      "pending_invite": "Invited",
      "pending_request": "Asked to join",
      "policy_invite": "Invitation only",
      "policy_open": "Anyone can join",
      "policy_request": "People ask to join",
      "rank_member": "Member",
      "rank_officer": "Officer",
      "rank_owner": "Owner",
      "row_summary": "Level {level} · {members} of {max} members · {bank} banked",
      "saved": "Clan settings saved and synced to the bot.",
      "stat_banked": "Currency banked",
      "stat_clans": "Clans",
      "stat_members": "Members in a clan",
      "subtitle": "Members create their own groups, recruit into them, and share a bank. Clans level up from the XP their members already earn by chatting. Members run their clan from Discord with the /clan command.",
      "title": "Clans",
      "xp_channels": "Channels that earn clan XP",
      "xp_channels_hint": "Leave empty and every channel earns.",
      "xp_cooldown": "Seconds between earning",
      "xp_cooldown_hint": "How long a member waits before another message earns clan XP.",
      "xp_per_level": "XP for the first level",
      "xp_per_level_hint": "What the first clan level costs. Each level after that costs this much more again, so level 2 costs twice this, level 3 costs three times, and so on.",
      "xp_per_message": "Clan XP per message",
      "xp_per_message_hint": "Given to a member's clan for each message that passes the cooldown. Set 0 to pause without losing your channel list.",
      "xp_source": "Where clan XP comes from",
      "xp_source_hint": "Clans level up from XP. Pick where that XP is counted.",
      "xp_source_leveling": "From member levels",
      "xp_source_messages": "Counted on its own"
    },
    "cluster": {
      "conduct": {
        "description": "The record kept about individual staff, and the decisions taken on it.",
        "title": "Conduct"
      },
      "insights": {
        "description": "How the server is doing: activity, growth, retention and the reports you can export.",
        "title": "Insights"
      },
      "logs": {
        "description": "What Vex recorded, and which events it records.",
        "title": "Logs"
      },
      "performance": {
        "description": "How the team is doing. Targets, workload and recognition.",
        "title": "Performance"
      },
      "roles": {
        "description": "How members get roles, how they lose them, and who holds what.",
        "title": "Roles"
      },
      "staff_team": {
        "description": "Who is on the team, when they are on, and what they hand over.",
        "title": "Staff Team"
      }
    },
    "command_rules": {
      "prefix_link": "Open prefix settings",
      "prefix_off": "Prefix commands are turned off, so these settings do nothing until they are turned on.",
      "subtitle": "Short names for prefix commands, and the commands members cannot run with the prefix.",
      "title": "Aliases and blocked commands"
    },
    "commands": {
      "alias_hint": "Short form for this command.",
      "category": {
        "automation": "Automation & Safety",
        "community": "Community",
        "config": "Configuration",
        "economy": "Economy",
        "logging": "Logging",
        "moderation": "Moderation",
        "music": "Music",
        "other": "Other",
        "staff": "Staff Management",
        "utility": "Utility"
      },
      "category_all": "All",
      "copy": "Copy",
      "empty_description": "Try a different search term or category.",
      "empty_title": "No commands match",
      "example": "Example",
      "gate": {
        "admin": "Admin",
        "everyone": "Everyone",
        "mod": "Moderator",
        "owner": "Owner",
        "staff": "Staff"
      },
      "mode_prefix": "Prefix",
      "mode_slash": "Slash",
      "optional": "optional",
      "parameters": "Options",
      "prefix_hint": "{count} commands can be run this way. Set your server's prefix on the dashboard.",
      "prefix_note": {
        "private": "Slash only. This command replies privately, and a prefix message is public.",
        "slash_only": "Slash only. One of its options can't be typed as plain text."
      },
      "public_dashboard_link": "Dashboard",
      "public_eyebrow": "Every command, in one place.",
      "public_footer": "A production-grade Discord platform.",
      "required": "required",
      "search_placeholder": "Search commands by name or description",
      "subtitle": "Every command Vex has. Run them as slash commands, or with a text prefix once you turn prefix commands on.",
      "title": "Command Reference",
      "usage": "Usage",
      "your_prefix": "Your prefix"
    },
    "commandtoggles": {
      "description": "Commands switched off in this server. Pick a module to switch off all of its commands, or a single command by name. This is different from turning the module off: the feature keeps working, members just cannot run the command.",
      "label": "Switched off",
      "protected": "Some commands cannot be switched off, so that members can still ask for help.",
      "title": "Disabled commands"
    },
    "configtransfer": {
      "error": {
        "bad_file": "That file could not be read as a Vex settings export.",
        "no_config": "That file does not contain any settings.",
        "wrong_version": "That file was made by a different version of Vex and cannot be imported."
      }
    },
    "counting": {
      "allow_same_user": "Let one person count twice in a row",
      "allow_same_user_hint": "When this is off, a member has to wait for someone else to count before they can post the next number.",
      "channel_description": "Any message that is not a plain number is ignored, so members can still chat in this channel.",
      "channel_label": "Counting Channel",
      "channel_title": "Channel",
      "react": "React with :vex_success: on each correct count",
      "react_hint": "This confirms the count without Vex posting a message for every number.",
      "reset_done": "The current run is back to 0. The record is kept.",
      "reset_failed": "The run could not be reset.",
      "reset_on_fail": "Reset the run on a mistake",
      "reset_on_fail_hint": "When this is off, the wrong message is deleted and the chain carries on from the last correct number.",
      "reset_run": "Reset Run",
      "rules_description": "How strictly the chain is enforced.",
      "rules_title": "Rules",
      "saved": "Counting settings saved and synced to the bot.",
      "stat_best": "Record",
      "stat_current": "Currently At",
      "stat_fails": "Chains Broken",
      "subtitle": "One channel where members count upwards together. Every message has to be the next number in the chain.",
      "title": "Counting"
    },
    "critical": {
      "bans_known": "{count} bans in this server",
      "bans_unknown": "Vex could not read the ban list.",
      "confirm_body": "This lifts every ban in the server. Discord has no bulk unban, so Vex removes them one at a time and this can run for several hours. It continues in the background and you can stop it at any point.",
      "confirm_cancel": "Cancel",
      "confirm_go": "Start the unban wave",
      "confirm_phrase": "UNBAN ALL",
      "confirm_prompt": "Type {phrase} to confirm.",
      "confirm_saved": "The ban list is saved before anything is lifted, so these bans can be put back.",
      "confirm_title": "Unban everyone in this server?",
      "finished_at": "Finished",
      "force_stop": "Force stop",
      "force_stop_body": "This stops within one unban, instead of after the batch that is running. Vex cannot recall a request it has already sent to Discord, so at most one more ban comes off.",
      "force_stop_go": "Force stop now",
      "force_stop_kept": "Bans already lifted stay lifted. Force stopping does not put anything back. The saved ban list is still there, so they can be restored separately.",
      "force_stop_title": "Force stop the unban wave?",
      "force_stopped": "The unban wave was force stopped.",
      "last_wave": "Last unban wave",
      "needs_admin": "This page needs the server owner or a member with Discord's Administrator permission. Manage Server is not enough, because the actions here cannot be undone.",
      "needs_admin_title": "Administrator required",
      "no_bans": "This server has no bans.",
      "progress": "{unbanned} of {total} lifted",
      "progress_counting": "Counting the bans. Nothing has been lifted yet.",
      "progress_failed": "{failed} could not be lifted.",
      "started": "The unban wave has started.",
      "started_at": "Started",
      "started_by": "Started by",
      "state_cancelled": "Stopped",
      "state_done": "Finished",
      "state_failed": "Failed",
      "state_running": "Unbanning",
      "state_snapshot": "Saving the ban list",
      "stop": "Stop after this batch",
      "stopped": "The unban wave will stop after the current batch.",
      "stopping": "Stopping after the current batch",
      "subtitle": "Actions on this page cannot be undone from Discord. Read what each one does before you use it.",
      "title": "Critical",
      "unban_button": "Unban everyone",
      "unban_description": "Lifts every ban in this server. Vex saves the whole ban list first, including every reason, because Discord keeps no record of a ban once it has been lifted.",
      "unban_title": "Unban everyone",
      "wave_running": "An unban wave is already running in this server."
    },
    "dbexport": {
      "absent": "not in it",
      "blocker_schema": "It was taken at schema {archive} and this database is at {current}. Rows written for a different schema would go into tables that have since changed shape.",
      "blocker_unsigned": "It was not signed by this Vex, so the import will refuse it. Only an export downloaded from this same installation can be restored.",
      "col_after": "After restoring",
      "col_now": "Now",
      "col_table": "Table",
      "could_not_read": "The contents of that file could not be read: {reason} You can still try the import, which does its own checks.",
      "from_database": "From database",
      "net_gain": "Restoring takes the database from {from} rows to {to}. That is {diff} rows added.",
      "net_loss": "Restoring takes the database from {from} rows to {to}. That is {diff} rows removed.",
      "no_contents": "This export does not list its contents.",
      "nothing_changes": "Every table holds the same number of rows as it does now.",
      "older_format": "This export was taken before Vex recorded what was in it, so the contents cannot be shown. The import still checks it.",
      "only_changed": "Show only what changes",
      "reading": "Reading the export...",
      "same_total": "Restoring puts the database back to {rows} rows, which is what it holds now.",
      "schema": "Schema version",
      "schema_same": "Matches",
      "schema_unknown": "unknown",
      "show_all": "Show {count} unchanged tables",
      "size": "Size",
      "taken": "Taken",
      "unreadable": "That file could not be read as a Vex export.",
      "vanishing": "{count} tables that have rows now are not in this export at all, including {tables}. Restoring empties them.",
      "will_not_import": "This export will not be restored."
    },
    "economy": {
      "bank_capacity": "Capacity",
      "bank_capacity_hint": "The most one member can hold in the bank. Set to 0 for no limit.",
      "bank_description": "A safe place to keep currency. Banked money cannot be stolen with /rob.",
      "bank_enabled": "Enable the bank",
      "bank_enabled_hint": "Members can use /deposit and /withdraw to move currency between their wallet and the bank.",
      "bank_title": "Bank",
      "cancel": "Cancel",
      "currency_description": "What the money is called and what a new member starts with.",
      "currency_name": "Currency Name",
      "currency_title": "Currency",
      "daily_amount": "Daily Amount",
      "daily_description": "The /daily claim and the reward for claiming it day after day.",
      "daily_title": "Daily Payout",
      "empty_hint": "Balances show up here once members start earning.",
      "empty_title": "Nobody is holding anything yet",
      "failed": "Failed to save",
      "fish_add": "Add species",
      "fish_name": "Name",
      "fish_remove": "Remove species",
      "fish_types": "Species",
      "fish_types_hint": "Each species has a sale value and a weight. Weights are relative, so a weight of 30 is caught twice as often as 15.",
      "fish_value": "Sells for",
      "fish_weight": "Weight",
      "fishing_cooldown": "Cooldown (seconds)",
      "fishing_cooldown_hint": "How long a member waits between casts. Set to 0 to allow casting freely.",
      "fishing_description": "Members cast for fish, then sell what they catch.",
      "fishing_enabled": "Enable fishing",
      "fishing_enabled_hint": "Adds /fish, /fishing bucket, and /fishing sell. A catch is stock, not currency, so it only pays out when it is sold.",
      "fishing_title": "Fishing",
      "gamble_description": "The /gamble command is a double or nothing roll. The house edge sets how often it pays.",
      "gamble_enabled": "Allow members to gamble",
      "gamble_title": "Gambling",
      "group_bank": "Bank",
      "group_earning": "Earning",
      "group_games": "Games",
      "group_general": "General",
      "group_risk": "Risk",
      "house_edge": "House Edge (Percent)",
      "house_edge_hint": "The share of every bet the house keeps on average. At this setting a member wins {chance} percent of their rolls.",
      "item_add": "Add Item",
      "item_delete": "Delete item",
      "item_deleted": "Deleted {name}.",
      "item_description": "Description",
      "item_description_placeholder": "What a member gets for buying this.",
      "item_edit": "Edit item",
      "item_enabled": "Show in the shop",
      "item_enabled_hint": "A hidden item cannot be bought, but members keep the ones they already own.",
      "item_gives_role": "Gives a role",
      "item_hidden": "Hidden",
      "item_limit": "Limit Per Member",
      "item_limit_each": "Limit {limit} each",
      "item_limit_hint": "How many one member may ever buy. Leave this empty for no limit.",
      "item_name": "Name",
      "item_name_placeholder": "e.g. Custom Color",
      "item_new": "New item",
      "item_price": "Price",
      "item_role": "Role Reward",
      "item_role_hint": "Given to the member when they buy this item. Leave this empty for an item that only sits in an inventory.",
      "item_saved": "Item saved.",
      "item_stock": "Stock",
      "item_stock_hint": "How many are left to sell. Leave this empty for an item that never runs out.",
      "item_stock_left": "{stock} left",
      "item_stock_unlimited": "Unlimited",
      "job_add": "Add a job",
      "job_max": "Largest",
      "job_min": "Smallest",
      "job_name": "Job",
      "job_remove": "Remove",
      "job_role": "Required Role",
      "jobs_hint": "Optional. A member works the best paying job their roles qualify them for. If you add no jobs, everyone earns the flat band above.",
      "jobs_title": "Job Tiers",
      "lottery_cut": "House cut",
      "lottery_cut_hint": "The share of the pot the server keeps instead of paying out, as a percentage. This is what makes the lottery remove currency rather than just move it around.",
      "lottery_description": "Members buy tickets into a shared pot. An admin draws the winner with /lottery draw.",
      "lottery_enabled": "Enable the lottery",
      "lottery_enabled_hint": "Adds /lottery buy, /lottery info, and an admin-only /lottery draw. There is no automatic draw, so a pot is only ever paid out deliberately.",
      "lottery_max": "Tickets per member",
      "lottery_max_hint": "The most one member may hold in a single draw. Set to 0 for no limit.",
      "lottery_price": "Ticket price",
      "lottery_title": "Lottery",
      "max_bet": "Largest Bet",
      "max_bet_hint": "Caps how fast one lucky member can pull ahead of everyone else.",
      "min_bet": "Smallest Bet",
      "rob_chance": "Success Chance (Percent)",
      "rob_chance_hint": "How often a rob works. The rest of the time the robber pays the penalty.",
      "rob_cooldown": "Cooldown (Minutes)",
      "rob_description": "The /rob command takes from another member on a success and costs the robber on a failure.",
      "rob_enabled": "Allow members to rob each other",
      "rob_floor": "Protected Balance",
      "rob_floor_hint": "A member holding less than this cannot be robbed at all. This is what stops members farming the same broke account.",
      "rob_penalty": "Failure Penalty (Percent)",
      "rob_penalty_hint": "What a failed rob costs the robber, as a share of their own balance. The penalty is paid to the target.",
      "rob_penalty_max": "Largest Failure Penalty",
      "rob_penalty_max_hint": "A failed rob never costs more than this, whatever the percentage works out to.",
      "rob_take": "Take (Percent Of Target)",
      "rob_take_hint": "A successful rob takes this share of what the target is holding. It can never take more than they have.",
      "rob_title": "Robbing",
      "save": "Save Changes",
      "saved": "Economy settings saved and synced to the bot.",
      "shop_description": "What members can buy with /buy. Click an item to edit it.",
      "shop_empty_hint": "Add an item and members can buy it with /buy.",
      "shop_empty_title": "The shop is empty",
      "shop_title": "Shop Items",
      "slice_add": "Add slice",
      "slice_label": "Slice",
      "slice_multiplier": "Payout (tenths)",
      "slice_remove": "Remove slice",
      "slice_weight": "Weight",
      "starting_balance": "Starting Balance",
      "starting_hint": "What a member is given the first time the bot sees them.",
      "streak_bonus": "Streak Bonus Per Day",
      "streak_bonus_hint": "Added for each extra day of an unbroken streak. A streak breaks after 48 hours without a claim.",
      "streak_max": "Largest Streak Bonus",
      "streak_max_hint": "The streak bonus stops growing here, however long the streak runs.",
      "subtitle": "Run a server currency: what members earn, what they can risk, and what they can buy.",
      "symbol": "Symbol",
      "tab_leaderboard": "Leaderboard",
      "tab_settings": "Settings",
      "tab_shop": "Shop",
      "title": "Economy",
      "weekly_amount": "Weekly Amount",
      "weekly_cooldown": "Cooldown (Hours)",
      "weekly_description": "A larger claim on a longer cooldown.",
      "weekly_enabled": "Allow the weekly claim",
      "weekly_title": "Weekly Payout",
      "wheel_description": "Members stake a bet and spin for a multiplier.",
      "wheel_enabled": "Enable the wheel",
      "wheel_enabled_hint": "Adds /wheel. Each slice pays a multiple of the bet, picked by weight.",
      "wheel_inflates": "This wheel pays out more than it takes in.",
      "wheel_max_bet": "Maximum bet",
      "wheel_min_bet": "Minimum bet",
      "wheel_return": "Average return",
      "wheel_slices": "Slices",
      "wheel_slices_hint": "Each slice has a payout multiplier and a weight. Weights are relative, so a weight of 30 comes up twice as often as 15.",
      "wheel_title": "Wheel",
      "work_cooldown": "Cooldown (Minutes)",
      "work_description": "The /work command pays a random amount inside a band.",
      "work_enabled": "Allow members to work",
      "work_max": "Largest Payout",
      "work_min": "Smallest Payout",
      "work_title": "Work"
    },
    "embeds": {
      "add_field": "Add field",
      "author": "Author",
      "author_icon": "Author icon URL",
      "author_name": "Author name",
      "author_url": "Author link",
      "button_add": "Add a button",
      "button_emoji": "Emoji",
      "button_label": "Label",
      "button_row": "Row {number}",
      "button_row_add": "Add a row",
      "button_row_remove": "Remove this row",
      "button_rows_full": "That is all {limit} rows. Discord keeps the fifth for the page dropdown.",
      "buttons": "Buttons",
      "buttons_hint": "Link buttons shown under the embed. They belong to the whole template, not to one page. Only links are supported, because a template has no code behind it to answer a click. The emoji box takes a real emoji, or a custom one written as <:name:id>.",
      "color": "Color",
      "color_hint": "The bar down the left side of the embed.",
      "content": "Content",
      "created": "Template created.",
      "delete_confirm": "Delete this template? Any auto responder rule that replies with it will stop working.",
      "deleted": "Template deleted.",
      "description": "Description",
      "description_hint": "Markdown works here. Bold, italics, links, and lists all render.",
      "embed_title": "Title",
      "empty_description": "Build your first embed and save it. You can post it from the dashboard or with /embed send.",
      "empty_title": "No templates yet",
      "field_name": "Field name",
      "field_value": "Field value",
      "fields": "Fields",
      "fields_description": "Up to 25. Inline fields sit side by side, three to a row.",
      "footer": "Footer",
      "footer_icon": "Footer icon URL",
      "footer_text": "Footer text",
      "image_url": "Image URL",
      "images": "Images",
      "inline": "Inline",
      "module_saved": "Embeds module setting saved.",
      "move_down": "Move this field down",
      "move_up": "Move this field up",
      "name": "Name",
      "name_hint": "Letters, numbers, dashes, and underscores. This is what you type after /embed send.",
      "name_placeholder": "e.g. server-rules",
      "new_template": "New template",
      "over_limit": "This embed is over a Discord limit and cannot be saved yet.",
      "page_add": "Add page",
      "page_drag_hint": "Drag to reorder",
      "page_move_left": "Move this page earlier",
      "page_move_right": "Move this page later",
      "page_number": "Page {number}",
      "page_remove": "Remove this page",
      "pages_explainer": "Vex adds a dropdown under the embed. Picking a page shows it to that person only, so the posted message stays on page 1 for everyone else.",
      "preview": "Preview",
      "preview_empty": "Nothing to show yet. Add a title or a description.",
      "preview_hint": "This is what the embed looks like in Discord.",
      "remove_field": "Remove this field",
      "saved": "Template saved.",
      "send": "Send to channel",
      "send_button": "Send it",
      "send_channel": "Channel",
      "send_description": "Vex posts the saved template. The dashboard never posts on its own, so what goes out is exactly what the bot has.",
      "send_title": "Send this template",
      "subtitle": "Design an embed, see it exactly as Discord will render it, then save it as a template.",
      "templates": "Templates",
      "templates_description": "Every template saved for this server. The bot posts these with /embed send.",
      "thumbnail_url": "Thumbnail URL",
      "timestamp": "Show a timestamp",
      "timestamp_hint": "Puts the current time in the footer when the embed is posted.",
      "title": "Embed Builder",
      "title_url": "Title link",
      "total": "Total",
      "total_hint": "Discord counts the title, the description, every field, the footer, and the author name against one 20000 character limit.",
      "unsaved": "Unsaved changes"
    },
    "events": {
      "all_submissions": "All submissions",
      "approve": "Approve",
      "approved": "Approved. The host has been notified.",
      "cancel": "Cancel",
      "cancel_event": "Cancel Event",
      "cancel_failed": "Couldn't cancel event",
      "cancelled": "Event cancelled.",
      "channel": "Channel",
      "create_event": "Create Event",
      "create_failed": "Couldn't create event",
      "created": "Event created.",
      "days": "days",
      "decide_error": {
        "already_decided": "Someone already decided this one.",
        "bad_decision": "A decision has to be approve or deny.",
        "not_found": "That submission is gone.",
        "note_too_long": "That note is too long."
      },
      "decide_failed": "That decision could not be recorded.",
      "decision_note_label": "Note",
      "decision_note_placeholder": "Optional note for the host",
      "denied": "Denied. The host has been notified.",
      "deny": "Deny",
      "description": "Description",
      "description_placeholder": "Details, what to bring, etc.",
      "empty_archive_description": "An event moves here once it has finished or been cancelled.",
      "empty_archive_title": "No past events yet",
      "empty_description": "Create one to get started.",
      "empty_title": "No events yet",
      "going_count": "{count} going",
      "hours": "hours",
      "maybe_count": "{count} maybe",
      "minutes": "minutes",
      "my_submissions": "My submissions",
      "new_event": "New Event",
      "no_pending": "No event ideas are waiting on a decision.",
      "no_submissions": "Nothing here yet.",
      "optional": "(optional)",
      "pitch_details": "Details (optional)",
      "pitch_details_placeholder": "What is it, and what do you need to run it?",
      "pitch_hint": "Propose an event idea. An event manager will review it and let you know.",
      "pitch_name": "Event",
      "pitch_name_placeholder": "Movie Night",
      "pitch_title": "Pitch an event",
      "pitch_when": "When (optional)",
      "pitch_when_hint": "In your own words. A firm time is not needed yet.",
      "pitch_when_placeholder": "This Saturday around 8pm ET",
      "review_channel": "Review channel",
      "review_channel_hint": "Where submitted event ideas are posted for managers to approve or deny, with buttons. Leave empty to review only on the dashboard.",
      "review_channel_label": "Post submissions to",
      "review_channel_saved": "Review channel saved.",
      "review_queue": "Awaiting review",
      "review_queue_hint": "Event ideas hosts have submitted. Approving DMs the host that they are cleared to run it.",
      "starts_in": "Starts in",
      "status_approved": "Approved",
      "status_cancelled": "Cancelled",
      "status_denied": "Denied",
      "status_past": "Past",
      "status_pending": "Pending",
      "status_upcoming": "Upcoming",
      "submit_error": {
        "description_too_long": "That description is too long.",
        "no_title": "Your event needs a title.",
        "title_too_long": "That title is too long.",
        "when_too_long": "Keep the proposed time short."
      },
      "submit_failed": "That idea could not be submitted.",
      "submit_idea": "Submit idea",
      "submitted": "Your event idea was submitted for review.",
      "submitting": "Submitting...",
      "subtitle_1": "Create events here or with",
      "subtitle_2": "; members RSVP with buttons.",
      "title": "Events",
      "title_label": "Title",
      "title_placeholder": "e.g. Community Game Night"
    },
    "foreignmodlog": {
      "bots_description": "Optional. If the channel carries more than one bot, list the user IDs Vex should read. Leave it empty to read any bot posting in that channel.",
      "bots_hint": "One bot user ID per line.",
      "bots_title": "Restrict To Specific Bots",
      "channel_description": "The channel the other bot posts its mod-log into. Vex reads this channel and no other. It never edits, deletes or replies to anything it finds there.",
      "channel_label": "Channel",
      "channel_title": "Log Channel",
      "enabled": "Read another bot's mod-log",
      "intro": "If your server used a different moderation bot before Vex, or still runs one alongside it, the actions taken with that bot are invisible to Vex. Every staff report counts moderation cases, so those moderators look idle in quotas, burnout, the leaderboard and the pay sheet. Point Vex at the channel that bot logs to and it will read each entry and record it.",
      "safety_attribution": "An entry that does not name a moderator is recorded with no moderator, rather than credited to somebody who did not do the work.",
      "safety_counts": "Imported actions become cases, so they count in quotas, burnout, the staff leaderboard and the pay sheet.",
      "safety_no_action": "Imported warnings never trigger Vex's own escalation ladder. Turning this on changes what your reports show, and never what Vex does to a member.",
      "safety_once": "Each log entry is recorded once. Restarting the bot does not import the channel again.",
      "safety_title": "What Vex does with what it reads",
      "save": "Save Settings",
      "save_failed": "Those settings could not be saved.",
      "saved": "Other bot tracking settings saved.",
      "source_description": "The format Vex should expect. Each bot writes its log differently, so an entry in a format Vex does not know is skipped rather than guessed at.",
      "source_label": "Bot",
      "source_title": "Which Bot",
      "stats_empty": "Nothing has been imported yet. Once the other bot posts a log entry in that channel, it will appear here.",
      "stats_latest": "Most recent",
      "stats_moderators": "Moderators credited",
      "stats_title": "What has been imported",
      "stats_total": "Actions imported",
      "subtitle": "Read another bot's mod-log so the work your moderators do with it counts in Vex's staff reports.",
      "title": "Other Bot Tracking"
    },
    "giveaways": {
      "action_failed": "That didn't work. Try again in a moment.",
      "bl_add": "Bar from giveaways",
      "bl_added": "They can no longer enter giveaways here.",
      "bl_empty_description": "Add a user or a role here to stop them entering giveaways in this server.",
      "bl_empty_title": "Nobody is barred",
      "bl_id": "ID",
      "bl_id_hint": "The user or role ID to bar.",
      "bl_no_reason": "No reason given",
      "bl_reason": "Reason",
      "bl_remove": "Remove",
      "bl_removed": "They can enter giveaways again.",
      "bl_role": "Role",
      "bl_role_label": "Role {id}",
      "bl_type": "Type",
      "bl_user": "User",
      "bonuses_set": "This giveaway gives some people extra entries.",
      "cancel": "Cancel",
      "cancelled_ok": "Giveaway cancelled. No winners were picked.",
      "draw_detail": "{eligible} eligible, {excluded} excluded",
      "draw_kind": {
        "claim_timeout": "Redrawn after an unclaimed prize",
        "initial": "Drawn",
        "reroll": "Rerolled"
      },
      "draws": "Draw history",
      "empty_archive_description": "A giveaway moves here once the winners have been drawn.",
      "empty_archive_title": "No finished giveaways yet",
      "empty_description": "Start one to get going.",
      "empty_title": "No giveaways yet",
      "end_now": "End now",
      "ending": "Ending giveaway...",
      "ends": "ends {when}",
      "entries_count": "{count} entries",
      "extend": "Add time",
      "extended": "The giveaway now runs for longer.",
      "field_booster_only": "Server boosters only",
      "field_cap": "Entry cap",
      "field_channel": "Channel",
      "field_delay": "Start in (minutes)",
      "field_description": "Description",
      "field_duration": "Runs for",
      "field_extend": "Add minutes",
      "field_host": "Host",
      "field_kind": "Type",
      "field_min_age": "Minimum account age (days)",
      "field_min_tenure": "Minimum time in server (days)",
      "field_ping": "Ping a role",
      "field_prize": "Prize",
      "field_required_roles": "Required roles",
      "field_unit": "Unit",
      "field_winners": "Winners",
      "hint_cap": "Stop taking entries after this many people. Zero means no limit.",
      "hint_delay": "Wait this long before entries open. Zero starts it now.",
      "hint_description": "Shown in the giveaway message. Leave empty for the default wording.",
      "hint_extend": "Pushes the end time back.",
      "hint_host": "Who the giveaway is credited to. Leave empty to host it yourself.",
      "hint_ping": "Mentioned alongside the giveaway message.",
      "host_placeholder": "User ID",
      "hosted_by": "Hosted by",
      "kind": {
        "drop": "Drop",
        "reaction": "Reaction",
        "standard": "Standard"
      },
      "new_giveaway": "New Giveaway",
      "nothing_yet": "Nothing to show yet.",
      "opens": "opens {when}",
      "pause": "Pause",
      "paused_ok": "Entries are paused. The giveaway still ends on time.",
      "req": {
        "account_age": "Discord account at least {days} days old",
        "blocked": "{count} roles cannot enter",
        "booster": "Server boosters only",
        "messages": "At least {count} messages sent here",
        "none": "Anyone can enter.",
        "roles": "Needs {count} specific roles",
        "tenure": "In the server for at least {days} days",
        "voice": "Must be in a voice channel"
      },
      "requirements_heading": "Who can enter",
      "resume": "Resume",
      "resumed_ok": "Entries are open again.",
      "start": "Start giveaway",
      "start_failed": "Couldn't start giveaway",
      "started": "Giveaway started.",
      "stat_entries": "Entries",
      "stat_finished": "Finished",
      "stat_people": "People",
      "stat_prizes": "Prizes awarded",
      "stat_running": "Running",
      "stat_total": "Giveaways",
      "stat_true_entries": "Counted rows",
      "stat_winners": "Winners",
      "stats_30d": "Last 30 days",
      "stats_7d": "Last 7 days",
      "stats_90d": "Last 90 days",
      "stats_all_time": "All time",
      "stats_window_label": "Period",
      "status": {
        "active": "Running",
        "cancelled": "Cancelled",
        "ended": "Ended",
        "paused": "Paused",
        "scheduled": "Scheduled"
      },
      "subtitle_1": "Start and end giveaways here or with",
      "subtitle_2": " in Discord.",
      "tab_blacklist": "Blacklist",
      "tab_list": "Giveaways",
      "tab_stats": "Statistics",
      "title": "Giveaways",
      "top_entrants": "Most entries",
      "top_winners": "Most wins",
      "unit_days": "Days",
      "unit_hours": "Hours",
      "unit_minutes": "Minutes",
      "winners": "Winners",
      "winners_count": "{count} winners"
    },
    "growth": {
      "chart_description": "Each day has one bar for joins and one bar for leaves.",
      "chart_title": "Joins and leaves per day",
      "day_tooltip": "{day}: {joins} joins, {leaves} leaves",
      "empty_description": "Vex records every join and leave from now on. The first numbers appear once a member joins or leaves your server.",
      "empty_title": "No growth data yet",
      "export": "Export CSV",
      "legend_joins": "Joins",
      "legend_leaves": "Leaves",
      "range_days": "Last {days} days",
      "range_label": "Time range",
      "stat_joins": "Joins",
      "stat_leaves": "Leaves",
      "stat_net": "Net change",
      "subtitle": "Joins, leaves, and net change over time.",
      "title": "Member Growth"
    },
    "guildpicker": {
      "back_to_home": "Back to Home",
      "empty_description": "Vex is not in any of your servers yet. To add it, you need the Manage Server permission on that server.",
      "empty_title": "No servers to show",
      "home": "Home",
      "manager": "Manager",
      "member": "Member",
      "not_added": "Vex not added",
      "owner": "Owner",
      "pin": "Pin this server to the top",
      "resync": "Refresh",
      "resync_hint": "Joined a new server since signing in? This asks Discord for your server list again.",
      "subtitle": "Pick a server to configure, or add Vex to a new one.",
      "title": "Choose a server",
      "unpin": "Unpin this server"
    },
    "handover": {
      "breakdown": "What happened",
      "case": "case #{number}",
      "copied": "Copied to the clipboard.",
      "copy": "Copy",
      "copy_failed": "The text could not be copied. Select it and copy it by hand.",
      "copy_hint": "This is the same summary written for Discord, with mentions that will resolve when you post it. Edit it in your own words first.",
      "copy_title": "Ready to post",
      "description": "A summary of what a moderator did on their shift, ready to hand to whoever is on next.",
      "empty_body": "Enter a moderator's user id to build one from the case log.",
      "empty_title": "No Handover Yet",
      "excluded_note": "Cases opened by automod are left out, and so are deleted ones. A handover is what a person did, and a case that was struck from the record should not come back with a number nobody can look up.",
      "member_hint": "Enter a Discord user id to build a handover for that moderator.",
      "no_reason": "No reason was written.",
      "not_stored_note": "Nothing here is saved. The handover is built from the case log each time you ask for it, so it cannot drift away from the record it came from.",
      "notable_hint": "Bans, kicks, timeouts, jails and softbans. These are the ones somebody may come back to argue about.",
      "notable_title": "Worth mentioning",
      "quiet": "Nothing to report. This moderator took no actions in the window.",
      "repeat_count": "{count} times",
      "repeat_hint": "The same member coming up repeatedly is usually the thing worth passing on.",
      "repeat_title": "Actioned more than once",
      "title": "Handover Reports",
      "total": "{count} actions this shift",
      "truncated": "Only the first few are listed. The case log has the rest.",
      "window": "Last {hours} hours"
    },
    "heatmaps": {
      "cell_tooltip": "{weekday} at {hour}:00 UTC: {count} messages",
      "channel_all": "All channels",
      "channel_hint": "Pick a channel to see only its activity. If no channel is picked, every channel is included.",
      "channel_label": "Channel",
      "channel_unknown": "Channel {id}",
      "empty_description": "Vex records message activity from now on. The grid fills in as your members talk.",
      "empty_title": "No activity data yet",
      "export": "Export CSV",
      "grid_description": "Hours are shown in UTC. A darker square means more messages.",
      "grid_title": "Messages by weekday and hour",
      "messages_count": "{count} messages",
      "peak_note": "The busiest hour had {count} messages.",
      "range_days": "Last {days} days",
      "range_label": "Time range",
      "scale_less": "Less",
      "scale_more": "More",
      "subtitle": "When your server is busy, by day of the week and hour of the day.",
      "title": "Activity Heatmaps",
      "top_channels_description": "Message counts for the selected time range.",
      "top_channels_empty": "Vex has not recorded any channel activity yet.",
      "top_channels_title": "Busiest channels",
      "weekday_0": "Mon",
      "weekday_1": "Tue",
      "weekday_2": "Wed",
      "weekday_3": "Thu",
      "weekday_4": "Fri",
      "weekday_5": "Sat",
      "weekday_6": "Sun"
    },
    "highlights": {
      "allow_bots": "Let bot messages trigger highlights",
      "allow_bots_hint": "Off by default. Bots post a lot of automated text, and most of it is not worth a DM.",
      "context": "Messages of context",
      "context_hint": "How many earlier messages Vex quotes in the DM so the member can see what the conversation was about. Set this to 0 to send the matching message on its own.",
      "cooldown": "Cooldown per channel (seconds)",
      "cooldown_hint": "How long a member waits before another highlight from the same channel. This keeps one busy conversation to a single DM. Set this to 0 to send every match.",
      "grace": "Skip if active in the last (seconds)",
      "grace_hint": "If a member has spoken in the channel this recently, they are reading it already and no DM is sent. Set this to 0 to always send.",
      "ignored": "Ignored channels",
      "ignored_hint": "Messages in these channels never trigger a highlight, whatever anyone is watching. Threads follow their parent channel.",
      "limits_description": "How many keywords a member can watch, and how short a keyword may be.",
      "limits_title": "Limits",
      "max_keywords": "Keywords per member",
      "max_keywords_hint": "The most keywords one member can watch in this server.",
      "min_length": "Shortest keyword",
      "min_length_hint": "The fewest characters a keyword can have. Very short keywords match almost every message, which makes the feature unusable for the member who set one.",
      "noise_description": "These settings decide when a match is worth a DM.",
      "noise_title": "How often members hear from Vex",
      "privacy_note": "Keywords are private. Vex does not show anyone else which words a member watches, and a member is only ever sent a message they already had permission to read.",
      "saved": "Highlight settings saved and synced to the bot.",
      "scope_description": "Channels to leave out, and whether other bots can trigger a highlight.",
      "scope_title": "Where highlights apply",
      "stat_keywords": "Keywords in total",
      "stat_watchers": "Members watching something",
      "subtitle": "Members pick words they care about, and Vex sends them a DM when someone says one. Each member manages their own keywords with the /highlight command.",
      "title": "Highlights",
      "usage_description": "How many people use highlights in this server.",
      "usage_title": "Usage"
    },
    "invites": {
      "add_reward": "Add",
      "after_invites": "After (Invites)",
      "col_fake": "Fake",
      "col_inviter": "Inviter",
      "col_invites": "Invites",
      "col_left": "Left",
      "col_stayed": "Stayed",
      "count_fakes": "Count fake joins",
      "count_fakes_hint": "Fake joins count toward the leaderboard and the reward roles anyway. Leave this off if you use the reward roles, because it is the setting that makes them farmable.",
      "counting_description": "Vex marks a join as fake when it looks like someone is farming the reward roles. A fake join still appears on the leaderboard, so you can see it happening.",
      "counting_title": "What Counts",
      "duplicate_tier": "Another tier already uses {invites} invite(s).",
      "grant_role": "Grant Role",
      "invalid_rewards": "Every reward needs a role, and the invite counts must be unique.",
      "leaderboard_description": "The top inviters in this server. Stayed and left describe the members they invited.",
      "leaderboard_title": "Leaderboard",
      "min_account_age": "Minimum Account Age (Days)",
      "min_account_age_hint": "An invited account younger than this does not earn the inviter credit. Set this to 0 to count every account, however new it is.",
      "no_invites_description": "Vex records each join from the moment this module is turned on. Joins from before that are not counted.",
      "no_invites_title": "No invites tracked yet",
      "no_rewards_description": "Add one to give your best inviters something for it.",
      "no_rewards_title": "No reward roles",
      "permission_note": "Vex needs the Manage Server permission to read your invites. Without it, joins cannot be matched to an inviter.",
      "remove_reward": "Remove this reward role",
      "rewards_description": "A role granted once someone has invited enough members. These are cumulative and permanent. An inviter keeps every tier they have passed.",
      "rewards_title": "Reward Roles",
      "saved": "Invite tracking settings saved and synced to the bot.",
      "subtitle": "See who brings members in, and reward the people who do it most.",
      "title": "Invite Tracking"
    },
    "jail": {
      "announce_channel": "Announcement channel",
      "announce_channel_hint": "Posts a notice here when somebody is jailed. This is separate from the mod log: it is for the people who can see the member arrive in the jail channel and do not know why.",
      "announce_message": "Announcement text",
      "announce_message_hint": "The same placeholders work here.",
      "behaviour_description": "These apply the moment the jail role is added.",
      "behaviour_title": "What happens when somebody is jailed",
      "default_duration": "Default length",
      "default_duration_hint": "How long a jail lasts when the moderator does not give a length. Set it to 0 to keep jails permanent until somebody runs unjail. The shortest default is 60 seconds.",
      "description": "The role a jailed member gets, and what else happens when they get it.",
      "disconnect": "Disconnect them from voice",
      "disconnect_hint": "Discord does not re-check a voice connection that already exists, so without this a jailed member keeps talking until they leave the channel themselves.",
      "dm_message": "Custom DM message",
      "dm_message_hint": "Sent to the member instead of the standard jail DM. Leave it empty to use the standard one. You can use {user}, {user_name}, {server}, {reason}, {duration} and {case}.",
      "keep_roles": "Roles they keep anyway",
      "keep_roles_hint": "For roles that are not permissions, like a verification marker or a pronoun role. Losing and regaining those is noise.",
      "managed_note": "Roles Discord manages itself, like a booster role or one that belongs to another bot, are always kept. Discord does not allow anyone to remove them.",
      "notices_description": "What the member is told, and what the server sees. Both are optional and both are separate from the mod log, which is the staff record.",
      "notices_title": "Jail messages",
      "permanent": "Permanent until unjailed",
      "role": "Jail role",
      "role_description": "Give this role the permissions a jailed member should be left with.",
      "role_hint": "Vex adds this role when somebody is jailed and removes it when they are released.",
      "role_title": "The jail role",
      "saved": "Jail settings saved.",
      "strip": "Take their other roles away",
      "strip_hint": "Every role is removed while they are jailed and given back when they are released. Turn this off if your jail role already denies everything and you would rather leave colour roles alone.",
      "title": "Jail"
    },
    "kudos": {
      "channel": "Announcement Channel",
      "channel_hint": "Vex posts each kudos here. Leave this empty to announce nothing.",
      "cooldown": "Wait Between Kudos (Seconds)",
      "cooldown_hint": "How long a member waits after giving kudos before they can give more. Set this to 0 for no wait.",
      "daily_limit": "Kudos Per Day",
      "daily_limit_hint": "How many kudos one member can give in a day.",
      "empty_description": "Members give kudos with /kudos give in Discord, or by right-clicking a message and choosing Give Kudos. There is no button here on purpose, because kudos from an admin panel isn't really kudos.",
      "empty_title": "Nobody has kudos yet",
      "give": {
        "button": "Give kudos",
        "failed": "That kudos could not be given.",
        "given": "Kudos given.",
        "giving": "Giving...",
        "hint": "Recognise another staff member. Kudos is staff only.",
        "module_off": "Kudos is turned off for this server.",
        "not_staff": "Kudos can only be given to staff members.",
        "note": "Note (optional)",
        "note_placeholder": "What did they do well?",
        "recipient": "Staff member",
        "recipient_placeholder": "User ID of the staff member",
        "roster_unavailable": "Vex hasn't loaded the staff roster yet. Enable a staff report module and try again shortly.",
        "title": "Give kudos"
      },
      "leaderboard_description": "Kudos received over the last {days} days.",
      "leaderboard_title": "Leaderboard",
      "limits_description": "The rules that stop the leaderboard being farmed. They are the reason it means anything.",
      "limits_title": "Limits",
      "pair_note": "One more rule is always on and can't be changed. The same person can only give the same person kudos once a day, so two members can't sit and trade kudos to the top of the board.",
      "recent_description": "{total} kudos given in the last {days} days.",
      "recent_empty": "No kudos yet.",
      "recent_title": "Recent Kudos",
      "recipient_roles": "Roles That Can Receive Kudos",
      "recipient_roles_hint": "If this is empty, anyone can receive kudos.",
      "saved": "Kudos settings saved and synced to the bot.",
      "subtitle": "Members thank each other for good work, and it adds up into a leaderboard.",
      "thanked": "thanked",
      "title": "Kudos",
      "who_description": "Who can receive kudos, and where Vex announces it.",
      "who_title": "Who and Where"
    },
    "layout": {
      "back_to_home": "Back to home",
      "back_to_servers": "← Back to your servers",
      "bot": "Bot",
      "bot_status_tooltip": "Live bot connection status",
      "dev_session": "Dev Session",
      "home": "Home",
      "log_out": "Log out",
      "manager": "Manager",
      "member": "Member",
      "no_access_description": "You are a member of {guild}, but its staff haven't given you access to the dashboard. Ask a server admin to grant you a role on the Dashboard Access page.",
      "no_access_title": "You don't have access",
      "not_found_description": "You don't manage this server, or Vex isn't in it.",
      "not_found_title": "Server not found",
      "offline": "Offline",
      "online": "Online",
      "open_nav": "Open navigation menu",
      "ops_console": "Ops Console",
      "owner": "Owner",
      "switch_to_dark": "Switch to dark theme",
      "switch_to_light": "Switch to light theme",
      "toggle_theme": "Toggle theme",
      "your_servers": "Your servers"
    },
    "leveling": {
      "add_reward": "Add Reward",
      "announce_channel": "Announce Channel",
      "announce_channel_hint": "If empty, the announcement is posted in the channel they levelled up in.",
      "announce_description": "Placeholders: {user} {username} {level}",
      "announce_title": "Level-Up Announcement",
      "announce_toggle": "Announce level-ups",
      "bonus_day_percent": "Bonus day rate",
      "bonus_days": "Bonus days",
      "bonus_days_hint": "Days that earn extra XP, in UTC. Pick none to turn day bonuses off.",
      "bonus_description": "Pay extra XP on chosen days, or during surprise hours.",
      "bonus_hour_chance": "Bonus hour chance",
      "bonus_hour_chance_hint": "The chance that any given hour becomes a surprise bonus hour. Set to 0 to turn this off. Everyone in the server gets the same hour.",
      "bonus_hour_percent": "Bonus hour rate",
      "bonus_percent_hint": "As a percentage. 200 is double XP.",
      "bonus_title": "Bonus XP",
      "cooldown": "Cooldown (Seconds)",
      "cooldown_hint": "Per user, the time between XP gains.",
      "curve_base": "Base",
      "curve_base_hint": "The flat cost of every level. Raise this to slow everything down evenly.",
      "curve_cubic": "Cubic",
      "curve_cubic_hint": "The steepest part of the curve. Leave it at 0 for a gentle climb. Set 4 here with 6, 4 and 1 in the other three to make each level cost n to the fourth.",
      "curve_description": "How much XP each level costs. Advancing from level n costs (quadratic x n x n) + (linear x n) + base.",
      "curve_linear": "Linear",
      "curve_linear_hint": "Raise this to make each level steadily more expensive than the last.",
      "curve_preview": "With these numbers, level 1 costs {one} XP, level 5 costs {five}, and level 10 costs {ten}.",
      "curve_quadratic": "Quadratic",
      "curve_quadratic_hint": "Raise this to make later levels much harder while early ones stay quick.",
      "curve_title": "Level curve",
      "curve_totals_at_rate": "at {rate} XP each",
      "curve_totals_hint": "The two message columns are what the curve costs to play. They use the XP rate for each level, so they already account for scaling. You cannot work one out from the other columns: dividing total XP by the current rate gives roughly half the real answer, because early levels were earned while the rate was still low.",
      "curve_totals_level": "Level",
      "curve_totals_messages": "Messages for the next level",
      "curve_totals_messages_total": "Messages to reach it",
      "curve_totals_step": "XP for the next level",
      "curve_totals_title": "What this curve works out to",
      "curve_totals_total": "Total XP to reach it",
      "empty_hint": "Once members start chatting with leveling turned on, they'll show up here.",
      "empty_title": "No XP yet",
      "leaderboard_title": "Leaderboard ({total})",
      "level": "Level",
      "level_badge": "Lvl {level}",
      "level_pivot": "Scale XP with level",
      "level_pivot_hint": "At this level a member earns double the base XP per message. At twice this level they earn five times, at three times it they earn ten times. Set 0 to give everyone the same XP per message.",
      "level_pivot_off": "Every member earns the same XP per message, whatever their level.",
      "level_pivot_see_curve": "The level curve table below shows what this works out to in messages.",
      "message": "Message",
      "no_rewards": "No role rewards yet.",
      "no_xp_channels": "No-XP Channels",
      "no_xp_description": "Channels and roles that don't earn any XP.",
      "no_xp_roles": "No-XP Roles",
      "no_xp_title": "No-XP Zones",
      "public_leaderboard": "Public leaderboard",
      "public_leaderboard_hint": "Shows the XP and coin leaderboards to members on the web portal. If off, ranks are private and only staff can see them on the dashboard.",
      "rewards_description": "Give members roles when they reach a level.",
      "rewards_title": "Role Rewards",
      "role": "Role",
      "saved": "Leveling settings saved and synced to the bot.",
      "stack_rewards": "Stack rewards",
      "stack_rewards_hint": "Members keep lower reward roles when they earn a higher one. If off, the old role is swapped for the new one.",
      "subtitle": "Reward activity with XP, levels, and role rewards.",
      "tab_leaderboard": "Leaderboard",
      "tab_settings": "Settings",
      "title": "Leveling",
      "voice_moved_body": "Voice XP is now its own system with its own page. It has its own curve, its own role rewards and its own leaderboard, and it no longer adds to the message level.",
      "voice_moved_link": "Open Voice Leveling",
      "voice_moved_title": "Voice XP",
      "xp_amount": "{xp} XP",
      "xp_max": "Max XP / Message",
      "xp_min": "Min XP / Message",
      "xp_rate_description": "How much XP a message earns, and how often.",
      "xp_rate_title": "XP Rate"
    },
    "live": {
      "live": "Live",
      "minutes_ago": "Updated {minutes} min ago",
      "never": "Not loaded yet",
      "paused": "Paused",
      "refresh": "Refresh now",
      "seconds_ago": "Updated {seconds}s ago",
      "stale": "Not updating"
    },
    "loa": {
      "approve": "Approve",
      "away_description": "Approved leave that covers today.",
      "away_empty": "Nobody is on leave right now.",
      "away_title": "Away Right Now",
      "back_in": "Back {when}",
      "channel": "Request Channel",
      "channel_hint": "New requests are posted here with approve and deny buttons. Leave this empty to review requests only on this page.",
      "deny": "Deny",
      "empty_description": "Staff ask for leave with /loa request in Discord. Once a request is decided it shows up here.",
      "empty_title": "No past requests",
      "failed": "That didn't work.",
      "history_description": "Requests that have been decided, cancelled, or returned from.",
      "history_title": "Past Requests",
      "max_days": "Longest Leave (Days)",
      "max_days_hint": "Vex refuses a request longer than this.",
      "note_meta": "Reviewer note: {note}",
      "pending_description": "Requests that nobody has decided yet.",
      "pending_empty": "Nothing is waiting for approval.",
      "pending_title": "Waiting for Approval",
      "pill_away": "Away now",
      "reminder": "Remind Before Return (Hours)",
      "reminder_hint": "Vex sends the staff member a direct message this long before their leave ends. Set this to 0 to send nothing.",
      "reviewed": "Request #{number} has been decided.",
      "role": "On Leave Role",
      "role_hint": "Vex gives this role while someone is away. Leave this empty to give no role.",
      "rules_description": "How long a leave can be, and when the return reminder goes out.",
      "rules_title": "Rules",
      "saved": "Leave settings saved and synced to the bot.",
      "staff_roles": "Staff roles",
      "staff_roles_hint": "Members with any of these roles can use /loa request and /loa cancel.",
      "staff_roles_note": "If you pick no roles, your moderator and admin roles are used. Moderators and admins can always request leave, whichever roles you pick here.",
      "status_approved": "Approved",
      "status_cancelled": "Cancelled",
      "status_denied": "Denied",
      "status_pending": "Waiting",
      "status_returned": "Returned",
      "subtitle": "Staff ask for time off, someone approves it, and Vex reminds them when they are due back. Nobody on approved leave gets flagged as inactive.",
      "title": "Leave of Absence",
      "where_description": "Where requests are posted, and what happens to a staff member while they are away.",
      "where_title": "Where and What",
      "who_description": "Staff book their own time off. Approving a request is always moderator only.",
      "who_title": "Who can request leave",
      "window_meta": "{start} to {end}"
    },
    "lockdown": {
      "announce": "Post a notice in the channel",
      "announce_hint": "Without this a lock is invisible. The people who can no longer type are the ones least able to ask what happened.",
      "bypass_description": "Roles listed here keep the ability to send messages in a locked channel.",
      "bypass_hint": "Usually your moderator roles. Everyone else is silenced until the channel is unlocked.",
      "bypass_note": "Discord gives a role no permission just because it is high up the list, so Vex writes an explicit allow for each role here when it locks, and puts the old setting back when it unlocks.",
      "bypass_roles": "Roles that can speak while locked",
      "bypass_title": "Who can still talk",
      "cmd_lock": "Lock a channel.",
      "cmd_unlock": "Unlock a channel.",
      "commands_description": "Every form takes an optional channel. Leave it out and it acts on the channel you are in.",
      "commands_note": "The slash versions are /lock and /unlock. /lockdown still exists for locking the whole server at once.",
      "commands_title": "Commands",
      "description": "Lock a channel so members cannot send messages, and choose who is allowed to keep talking.",
      "lock_message": "When it locks",
      "lock_message_hint": "Use {reason} to include the reason the moderator gave. If they gave none, it is left out.",
      "notice_description": "What members see when a channel is locked or unlocked.",
      "notice_title": "The notice in the channel",
      "saved": "Channel lock settings saved.",
      "title": "Channel Locks",
      "unlock_message": "When it unlocks"
    },
    "logging": {
      "categories": {
        "invite": "Invites",
        "invite_desc": "Invite creates and deletes, plus join attribution.",
        "member": "Members",
        "member_desc": "Joins, leaves, nickname/role/avatar changes, bans, and timeouts.",
        "message": "Messages",
        "message_desc": "Edits, deletes, and bulk deletes, with the original content where it was cached.",
        "server": "Server",
        "server_desc": "Channels, roles, emojis, webhooks, and server settings.",
        "voice": "Voice",
        "voice_desc": "Join, leave, move, mute, and deafen."
      },
      "categories_description": "Turn each category on or off, and optionally send it to its own channel.",
      "categories_title": "Categories",
      "default_description": "Any category without its own channel logs here.",
      "default_title": "Default Channel",
      "events": {
        "avatar_changed": "Avatar changed",
        "channel_created": "Channel created",
        "channel_deleted": "Channel deleted",
        "channel_updated": "Channel updated",
        "emojis_updated": "Emojis updated",
        "invite_created": "Invite created",
        "invite_deleted": "Invite deleted",
        "member_banned": "Member banned",
        "member_joined": "Member joined",
        "member_left": "Member left",
        "member_unbanned": "Member unbanned",
        "message_bulk_deleted": "Messages bulk deleted",
        "message_deleted": "Message deleted",
        "message_edited": "Message edited",
        "nickname_changed": "Nickname changed",
        "role_created": "Role created",
        "role_deleted": "Role deleted",
        "role_updated": "Role updated",
        "roles_changed": "Roles changed",
        "server_updated": "Server settings updated",
        "timeout_changed": "Timed out or released",
        "username_changed": "Username changed",
        "voice_deafened": "Deafened or undeafened",
        "voice_joined": "Joined a voice channel",
        "voice_left": "Left a voice channel",
        "voice_moved": "Moved voice channel",
        "voice_muted": "Muted or unmuted",
        "voice_streaming": "Started or stopped streaming",
        "webhooks_updated": "Webhooks updated"
      },
      "events_label": "What to log",
      "fallback_channel": "Fallback Log Channel",
      "fallback_channel_hint": "You can override this for individual categories below.",
      "ignore_description": "Events involving these channels or roles are never logged.",
      "ignore_title": "Ignore Lists",
      "ignored_channels": "Ignored Channels",
      "ignored_channels_hint": "Message events in these channels are skipped.",
      "ignored_roles": "Ignored Roles",
      "ignored_roles_hint": "Members with any of these roles are skipped.",
      "new_account": "Flag new accounts",
      "new_account_hint": "Mark a join when the account is younger than this many days. Set it to 0 to turn the flag off. The join log already shows when the account was made, but during a raid that line is easy to read straight past.",
      "no_channel_warning": "No channel set. This category won't log anything.",
      "pick_channel": "Pick a channel (no default set)",
      "saved": "Logging settings saved and synced to the bot.",
      "subtitle": "Send server events to channels of your choice. Each category can have its own channel.",
      "title": "Server Logging",
      "use_default_channel": "Use default channel"
    },
    "login": {
      "continue_with_discord": "Continue with Discord",
      "feature_audit_trail": "Full audit trail of every action",
      "feature_live_config": "Live config with instant sync to the bot",
      "feature_moderation": "Moderation, cases & escalation ladders",
      "legal_notice": "By signing in you agree to the Terms of Service and the Privacy Policy.",
      "legal_privacy": "Privacy Policy",
      "legal_terms": "Terms of Service",
      "permission_note": "You'll only see servers where you have the Manage Server permission.",
      "subtitle": "The control center for your Discord server.",
      "title": "Welcome to Vex"
    },
    "logs": {
      "after": "After",
      "all_categories": "All activity",
      "all_levels": "All levels",
      "all_people": "Everyone",
      "before": "Before",
      "category": {
        "config": "Settings",
        "infra": "System",
        "moderation": "Moderation",
        "plugin": "Plugins",
        "security": "Security",
        "staff": "Staff"
      },
      "changed_fields": "{count} changed",
      "clear_filters": "Clear filters",
      "empty_description": "When someone changes a setting or acts on a case, it gets recorded here.",
      "empty_filtered_description": "No entries match these filters. Try widening them.",
      "empty_filtered_title": "No matches",
      "empty_title": "Nothing here yet",
      "empty_value": "not set",
      "events_count": "{count} events",
      "field": "Setting",
      "search_placeholder": "Search by person, setting, or event",
      "subtitle": "Who changed what in this server, and when.",
      "system_actor": "Vex",
      "target_prefix": "on",
      "title": "Audit Log"
    },
    "maintenance": {
      "body": "Vex is being updated and the dashboard is briefly unavailable. Your server settings are safe and nothing has been lost. This page reloads by itself as soon as it can reach the server again.",
      "checking": "Checking every few seconds",
      "checking_now": "Checking...",
      "retry": "Try now",
      "title": "Under maintenance"
    },
    "marketplace": {
      "already_published": "Already published as {name}.",
      "blocked": {
        "disabled": "The marketplace is switched off right now.",
        "needs_consent": "This plugin has not been reviewed. Confirm that you want to install it anyway.",
        "rejected": "This version was reviewed and rejected, so it cannot be installed.",
        "removed": "This plugin has been taken down and cannot be installed.",
        "verified_only": "Only verified plugins can be installed right now. This one has not been reviewed yet."
      },
      "capabilities_hint": "Worked out from the source. A plugin can only do what is listed here, and the list may be incomplete if the source hides its calls.",
      "capabilities_title": "What this plugin can do",
      "capability": {
        "channels": "Channels",
        "components": "Components",
        "embed": "Embed",
        "expect": "Assertions (its own tests)",
        "http": "Http",
        "interactions": "Interactions",
        "members": "Members",
        "messages": "Messages",
        "moderation": "Moderation",
        "roles": "Roles",
        "secrets": "Reads its configured secrets",
        "storage": "Storage",
        "unknown": "Unknown (source may hide calls)",
        "util": "Util"
      },
      "category": {
        "community": "Community",
        "economy": "Economy",
        "fun": "Fun",
        "integration": "Integration",
        "logging": "Logging",
        "moderation": "Moderation",
        "other": "Other",
        "utility": "Utility"
      },
      "consent_body": "Nobody has checked this source. It will be able to do everything listed above in your server. Install it only if you trust the author or have read the code yourself.",
      "consent_confirm": "I understand, install it anyway",
      "consent_title": "This plugin has not been reviewed",
      "disabled_body": "A bot operator has closed the marketplace. Plugins you have already installed keep working.",
      "disabled_title": "The marketplace is switched off",
      "field_category": "Category",
      "field_changelog": "What changed",
      "field_description": "Description",
      "field_name": "Name",
      "field_summary": "One-line summary",
      "field_tags": "Tags",
      "field_tags_hint": "Up to 8, comma separated.",
      "flagged_lines": "{count} flagged lines",
      "high_risk_ack": "This was flagged as high risk. Type VERIFY to confirm you have read the source.",
      "install": "Install",
      "installed_disabled_note": "Installed plugins start switched off. Turn it on from the Plugins page when you are ready.",
      "installs": "{count} installs",
      "mine_empty": "You have not published anything yet.",
      "mine_title": "Your published plugins",
      "pending_badge": "Not reviewed",
      "pending_note": "Waiting for review. It can still be installed by anyone who accepts the risk.",
      "problem": {
        "author_bad_status": "A listing can only be published or unlisted.",
        "bad_category": "That is not a marketplace category.",
        "bad_report_reason": "That is not a report reason.",
        "bad_report_status": "That is not a report status.",
        "bad_review_status": "That is not a review status.",
        "bad_status": "That is not a listing status.",
        "bad_tags": "Tags have to be non-empty and different from each other.",
        "description_too_long": "The description has to be {value} characters or fewer.",
        "listing_removed": "This listing was taken down by a bot operator and cannot be changed.",
        "name_too_long": "The name has to be {value} characters or fewer.",
        "needs_acknowledgement": "This version was flagged as high risk. Type {value} to confirm you have read the source.",
        "no_name": "Give the listing a name.",
        "no_plugin": "That plugin does not exist in this server.",
        "no_review": "Your server has not rated this plugin.",
        "no_source": "The plugin has no source to publish.",
        "no_summary": "Write a one-line summary so people know what it does.",
        "no_version": "That version does not exist.",
        "not_author": "Only the author of a listing can publish a new version of it.",
        "not_found": "That plugin listing was not found.",
        "rejection_needs_note": "Say why it was rejected, so the author can fix it.",
        "removal_needs_reason": "Say why the listing was taken down.",
        "source_too_large": "The source has to be under {value} KB.",
        "summary_too_long": "The summary has to be {value} characters or fewer."
      },
      "publish": "Publish to marketplace",
      "publish_hint": "Anyone can install this into their server. Your source is published as-is, and a bot admin reviews it before it gets a verified badge.",
      "publish_title": "Publish this plugin",
      "publish_update": "Publish an update",
      "publish_update_hint": "Publishes the current source as a new version. The verified badge does not carry over: a reviewer has to check the new code before it gets one back.",
      "reason": {
        "broken": "Broken or does not work",
        "inappropriate": "Inappropriate content",
        "malicious": "Malicious or harmful",
        "other": "Something else",
        "spam": "Spam or low effort",
        "stolen": "Published without permission"
      },
      "rejected_badge": "Rejected",
      "rejected_note": "A reviewer rejected this version: {reason}",
      "relist": "List again",
      "removed_note": "Taken down by a bot operator: {reason}",
      "risk": {
        "benign": "Safe",
        "critical": "Critical",
        "elevated": "Elevated",
        "normal": "Normal"
      },
      "risk_score": "Risk score {score}",
      "signal": {
        "assembled_identifier": "A name built by joining strings together",
        "backdoor": "A privileged action behind a hardcoded password or ID",
        "dynamic_dispatch": "Calls built at runtime, which hide what it does",
        "encoded_blob": "A long encoded string that could be a hidden payload",
        "exfiltration": "Reads server data and sends it to an outside address",
        "guild_targeting": "Behaves differently in one specific server",
        "homoglyphs": "Letters that look like other letters",
        "invisible_characters": "Invisible or direction-changing characters in the source",
        "mass_action": "Bans, kicks or deletions inside a loop",
        "minified": "One extremely long line, which defeats line-by-line review",
        "self_concealment": "Deletes messages or touches the audit trail"
      },
      "subtitle": "Plugins published by other servers. Read the source before you install anything.",
      "title": "Plugin marketplace",
      "unlist": "Unlist",
      "unlisted_note": "Unlisted. It stays installable by direct link but is not shown in the marketplace.",
      "verified_badge": "Verified",
      "verified_note": "Reviewed and verified at this exact source.",
      "verified_only_notice": "Only verified plugins can be installed right now.",
      "view_source": "Read the source"
    },
    "memberportal": {
      "appeal_number": "Appeal #{number}",
      "balance": "Balance",
      "balance_hint": "{currency} · claim /daily in Discord",
      "birthday": "Birthday",
      "birthday_not_set": "Not set.",
      "birthday_saved": "Birthday saved 🎂",
      "birthday_set": "Set to {month}/{day}. Update it below.",
      "continue_with_discord": "Continue with Discord",
      "failed": "Failed",
      "footer": "Vex member portal",
      "forbidden": "You don't appear to be a member of this server. Join it first, then come back.",
      "greeting": "Hi, {name} 👋",
      "has_open_ticket": "You have an open ticket. Continue it in Discord.",
      "hide": "Hide",
      "leaderboard": "Leaderboard",
      "level": "Level",
      "level_value": "Lv {level}",
      "loading": "Loading...",
      "login_prompt": "Log in with Discord to view your stats.",
      "login_title": "Your member profile",
      "no_level": "Start chatting to earn XP.",
      "no_messages": "No messages recorded.",
      "no_voice_level": "No voice XP yet. Sit unmuted in a voice channel to start earning.",
      "open": "Open",
      "rank": "Rank #{rank}",
      "rsvp_going": "Going",
      "rsvp_maybe": "Maybe",
      "rsvp_no": "Can't",
      "rsvp_summary": "{going} going · {maybe} maybe",
      "save": "Save",
      "self_assign_roles": "Self-assign roles",
      "staff_note": "Staff: {note}",
      "submit": "Submit",
      "submit_suggestion": "Submit a suggestion",
      "suggestion_number": "Suggestion #{number}",
      "suggestion_placeholder": "What would make this server better?",
      "suggestion_submitted": "Suggestion submitted 💡",
      "support_tickets": "Support tickets",
      "ticket_opened": "Ticket opened. Check Discord.",
      "ticket_subject_default": "Support ticket",
      "ticket_subject_placeholder": "What do you need help with? (optional)",
      "transcript": "Transcript",
      "upcoming_events": "Upcoming events",
      "voice_level": "Voice level",
      "votes": "👍 {up} · 👎 {down}",
      "xp_progress": "{into}/{needed} XP · {total} total",
      "you": "you",
      "your_rank": "You're #{rank}",
      "your_record": "Your moderation record",
      "your_submissions": "Your submissions"
    },
    "moderation": {
      "action": "Action",
      "actions": {
        "ban": "Ban",
        "jail": "Jail",
        "kick": "Kick",
        "preset": "Punishment preset",
        "timeout": "Timeout"
      },
      "add_first_rung": "Add Your First Rung",
      "add_rung": "Add Rung",
      "admin_roles": "Admin Roles",
      "channels_description": "Where case embeds are posted, and which role is used for jailing.",
      "channels_title": "Channels & Jail",
      "confirmation_description": "How long Vex's own reply to a kick, ban, timeout, or unban stays in the channel.",
      "confirmation_hint": "Set this to 0 to keep them. Warn, note, and punish replies already show only to the moderator, so they are not affected.",
      "confirmation_title": "Confirmation Messages",
      "days": "days",
      "decay_description": "Old warnings stop counting towards escalation.",
      "decay_hint": "Warnings older than this stop counting. Set to 0 so they never decay.",
      "decay_title": "Warning Decay",
      "dm": {
        "ban": "Ban",
        "ban_desc": "Notify on a ban",
        "jail": "Jail",
        "jail_desc": "Notify when jailed",
        "kick": "Kick",
        "kick_desc": "Notify on a kick",
        "softban": "Softban",
        "softban_desc": "Notify on a softban",
        "timeout": "Timeout",
        "timeout_desc": "Notify on a timeout",
        "unban": "Unban",
        "unban_desc": "Notify when unbanned",
        "unjail": "Unjail",
        "unjail_desc": "Notify when released",
        "warn": "Warn",
        "warn_desc": "Notify on a warning"
      },
      "dm_description": "Send members a DM when these actions are taken against them.",
      "dm_title": "DM the Member",
      "duration": "Duration",
      "jail_role": "Jail Role",
      "jail_role_hint": "Applied while a member is jailed. Their roles are given back on release.",
      "ladder_description": "Automatically punish members as they collect warnings.",
      "ladder_title": "Escalation Ladder",
      "matrix_add_role": "Add a role...",
      "matrix_all": "All",
      "matrix_empty_description": "Add a role below to grant it a limited set of commands.",
      "matrix_empty_title": "No custom role permissions yet",
      "matrix_granted": "{count} granted",
      "matrix_none": "None",
      "matrix_note_body": "Use this list to give a limited role, such as trial staff, only the commands you pick.",
      "matrix_note_lead": "Moderator and admin roles can run every command.",
      "matrix_note_shield": "marks the commands that only admins can run.",
      "matrix_remove_role": "Remove role",
      "matrix_unknown_role": "Role {id}",
      "mod_log_channel": "Mod Log Channel",
      "mod_log_channel_hint": "Every case is posted here with a jump link.",
      "mod_roles": "Moderator Roles",
      "no_rungs_hint": "Add a rung to auto-punish repeat offenders, e.g. 3 warnings within 7 days → 1 hour timeout.",
      "no_rungs_title": "No escalation rules yet",
      "permissions_description": "Give limited command sets to specific roles, for example trial staff.",
      "permissions_title": "Staff Permissions",
      "preset_hint": "This rung hands off to the preset, so repeat offences keep escalating on the preset's own ladder instead of applying one fixed action forever.",
      "preset_label": "Punishment preset",
      "remove_rung": "Remove Rung",
      "saved": "Moderation settings saved and synced to the bot.",
      "seconds": "seconds",
      "show_record": "Show members their own moderation record",
      "show_record_hint": "Members can view their own warnings, timeouts, kicks, and bans on the portal. The moderator's identity is never shown. Turn this off to hide it completely.",
      "staff_roles_description": "Who can run moderation commands. Admins can also delete cases.",
      "staff_roles_title": "Staff Roles",
      "subtitle": "Staff roles, escalation, and how Vex handles actions.",
      "summary": {
        "ever": "ever",
        "for_duration": " for {duration}",
        "warns_one": "{count} warning",
        "warns_other": "{count} warnings",
        "within_days": "within {days}d"
      },
      "tab_notifications": "Notifications",
      "tab_permissions": "Permissions",
      "tab_staff": "Roles & Channels",
      "tab_warnings": "Warnings",
      "title": "Moderation",
      "transparency_description": "What members can see about themselves on the web portal.",
      "transparency_title": "Member Transparency",
      "unit_days": "days",
      "unit_hours": "hours",
      "unit_minutes": "minutes",
      "warnings": "Warnings",
      "within_days": "Within (days, 0 for any)"
    },
    "modquotas": {
      "actions": "{count} actions",
      "automod_note": "Cases opened by automod are not counted. A rule firing four hundred times is not a person acting above the norm.",
      "description": "How moderator activity is spread across the team, and who is a long way from the middle.",
      "empty_body": "No moderator has opened a case in this window.",
      "empty_title": "No Activity",
      "flagged": "Well above the team median",
      "hide_types": "Hide",
      "inconclusive": "There are too few moderators to say whether anybody is unusual.",
      "no_roster_body": "The bot publishes who is staff, and it has not done so for this server yet. Without that list the comparison would only count moderators who happened to act, which quietly hides the quiet ones.",
      "no_roster_title": "Roster Not Published Yet",
      "no_types": "This moderator has not opened a case in this window.",
      "norm": "Team median",
      "not_a_target_note": "This is not a productivity target and nothing happens automatically. A flag means somebody is a long way from the rest of the team, which is a reason to go and ask why, not a finding on its own.",
      "share": "{percent}% of the team's total",
      "share_note": "Taking 60 of the team's 70 actions is a different conversation from taking 60 of 600, which is why the share is shown next to the count.",
      "show_types": "What kind",
      "team_size": "Moderators counted",
      "title": "Mod Action Quotas",
      "total": "Actions in window",
      "window": "Last {days} days"
    },
    "music": {
      "allowed_channels": "Allowed channels",
      "allowed_channels_hint": "Vex only joins these voice channels. If empty, Vex joins any voice channel it has access to.",
      "channels_description": "Where Vex is allowed to play.",
      "channels_title": "Voice channels",
      "clear_on_leave": "Drop tracks when the person who added them leaves",
      "clear_on_leave_hint": "When someone leaves the voice channel, the tracks they added are removed from the queue. The track that is playing is not touched.",
      "control_description": "A DJ can always control the player. Without a DJ role, everyone in the voice channel can, and skipping someone else's track goes to a vote either way.",
      "control_title": "Who can control the player",
      "default_volume": "Default volume",
      "default_volume_hint": "The volume a player starts at, as a percentage. Anything above 100 gets louder but also rougher.",
      "dj_role": "DJ role",
      "dj_role_hint": "Members with this role control the player, even when other people are listening. Leave this empty to let everyone in the voice channel control it.",
      "leave_when_empty": "Leave when the channel empties",
      "leave_when_empty_hint": "Vex leaves the voice channel once the last person has left it, rather than playing to nobody.",
      "live_added_by": "Added by {user}",
      "live_backend_down": "The music backend is unreachable, so Vex cannot play anything. Check that the Lavalink service is running.",
      "live_bot_offline": "Vex is offline, so there is no live queue to show.",
      "live_channel": "In {channel}",
      "live_clear": "Clear queue",
      "live_cleared": "Cleared the queue.",
      "live_description": "What Vex is playing in this server right now. This reads straight from the bot, so it is empty when nothing is playing.",
      "live_no_player": "Vex is not playing anything right now.",
      "live_now_playing": "Now playing",
      "live_paused": "Paused",
      "live_queue_count": "{count} tracks waiting · {duration} left",
      "live_refresh": "Refresh",
      "live_remove": "Remove",
      "live_removed": "Removed that track from the queue.",
      "live_skip": "Skip",
      "live_skipped": "Skipped the current track.",
      "live_stop": "Stop",
      "live_stopped": "Stopped the player.",
      "live_title": "Live queue",
      "live_up_next": "Up next",
      "max_queue": "Queue limit",
      "max_queue_hint": "How many tracks may wait in the queue at once. A playlist that runs past this is added up to the limit.",
      "permission_note": "Vex needs the Connect and Speak permissions for every voice channel it plays in.",
      "playback_description": "The defaults every new player starts with in this server.",
      "playback_title": "Playback",
      "saved": "Music settings saved and synced to the bot.",
      "skip_ratio": "Votes to skip",
      "skip_ratio_example": "With {listeners} people listening, that is {needed} votes.",
      "skip_ratio_hint": "The share of the listeners who have to vote before a track is skipped. Vex rounds up, and someone can always skip a track they added themselves.",
      "subtitle": "Play music in voice channels, and set who is allowed to control the player.",
      "title": "Music"
    },
    "nav": {
      "all_features": "All features",
      "clear_search": "Clear search",
      "no_results": "Nothing matches \"{query}\".",
      "pin": "Pin to the top",
      "pin_named": "Pin {name} to the top of the sidebar",
      "pinned": "Pinned",
      "search": "Search",
      "settings_results": "Settings",
      "simple_group": {
        "activity": "Activity",
        "fun": "Fun",
        "insights": "Insights",
        "safety": "Safety",
        "settings": "Settings",
        "support": "Support",
        "welcome": "Welcome"
      },
      "tier_free": "Free",
      "tier_pro": "Vex Premium",
      "tier_required_pro": "Needs Vex Premium",
      "tier_required_ultimate": "Needs Vex Premium",
      "tier_ultimate": "Vex Premium",
      "unpin": "Unpin",
      "unpin_named": "Unpin {name} from the top of the sidebar",
      "view_advanced": "Advanced",
      "view_label": "Dashboard view",
      "view_simple": "Simple"
    },
    "nicknames": {
      "behaviour_description": "What Vex does when somebody changes a forced nickname.",
      "behaviour_title": "Behavior",
      "held_at": "Held at {nickname}",
      "limit": "Corrections per minute",
      "limit_hint": "How many times a minute Vex sets one member's name back before it stops trying until the next minute. This stops a member who renames in a loop from turning into an endless fight. The forced nickname still applies the next time they rename or rejoin.",
      "locked_description": "Releasing a member lets them change their own name again. The name they are wearing is left as it is.",
      "locked_empty": "Nobody has a forced nickname",
      "locked_empty_hint": "Moderators set one in Discord with /nickname force.",
      "locked_title": "Members held at a nickname",
      "note": "Vex cannot rename the server owner, and it cannot rename anyone whose highest role sits above its own. Discord does not allow it. Forcing a nickname records a case, but the corrections afterwards do not.",
      "notify": "Tell the member",
      "notify_hint": "Send a DM explaining that staff have set their nickname, and that they cannot change it until it is released.",
      "release": "Release",
      "released": "That member can change their own nickname again.",
      "saved": "Forced nickname settings saved and synced to the bot.",
      "set_by": "Set by",
      "subtitle": "A nickname a moderator has pinned to a member. Vex sets it back whenever they change it. Moderators set one in Discord with the /nickname force command.",
      "title": "Forced Nicknames"
    },
    "notifications": {
      "body_hint": "This is delivered as a DM embed. Members with DMs closed will not receive it.",
      "body_placeholder": "We'll be down from 2 to 3am UTC for an upgrade. Nothing you need to do.",
      "compose": "Compose",
      "empty_description": "Notifications you send appear here with how many members received them.",
      "empty_title": "Nothing sent yet",
      "error": {
        "bad_target": "Pick a member or a role to notify.",
        "body_too_long": "The message is too long. Discord embeds hold 2000 characters.",
        "no_body": "A notification needs a message.",
        "no_title": "A notification needs a title.",
        "title_too_long": "The title is too long."
      },
      "field_body": "Message",
      "field_title": "Title",
      "history": "Sent",
      "queued": "Notification is sending. Delivery counts will appear in the history shortly.",
      "send": "Send notification",
      "send_failed": "That notification could not be sent.",
      "sending": "Sending...",
      "status_delivered": "Reached {count}",
      "status_failed_suffix": ", {count} had DMs closed",
      "status_pending": "Sending...",
      "subtitle": "Send a direct message to a member or everyone with a role.",
      "target": "Send to",
      "target_hint": "A single member, or everyone with a role. Role sends go out one DM at a time.",
      "target_role": "Role",
      "target_user": "Member",
      "title": "Notifications",
      "title_placeholder": "Server maintenance tonight",
      "to_role": "To role {role}",
      "user_placeholder": "User ID (turn on Developer Mode, right click, Copy User ID)"
    },
    "ops": {
      "confirm": {
        "confirm": "Confirm",
        "impact": "What this will do",
        "request": "Request approval",
        "two_person": "This one needs a second administrator to approve it before it runs.",
        "type_to_continue": "Type {phrase} to continue."
      },
      "copy_id": "Copy ID",
      "filter": {
        "clear": "Clear the filter",
        "placeholder": "Filter"
      },
      "mode_polling": "Live updates are unavailable, so this is refreshing on a timer.",
      "needs_capability": "Needs {capability}",
      "next": "Next",
      "page_of": "Page {page} of {pages} · {total} rows",
      "palette": {
        "error_hint": "Error",
        "guild_hint": "Server",
        "nothing": "Nothing matches that.",
        "open_error": "Find error {id}",
        "open_guild": "Open server {id}",
        "open_user": "Look up user {id}",
        "placeholder": "Jump to a section, a server ID, a user ID or an error reference",
        "user_hint": "User"
      },
      "previous": "Previous",
      "stale": "Showing the last data that loaded. The refresh failed.",
      "stale_since": "Showing data from {when}. The refresh failed.",
      "table": {
        "empty_description": "Nothing matched. Try widening the filter.",
        "empty_title": "Nothing to show",
        "export": "Export CSV"
      },
      "tier": {
        "administrator": "Administrator",
        "operator": "Operator",
        "trust_safety": "Trust and Safety",
        "viewer": "Viewer"
      }
    },
    "opsmarketplace": {
      "ack_placeholder": "VERIFY",
      "ack_wrong": "Type VERIFY exactly to confirm.",
      "close": "Close",
      "description": "Review published plugins, and switch the marketplace off if it needs to stop.",
      "enabled_hint": "Turning this off stops browsing, publishing and installing. Plugins already installed keep running.",
      "enabled_label": "Marketplace open",
      "findings": "What the analyser found",
      "no_findings": "Nothing was flagged. Read the source anyway: that is what a review is.",
      "queue_empty": "Nothing is waiting for review.",
      "queue_hint": "Ordered by what the plugin can do, not by age. Read the ones that can ban members first.",
      "queue_title": "Waiting for review",
      "reject": "Reject",
      "reject_description": "The author is shown your reason, so write something they can act on. They can publish a new version afterwards.",
      "reject_reason": "What needs to change?",
      "reject_title": "Reject this version of {name}?",
      "reports_empty": "No open reports.",
      "reports_title": "Reports",
      "source_of": "{name} v{version}",
      "takedown": "Take down",
      "takedown_description": "The plugin is removed from every server running it, and the listing stops being installable. Servers are not told why, so put the reason on the record here.",
      "takedown_done": "{name} was removed from {count} servers. Those servers keep their stored plugin data.",
      "takedown_impact": "This will remove the plugin from {count} servers.",
      "takedown_reason": "Why is this being removed?",
      "takedown_title": "Remove {name} from the marketplace?",
      "title": "Plugin marketplace",
      "verified_only_hint": "Servers can still browse everything, but can only install versions an operator has reviewed.",
      "verified_only_label": "Only allow verified plugins",
      "verify": "Verify"
    },
    "overview": {
      "cases_by_type": "Cases by Type",
      "empty_description": "Moderation actions taken in Discord will appear here.",
      "empty_title": "No Cases Yet",
      "module_afk": "AFK",
      "module_anniversaries": "Anniversaries",
      "module_anti_nuke": "Anti-Nuke",
      "module_appeals": "Appeals",
      "module_automod": "Automod",
      "module_birthdays": "Birthdays",
      "module_boosts": "Boosts",
      "module_burnout": "Burnout Monitor",
      "module_counting": "Counting",
      "module_economy": "Economy",
      "module_invites": "Invite Tracking",
      "module_kudos": "Kudos",
      "module_leveling": "Leveling",
      "module_loa": "Leave of Absence",
      "module_logging": "Logging",
      "module_moderation": "Moderation",
      "module_polls": "Polls",
      "module_raid": "Raid Guard",
      "module_slowmode": "Slowmode",
      "module_social": "Social Notifications",
      "module_staff_actions": "Staff Actions",
      "module_staff_feedback": "Staff Feedback",
      "module_staff_inactivity": "Staff Inactivity",
      "module_staff_of_the_month": "Staff of the Month",
      "module_starboard": "Starboard",
      "module_sticky": "Sticky",
      "module_suggestions": "Suggestions",
      "module_tickets": "Tickets",
      "module_welcome": "Welcome",
      "modules": "Modules",
      "modules_on": "of {total} on",
      "modules_summary": "/{total} modules active · {cases} cases on record",
      "modules_summary_short": " of {total} modules are on.",
      "no_cases_yet": "No cases yet.",
      "recent_activity": "Recent Activity",
      "stat_active": "Active",
      "stat_last_7_days": "Last 7 Days",
      "stat_total_cases": "Total Cases",
      "tagline": "Your server at a glance",
      "title": "Overview",
      "view_all": "View All"
    },
    "pause": {
      "description": "Switches off every Vex command for everyone except the people who manage the bot here. Logging, automod and scheduled tasks keep running.",
      "description_paused": "Vex is switched off. Only people with dashboard access can use its commands right now. Logging, automod and scheduled tasks are still running.",
      "note_hint": "Shown to anyone who tries to run a command while Vex is off. Leave it empty to say nothing.",
      "note_label": "Message shown to members",
      "note_placeholder": "Back in an hour",
      "title": "Turn Vex off in this server",
      "toast_failed": "That change could not be saved.",
      "toast_paused": "Vex is now switched off in this server.",
      "toast_resumed": "Vex is switched back on."
    },
    "permissions": {
      "analytics_delete": "Delete collected analytics data",
      "analytics_export": "Export analytics data",
      "analytics_manage": "Manage analytics collection, reports and alerts",
      "analytics_members": "View analytics about individual members",
      "analytics_support": "View moderation and ticket analytics",
      "analytics_view": "View analytics",
      "appeals_decide": "Approve and deny appeals",
      "appeals_view": "View appeals",
      "applications_vote": "Vote on staff applications",
      "audit_view": "View the audit log",
      "cases_manage": "Edit and delete cases",
      "cases_view": "View cases",
      "config_manage": "Change server settings",
      "config_transfer": "Export and import server settings",
      "config_view": "View server settings",
      "content_manage": "Change embeds, auto responses, and sticky messages",
      "content_view": "View embeds, auto responses, and sticky messages",
      "economy_manage": "Change the economy and the shop",
      "economy_view": "View the economy and the shop",
      "events_decide": "Approve or deny event ideas",
      "events_submit": "Submit event ideas",
      "feedback_submit": "Give staff feedback",
      "giveaways_create": "Start giveaways",
      "giveaways_draw": "End, cancel and reroll giveaways",
      "giveaways_edit": "Edit and pause giveaways",
      "giveaways_view": "See giveaways",
      "insights_view": "View insights and reports",
      "kudos_give": "Give kudos",
      "members_moderate": "Moderate members from the dashboard",
      "music_control": "Control the music player",
      "music_view": "View the music queue",
      "notifications_send": "Send notifications",
      "plugins_manage": "Write and run plugins",
      "plugins_view": "View plugins",
      "staff_manage": "Manage staff records, strikes, and leave",
      "staff_view": "View staff records",
      "suggestions_decide": "Approve and deny suggestions",
      "suggestions_manage": "Configure suggestion boards",
      "suggestions_view": "View suggestions",
      "tickets_manage": "Reply to and close tickets",
      "tickets_view": "View tickets",
      "verification_manage": "Approve and deny verifications, verify members by hand, and erase their verification data.",
      "verification_view": "See verification records, alt linkages and history. Includes hashed network data about members."
    },
    "playground": {
      "add_member": "Add someone",
      "and_deleted": " and delete the message",
      "automod_action": "Automod would {action} this member{deleted}.",
      "automod_exempt": "This rule matched, but the member's {reason} is exempt from automod, so nothing happens.",
      "autoresponder": "Auto response",
      "bot": "Bot",
      "channel_placeholder": "Pick a channel to test in",
      "composer_label": "The message to test",
      "composer_placeholder": "Message #{channel}",
      "description": "A fake channel that runs your real rules. Type a message and see what Vex would do to it. Nothing here touches your server.",
      "embed_reply": "This rule answers with a saved embed.",
      "empty_description": "Automod, autoresponder rules and your plugins all run against what you type. No case is created, no message is sent, and no plugin data is changed.",
      "empty_title": "Send a message to see what happens to it",
      "engine_automod": "Automod",
      "engine_autoresponder": "Auto responder",
      "engine_plugins": "Plugins",
      "engines_description": "Turn one off to see which of them is responsible for something.",
      "engines_title": "What to run",
      "member_default": "Member {n}",
      "member_name": "Display name",
      "member_roles": "Roles",
      "members_description": "Give somebody a role to test a rule that treats them differently. Plugins can read these with roles.has and members.get.",
      "members_title": "Who is in the channel",
      "not_deleted": ", leaving the message up",
      "not_real": "Nothing here is real",
      "plugin_ran": "{name} ran {entry} in {ms}ms and made {calls} calls. Show them.",
      "remove_member": "Remove this member",
      "reset": "Clear the channel",
      "running": "Working out what happens...",
      "send": "Send",
      "send_as": "Send as",
      "send_failed": "That message could not be run.",
      "storage_clear": "Empty the scratch storage",
      "storage_description": "A scratch copy that lives in this page only. Your real plugin data is never read and never written.",
      "storage_empty": "Nothing stored yet. A plugin that calls storage.set will show up here.",
      "storage_less": "Show fewer",
      "storage_more": "Show {count} more",
      "storage_title": "Plugin storage",
      "stubbed": "Placeholder",
      "title": "Playground"
    },
    "plugindocs": {
      "api": {
        "builtins_body": "Two small modules are importable by name. They run inside the sandbox and cost nothing. Either form of import works, and a built-in module always wins over a plugin of the same name. Modules and imports covers every import form in full.",
        "builtins_title": "Built-in modules",
        "channels": {
          "body": "Reads and manages the channels of this server and no other. channels.get returns None for any channel that is not here, so a channel ID from another server resolves to nothing. Creating and editing need the Manage Channels permission."
        },
        "components": {
          "body": "Builds buttons, select menus, and modal fields. Nothing here touches Discord. See Embeds and components."
        },
        "cost": {
          "action": "1 action",
          "action_note": "Counts against the {actions} actions one run is allowed.",
          "free": "Free",
          "free_note": "Built inside the sandbox. It never reaches Discord and never counts against a limit.",
          "manage": "Management",
          "manage_note": "Counts against the {actions} actions and against the {manage} server-management operations one run is allowed.",
          "read": "Read",
          "read_note": "Reads state and does not count against the action limit."
        },
        "cost_heading": "Cost",
        "embed": {
          "body": "Builds an embed. Nothing here touches Discord. See Embeds and components."
        },
        "http": {
          "body": "Fetches a public URL. See Outbound HTTP under Limits and the sandbox."
        },
        "interactions": {
          "body": "Answers a member who used one of your components. These three only work in on_interaction, on_select, and on_modal_submit. Called anywhere else, they raise an error and end the run."
        },
        "intro": "Each namespace is already there when your code runs. You never import one. Calls are listed with what they cost, because a single run only gets a fixed number of actions.",
        "member_body": "members.get returns a member you can act on directly. Each method below is the same action as the matching namespace call, already aimed at that member. For example m.kick() is moderation.kick for the member you fetched.",
        "member_title": "Member methods",
        "members": {
          "body": "Reads a member's profile. The result is a dict, so read it with brackets. roles holds role names and leaves out @everyone, while role_ids holds every role ID and includes @everyone."
        },
        "messages": {
          "body": "Posts messages into the server. messages.reply only works in on_message and on_message_edit, because those are the only events with a message to reply to. Everywhere else, send to a channel by ID with messages.send. Message text is cut at 2000 characters, which is Discord's limit."
        },
        "moderation": {
          "body": "Warns, times out, kicks, and bans. Each of these writes a case into the same numbered case list your moderators use, with no moderator on it and a marker naming the plugin. Vex refuses to act on the server owner, and on anyone whose highest role sits at or above its own. A timeout is capped at 28 days, which is Discord's limit, and the reason is cut at 400 characters. warn has no effect in Discord beyond the case it writes."
        },
        "roles": {
          "body": "Adds and removes roles, and creates and deletes them. Vex needs the Manage Roles permission, and it can only touch roles below its own highest role. A role above Vex, and a role Discord manages for an integration, are both refused. Adding a role to someone who is not in the server does nothing."
        },
        "storage": {
          "body": "A key-value store for this server that survives restarts. See Storage under Limits and the sandbox."
        },
        "toplevel_body": "These are available directly, with no namespace in front. log writes a line you can read in the plugin's run history, which is the main way to see what your code did.",
        "toplevel_title": "Top-level helpers",
        "util": {
          "body": "Turns values into JSON text and back. Useful for reading an http.get body, and for keeping a structure in one storage key."
        }
      },
      "commands": {
        "arg_list": "The arguments split on spaces, as a list. event.arg_list[0] is the first word. Use it when a command takes several arguments.",
        "fields_title": "The command event",
        "prefix_body": "Commands use the same prefix as the built-in prefix commands. You can change it under Settings. The default is a question mark.",
        "prefix_body_2": "A command runs whenever the plugin is enabled. It does not depend on the prefix-commands module toggle, which only controls running the built-in slash commands with a prefix.",
        "prefix_title": "The prefix",
        "reserved_body": "A command can never use the name of a built-in command. Typing ?ban always runs the moderation command, never a plugin. A plugin function named command_ban simply never runs.",
        "reserved_body_2": "This is why a plugin cannot quietly take over a command someone relies on. If you pick a name that is already a built-in, your command will not fire, so pick a different one.",
        "reserved_title": "Built-in names are protected",
        "test_body": "The Test tab picks up every command you have written and lets you run one against a mock event before you enable the plugin. Pick your command from the trigger list, fill in the args, and run it.",
        "test_title": "Testing a command",
        "what_body": "A command is a function named command_<name>. A member runs it by typing the server's prefix and the name. If the prefix is a question mark, the function command_roll runs when someone types ?roll.",
        "what_body_2": "It is the same as writing an event handler like on_message, except it only runs when its name is called. Everything a plugin can normally do works inside a command: replies, embeds, buttons, storage, and moderation actions.",
        "what_title": "What a command is"
      },
      "dashboard_link": "Open dashboard",
      "embeds": {
        "comp_limits_title": "Component limits",
        "components_body": "Components go on a message with components=. A message holds up to 5 rows. A row holds up to 5 buttons, or one select menu on its own. You can also hand components= a flat list of buttons and Vex packs them into rows for you.",
        "components_body_2": "A button needs a label, an emoji, or both. Its style is one of primary, secondary, success, danger, and link, and it is secondary when you do not say. Every option in one select menu needs its own value, and an option's value falls back to its label when you leave it out.",
        "components_title": "Buttons and menus",
        "custom_id_body": "Every button and menu needs a custom_id. That is the name your handler reads back off event.custom_id. Use letters, numbers, and the characters _, - and . in it, up to 64 characters. A colon is not allowed.",
        "custom_id_body_2": "Vex puts your plugin's own id in front of the id Discord sees. Two plugins can both name a button confirm, and neither one can be driven through the other's button, because the id Discord hands back is checked against what Vex stored when the message went out and against the server the click came from.",
        "custom_id_title": "custom_id",
        "embed_limits_title": "Embed limits",
        "limit": {
          "author": "Author name",
          "buttons": "Buttons per row",
          "color": "Color",
          "custom_id": "Your part of a custom_id",
          "description": "Embed description",
          "field_name": "Field name",
          "field_value": "Field value",
          "fields": "Fields per embed",
          "footer": "Footer text",
          "label": "Button and option label",
          "modal_fields": "Fields per modal",
          "modal_title": "Modal title",
          "modal_value": "Text read from one field",
          "option_description": "Option description",
          "option_value": "Option value",
          "options": "Options per select menu",
          "placeholder": "Placeholder text",
          "rows": "Rows per message",
          "select_row": "Select menus per row",
          "title": "Embed title",
          "total": "All embed text added up",
          "url": "Any URL in an embed"
        },
        "limit_col_value": "Value",
        "limit_col_what": "Limit",
        "link_body": "A link button is the exception. Give it url= instead of custom_id=, and clicking it opens the page rather than running your plugin. It never fires on_interaction, and passing both url= and custom_id= is an error.",
        "link_title": "Link buttons",
        "modal_body": "interactions.send_modal opens a form on top of Discord. Discord only accepts a modal as the very first answer to a click, so call it early in on_interaction, before anything slow and before interactions.reply or interactions.update.",
        "modal_body_2": "Vex answers the click for you {grace} seconds in if your plugin has not asked for a modal by then. That is what stops a slow plugin leaving the member looking at a failed interaction, and it means a modal asked for later gets a clear error instead of silently doing nothing. A modal has a title of up to 45 characters and up to 5 fields. Each field's custom_id is the key you read out of event.fields in on_modal_submit.",
        "modal_title": "Modals",
        "model_body": "Starlark has no objects, so an embed is a plain dict, and every embed helper returns a new dict instead of changing the one you handed it. You have to keep the result. Write e = embed.field(e, ...) rather than embed.field(e, ...) on its own line. Components work the same way.",
        "model_body_2": "This is not a style preference. A value that arrived from another plugin is frozen, and changing one in place would fail.",
        "model_title": "How the builders work",
        "persistence_body": "Vex records which plugin owns each component as the message goes out, so a button still works after a restart, days later. If you disable or delete the plugin, or rename the custom_id, the old button tells whoever clicks it that it is not wired to anything any more.",
        "persistence_title": "Buttons outlive the run",
        "unit": {
          "chars": "{n} characters",
          "color": "0 to 0xFFFFFF",
          "count": "{n}",
          "select_row": "1, on its own row"
        },
        "validate_body": "Vex checks the finished embed against Discord's limits before it sends anything. Breaking one raises an error that names the call, the limit, and the value you gave it, and the run ends there. An embed with nothing visible in it is refused as well, because Discord will not render it. A color on its own does not count as visible.",
        "validate_title": "What gets checked"
      },
      "examples": {
        "automod": {
          "body": "The moderation broker. The warn writes a numbered case that your moderators see in the dashboard, and the returned case number goes straight into the reply."
        },
        "autoresponder": {
          "body": "Constants at the top of the file, a dict lookup, and returning early once you have matched. Note that it returns after the first hit rather than replying once per keyword."
        },
        "autorole": {
          "body": "Role assignment, plus the check that saves you an action. roles.has is a read and costs nothing, so testing it first means the write only happens when it is needed."
        },
        "blank": {
          "body": "The smallest thing that works. One handler, one condition, one reply."
        },
        "blank_name": "Blank",
        "buttons": {
          "body": "Embeds, buttons, a modal, and the three interaction handlers. The modal is asked for first thing in on_interaction, because Discord only takes a modal as the first answer to a click. Nothing carries over between the run that posted the panel and the run that handles a click, which is why the choice goes into storage."
        },
        "counter": {
          "body": "Storage as a counter. Read with a default, write the new value back, and act on a milestone. The key includes the member's ID, which is what keeps one counter per member."
        },
        "greeter": {
          "body": "A trigger with no channel in its event. on_member_join does not tell you where to post, so the channel ID is a constant you set yourself."
        },
        "heartbeat": {
          "body": "The timer trigger. There is no member and no channel here, so it logs instead. Set the interval in the Settings tab or nothing will fire."
        },
        "intro": "Each of these is a whole plugin, and each one is offered as a template when you create a plugin from the Plugins page. Copy one, change the parts that are yours, and test it before you enable it.",
        "linkfilter": {
          "body": "Reading a member with members.get. You read the fields with a dot, and it checks for None first because a member can be gone by the time you look them up. The member also carries methods that act on that person, such as m.kick() and m.timeout(60)."
        },
        "shows": "What it shows",
        "webhookfetch": {
          "body": "The http broker. It branches on r[\"ok\"] rather than assuming the fetch worked, and parses the body with util.json_decode. Remember that http.get always reports a failure in the Test tab."
        }
      },
      "eyebrow": "Plugins",
      "limits": {
        "attachments_body": "Every message event carries an attachments list. It is always there, and it is empty when the message had no uploads, so a loop over it never needs guarding.",
        "attachments_body_2": "Each entry tells you what kind of file it is. A GIF counts as an image as well as a gif, because a filter written for images is nearly always meant to catch gifs too. Use is_gif when you need to tell them apart. Anything Vex cannot identify has a kind of file, rather than being guessed at.",
        "attachments_body_3": "A gif posted from Tenor or Giphy is a link in the message text, not an upload, so it does not appear here. Look at event.content for those.",
        "attachments_title": "Attachments",
        "cannot": {
          "escape": {
            "body": "There is no eval, no exec, and no getattr, and dunder attributes are rejected.",
            "label": "Get at the interpreter"
          },
          "files": {
            "body": "There is no way to read or write a file. open() is not a name that exists in the sandbox.",
            "label": "Touch the disk"
          },
          "hierarchy": {
            "body": "Role changes and moderation actions are refused when the target is the server owner, or when their highest role sits at or above Vex's own. Vex still needs the matching Discord permission for each action.",
            "label": "Outrank the bot"
          },
          "imports": {
            "body": "load() and import reach two things and nothing else: the built-in modules random and time, and other plugins in this same server, by their slug. Importing os or sys is an error, and the real Python module behind random is never exposed.",
            "label": "Import Python"
          },
          "other_plugins": {
            "body": "A click is only routed to a plugin when the stored owner of that component agrees with the id Discord sent and with the server the click came from.",
            "label": "Answer for another plugin"
          },
          "other_servers": {
            "body": "Every call is scoped to the server the plugin belongs to, in the bot's own code, before it reaches Discord. An ID from a server you did not install this plugin in resolves to nothing.",
            "label": "Reach another server"
          },
          "secrets": {
            "body": "The sandbox process is started with almost no environment. The bot's token, the database URL, and the Redis URL are not present in it, so code running there cannot read them even if it got past the language.",
            "label": "Read the bot's secrets"
          }
        },
        "cannot_title": "What a plugin cannot do",
        "col_limit": "Limit",
        "col_value": "Value",
        "concurrency_body": "Vex runs at most {sandboxes} sandboxes at a time across every server it is in. A run that arrives while all of them are busy waits its turn, and it still has to finish inside its own {wall} seconds once it starts.",
        "http_body": "http.get is the only way out to the internet, and it is a plain GET with no headers you control. Vex resolves the host first and refuses the request when any address it resolves to is private, loopback, link-local, reserved, multicast, or unspecified. That is what stops a plugin reaching internal services or a cloud metadata endpoint. Redirects are refused too, because a redirect could point at a host the first check never saw.",
        "http_body_2": "The request times out after {timeout} seconds and the body is cut at {bytes} KB. Only http:// and https:// URLs are accepted. The call never raises. You get back a dict with ok, status, body, and error, and you branch on it.",
        "http_title": "Outbound HTTP",
        "row": {
          "actions": {
            "label": "Actions",
            "note": "Anything that changes something: a send, a role change, a moderation action, a storage write, an http.get.",
            "value": "{n} per run"
          },
          "cpu": {
            "label": "CPU time",
            "note": "Enforced by the operating system, not by Vex.",
            "value": "{n} seconds"
          },
          "depth": {
            "label": "Import depth",
            "note": "How far a chain of plugins importing plugins may go before it is refused.",
            "value": "{n}"
          },
          "manage": {
            "label": "Server management",
            "note": "Creating, editing, or deleting a channel or a role. Each one also counts as an action.",
            "value": "{n} per run"
          },
          "memory": {
            "label": "Memory",
            "note": "The address space of the sandbox process.",
            "value": "{n} MB"
          },
          "modules": {
            "label": "Imported plugins",
            "note": "How many other plugins one run may load, in total.",
            "value": "{n} per run"
          },
          "source": {
            "label": "Source length",
            "note": "Per plugin, and per imported plugin.",
            "value": "{n} characters"
          },
          "wall": {
            "label": "Wall clock",
            "note": "The whole run, including the time Discord takes to answer.",
            "value": "{n} seconds"
          }
        },
        "run_body": "These are per execution, and the operating system enforces the first three rather than trusting the plugin to behave. Going over one ends the run and records it. Which limit stopped it is the run's status: limit for CPU or memory, and timeout for the clock.",
        "run_title": "What one run gets",
        "server_body": "One server gets {runs} plugin runs per minute across all of its plugins together. A run that would go over that is skipped rather than queued.",
        "server_body_2": "Separately, one member can use one plugin's buttons, menus, and modals {clicks} times a minute. That limit exists because a button is a trigger that anyone who can see the message may pull as fast as they like. If Vex cannot reach Redis to count the clicks, it refuses the click rather than run without a limit in place.",
        "server_title": "How often a plugin can run",
        "status": {
          "error": "Your code raised, or a call was refused. The message and the line are in the Runs tab.",
          "limit": "The operating system stopped the process for using too much CPU or too much memory.",
          "ok": "The handler ran to the end. It may still have done nothing, which is fine.",
          "timeout": "The run was still going after its wall-clock budget. Usually a loop over too much data."
        },
        "status_title": "Run statuses",
        "storage_body": "storage.get, storage.set, and storage.delete read and write a table in the database, so what you store survives restarts. Everything a plugin stores goes into its own namespace, which is the plugin's slug, and everything is scoped to this server. Renaming a plugin does not move its data, because the slug does not change.",
        "storage_body_2": "A key can be up to 256 characters. A value is anything that can be written as JSON, so strings, numbers, lists, and dicts all work. expires= sets a lifetime in seconds, and an entry saved without one lives until something deletes it. Everything a plugin has stored is readable, editable, and deletable by hand from the Storage page.",
        "storage_quota_body": "There is no fixed cap on how many entries a plugin may keep. That is not an invitation to write a row per message. Keep one key per thing you actually need, and put expires= on anything that is only interesting for a while.",
        "storage_title": "Storage"
      },
      "modules": {
        "builtins_body": "There are two built-in modules. random holds random, randint, choice, and shuffle. time holds now and now_ms. All of them run inside the sandbox and cost nothing, because none of them reach Discord. The Broker API page lists what each one takes and returns.",
        "builtins_body_2": "You can import a whole built-in module, or import single names out of it, and you can rename anything you import with as. All three forms are in the plugin below, and all three work.",
        "builtins_body_3": "A built-in module always wins over a plugin of the same name. If a plugin in your server has the slug random, then from random import choice still gives you the built-in, and there is no way to reach that plugin by import. Give a plugin a different name if you want to import it.",
        "builtins_title": "Importing a built-in module",
        "can": {
          "builtins": {
            "body": "Single names out of a built-in module. random and time are the only built-in modules there are.",
            "label": "from random import choice"
          },
          "names": {
            "body": "Any imported name can be renamed with as. This works for a built-in module and for another plugin.",
            "label": "from time import now as clock"
          },
          "siblings": {
            "body": "Single names out of another plugin in this server, by that plugin's slug. Functions and top-level constants both work.",
            "label": "from helpers import greet"
          },
          "whole_builtin": {
            "body": "A whole built-in module. You then call through it, as in random.randint(1, 6).",
            "label": "import random"
          }
        },
        "can_head": "These work",
        "cannot": {
          "other_guilds": {
            "body": "An import only ever resolves to a plugin in this same server. Vex builds the list of importable modules from this server's plugins and hands the sandbox nothing else.",
            "label": "A plugin in another server"
          },
          "python": {
            "body": "Nothing from Python is reachable. There is no os and no sys, and the real Python module behind random is never exposed.",
            "label": "import os"
          },
          "self": {
            "body": "A plugin cannot import itself. Its own slug is left out of the modules it is given.",
            "label": "The plugin's own slug"
          },
          "whole_plugin": {
            "body": "A whole plugin cannot be imported. Only a built-in module can be imported whole. Name the functions you want instead, as in from helpers import greet.",
            "label": "import helpers"
          }
        },
        "cannot_head": "These do not work",
        "disabled_body": "Enabled and disabled control one thing. They decide whether Vex sends a plugin its own events. A disabled plugin never runs on a message, on a join, or on a timer.",
        "disabled_body_2": "Disabled does not mean the code cannot run. Vex makes every plugin in the server importable, whether it is enabled or not. When an enabled plugin imports a function out of a disabled one, that function still runs, as part of the enabled plugin's run.",
        "disabled_body_3": "That cuts both ways, so it is worth stating plainly. It is what lets a library plugin sit disabled and still be useful. It also means switching a plugin off does not stop its code running when another plugin imports it. To stop that, delete the plugin, or remove the import from whatever is importing it.",
        "disabled_title": "A disabled plugin can still be imported",
        "error": {
          "circular": {
            "body": "Two plugins import each other, either directly or through a chain. Move the shared names into a third plugin that neither of them imports from.",
            "label": "circular module load: 'x'"
          },
          "immutable": {
            "body": "Your code tried to change a value that came from another plugin. Copy it with list() or dict() first, then change the copy.",
            "label": "Immutable"
          },
          "no_module": {
            "body": "No plugin in this server has that slug. Check the slug in the other plugin's URL. Remember that a plugin cannot import itself.",
            "label": "no module named 'x' in this server"
          },
          "too_big": {
            "body": "An imported plugin's source is longer than {source} characters. The limit is per plugin and is not a total across the run.",
            "label": "module 'x' exceeds the size limit"
          },
          "too_deep": {
            "body": "A chain of plugins importing plugins went more than {depth} levels down.",
            "label": "module import nesting too deep"
          },
          "too_many": {
            "body": "One run tried to load more than {modules} modules. A chain counts in full, because every plugin that an imported plugin imports is loaded as well.",
            "label": "too many modules imported"
          },
          "unsupported": {
            "body": "Vex could not turn the line into an import it understands. There are two usual causes. You imported a whole plugin instead of names out of it, or you asked a built-in module for a name it does not have.",
            "label": "That import isn't supported"
          }
        },
        "errors_body": "These are the errors an import can produce. Each one shows up in the Runs tab against the line in your own source.",
        "errors_title": "Import errors and what they mean",
        "frozen_body": "A value that came from another plugin is frozen. You can read it, and you can build new values out of it, but you cannot change it in place. Appending to an imported list or assigning into an imported dict fails with an error that says Immutable, and the run ends there.",
        "frozen_body_2": "The fix is to copy the value and change the copy. list() copies a list and dict() copies a dict. The copy belongs to your plugin, so you can do what you like with it.",
        "frozen_body_3": "This is also why random.shuffle hands back a new list instead of shuffling the list you gave it. Shuffling in place would fail on any list that came from another plugin. The list you pass in is left exactly as it was.",
        "frozen_title": "Imported values cannot be changed",
        "library_body": "The helpers plugin above is the pattern to copy for shared code. Give it no handlers, so there is nothing for Vex to trigger, and leave it disabled. It never runs by itself, and every other plugin in the server can still import from it.",
        "library_body_2": "Code in an imported plugin runs inside the run of the plugin that imported it. It shares that run's time, memory, and action budget. It can call the broker, so a function in a library can send a message. It cannot read the event, because event has no fields when a plugin is loaded as a module. Pass whatever the function needs in as an argument.",
        "library_title": "Writing a library plugin",
        "limits_body": "These apply to one run, and a run means one plugin plus everything that run imported. Going over any of them ends the run with an error.",
        "limits_title": "Import limits",
        "load_body": "Every import on this page is shorthand for load(), which is Starlark's own way of importing. You can write load() yourself instead. The first argument is the module. Each plain argument after it is a name to take out of that module. A keyword argument renames the name it takes, with the new name on the left.",
        "load_body_2": "The two spellings do exactly the same thing, and you can mix them in one plugin. Use whichever you find easier to read. The Python-style import is shorter, and it is what the rest of these docs use.",
        "load_title": "The load() form",
        "rules_title": "What you can and cannot import",
        "sibling_body": "A plugin can import names out of another plugin in the same server. Functions and top-level constants both work. You import by the other plugin's slug, which is the short name in its URL, and not by its display name.",
        "sibling_body_2": "A plugin cannot import itself. Vex leaves the importing plugin out of the modules it makes available for the run, so a plugin whose slug is helpers cannot write from helpers import greet.",
        "sibling_lib_body": "This is a whole plugin, named helpers. It defines a constant, a list, and two functions, and it defines no handler at all. Nothing in it ever runs on its own.",
        "sibling_lib_head": "The plugin that exports",
        "sibling_title": "Importing another plugin",
        "sibling_use_body": "This is a second plugin in the same server. It imports two functions and one constant out of helpers. An imported name works as if you had written it at the top of this file yourself.",
        "sibling_use_head": "The plugin that imports",
        "slug_body": "Every plugin has a slug. Vex builds it from the name you gave the plugin by lowercasing that name and turning anything that is not a letter or a number into a hyphen. A plugin created as Shared Helpers gets the slug shared-helpers, and shared-helpers is the word you import. If that slug is already taken in this server, Vex puts a number on the end of it.",
        "slug_body_2": "The slug is set once, when the plugin is created. Renaming a plugin afterwards does not change it, so a rename never breaks a plugin that imports it. The cost of that is a slug which no longer looks like the name, so check the plugin's URL when an import cannot find it.",
        "slug_title": "Imports use the slug, not the name",
        "what_body": "A module is a set of names that a plugin can import. There are two kinds and only two. The first kind is a built-in module that Vex ships with, and there are two of those, named random and time. The second kind is another plugin in this same server, which you import by its slug.",
        "what_body_2": "Starlark itself has no import statement, and its parser rejects the words import and from outright. Vex rewrites those lines into Starlark before the parser reads your source. One line goes in and one line comes out, so the line number in an error still matches the line you wrote. That is why an import looks like Python here even though the language underneath is not Python.",
        "what_title": "What a module is here"
      },
      "nav": {
        "api": "Broker API",
        "commands": "Commands",
        "embeds": "Embeds and components",
        "examples": "Examples",
        "getting-started": "Getting started",
        "limits": "Limits and the sandbox",
        "modules": "Modules and imports",
        "triggers": "Triggers"
      },
      "on_this_page": "Contents",
      "plaintext_link": "Plain-text version (for AI assistants)",
      "search": {
        "no_results": "Nothing matches \"{query}\".",
        "placeholder": "Search the docs..."
      },
      "section": {
        "api": {
          "description": "Everything a plugin can do to your server goes through one of these namespaces.",
          "title": "Broker API"
        },
        "commands": {
          "description": "Add your own chat commands. A member runs one by typing the server prefix and the name, like ?roll.",
          "title": "Commands"
        },
        "embeds": {
          "description": "Rich messages, buttons, menus, and forms, all built out of plain values.",
          "title": "Embeds and components"
        },
        "examples": {
          "description": "Every template from the New plugin dialog, and what each one is showing you.",
          "title": "Examples"
        },
        "getting-started": {
          "description": "A plugin is your own code, running in your server, on the events you pick.",
          "title": "Getting started"
        },
        "limits": {
          "description": "What one run gets, what each call costs, and what a plugin is never allowed to do.",
          "title": "Limits and the sandbox"
        },
        "modules": {
          "description": "How to use the built-in modules, and how to reuse code that lives in another plugin in this server.",
          "title": "Modules and imports"
        },
        "triggers": {
          "description": "Vex runs a handler when its event happens. The name of the function is the subscription.",
          "title": "Triggers"
        }
      },
      "start": {
        "first_body": "This is a whole plugin. Create one from the Plugins page, paste this into the editor, and it answers anyone who types !ping.",
        "first_note": "A function named on_message is a handler. Vex finds handlers by name, so the name is the only thing that decides when your code runs. The full list is under Triggers. Code outside a handler runs once at the start of every run, which makes it the right place for constants and helper functions, and the wrong place for anything slow.",
        "first_title": "Your first plugin",
        "fstring_body": "You can use f-strings. Anything inside {} is worked out and turned into text, so you do not have to join strings together by hand.",
        "fstring_limits": "Two things are not supported yet. Format specs like {value:.2f} are refused rather than guessed at, and an f-string has to fit on one line. Both give you a clear error with the line number rather than failing at run time.",
        "fstring_title": "Putting values into text",
        "language_body": "Plugins are written in Starlark. Starlark borrows Python's syntax, so def, if, for, lists, dicts, and strings all behave the way you expect. It is not Python. There is no while loop, no try or except, no classes, and no importing whatever you like. Every name you can call is either part of the small Starlark standard library, or something Vex put there for you, or something you imported from one of the two built-in modules or from another plugin in this server. Modules and imports covers what can be imported.",
        "language_body_2": "One consequence is worth knowing up front. Because there is no try or except, you cannot catch a failed call. A call that Discord or Vex refuses ends the run and lands in the Runs tab with the message and the line number. Check first with roles.has or members.get when you are not sure a call will work.",
        "language_title": "The language",
        "runs_body": "The Runs tab lists every execution with its trigger, how long it took, and the error if there was one. Errors point at the line in your own source. Test runs show up there too, with a dry-run prefix on the trigger, so you can compare a test against the real thing.",
        "runs_title": "When it breaks",
        "ship_body": "Save Version writes a new version and keeps the old one, so every save is a point you can go back to from the Versions tab. Restoring an old version writes it as a new version rather than deleting anything.",
        "ship_body_2": "A new plugin is disabled when it is created and never runs until you switch Enabled on. Once it is on, Vex reads the handlers out of your source and starts sending it those events. Saving, enabling, and disabling all take effect straight away. Enabled controls one thing only, which is whether Vex sends this plugin its own events. A disabled plugin's code still runs when another plugin imports it, and Modules and imports explains that.",
        "ship_title": "Turning it on",
        "test_body": "The Test tab runs whatever is in the editor right now, saved or not, against an event you fill in by hand. Replies, sends, storage writes, and moderation actions are recorded instead of performed, so nothing reaches your members. You get the console output, the error and the line it happened on, and a list of what the plugin would have done.",
        "test_caveat_body": "A few calls answer with stand-in data during a test. members.get always returns the same fake member and its methods only record what they would have done, channels.list returns one fake channel, and http.get always reports a failure without making a request. Storage lasts for the one test run and is thrown away afterwards. If your code branches on any of that, run it live once before you trust it.",
        "test_caveat_title": "What a test does not tell you",
        "test_title": "Testing it",
        "what_body": "A plugin is a short program that belongs to one server. Vex runs it when something happens in that server, such as a member posting a message or joining. You write it in the dashboard, test it in the dashboard, and turn it on when you are happy with it. There is nothing to install and nothing to deploy.",
        "what_body_2": "Every run happens in a sandbox, in a separate process, under a hard limit on time and memory. The code cannot read files, cannot reach the bot's token or database, and cannot touch any other server. The only things it can do are the ones Vex hands it, and they are all listed under Broker API.",
        "what_title": "What a plugin is"
      },
      "subtitle": "How to write a plugin for your server, test it, and turn it on.",
      "title": "Plugin Docs",
      "triggers": {
        "bots_note": "Vex never runs a plugin for a message or a reaction from a bot, including its own. A plugin that replies to every message cannot start a loop with itself.",
        "fields_heading": "Event fields",
        "intro": "A handler takes one argument, which is the event. Read a field off it with a dot, as in event.content. Every field is a string unless this page says otherwise, so compare with quotes and convert with int() when you need a number. A field Discord did not give us is an empty string rather than a missing name.",
        "no_fields": "This trigger has no event fields.",
        "on_interaction": {
          "body": "Runs when a member clicks one of your buttons. event.custom_id is the id you gave that button. Answer with interactions.reply, interactions.update, or interactions.send_modal. Every click is a separate run that keeps nothing from the run that posted the button, so anything you need to remember belongs in storage."
        },
        "on_interval": {
          "body": "Runs on a timer instead of on something a member did. Set the interval in the plugin's Settings tab. The shortest interval is 30 seconds, and Vex looks for due plugins every 20 seconds, so a run can start up to 20 seconds after the interval elapsed. There is no message and no channel here, so send to a channel by its ID."
        },
        "on_member_join": {
          "body": "Runs when a member joins the server. There is no channel in this event, so choose the channel you want to post in by its ID and use messages.send. Vex needs the Server Members intent for this to fire."
        },
        "on_member_leave": {
          "body": "Runs when a member leaves the server. It fires whether they left on their own or were kicked or banned, and the event does not tell you which. Vex needs the Server Members intent for this to fire."
        },
        "on_message": {
          "body": "Runs once for every message a member posts in the server. This is by far the busiest trigger, so read event.content and return early when the message is not for you. messages.reply answers the message that fired the handler."
        },
        "on_message_edit": {
          "body": "Runs when a member edits a message, and only when the text actually changed. event.content is the new text and event.old_content is what was there before. messages.reply works here as well, and it replies to the edited message."
        },
        "on_modal_submit": {
          "body": "Runs when a member submits one of your modals. event.fields is a dict of what was typed, keyed by each field's custom_id, and you read one out with event.fields[\"colour\"]. It is a dict, not a string."
        },
        "on_reaction": {
          "body": "Runs when a reaction is added to a message. Taking a reaction off does not fire anything. event.emoji is the emoji as text, so a unicode reaction compares as itself and a custom one arrives in Discord's <:name:id> form."
        },
        "on_role_add": {
          "body": "Runs when a role is added to a member. If several roles are added at once, the handler runs once per role. Vex needs the Server Members intent for this to fire."
        },
        "on_role_remove": {
          "body": "Runs when a role is taken off a member. If several roles are removed at once, the handler runs once per role. Vex needs the Server Members intent for this to fire."
        },
        "on_select": {
          "body": "Runs when a member uses one of your select menus. event.values is the list of values that were picked. event.value is the first of them, which is the one you want for a menu that only takes one choice."
        },
        "on_voice": {
          "body": "Runs when a member's voice state changes. event.action says which change it was and is one of join, leave, move, mute, unmute, deafen, undeafen. A member who is server muted and a member who muted themselves both arrive as mute. Vex needs the Voice States intent for this to fire."
        }
      }
    },
    "plugins": {
      "create_failed": "The plugin could not be created.",
      "created": "Plugin created.",
      "editor_builtin_module": "Built in module",
      "editor_doc_function": "Function in this plugin",
      "editor_doc_imported": "Imported from {module}",
      "editor_doc_module": "Module you imported ({module})",
      "editor_doc_param": "Parameter of this function",
      "editor_doc_variable": "Variable in this plugin",
      "editor_sibling_export": "Exported by the {slug} plugin",
      "editor_sibling_exports_hint": "Type the name this plugin exports. Vex cannot list another plugin's exports for you.",
      "editor_sibling_module": "Another plugin in this server",
      "empty_description": "Create your first plugin to add custom commands, responders, and automations.",
      "empty_title": "No plugins yet",
      "errors": "{count} errors",
      "field_description": "Description",
      "field_description_hint": "Optional. What does this plugin do?",
      "field_interval": "Interval (Seconds)",
      "field_interval_hint": "How often an on_interval plugin runs. The minimum is 30 seconds, and 0 turns the timer off.",
      "field_name": "Name",
      "field_template": "Start from a template",
      "last_run_title": "Last run {when}",
      "new": "New Plugin",
      "no_description": "No description.",
      "no_runs": "Never run",
      "pings": {
        "critical": "Critical",
        "description": "Plugins cannot ping roles unless you allow them here. A plugin pings a role with ping=<role id> on messages.send or messages.reply.",
        "everyone_denied": "Only the server owner or a member with the Administrator permission can let a plugin ping every role and @everyone.",
        "everyone_hint": "Critical. The plugin can notify every member of the server. Only the server owner or a member with the Administrator permission can turn this on.",
        "everyone_label": "Allow every role, @everyone and @here",
        "mentionable_hint": "Discord only delivers the ping if the role is mentionable, or if Vex has the Mention Everyone permission.",
        "roles_label": "Roles this plugin can ping",
        "roles_placeholder": "Select roles...",
        "save": "Save Pings",
        "saved": "Ping settings saved.",
        "title": "Pings"
      },
      "placeholder_description": "Replies to keywords",
      "placeholder_name": "Auto Responder",
      "ran": "Ran {when}",
      "review": {
        "approve": "Approve",
        "approved_by": "Approved by",
        "approved_toast": "Plugin approved.",
        "asked": "asked {when}",
        "body": {
          "approved": "The current code of this plugin has been approved.",
          "not_requested": "This plugin can act outside the sandbox, so a second admin has to approve its code.",
          "not_required": "Nothing this plugin does needs a second admin, so it can be turned on without a review.",
          "pending": "Waiting for an admin to approve this plugin.",
          "rejected": "The review of this plugin was rejected. Change the code if needed and request another review.",
          "stale": "The code has changed since this plugin was reviewed. The new code needs a new review."
        },
        "caps_description": "Vex works this out from the plugin's code. It lists every part of the plugin API the code calls.",
        "caps_none": "This plugin does not call anything outside the sandbox.",
        "caps_title": "What This Plugin Can Do",
        "caps_unknown": "Vex could not read all of this plugin's code, so this list may be incomplete.",
        "disabled_unapproved": "It cannot be turned on until its current code is approved.",
        "enabled_unapproved": "This plugin is turned on, but its current code is not approved. Turning it off and on again will need an approval first.",
        "failed": "That did not work. Try again.",
        "note": "Note from the reviewer",
        "note_label": "Note",
        "note_placeholder": "Optional note for the author",
        "queue_description": "These plugins need someone to request, approve, or redo a review.",
        "queue_title": "Awaiting Review ({count})",
        "reject": "Reject",
        "rejected_by": "Rejected by",
        "rejected_toast": "Review rejected.",
        "request": "Request Review",
        "requested": "Review requested.",
        "requested_by": "Requested by",
        "risk": {
          "benign": "Safe",
          "critical": "Critical",
          "elevated": "Elevated",
          "normal": "Normal"
        },
        "self_hint": "Somebody other than the requester has to approve. The server owner and members with the Administrator permission can approve their own request.",
        "state": {
          "approved": "Approved",
          "not_requested": "Needs review",
          "not_required": "No review needed",
          "pending": "Review pending",
          "rejected": "Review rejected",
          "stale": "Needs review again"
        },
        "status_title": "Review",
        "tab": "Review"
      },
      "runs": {
        "all": "All",
        "at_line": "at line {line}",
        "copy": "Copy Error",
        "empty_body": "Each time this plugin runs, its trigger, how long it took, and any error show up here. Turn the plugin on and trigger its event to see runs.",
        "empty_title": "No Runs Yet",
        "errors_only": "Errors Only",
        "no_errors_body": "None of this plugin's recent runs failed.",
        "no_errors_title": "No Errors",
        "old_version": "This run used an older version of the code, so the line shown in the editor may be different.",
        "open_code": "Open Code",
        "output": "Output",
        "version": "version {version}"
      },
      "search_clear": "Clear search",
      "search_count": "Showing {shown} of {total}",
      "search_empty_description": "Nothing here matches \"{query}\". Check the spelling, or search for part of a plugin's name or slug.",
      "search_empty_title": "No plugins match that search",
      "search_placeholder": "Search plugins by name, slug, or description",
      "stats": {
        "activity": "Activity",
        "activity_hint": "Each bar is one time bucket. The darker portion is runs that failed.",
        "average": "Average time",
        "by_status": "Outcomes",
        "by_trigger": "Triggers",
        "empty_body": "This plugin has not run in the period you selected. Try a longer window, or enable the plugin and trigger its event.",
        "empty_title": "No Runs In This Window",
        "failure_rate": "Failure rate",
        "failures": "Failures",
        "runs": "Runs",
        "slowest": "Slowest run",
        "tab": "Stats",
        "window_day": "24 hours",
        "window_month": "30 days",
        "window_week": "7 days"
      },
      "storage": {
        "bytes_used": "Space used",
        "entries_used": "Entries",
        "full_warning": "This plugin has reached a storage limit. New keys will be refused until some entries are deleted.",
        "hint": "Storage is counted per plugin, per server. A key and its value both count toward the space used. Entries that have expired are not counted.",
        "near_warning": "This plugin is close to a storage limit.",
        "of_limit": "of {limit}",
        "title": "Storage"
      },
      "subtitle": "Extend your server with sandboxed Starlark plugins.",
      "title": "Plugins",
      "version": "v{version}",
      "webhook_enable_failed": "Could not change the webhook.",
      "webhook_hint": "Lets an outside service call this plugin by posting to a URL. The secret is shown once, when you turn the webhook on. If you lose it, turn the webhook off and on again to get a new one. That also stops the old URL working.",
      "webhook_secret": "Secret (shown once)",
      "webhook_secret_warning": "Copy this now. It cannot be shown again.",
      "webhook_title": "Inbound webhook",
      "webhook_url": "URL"
    },
    "polls": {
      "badge_closed": "Closed",
      "badge_hidden": "Hidden",
      "badge_multi": "Multi",
      "badge_open": "Open",
      "board_description": "Every poll in this server, newest first. Post a new one with /poll create.",
      "board_title": "Results Board",
      "close": "Close",
      "close_failed": "The poll could not be closed.",
      "closed": "Poll closed. The message now shows the final result.",
      "disabled_saved": "Polls are now disabled and synced to the bot.",
      "empty_archive_description": "A poll moves here once it is closed and the final results are in.",
      "empty_archive_title": "No closed polls yet",
      "empty_description": "Run /poll create in Discord to post one.",
      "empty_title": "No polls yet",
      "enabled_saved": "Polls are now enabled and synced to the bot.",
      "hidden_results": "Results are hidden until this poll closes.",
      "subtitle": "Members vote with buttons on the poll message. Results update as the votes come in.",
      "title": "Polls",
      "voters_one": "{count} voter",
      "voters_other": "{count} voters"
    },
    "prefix": {
      "add_alias": "Add",
      "alias_command": "Command",
      "alias_short": "Short form",
      "alias_to_blocked": "That command can never be run with a prefix, so an alias for it would not work.",
      "aliases_description": "Shorter ways to type a command.",
      "aliases_title": "Short forms",
      "always_blocked": "Always blocked",
      "always_blocked_hint": "These reply privately, and a prefix message is public, so they can never be run this way in any server.",
      "behaviour_title": "Behavior",
      "blocked_description": "Commands you do not want reachable by prefix in this server.",
      "blocked_title": "Blocked commands",
      "custom_aliases": "Your short forms",
      "delete_invocation": "Delete the command message",
      "delete_invocation_hint": "Removes the message someone typed once the command has run. Vex needs the Manage Messages permission for this.",
      "denied_hint": "Separate commands with a comma. They keep working as slash commands.",
      "denied_label": "Blocked in this server",
      "invalid_alias_space": "A short form cannot contain a space.",
      "invalid_chars": "A prefix cannot contain @, #, /, a backtick, or a space. Discord already uses those.",
      "invalid_empty": "Enter a prefix.",
      "invalid_long": "A prefix can be at most 5 characters.",
      "invalid_reply_mode": "Pick either direct message or channel.",
      "moved_hint": "Aliases and blocked commands have their own page now.",
      "moved_link": "Open aliases and blocked commands",
      "no_custom_aliases": "None yet. The built-in ones above still apply.",
      "prefix_description": "What a command starts with in this server.",
      "prefix_hint": "Up to 5 characters. Pick something people do not type by accident.",
      "prefix_label": "Prefix",
      "prefix_title": "The prefix",
      "preview": "How commands will look",
      "reference_hint": "Every command and its prefix form is listed in the",
      "reference_link": "command reference",
      "remove_alias": "Remove this short form",
      "replies_description": "Some commands answer with something only the person who ran it should see, like a member's moderation history. A slash command shows that privately. A prefix command is a normal message, so you choose what happens instead.",
      "replies_title": "Private replies",
      "reply_channel": "In the same channel",
      "reply_channel_hint": "Everyone who can read the channel sees it. Convenient for a private staff channel, and a leak in a public one.",
      "reply_channel_warning": "Replies that would normally be private will be visible to everyone in the channel where the command was run.",
      "reply_dm": "In a direct message",
      "reply_dm_hint": "Only the person who ran the command sees it. If their DMs are closed, Vex says so in the channel and does not post the content.",
      "reply_seconds": "Delete after (seconds)",
      "reply_seconds_hint": "How long a reply posted in the channel stays before Vex removes it. Set this to 0 to leave it up.",
      "saved": "Prefix settings saved and synced to the bot.",
      "subtitle": "Run Vex's commands by typing a prefix instead of using a slash command. Everything on this page applies to this server only.",
      "title": "Prefix Commands",
      "use_defaults": "Use the built-in short forms",
      "use_defaults_hint": "Ships with tm for timeout, r for role, w for warn, and others. Your own short forms below always win."
    },
    "pricing": {
      "cta_free": "Add Vex to your server",
      "cta_premium": "Choose a server",
      "faq_discount_a": "For nonprofit or education use, or anything else, write to {contact}.",
      "faq_discount_q": "Do you offer discounts?",
      "faq_payer_a": "Payments are processed by Paddle, which acts as the merchant of record for every order. Paddle handles payment, invoicing, and sales tax or VAT, so the charge on your statement appears as Paddle rather than {brand}.",
      "faq_payer_q": "Who am I paying?",
      "faq_refund_a_after": ".",
      "faq_refund_a_before": "Yes, within the window described in our",
      "faq_refund_link": "refund policy",
      "faq_refund_q": "Can I get a refund?",
      "faq_scope_a": "Per server. One purchase licenses Vex Premium for one Discord server, for good. If you run several servers, each one needs its own purchase.",
      "faq_scope_q": "Is a plan per server or per account?",
      "faq_subscription_a": "No. Vex Premium is a one-time purchase: pay once and keep it, with no renewal and nothing billed again later.",
      "faq_subscription_q": "Is this a subscription?",
      "faq_title": "Billing questions",
      "footer_home": "Home",
      "footer_pricing": "Pricing",
      "footer_privacy": "Privacy",
      "footer_products": "Products",
      "footer_refunds": "Refunds",
      "footer_terms": "Terms",
      "price_free": "Free",
      "price_premium": "$19.99",
      "price_premium_note": "one-time purchase",
      "subtitle": "Vex is free for most servers. Vex Premium is a one-time purchase that unlocks every paid module for good. Every plan is licensed per server, and the exact price, including tax, is shown at checkout.",
      "title": "Pricing"
    },
    "progression": {
      "economy_description": "How many members sit in each balance range.",
      "economy_empty": "No member has earned currency yet.",
      "economy_median": "Median balance",
      "economy_title": "Balance distribution",
      "economy_top_title": "Richest members",
      "empty_description": "Vex records XP and currency from now on. Turn on the Leveling or Economy module so there is something to measure.",
      "empty_title": "No leveling or economy data yet",
      "levels_description": "How many members sit in each level range.",
      "levels_empty": "No member has earned XP yet.",
      "levels_median": "Median level",
      "levels_title": "Level distribution",
      "levels_top_title": "Highest levels",
      "members_count": "{count} members",
      "members_tracked": "Members tracked",
      "subtitle": "How XP and currency are spread across your members.",
      "title": "Leveling and Economy Stats"
    },
    "punishments": {
      "action": {
        "ban": "Ban",
        "jail": "Jail",
        "kick": "Kick",
        "none": "Log only",
        "softban": "Softban",
        "timeout": "Timeout",
        "voicemute": "Server mute",
        "warn": "Warn"
      },
      "action_label": "Action",
      "action_none_hint": "Records the case and applies no punishment. This is how a first offence becomes a written warning on the record and nothing more.",
      "add_preset": "Add preset",
      "add_step": "Add rung",
      "aliases_hint": "Separate with commas. Any of these also finds this preset.",
      "aliases_label": "Other names",
      "auto_apply": "Apply the matching preset automatically",
      "auto_apply_hint": "When a reason closely matches a preset, run that preset's ladder instead of the action the moderator typed. Off by default. Only a near-exact match counts, so a loose resemblance still just shows a note. This changes what happens to members, so turn it on only if you want the ladder to be the rule.",
      "case_types_label": "Case types that count",
      "count_mode": {
        "any": "Any prior case",
        "same": "Only this preset",
        "types": "Chosen case types"
      },
      "count_mode_hint": {
        "any": "Every case on the member's record counts, so someone with a long history starts higher on this ladder.",
        "same": "Prior punishments under this same preset. This is what makes \"3rd time spamming\" mean what it says.",
        "types": "Only cases of the types you pick below count."
      },
      "count_mode_label": "Count",
      "counting_title": "What counts as a repeat",
      "display_title": "Display",
      "duration_label": "Duration",
      "duration_na": "Not used for this action.",
      "error_action": "\"{value}\" is not an action Vex can take.",
      "error_count_mode": "\"{value}\" has an invalid counting mode.",
      "error_duplicate": "More than one preset answers to \"{value}\". A moderator typing it would only ever reach the first one.",
      "error_duplicate_offence": "\"{value}\" has two rungs on the same offence number. Only one of them would ever apply.",
      "error_invalid": "Those presets could not be saved. Check the durations and offence numbers.",
      "error_name_required": "Every preset needs a name.",
      "error_types_empty": "\"{value}\" counts chosen case types but no types are chosen, so nothing would ever count.",
      "how_body": "A moderator runs /punish on a member and names one of the presets below. Vex counts how many times that member has already been punished under the same preset, then applies the rung that matches. The moderator does not have to remember whether this is the second or the third time.",
      "how_note": "This is separate from the warning escalation ladder in Moderation settings. That one counts active warnings across the whole server and fires on its own. This one counts prior offences of the same kind and only fires when a moderator names one. A server can run both.",
      "how_title": "How it works",
      "ladder_empty": "No rungs yet. This preset records the case and applies no punishment.",
      "ladder_hint": "The Nth time a member commits this offence, Vex applies the matching rung. Numbers can be skipped: the nearest lower rung applies. Past the last rung, the last rung repeats.",
      "ladder_title": "The ladder",
      "lookback_hint": "Only count offences from the last this many days. Set 0 to count forever.",
      "lookback_label": "Look back",
      "name_hint": "What a moderator types after /punish. Not case sensitive.",
      "name_label": "Name",
      "new_preset_name": "New preset",
      "no_presets": "No presets yet. Add one below, or start from a common example.",
      "notify_blocked": "Member DMs are switched off for these actions in Moderation settings, so rungs using {actions} will punish quietly whatever this toggle says.",
      "notify_blocked_link": "Open Moderation settings",
      "notify_member": "Tell the member",
      "notify_member_hint": "Sends the member a DM explaining what happened and why. Turn this off to punish quietly.",
      "offence_label": "Offence",
      "permanent": "Permanent",
      "presets_description": "Each preset is one named offence with its own ladder.",
      "presets_title": "Presets",
      "reason_hint": "Written onto the case when the moderator does not give a reason.",
      "reason_label": "Default reason",
      "remove_preset": "Delete this preset",
      "remove_step": "Remove this rung",
      "saved": "Punishment presets saved and synced to the bot.",
      "show_offence_number": "Show the offence number",
      "show_offence_number_hint": "Puts \"3rd offence\" in the confirmation, so the moderator can see where the member is on the ladder without opening their history.",
      "starters_label": "Start from a common example:",
      "subtitle": "Name an offence once, decide what it costs the 1st, 2nd and 3rd time, and let /punish pick the right rung. Everything on this page applies to this server only.",
      "summary_no_rungs": "no punishment",
      "summary_rungs": "{n} rungs",
      "timeout_capped": "Discord caps a timeout at 28 days. Anything longer is shortened to 28 days.",
      "title": "Punishment Presets",
      "voicemute_hint": "A server mute only works in voice channels. If the member is not in voice when they are punished, Vex mutes them the next time they join one. The duration starts when they are punished, not when they join."
    },
    "raid": {
      "accounts": "{count} accounts",
      "action": "Action",
      "action_alert": "Alert only",
      "action_failed": "That could not be started.",
      "action_lockdown": "Lockdown (quarantine new joiners)",
      "action_queued": "Vex is carrying that out now.",
      "action_roles": "Roles That May Act",
      "action_roles_hint": "These roles can use the buttons on a raid alert. If none are set, anyone with Ban Members can.",
      "actions": "Actions",
      "active_raid": "Raid #{id} is in progress",
      "advanced_description": "Fine tuning beyond the preset. Most servers never need these.",
      "advanced_title": "Advanced",
      "age_action_ban": "Ban",
      "age_action_kick": "Kick",
      "age_action_quarantine": "Quarantine (unverified role)",
      "age_gate_action": "Action for Young Accounts",
      "age_gate_description": "Automatically remove or quarantine brand new accounts when they join.",
      "age_gate_title": "Account Age Gate",
      "alert_channel": "Alert Channel",
      "alert_channel_hint": "If not set, alerts go to your mod log channel.",
      "allow_description": "These are never treated as part of a raid.",
      "allow_domains": "Link Domains",
      "allow_domains_hint": "Separate domains with commas, like example.com.",
      "allow_invites": "Invite Codes",
      "allow_invites_hint": "Your own invite codes, separated with commas.",
      "allow_members": "Members",
      "allow_roles": "Roles",
      "allow_title": "Allowlist",
      "auto_remove": "Remove Automatically",
      "auto_remove_at": "At a Score Of",
      "auto_remove_ban": "Ban",
      "auto_remove_hint": "Off by default. Staff can always kick or ban with one click from the alert.",
      "auto_remove_kick": "Kick",
      "auto_remove_off": "Never",
      "auto_remove_warning": "Vex will remove accounts on its own when a raid scores this high. A kick or ban cannot be undone by marking the raid as not a raid.",
      "avatar_distance": "Avatar Similarity",
      "avatar_distance_hint": "How different two pictures may be and still count as the same, out of 64. Higher catches more edited copies.",
      "bad_action": "That action is not available.",
      "baseline_add": "Add Name",
      "baseline_description": "Names, avatars and messages this server has decided are normal. Avatars and messages are added when staff mark a raid as not a raid. You can add names here.",
      "baseline_empty": "Nothing has been added yet.",
      "baseline_kind": "Only names can be added by hand.",
      "baseline_name_placeholder": "A name that is common here",
      "baseline_remove": "Remove",
      "baseline_short": "That name is too short to match on.",
      "baseline_strength": "That is not a valid setting.",
      "baseline_title": "Known Normal",
      "channels_description": "Tell Vex which channels are different from the rest.",
      "channels_title": "Channels",
      "cluster_line": "{accounts} accounts, score {score}",
      "confirm_action": "Do you want to {action} for every account in this raid?",
      "contain_action": "At Contain",
      "contain_action_hint": "How the accounts are held.",
      "contain_none": "Do not hold them",
      "contain_quarantine": "Give them the quarantine role",
      "contain_timeout": "Time them out",
      "delete_messages": "Delete Their Messages",
      "delete_messages_hint": "Removes the matching messages the held accounts posted.",
      "detail_line": "Started {date}. Score {score}. {accounts} accounts.",
      "detail_title": "Raid #{id}",
      "detection_description": "Vex watches for many accounts acting together: the same message, the same avatar, names from one template, or a burst of joins. Established members count for very little, so ordinary busy moments are not mistaken for raids.",
      "detection_title": "Coordinated Attack Detection",
      "detector": {
        "automod": "Automod Hits",
        "avatars": "Matching Avatars",
        "impersonation": "Impersonation",
        "joins": "Join Waves",
        "links": "Matching Links and Invites",
        "messages": "Matching Messages",
        "names": "Matching Names"
      },
      "detector_hint": {
        "automod": "Automod catching several different new accounts within two minutes.",
        "avatars": "New accounts switching to the same or a nearly identical picture.",
        "impersonation": "A single account using a name that copies a staff member or Vex.",
        "joins": "Far more joins than this server normally gets at this time of the week.",
        "links": "Several new accounts posting the same invite code or the same uncommon website.",
        "messages": "Several new accounts posting the same or nearly the same message, even when letters are swapped for look-alikes.",
        "names": "New accounts with the same name, or names built from one template like name_1234."
      },
      "end_after": "Raid Ends After (Minutes)",
      "end_after_hint": "A raid ends once nothing new has happened for this long.",
      "evidence": "Evidence",
      "evidence_line": "{accounts} accounts, {confidence}% confidence",
      "exempt_channels": "Ignored",
      "exempt_channels_hint": "Raid protection never looks at these.",
      "history_description": "Every raid Vex has recorded, with its evidence.",
      "history_empty": "No raids yet",
      "history_empty_hint": "Raids appear here once Vex detects one.",
      "history_line": "Raid #{id}, {date}",
      "history_title": "Past Raids",
      "hold_minutes": "Hold For (Minutes)",
      "invalid": "One of these settings is out of range.",
      "join_rate_description": "Alert staff when too many members join in a short time, and optionally lock the server down.",
      "join_rate_title": "Join Rate",
      "joins": "Joins",
      "live_description": "What Vex is watching at the moment. This refreshes every 15 seconds.",
      "live_quiet": "Nothing suspicious is happening right now.",
      "live_title": "Right Now",
      "lock_channels": "Lock Affected Channels",
      "lock_channels_hint": "At Lockdown, the channels the raid posted in are locked. Your lockdown bypass roles can still talk.",
      "lockdown_minutes": "Lockdown Lasts (Minutes)",
      "lockdown_minutes_hint": "Vex lifts the lockdown after this long, even if it restarts in between.",
      "message_window": "Message Window (Seconds)",
      "min_account_age": "Minimum Account Age (Days)",
      "min_account_age_hint": "Set to 0 to turn the gate off.",
      "min_accounts": "Smallest Group",
      "min_accounts_hint": "Leave empty to use the preset.",
      "min_length": "Shortest Message Compared",
      "min_length_hint": "Shorter messages, like gm or lol, never count on their own.",
      "min_words": "Fewest Words Compared",
      "no_actions": "Nothing was done.",
      "not_found": "That raid could not be found.",
      "override": {
        "alert_at": "Alert",
        "contain_at": "Contain",
        "lockdown_at": "Lockdown",
        "watch_at": "Watch"
      },
      "overrides": "Score Thresholds",
      "overrides_hint": "Leave empty to use the preset's values.",
      "pause_joins": "Pause Joins",
      "pause_joins_hint": "At Lockdown, new members are held. This uses verification's lockdown if verification is on, and the server's verification level if it is not.",
      "ping_role": "Ping Role",
      "ping_role_hint": "This role gets pinged on raid alerts (optional).",
      "post_cases": "Post Each Raid Case to the Mod-Log",
      "post_cases_hint": "Off by default. A large raid would post hundreds of cases, so the raid alert and summary stand in for them. The cases are still recorded.",
      "preset": "Preset",
      "preset_hint": "Relaxed needs more evidence before acting. Strict acts sooner.",
      "profile_window": "Name and Avatar Window (Seconds)",
      "quarantine_role": "Quarantine Role",
      "quarantine_role_hint": "Given to held accounts when Contain is set to quarantine. If empty, verification's unverified role is used.",
      "raid_line": "{accounts} accounts, score {score}",
      "repeat_channels": "Repetition Is Normal",
      "repeat_channels_hint": "Giveaway entries, counting and similar. Matching messages here count for a fifth as much.",
      "responses_description": "Alert only notifies staff. Contain holds the accounts and cleans up after them. Lockdown happens only if a raid keeps growing after it was contained. Kick and ban are never automatic unless you turn them on below.",
      "responses_title": "What Vex Does",
      "retention": "Keep Evidence (Days)",
      "retention_hint": "Raid evidence and actions are deleted after this many days. The most is 180.",
      "saved": "Raid protection settings saved and synced to the bot.",
      "score": "score {score}",
      "sensitive_channels": "Sensitive",
      "sensitive_channels_hint": "A welcome or rules channel. Matching messages here count for more.",
      "shadow": "Shadow Mode",
      "shadow_badge": "Shadow Mode",
      "shadow_hint": "Vex posts the same alerts but does not act on anyone. The alert says what it would have done.",
      "shadow_until": "On until {date}. After that, Vex starts acting on raids.",
      "shadow_week": "Watch for a Week First",
      "simulate_description": "Run a simulated raid through your saved settings. Nothing is posted, stored or changed.",
      "simulate_failed": "The simulation could not run.",
      "simulate_no_detection": "Nothing was detected.",
      "simulate_title": "Try It",
      "simulate_unsaved": "You have unsaved changes. The simulation uses your saved settings.",
      "slowmode_seconds": "Slowmode (Seconds)",
      "slowmode_seconds_hint": "Applied to the channels the raid posted in. 0 turns it off.",
      "staff_description": "Who hears about raids, and who may act on them.",
      "staff_title": "Staff and Alerts",
      "subtitle": "Catch many accounts acting together, such as the same message, the same avatar or a sudden wave of joins, and respond before they do damage.",
      "tab": {
        "raids": "Raids",
        "settings": "Settings"
      },
      "thresholds_now": "In force now: Watch at {watch}, Alert at {alert}, Contain at {contain}, Lockdown at {lockdown}. A group needs at least {min} new accounts.",
      "title": "Raid Protection",
      "wave_multiplier": "Join Wave Multiplier",
      "wave_multiplier_hint": "How many times above this server's normal join rate counts as a wave.",
      "within_seconds": "Within (Seconds)"
    },
    "ratings": {
      "all_title": "All ratings",
      "anonymous_note": "Ratings are shown without saying which server left them. Yours is the only one you can see identified, and only to you.",
      "body_placeholder": "What did you use it for, and how did it go?",
      "cancel": "Cancel",
      "count_many": "{count} ratings",
      "count_one": "1 rating",
      "edit": "Edit",
      "low_confidence": "There are not many ratings yet, so this score can move a lot with the next one.",
      "no_body": "No comment was left with this rating.",
      "none_yet": "No server has rated this yet. If you have used it, yours would be the first.",
      "per_server_note": "Ratings are left by a server, not by a person, so each server gets one. Ratings from servers that actually installed the plugin count for more than ratings from servers that did not.",
      "prompt": "Rate this plugin on behalf of your server.",
      "save": "Save rating",
      "save_failed": "That rating could not be saved.",
      "saved": "Rating saved.",
      "star_label": "{star} stars",
      "title": "Ratings",
      "verified": "Installed it",
      "verified_count": "{count} from servers that installed it",
      "weighted_note": "The plain average is {raw}. The score above counts ratings from servers that installed the plugin more heavily.",
      "withdraw": "Withdraw",
      "withdraw_failed": "That rating could not be withdrawn.",
      "withdrawn": "Your server's rating has been withdrawn.",
      "write": "Write a rating",
      "yours": "Your server's rating"
    },
    "reactionroles": {
      "add_role": "Add Role",
      "button_label": "Button label",
      "channel": "Channel",
      "channel_hint": "Where the menu message is posted.",
      "default_title": "Pick your roles",
      "delete_failed": "Delete failed",
      "delete_menu": "Delete Menu",
      "deleted": "Menu deleted.",
      "description": "Description",
      "edit_menu": "Edit Menu",
      "empty_description": "Create a menu, add role buttons, and publish it so members can self-assign.",
      "empty_title": "No role menus yet",
      "exclusive": "Exclusive: only one role from this menu at a time",
      "exclusive_tag": "exclusive",
      "new_menu": "New Menu",
      "no_roles": "No roles yet. Add one to make a button.",
      "pick_channel": "Pick a channel before publishing.",
      "privileged_role": "The \"{role}\" role carries the {permission} permission, so it can't be given out by a button anyone can press. Pick a role with no staff permissions.",
      "publish_failed": "Publish failed",
      "published_hint": "Published. Republish to push your changes.",
      "publishing": "Publishing to Discord...",
      "role_count": "{count} role",
      "roles_count": "Roles ({count}/25)",
      "roles_plural_count": "{count} roles",
      "save": "Save",
      "save_and_publish": "Save & Publish",
      "save_failed": "Failed to save",
      "saved": "Menu saved.",
      "status_draft": "Draft",
      "status_published": "Published",
      "subtitle": "Build self-assign role menus with buttons, then publish them to a channel.",
      "title": "Reaction Roles",
      "title_label": "Title",
      "unknown_role": "One of those roles isn't in this server any more. Refresh the page and pick again.",
      "unpublished_hint": "Not yet published."
    },
    "reports": {
      "cadence_daily": "Every day",
      "cadence_label": "How often",
      "cadence_monthly": "On the 1st of each month",
      "cadence_weekly": "Every Monday",
      "catalog_description": "Every report Vex can export. Pick a window, then download the CSV.",
      "catalog_title": "Reports",
      "channel_hint": "Where the digest is posted. Without a channel Vex cannot send it.",
      "channel_label": "Digest channel",
      "columns_label": "Columns",
      "digest_description": "Vex posts a summary of the reports you pick, on a schedule, in one channel.",
      "digest_enabled": "Send a recurring digest",
      "digest_enabled_hint": "Turn this off to keep the reports and stop the scheduled post.",
      "digest_title": "Scheduled digest",
      "download": "Download CSV",
      "empty_description": "Vex found no reports to list. This usually means the Insights module is still starting up.",
      "empty_note": "A digest for a server with no activity says so instead of posting an embed full of zeros.",
      "empty_title": "No reports are available",
      "hour_hint": "The digest is posted at this hour, in UTC.",
      "hour_label": "Hour of day (UTC)",
      "include_hint": "If nothing is selected, the digest covers every report.",
      "include_label": "What the digest covers",
      "module_hint": "Vex needs the Send Messages permission in the digest channel.",
      "range_days": "Last {days} days",
      "range_label": "Time range",
      "saved": "Digest settings saved.",
      "subtitle": "Download any report as CSV, or schedule a recurring digest to a channel.",
      "title": "Exportable Reports"
    },
    "retention": {
      "col_joined": "Joined",
      "col_retained": "Retained",
      "col_still_here": "Still here",
      "col_week": "Week joined",
      "empty_description": "Vex records member cohorts from now on. The first row appears after your server sees a week of joins.",
      "empty_title": "No retention data yet",
      "export": "Export CSV",
      "range_label": "Time range",
      "range_weeks": "Last {weeks} weeks",
      "subtitle": "How many members who joined in a given week are still in your server.",
      "table_description": "Each row groups the members who joined during that week.",
      "table_title": "Cohorts by join week",
      "title": "Retention Cohorts"
    },
    "rolerestore": {
      "automatic_description": "Decide whether returning members get their roles back on their own, or only when a moderator says so.",
      "automatic_title": "Restoring automatically",
      "excluded_description": "For roles that should be earned again rather than inherited on return.",
      "excluded_roles": "Excluded roles",
      "excluded_roles_hint": "These are never restored, even if the member had them. Vex also skips roles that were deleted, roles managed by another app, and any role above its own highest role.",
      "excluded_title": "Roles to never give back",
      "how_description": "Vex records a member's roles the moment they leave, and can give them back when they return.",
      "how_title": "How it works",
      "on_rejoin": "Restore roles when a member rejoins",
      "on_rejoin_hint": "With this off, roles are still recorded and a moderator can hand them back with /restore-roles. Leaving it off is the safer choice: someone who had staff roles removed and then left would otherwise return with them.",
      "saved": "Role restore settings saved.",
      "snapshot_note": "Roles are only recorded while this is switched on. Turning it on now does nothing for people who have already left, because Discord does not tell Vex what roles a member had once they are gone.",
      "subtitle": "Give members back the roles they had if they leave and come back.",
      "title": "Role Restore"
    },
    "roles": {
      "add_rule": "Add another rotating role",
      "allow_repeat": "Let the same person win again",
      "allow_repeat_hint": "On, the most active member wins even if they won last time. Off, the current holder is skipped so the role moves around.",
      "announce_channel": "Announce In",
      "announce_hint": "Vex posts here when the role moves. Leave it empty for no announcement.",
      "clock_description": "Rotations happen on the clock, not counted from when you saved them. Every 24 hours means midnight, and every hour means on the hour.",
      "clock_title": "The clock",
      "decay_exempt": "Never Decays For",
      "decay_exempt_hint": "Members with these roles keep their roles no matter how quiet they are.",
      "decay_note": "Vex checks once a day. A member Vex has never seen active counts as inactive.",
      "decay_roles": "Roles That Decay",
      "decay_roles_hint": "If this is empty, nothing decays.",
      "decay_saved": "Role decay settings saved and synced to the bot.",
      "decay_subtitle": "Take a role back when someone stops being active.",
      "decay_title": "Role Decay",
      "fires_daily": "Moves every day at midnight ({zone}).",
      "fires_days": "Moves every {days} days at midnight ({zone}).",
      "fires_divides_day": "Moves every {hours} hours, starting at midnight ({zone}).",
      "fires_hourly": "Moves every hour, on the hour ({zone}).",
      "fires_hours": "Moves every {hours} hours, counted from Monday midnight ({zone}).",
      "fires_weekly": "Moves every Monday at midnight ({zone}).",
      "inactive_days": "Remove After (Days Inactive)",
      "inactive_hint": "Sending a message or joining a voice channel both count as active.",
      "interval_hint": "168 hours is one week.",
      "interval_hours": "Move It Every (Hours)",
      "metric": "Won By",
      "metric_hint": "Activity is measured with the same data the Insights pages use.",
      "metric_messages": "Most messages",
      "metric_voice": "Most time in voice",
      "min_score": "Minimum to win",
      "min_score_hint": "The winner needs at least this much activity over the window. Leave it at 0 and any activity at all is enough, so one message can win a quiet week.",
      "no_rules": "No rotating roles yet. Add one to hand a role to whoever is most active.",
      "remove_rule": "Remove",
      "rotation_exempt": "Cannot Win It",
      "rotation_exempt_hint": "Members with these roles are skipped. The role still goes to the next person, so staff cannot freeze it.",
      "rotation_exempt_users": "People who never win",
      "rotation_exempt_users_hint": "Specific members who are skipped when picking a winner, whatever roles they have.",
      "rotation_note": "If nobody was active during the window, Vex leaves the role where it is rather than taking it off everyone.",
      "rotation_saved": "Role rotation settings saved and synced to the bot.",
      "rotation_subtitle": "Hand a role to whoever led the server over the last period, then move it on.",
      "rotation_title": "Role Rotation",
      "rule_label": "Name",
      "rule_label_hint": "What to call this one on this page. If you leave it empty, the role's own name is used.",
      "rule_untitled": "New rotating role",
      "the_role": "The Role",
      "the_role_hint": "The role that moves. It has to sit below Vex's own highest role.",
      "timezone": "Timezone",
      "timezone_hint": "Which midnight the daily rotations use. Everything below is aligned to this clock.",
      "warn_days": "Warn This Many Days First",
      "warn_hint": "Vex sends one direct message before the role is removed. Set 0 to remove it without warning.",
      "window_days": "Judged On The Last (Days)",
      "window_hint": "Usually the same length as the interval."
    },
    "rolestats": {
      "bot_offline_description": "Counting members per role needs the bot's connection to Discord. The dashboard will not guess at the numbers. This page fills in on its own once the bot is back.",
      "bot_offline_title": "Vex is offline, so the current role counts are unavailable.",
      "counts_description": "Every role in the server, largest first. A role with no members is still listed.",
      "counts_members": "{count} members",
      "counts_members_none": "No members",
      "counts_members_one": "1 member",
      "counts_share": "{pct}% of members",
      "counts_title": "Members per role",
      "empty_description": "Create a role in Discord and give it to a member. The counts appear here as soon as the bot can see them.",
      "empty_title": "There are no roles to report on yet.",
      "excluded_managed_note_one": "{count} bot or integration role is also left out. Discord assigns those automatically, so its size is not a decision anyone made.",
      "excluded_managed_note_other": "{count} bot and integration roles are also left out. Discord assigns those automatically, so their size is not a decision anyone made.",
      "excluded_note": "The @everyone role is left out of these numbers, because every member holds it. Its size is the member count above.",
      "export": "Export CSV",
      "growth_change_down_one": "Down {count} member",
      "growth_change_down_other": "Down {count} members",
      "growth_change_flat": "No change",
      "growth_change_up_one": "Up {count} member",
      "growth_change_up_other": "Up {count} members",
      "growth_days_recorded_one": "{count} day recorded",
      "growth_days_recorded_other": "{count} days recorded",
      "growth_description": "How each role's size has moved. Vex records the counts once a day, so today's chart starts the day the bot first took a snapshot.",
      "growth_empty_description": "Vex records how many members hold each role once a day. Come back tomorrow and the first trend will be here. Nothing needs to be turned on.",
      "growth_empty_title": "There is no role history yet.",
      "growth_point_one": "{day}: {count} member",
      "growth_point_other": "{day}: {count} members",
      "growth_title": "Growth over time",
      "overlap_cell": "{both} of {total} members with {role} also have {other}. That is {pct}% of {role}.",
      "overlap_description": "How many members hold both roles. Read a row as a share of that row's role: if the Staff row shows 100% under Member, then every member of Staff also has Member.",
      "overlap_empty": "At least two roles need members before there is any overlap to show.",
      "overlap_self": "Same role.",
      "overlap_title": "Role overlap",
      "overlap_truncated": "Only the {count} largest roles are compared here. A grid of every role against every other role is too large to read.",
      "range_days": "Last {days} days",
      "range_label": "Time range",
      "role_unknown": "Deleted role ({id})",
      "stat_largest": "Largest role",
      "stat_largest_none": "None yet",
      "stat_members": "Members",
      "stat_roles": "Roles counted",
      "subtitle": "Members per role, growth over time, and how much your roles overlap.",
      "title": "Role Stats"
    },
    "scheduled": {
      "cancel": "Cancel",
      "cancel_failed": "Couldn't cancel",
      "cancelled": "Scheduled #{id} cancelled.",
      "channel": "Channel",
      "create_failed": "Couldn't schedule",
      "created": "Message scheduled.",
      "days": "days",
      "empty_description": "Create one to get started.",
      "empty_title": "Nothing scheduled",
      "first_send_in": "First send in",
      "hours": "hours",
      "message": "Message",
      "message_placeholder": "What should the bot post?",
      "minutes": "minutes",
      "new_message": "New Message",
      "new_message_title": "New Scheduled Message",
      "next_run": "next {when}",
      "repeat": "Repeat",
      "repeat_daily": "Daily",
      "repeat_hourly": "Hourly",
      "repeat_none": "Don't repeat",
      "repeat_weekly": "Weekly",
      "schedule": "Schedule",
      "subtitle_1": "Schedule one-off or repeating announcements, right from here or with",
      "subtitle_2": ".",
      "title": "Scheduled Messages"
    },
    "seasons": {
      "board": "Leaderboard",
      "cancel": "Cancel",
      "confirm": "Yes, end it",
      "current_title": "Current season",
      "description": "Run a leaderboard in numbered seasons and keep a permanent record of who won each one.",
      "end": "End season now",
      "end_confirm_keeps": "Ending this season records the top {size} members in the hall of fame. Scores on this leaderboard are not cleared.",
      "end_confirm_resets": "Ending this season records the top {size} members in the hall of fame, then sets every score on this leaderboard back to zero. That cannot be undone.",
      "end_failed": "That season could not be ended.",
      "ended_toast": "Season ended and the podium recorded.",
      "ends": "ends {when}",
      "hall_empty": "No seasons have finished yet. When one does, its podium is recorded here permanently.",
      "hall_title": "Hall of fame",
      "keeps_badge": "Keeps scores",
      "length_hint": "Set 0 for a season that runs until you end it yourself.",
      "length_label": "Length in days",
      "name_hint": "Leave this empty and it will be named after its number.",
      "name_label": "Season name",
      "no_season": "No season is running on this leaderboard.",
      "no_season_body": "Start one to begin a numbered run. Scores keep counting either way, a season just gives them a beginning and an end.",
      "open_ended": "runs until you end it",
      "resets_badge": "Resets scores",
      "running": "Season {number}: {name}",
      "start": "Start a season",
      "start_failed": "That season could not be started.",
      "start_title": "Start a new season",
      "started": "started {when}",
      "started_toast": "Season started.",
      "title": "Leaderboard Seasons"
    },
    "setup": {
      "apply": "Apply",
      "back": "Back",
      "check": {
        "log_channel": "Choose a moderation log channel",
        "mod_roles": "Choose your moderator roles",
        "role_position": "Move Vex's role higher",
        "run_setup": "Run the setup wizard",
        "ticket_type": "Create a ticket type",
        "welcome_channel": "Choose a welcome channel"
      },
      "check_hint": {
        "log_channel": "Vex records every moderation action here. If the channel was deleted, choose a new one.",
        "mod_roles": "Members with these roles can use moderation commands.",
        "role_position": "Vex can only give or remove roles below its own role. Drag Vex's role above these in Server Settings, Roles: {roles}.",
        "run_setup": "Answer a few questions and Vex turns on what your server needs.",
        "ticket_type": "Members cannot open a ticket until at least one ticket type exists.",
        "welcome_channel": "Welcome messages are on, but Vex does not know where to post them."
      },
      "checklist_fix": "Fix",
      "checklist_hide": "Hide checklist",
      "checklist_progress": "{done} of {total} done",
      "checklist_title": "Setup checklist",
      "done_body": "Your features are on. The Overview shows a checklist of anything that still needs attention.",
      "done_overview": "Go to Overview",
      "done_title": "Vex is set up",
      "essentials_body": "The features you picked need these to work. You can skip any of them and set them later.",
      "essentials_title": "A few essentials",
      "failed": "That did not work. Try again.",
      "goal": {
        "activity": "Reward activity",
        "fun": "Games and fun",
        "insights": "Understand activity",
        "safety": "Keep the server safe",
        "support": "Tickets and suggestions",
        "welcome": "Welcome new members"
      },
      "goal_hint": {
        "activity": "Levels for chatting and talking in voice, a starboard and birthday messages.",
        "fun": "The economy, counting, polls and away messages.",
        "insights": "Charts of how active your server is. Vex starts collecting from now.",
        "safety": "Moderation commands, automatic spam and raid protection, and a moderation log.",
        "support": "Private support tickets and a suggestions channel.",
        "welcome": "Posts a welcome message when somebody joins."
      },
      "goals_body": "Pick as many as you like. Each goal turns on a few features.",
      "goals_title": "What should Vex do?",
      "missing_hint": "These features will not work until this is set. The setup checklist on the Overview will remind you.",
      "missing_title": "Still needed",
      "module": {
        "afk": "Away messages",
        "automod": "Automod",
        "birthdays": "Birthdays",
        "counting": "Counting",
        "economy": "Economy",
        "leveling": "Leveling",
        "logging": "Server logs",
        "moderation": "Moderation",
        "polls": "Polls",
        "raid": "Raid protection",
        "starboard": "Starboard",
        "suggestions": "Suggestions",
        "tickets": "Tickets",
        "voice_leveling": "Voice leveling",
        "welcome": "Welcome messages"
      },
      "need": {
        "log_channel": "Moderation log channel",
        "mod_roles": "Moderator roles",
        "welcome_channel": "Welcome channel"
      },
      "need_hint": {
        "log_channel": "Vex posts every moderation action and server change here. Pick a channel only staff can see.",
        "mod_roles": "Members with these roles can use moderation commands.",
        "welcome_channel": "Vex posts the welcome message here."
      },
      "next": "Next",
      "nothing_to_turn_on": "Everything you picked is already on.",
      "review_body": "Nothing changes until you press Apply.",
      "review_title": "Review",
      "setting": {
        "analytics_preset": "Analytics, with the starter preset",
        "logging_default_channel_id": "Server log channel",
        "moderation_mod_log_channel_id": "Moderation log channel",
        "moderation_mod_role_ids": "Moderator roles",
        "welcome_welcome_channel_id": "Welcome channel",
        "welcome_welcome_enabled": "Welcome messages on"
      },
      "skip": "Skip for now",
      "step": {
        "essentials": "Essentials",
        "goals": "Goals",
        "review": "Review",
        "type": "Server"
      },
      "subtitle": "Answer a few questions and Vex turns on what your server needs. You can change everything later.",
      "title": "Set Up Vex",
      "turn_off_body": "These are on but have never been set up. Switch off anything you do not need and it disappears from your dashboard. You can switch it back on later.",
      "turn_off_title": "Features you have not set up",
      "type": {
        "community": "Community",
        "friends": "Friends",
        "gaming": "Gaming",
        "support": "Support"
      },
      "type_body": "This only decides which goals start ticked on the next step.",
      "type_hint": {
        "community": "A public server built around a topic, a creator or a project.",
        "friends": "A small, private server for people who already know each other.",
        "gaming": "A server for a game, a clan or people who play together.",
        "support": "A server where people come to ask for help with a product or service."
      },
      "type_title": "What kind of server is this?",
      "will_set": "Will set",
      "will_turn_on": "Will turn on"
    },
    "shifts": {
      "book": "Add a shift",
      "book_failed": "That shift could not be added.",
      "book_title": "Add a shift",
      "booked": "Shift added to the rota.",
      "cancel": "Cancel shift",
      "cancel_failed": "That shift could not be cancelled.",
      "cancel_note": "Cancelling from here works on anybody's shift, because reaching this page already needed permission to manage staff. In Discord, staff can only drop their own.",
      "cancelled": "Shift removed from the rota.",
      "coverage": "Coverage",
      "coverage_hint": "The share of the window with at least one person rostered.",
      "description": "Who is on duty, when, and the stretches where nobody is.",
      "empty_body": "Add a shift and it shows up here. Until then the whole window counts as uncovered.",
      "empty_title": "Nothing Rostered",
      "end_label": "Ends",
      "gap_length": "{hours} hours",
      "gap_span": "{start} to {end}",
      "gaps_hint": "Stretches inside the window with no shift covering them. Short gaps are not listed.",
      "gaps_none": "Every part of this window has somebody on.",
      "gaps_title": "Nobody rostered",
      "label_hint": "Optional. Something like Evening or Weekend cover.",
      "label_label": "Label",
      "member_hint": "The Discord user id of the person taking the shift.",
      "member_label": "Member",
      "nobody_on": "Nobody is on duty right now.",
      "on_now": "On duty right now",
      "rota_title": "Rostered",
      "start_label": "Starts",
      "title": "Shift Scheduler",
      "window": "Next {days} days"
    },
    "shoproles": {
      "add_title": "Sell a role",
      "blurb": "Description",
      "blurb_hint": "Optional. Shown to members in the shop.",
      "delist": "Remove listing",
      "delisted": "Listing removed. Members who already bought the role keep it until it runs out.",
      "description": "Sell roles for currency. Timed roles are removed automatically when they run out.",
      "duration": {
        "custom": "Custom",
        "day": "1 day",
        "month": "1 month",
        "permanent": "Permanent",
        "week": "1 week"
      },
      "duration_hint": "A permanent role can only be bought once. Timed roles can be extended.",
      "duration_label": "How long it lasts",
      "empty_body": "Pick a role above to put it in the shop.",
      "empty_title": "Nothing For Sale",
      "expires": "expires {when}",
      "held": "Currently held",
      "held_hint": "Removing a listing does not take these away. Members paid for time they still have.",
      "lapsed": "expired, waiting to be swept",
      "left": "{count} left",
      "limited": "Limited",
      "nobody": "Nobody has bought a role yet.",
      "pick_role": "Choose a role...",
      "price": "Price",
      "role": "Role",
      "role_hint": "Vex needs to be above this role to hand it out.",
      "save": "Save listing",
      "save_failed": "That listing could not be saved.",
      "saved": "Listing saved.",
      "stock": "Stock",
      "stock_hint": "Limited stock counts down with each purchase and cannot go below zero.",
      "summary": "{price} · {duration} · {stock}",
      "title": "Role Shop",
      "unknown_role": "Deleted role",
      "unlimited": "Unlimited"
    },
    "slowmode": {
      "add_channel": "Add a channel",
      "always_description": "A slowmode the channel keeps at all times. Vex never goes below it, and a busy moment can still raise it further.",
      "always_hint": "Use 0 to turn this off. The channel then only gets slowmode when it is busy.",
      "always_label": "Permanent Slowmode (Seconds)",
      "always_title": "Always On",
      "announce": "Announce in the channel",
      "announce_hint": "Posts a short notice in the channel when slowmode is applied or removed. The notice deletes itself.",
      "badge_always": "Always {seconds}s",
      "badge_custom": "{count} setting changed",
      "badge_custom_plural": "{count} settings changed",
      "badge_ignored": "Never slowed",
      "badge_inherits": "Follows the default",
      "channels_hint": "Pick a channel to give it settings of its own.",
      "channels_title": "Channels",
      "custom": "Set for this channel",
      "default_entry": "Server default",
      "default_entry_hint": "Every channel starts from these settings.",
      "editor_channel_description": "Each setting either follows the server default or takes over for this channel alone.",
      "inherit": "Follow the default",
      "inherited_value": "Following the server default of {value}.",
      "lift_after": "Lift After Calm (Seconds)",
      "messages": "Messages",
      "never_channels": "Never Slow These",
      "never_channels_hint": "These channels are never slowed, even if they're in the watch list.",
      "no_channels": "No channel has its own settings yet. Every channel follows the server default.",
      "permission_note": "Vex needs the Manage Channels permission for this. Also note that members with Manage Messages bypass slowmode entirely. That's how Discord works, not something Vex controls.",
      "rate_hint": "That's roughly {rate} messages per second in a single channel.",
      "remove_channel": "Remove this channel",
      "removed": "That channel follows the server default again. Save to apply it.",
      "response_description": "Vex only removes slowmode that it applied itself. If you set slowmode on a channel manually, it won't be touched.",
      "response_title": "Response",
      "saved": "Slowmode settings saved and synced to the bot.",
      "seconds": "Seconds",
      "set_to": "Set Slowmode To (Seconds)",
      "subtitle": "Automatically apply slowmode to busy channels and remove it once activity drops.",
      "summary_line": "{messages} messages in {window}s applies a {slowmode}s slowmode",
      "title": "Slowmode",
      "trigger_description": "How much activity it takes before Vex applies slowmode.",
      "trigger_title": "Trigger",
      "unknown_channel": "Deleted channel",
      "watch_channels": "Watch Only These Channels",
      "watch_channels_hint": "If empty, all text channels are watched.",
      "where_description": "By default this covers every text channel.",
      "where_title": "Where It Applies",
      "within": "within"
    },
    "social": {
      "add_feed": "Add Feed",
      "backlog_note": "Vex only announces posts published after you add a feed. Adding a feed never posts its back catalogue. Vex will not fetch an address on a private network.",
      "bad_url": "This needs to be a full http or https address.",
      "channel": "Announce In",
      "feed_cap": "Using {used} of {max} feeds.",
      "feed_url": "Feed URL",
      "feed_url_hint": "The address of the RSS or Atom feed itself, not the page it belongs to. Most sites link to it as RSS or Feed.",
      "feeds_description": "Each feed is announced in the channel you pick for it. Vex reads both RSS and Atom feeds.",
      "feeds_title": "Feeds",
      "interval": "Check Every (Minutes)",
      "interval_hint": "How often Vex fetches each feed. The shortest allowed interval is 5 minutes.",
      "invalid_feeds": "Every feed needs a valid address and a channel.",
      "no_feeds_description": "Add one to announce new posts as they are published.",
      "no_feeds_title": "No feeds",
      "ping_role": "Ping Role",
      "ping_role_hint": "This role is mentioned with every new post from this feed. Leave it empty to announce without a ping.",
      "remove_feed": "Remove this feed",
      "saved": "Social notification settings saved and synced to the bot.",
      "schedule_description": "Every feed is fetched once per check. A shorter interval means more requests, so pick the slowest one you are happy with.",
      "schedule_title": "Checking",
      "subtitle": "Announce new posts from an RSS or Atom feed in a channel.",
      "title": "Social Notifications"
    },
    "staffactions": {
      "add_rank": "Add rank",
      "add_threshold": "Add threshold",
      "add_track": "Add track",
      "add_type": "Add type",
      "announce_channel": "Announcements channel",
      "announce_channel_hint": "Where the signed notices are posted.",
      "any_status": "Any status",
      "any_type": "Any action type",
      "apply_roles": "Vex changes the roles",
      "approvals": "Approvals needed",
      "approver_roles": "Approver roles",
      "approver_roles_hint": "These roles can accept or deny cases, unless an action type names its own approvers.",
      "case_emoji": "Case emoji",
      "case_emoji_hint": "Shown after the reviewer ping. Leave empty for none.",
      "cases_description": "{total} cases. Accept, deny and revoke cases in Discord, where Vex can check who outranks whom.",
      "cases_title": "Cases",
      "decide_in_discord": "Decisions are made with the buttons on the case in Discord.",
      "deny_reason": "Denied: {reason}",
      "dm_member": "Send the member the notice",
      "effect": {
        "down": "Move down a rank",
        "none": "No rank change",
        "remove_from_track": "Remove from the track",
        "suspend": "Suspend (remove staff roles for a time)",
        "up": "Move up a rank"
      },
      "empty_description": "Cases filed with /staff action, /staff promote and /staff demote show up here.",
      "empty_title": "No cases yet",
      "escalation_description": "When a member's active strike weight reaches a threshold, Vex opens a case proposing an action. A person still has to approve it.",
      "escalation_title": "Strike thresholds",
      "escalation_type": "Proposed action",
      "escalation_weight": "Active strike weight",
      "evidence_channel": "Evidence channel",
      "evidence_channel_hint": "Where attached evidence is kept. Discord attachment links expire, so Vex posts a copy here.",
      "expires_days": "Stops counting after (days)",
      "expiry_hours": "Case expiry (hours)",
      "expiry_hours_hint": "A case nobody decides in time expires. 0 means cases never expire.",
      "failed_hint": "The role change failed. The case thread in Discord says why.",
      "file_button": "File case",
      "file_description": "Files a case for review in Discord. Promotions, demotions and removals are filed in Discord, where you see the exact role change first.",
      "file_need_all": "Enter a user ID, an action type and a reason.",
      "file_title": "File a case",
      "filed": "Case #{code} filed. Vex will post it for review.",
      "filed_by": "Filed by",
      "followup_days": "Follow-up review after (days)",
      "leave": {
        "block": "Do not allow it",
        "ignore": "Ignore leave",
        "warn": "Warn the filer"
      },
      "legacy": "Moved from the old {kind} records, number {number}.",
      "log_channel": "Log channel",
      "log_channel_hint": "Where Vex reports problems with Staff Actions.",
      "manager_roles": "Manager roles",
      "manager_roles_hint": "These roles can file cases. Server admins always can.",
      "min_days": "Minimum days before promotion",
      "move_down": "Move down",
      "move_up": "Move up",
      "new_track": "New track name",
      "new_type": "New action type",
      "new_type_hint": "Lowercase letters, numbers, dots, dashes and underscores.",
      "notes": "Notes",
      "on_leave": "If the member is on leave",
      "open_case": "Open the case",
      "open_notice": "Open the notice",
      "probation_days": "Probation days",
      "public_notice": "Post a notice",
      "rank_extra_roles": "Extra roles given with it",
      "rank_in_discord": "Rank changes are filed in Discord with /staff promote or /staff demote, so the role change can be checked first.",
      "rank_name": "Rank name",
      "rank_remove_roles": "Roles taken away with it",
      "rank_role": "Rank role",
      "ranks_order_hint": "The first rank is the lowest.",
      "reason": "Reason",
      "reminder_hours": "Reminder (hours before expiry)",
      "reminder_hours_hint": "Reviewers are pinged this long before a case expires. 0 means no reminder.",
      "remove": "Remove",
      "remove_type": "Remove type",
      "requires_approval": "Needs approval",
      "review_channel": "Review channel",
      "review_channel_hint": "A private channel. Each case gets its own discussion thread here.",
      "reviewer_role": "Reviewer role",
      "reviewer_role_hint": "Pinged on every new case.",
      "revoke_reason": "Revoked: {reason}",
      "sample_signer": "Sample manager",
      "sample_subject": "Sample member",
      "saved": "Staff Actions settings saved.",
      "self_approval": "Let managers approve their own cases",
      "self_approval_hint": "Off by default. When it is off, somebody other than the filer has to decide each case.",
      "setup_description": "Where cases and notices are posted, and who can file and approve them.",
      "setup_title": "Channels and roles",
      "strike_weight": "Strike weight",
      "subject_id": "Staff member's user ID",
      "subtitle": "Promotions, demotions and discipline. Each one is reviewed and approved before it is carried out.",
      "suspension_days": "Suspension length (days)",
      "system_filer": "Vex (automatic proposal)",
      "template": {
        "case": "Review case",
        "discipline": "Discipline notice",
        "promotion": "Promotion notice"
      },
      "template_bad_json": "This is not valid JSON, so the preview shows the last valid version.",
      "template_custom": "This layout is customized.",
      "template_default": "This layout uses the default.",
      "template_invalid": "The {kind} layout breaks one of Discord's embed limits.",
      "template_invalid_preview": "This layout breaks one of Discord's embed limits and would be refused.",
      "template_placeholder": "{\"content\": \"{subject}\", \"embed\": {\"title\": \"...\", \"description\": \"...\"}}",
      "template_reset": "Reset to default",
      "template_tokens": "Tokens: {subject} {subject_id} {subject_name} {signer} {code} {action} {reason} {reason_quoted} {notes} {rank} {roles} {manager} {reviewer} {emoji}. Image slots can use {subject_avatar} and {signer_avatar}.",
      "templates_description": "Change how cases and notices look. Leave a layout empty to use the default.",
      "templates_title": "Layouts",
      "title": "Staff Actions",
      "tracks_description": "Each track is a ladder of ranks. Promotions and demotions move a member along their track.",
      "tracks_title": "Rank tracks",
      "type": "Action type",
      "type_approvers": "Approver roles",
      "type_approvers_hint": "Leave empty to use the module's approver roles.",
      "type_effect": "Effect on rank",
      "type_name": "Name",
      "type_name_hint": "Leave empty to use the built-in name.",
      "type_template": "Notice layout",
      "types_description": "What each kind of action does. The eight built-in types can be changed or removed.",
      "types_title": "Action types",
      "unknown_template": "There is no layout with that name."
    },
    "stafffeedback": {
      "acknowledged": "Note marked as read.",
      "anonymous": "Anonymous",
      "channel": "Inbox Channel",
      "channel_hint": "Notes are posted here as well as shown below. Pick a channel only leadership can read. If this is empty the box can't take notes at all.",
      "delete": "Delete",
      "deleted": "Note deleted.",
      "empty_description": "Staff send notes with /staff-feedback send in Discord. An empty box usually means people don't know it exists yet, so it is worth telling them.",
      "empty_title": "The box is empty",
      "failed": "That didn't work.",
      "hours": "Window (Hours)",
      "hours_hint": "How long the window lasts.",
      "inbox_count": "{unread} unread out of {total}.",
      "inbox_title": "Inbox",
      "limit_description": "How many notes one person can send before Vex asks them to wait.",
      "limit_title": "Flood Protection",
      "mark_read": "Mark read",
      "max": "Notes Allowed",
      "max_hint": "How many notes one person can send in the window.",
      "pill_new": "Unread",
      "pill_read": "Read",
      "privacy_body": "A note is stored with no user ID and no link to an account. There is nothing in the database to look up, so nobody can work out who wrote what, including a server owner and including us.",
      "privacy_limit": "One honest limit. To stop one person flooding the box, Vex stores a scrambled fingerprint of the sender that is only ever used to count their recent notes. It is never shown here, and it cannot be turned back into a name.",
      "privacy_title": "You cannot see who wrote these notes, and neither can Vex.",
      "saved": "Staff feedback settings saved and synced to the bot.",
      "sent_meta": "Sent {when}",
      "submit": {
        "button": "Send anonymously",
        "failed": "That feedback could not be sent.",
        "hint": "Send anonymous feedback to leadership. Your name is never stored or shown.",
        "placeholder": "What's on your mind?",
        "sending": "Sending...",
        "sent": "Feedback sent anonymously.",
        "title": "Give feedback"
      },
      "subtitle": "A box your staff can use to tell leadership something without putting their name on it.",
      "title": "Staff Feedback",
      "where_description": "Where Vex posts each anonymous note.",
      "where_title": "Delivery"
    },
    "staffgoals": {
      "add": "Set a goal",
      "add_title": "Set an activity goal",
      "board_note": "Standings are shown in Discord rather than here. Working out which goal applies to somebody needs their roles, and Discord gives no way to list the members of a role, so the bot is the only side that can answer it honestly.",
      "cancel": "Cancel",
      "description": "How much you expect each staff role to do, and over what period.",
      "empty_body": "Set a target for a role and Vex can tell you who is short of it. Nothing is enforced automatically.",
      "empty_title": "No Goals Set",
      "goal_line": "{target} {metric}",
      "metric_label": "Counts",
      "overlap_note": "A role gets one target per metric. If somebody holds two roles with different targets for the same thing, the higher one applies.",
      "period_label": "Period",
      "remove": "Remove",
      "remove_failed": "That goal could not be removed.",
      "removed": "Goal removed.",
      "role_label": "Role",
      "save_failed": "That goal could not be saved.",
      "saved": "Goal saved.",
      "target_hint": "How much somebody with this role is expected to do in one period.",
      "target_label": "Target",
      "title": "Activity Goals"
    },
    "staffinactivity": {
      "channel": "Report Channel",
      "channel_hint": "Vex posts the report here once a day. Leave this empty to post nothing.",
      "col_actions": "Actions",
      "col_member": "Member",
      "col_seen": "Last seen",
      "col_status": "Status",
      "days_ago": "{days} days ago",
      "dm": "Send flagged staff a direct message",
      "dm_hint": "Sends one message per person, at most once per window. Nobody on approved leave is ever messaged.",
      "empty_description": "Vex found nobody holding a staff role. Set your staff roles above, or set the moderator and admin roles in your moderation settings.",
      "empty_title": "No staff to report on",
      "inactive_days": "Not Seen For (Days)",
      "inactive_days_hint": "No activity at all for this many days counts as quiet on its own, however many actions they handled.",
      "min_actions": "Minimum Actions",
      "min_actions_hint": "Fewer actions than this in the window counts as quiet. Set this to 0 to skip this test.",
      "never": "Never",
      "no_roster_description": "Only the bot knows which members hold your staff roles, and it publishes that list every half hour. If the bot is online, this page fills in shortly. Setting your moderator and admin roles first is what makes the list useful.",
      "no_roster_title": "Vex hasn't sent the staff list yet",
      "nudge_description": "What Vex does each day about the staff members it flagged.",
      "nudge_title": "Nudges",
      "pill_active": "Active",
      "pill_leave": "On leave",
      "pill_quiet": "Quiet",
      "report_description": "Actions handled over the last {days} days, and when each person was last seen anywhere in the server.",
      "report_title": "Report",
      "rules_description": "What counts as quiet. The two tests are separate, and either one flags somebody.",
      "rules_title": "Rules",
      "saved": "Staff inactivity settings saved and synced to the bot.",
      "staff_roles": "Staff Roles",
      "staff_roles_hint": "If this is empty, the moderator and admin roles from your moderation settings are used.",
      "subtitle": "See which staff members have gone quiet. Every number comes from data Vex already has, so nothing extra is counted or stored.",
      "summary": "{flagged} of {total} staff members are quiet.",
      "title": "Staff Inactivity",
      "who_description": "Which roles this report covers.",
      "who_title": "Who Counts as Staff",
      "window": "Count Actions Over (Days)",
      "window_hint": "Moderation actions are counted over this many days."
    },
    "stafflist": {
      "col_since": "On the team since",
      "col_timezone": "Timezone",
      "empty_description": "Staff members can fill their own card in with /stafflist profile, or you can set one here.",
      "empty_title": "No staff profiles yet",
      "field_auto_refresh": "Refresh automatically",
      "field_auto_refresh_hint": "Rebuild the panel whenever someone gains or loses a staff role. If this is off, the panel only changes when someone runs /stafflist refresh.",
      "field_channel": "Channel",
      "field_channel_hint": "Where the staff list is posted. Vex edits this message in place rather than posting a new one.",
      "field_intro": "Warning text",
      "field_intro_hint": "The text under the heading. Leave it empty to use the default anti-impersonation warning.",
      "field_roles": "Staff roles",
      "field_roles_hint": "The roles that make someone staff on this panel. If empty, the moderator and admin roles from the moderation settings are used.",
      "field_show_local_time": "Show local time",
      "field_show_local_time_hint": "Show each staff member's current local time next to their timezone.",
      "field_title": "Heading",
      "field_title_hint": "The embed heading. Leave it empty to use the default, which is your server name followed by Staff Members.",
      "ignored_description": "People who hold a staff role but are not really staff. Vex leaves them out of every staff report, including this list, quotas, burnout and payroll.",
      "ignored_hint": "One user ID per line.",
      "ignored_title": "Ignored Staff",
      "profiles_hint": "Timezone and start date are the only things Discord cannot tell Vex. Rank and membership come from roles, so they update on their own.",
      "roster_pending_description": "Vex has not sent this server's staff roster yet. Turn the module on and give it a moment. This is not the same as having no staff.",
      "roster_pending_title": "Waiting for the bot",
      "save_failed": "That staff profile could not be saved.",
      "saved": "Staff profile saved.",
      "section_panel": "Panel",
      "section_profiles": "Staff profiles",
      "since_derived": "From their promotion record",
      "subtitle": "A public list of your staff, so members can check who is real.",
      "title": "Staff List"
    },
    "staffmonth": {
      "award_description": "Which role moves, and what it is given for.",
      "award_title": "The Award",
      "calendar": "Award it on the 1st of the month",
      "calendar_hint": "On, the winner is picked at the start of each calendar month. Off, it runs every set number of hours instead, which slides against the calendar because 720 hours is 30 days.",
      "channel": "Announcement Channel",
      "channel_hint": "Vex posts the new winner here. Leave this empty to announce nothing.",
      "empty_description": "Nobody has any {metric} in the window. The standings fill in as your team works, and Vex only awards the role once somebody has a score.",
      "empty_title": "No standings yet",
      "exempt": "Never Win",
      "exempt_hint": "Members with these roles are skipped. Skipping them doesn't block the award, it just passes to the next person.",
      "interval": "Move Every (Hours)",
      "interval_hint": "720 hours is about a month.",
      "metric": "Awarded For",
      "metric_actions": "Moderation actions handled",
      "metric_hint": "Every option is counted from things Vex already records, so none of them needs its own counter.",
      "metric_kudos": "Kudos received",
      "metric_tickets": "Tickets closed",
      "no_repeat": "No repeat winners",
      "no_repeat_hint": "Once someone has won, they can't win again. Past winners are remembered even after the role moves on, so the honour rotates through the team.",
      "role": "Role",
      "role_hint": "Vex gives this role to the winner and takes it off the person who held it. Keep it below Vex's own role or Vex can't move it.",
      "rotation_note": "If nobody scored anything in the window, Vex leaves the role where it is rather than taking it off somebody over a quiet month.",
      "saved": "Staff of the Month settings saved and synced to the bot.",
      "scoring": "Scoring",
      "scoring_hint": "The winner is picked on the sum of these. Each metric's count is multiplied by its weight. Set a weight to 0 to leave it out. To score on one metric, give it 1 and the rest 0.",
      "standings_description": "{metric} over the last {days} days.",
      "standings_title": "Standings",
      "subtitle": "Hand a role to whoever did the most, on a timer. This is Role Rotation pointed at your staff team.",
      "timezone": "Timezone",
      "timezone_hint": "Which midnight the boundary uses. An IANA name like Europe/London. UTC if you are not sure.",
      "timing_description": "How often the role moves, and how far back Vex looks to pick a winner.",
      "timing_title": "Timing",
      "title": "Staff of the Month",
      "window": "Count Over (Days)",
      "window_hint": "The stretch of time the winner is picked from. This usually matches how often the role moves."
    },
    "staffpay": {
      "activity_of": "{actions} of {target}",
      "add_tier": "Add Band",
      "bot_offline": "The bot did not answer, so the staff roster could not be read. The figures below would be wrong, so they are not shown.",
      "budget": "Budget",
      "budget_description": "The most that may be owed across everyone in one interval. Leave it at zero for no ceiling.",
      "budget_title": "Budget",
      "col_activity": "Activity",
      "col_amount": "Owed",
      "col_member": "Member",
      "col_status": "Status",
      "col_tier": "Band",
      "empty": "No staff were found for this period.",
      "enabled": "Track staff pay for this server",
      "error": {
        "future_period": "That pay period has not started yet."
      },
      "filter_all": "Everyone",
      "filter_paid": "Paid",
      "filter_unpaid": "Not paid",
      "ideal_total": "Before the budget",
      "interval_description": "How many days each pay period covers.",
      "interval_title": "Interval",
      "mark_all": "Mark everyone paid",
      "mark_all_hint": "Records every person on this sheet who is not already marked.",
      "mark_failed": "That could not be recorded.",
      "mark_offline": "The bot did not answer, so nothing was recorded.",
      "mark_paid": "Mark paid",
      "marked_none": "Everyone on this sheet was already marked as paid.",
      "marked_toast": "{count} marked as paid.",
      "no_budget": "No budget set",
      "no_match": "No staff match this filter.",
      "not_paid_notice": "Vex works out what is owed and shows it here. It never sends money. Marking somebody as paid records that you paid them yourself, wherever you normally do that.",
      "outstanding": "Still to pay",
      "over_budget_body": "Paying everyone their band's minimum would cost {shortfall} more than the budget allows. Nothing is being paid until the budget or the minimums change, because quietly paying under an agreed minimum hides the problem.",
      "over_budget_title": "The budget is smaller than the agreed minimums",
      "paid_amount_differs": "Recorded as {amount}, which is not what this sheet now shows.",
      "paid_on": "Paid on {date}",
      "paid_total": "Paid so far",
      "period": "{days}-day period",
      "period_closed_note": "This period has ended, so these amounts are settled.",
      "period_current": "Current period",
      "period_earlier": "Earlier period",
      "period_later": "Later period",
      "period_open_note": "This period is still running, so these amounts can still change.",
      "period_window": "{start} to {end}",
      "progress": "{paid} of {people} people marked as paid",
      "reduced": "Reduced",
      "remove_tier": "Remove",
      "save": "Save Settings",
      "save_failed": "Those settings could not be saved.",
      "saved": "Staff pay settings saved.",
      "scaled_body": "The ideal total was over budget, so the performance bonus above each minimum was reduced. Nobody is below their band's minimum.",
      "scaled_title": "Scaled to fit the budget",
      "search_placeholder": "Search staff",
      "settings_description": "One band per staff role. Performance decides where in the band somebody lands: doing nothing pays the minimum, hitting the target pays the maximum.",
      "settings_title": "Pay Bands",
      "settled_body": "These payments were recorded for this period, and the people they were for no longer hold a staff role. They are shown so the period still adds up.",
      "settled_title": "Paid, but no longer on staff",
      "showing_count": "Showing {shown} of {total}",
      "sort_hint": "Select a column heading to sort by it.",
      "status_paid": "Paid",
      "subtitle": "What each staff member is owed for this pay period, based on their role and their moderation activity. Tick people off as you pay them.",
      "tier_label": "Name",
      "tier_max": "Maximum",
      "tier_min": "Minimum",
      "tier_role": "Role",
      "tier_target": "Target actions",
      "tier_target_hint": "Cases handled in one interval that count as full marks.",
      "title": "Staff Pay",
      "total": "Total owed",
      "unmark_paid": "Undo",
      "unmarked_toast": "That mark was removed.",
      "untiered_body": "These people are on staff but hold no role that any band covers, so nothing is calculated for them. Add a band for their role, or add them to the ignored list.",
      "untiered_title": "Staff with no pay band"
    },
    "staffsuspension": {
      "col_removed": "Roles removed",
      "config_description": "Choose which roles count as staff and where suspensions are announced.",
      "config_title": "Settings",
      "empty_description": "Nobody has been suspended in this server yet.",
      "empty_title": "No suspensions",
      "end_button": "Reinstate",
      "end_queued": "Reinstatement sent to the bot.",
      "indefinite": "Indefinite",
      "list_description": "Active first, then past suspensions.",
      "list_title": "Suspensions",
      "log_channel": "Log channel",
      "log_channel_hint": "Where Vex posts a note when someone is suspended or reinstated.",
      "moved_to_staff_actions": "Suspensions are now filed as Staff Actions cases, so they are reviewed and approved before the roles are removed.",
      "notify": "DM the staff member",
      "notify_hint": "Send them a direct message when the suspension starts and when their roles come back.",
      "open_staff_actions": "File a suspension in Staff Actions",
      "saved": "Staff suspension settings saved.",
      "staff_roles": "Staff roles",
      "staff_roles_hint": "The roles removed by a suspension. If empty, your moderator and admin roles are used.",
      "status_active": "Active",
      "status_ended": "Ended",
      "subtitle": "Temporarily remove a staff member's staff roles. The roles come back on their own.",
      "suspend_title": "Suspend a staff member",
      "title": "Staff Suspension"
    },
    "starboard": {
      "auto_react": "Auto-react new messages",
      "auto_react_hint": "Adds the star emoji to every new message in the source channels, so members just have to click it.",
      "board_description": "Where starred messages are posted, and what counts as a star.",
      "board_title": "Starboard",
      "channel": "Starboard Channel",
      "channel_hint": "Starred messages are reposted here.",
      "channels": "Channels",
      "emoji": "Star Emoji",
      "emoji_hint": "A unicode emoji or a server emoji.",
      "saved": "Starboard settings saved and synced to the bot.",
      "self_star": "Allow self-stars",
      "self_star_hint": "Lets authors star their own messages and have it count towards the threshold.",
      "source_description": "The channels watched for stars. If empty, every channel is watched.",
      "source_title": "Source Channels",
      "subtitle": "Repost messages that reach a reaction threshold to a showcase channel.",
      "threshold": "Threshold",
      "threshold_hint": "How many stars a message needs to reach the board.",
      "title": "Starboard"
    },
    "sticky": {
      "add": "Add",
      "add_first": "Add a sticky",
      "busy_rate": "Busy Rate (Messages Per Minute)",
      "busy_rate_hint": "Below this rate the sticky reposts straight away. Above it, Vex starts holding reposts back.",
      "channel": "Channel",
      "duplicate": "This channel already has a sticky. Only one is allowed per channel.",
      "empty_description": "Add one to keep a note at the bottom of a channel.",
      "empty_title": "No sticky messages",
      "invalid_duplicate": "Two stickies share a channel.",
      "invalid_incomplete": "A sticky needs a channel and a message.",
      "kind": "What to post",
      "kind_embed": "A saved embed",
      "kind_text": "Plain text",
      "list_description": "Each channel can have one sticky. Vex deletes its previous copy and posts a new one, so the sticky is always the last message.",
      "list_title": "Stickies",
      "max_wait": "Longest Wait (Seconds)",
      "max_wait_hint": "The longest a repost is ever held back. A channel running at twice the busy rate waits this long.",
      "message": "Message",
      "message_placeholder": "e.g. Read the rules before posting.",
      "pick_template": "Embed",
      "pick_template_hint": "Made in the Embed Creator. Editing the embed there updates this sticky too.",
      "remove": "Remove",
      "remove_sticky": "Remove sticky",
      "repost_description": "A sticky reposts as soon as someone talks. These settings only apply once a channel gets busy.",
      "repost_title": "Reposting",
      "saved": "Sticky messages saved and synced to the bot.",
      "subtitle": "Keep a message at the bottom of a channel while members talk.",
      "title": "Sticky Messages",
      "window": "Measuring Window (Seconds)",
      "window_hint": "How much recent history the message rate is measured over."
    },
    "storage": {
      "badge_expires": "expires {when}",
      "badge_plugin": "plugin: {namespace}",
      "badge_updated": "updated {when}",
      "col_action": "Action",
      "col_key": "Key",
      "col_updated": "Updated",
      "col_value": "Value",
      "delete": "Delete",
      "delete_entry": "Delete Entry",
      "delete_failed": "Failed to delete",
      "deleted": "Deleted \"{key}\".",
      "empty_description": "When your plugins save data (key-value entries, counters, settings), it shows up here, grouped by plugin, for you to inspect and prune.",
      "empty_title": "No Stored Data Yet",
      "entries_count": "{count} entries",
      "entry_count": "{count} entry",
      "invalid_json": "Invalid JSON: {error}",
      "no_entries": "No Entries",
      "no_entries_description": "This plugin hasn't stored anything yet.",
      "no_matching_keys": "No Matching Keys",
      "no_matching_keys_description": "Try a different search.",
      "plugins": "Plugins",
      "reset": "Reset",
      "save": "Save",
      "save_failed": "Failed to save",
      "saved": "Saved and synced to the bot.",
      "search_placeholder": "Search keys...",
      "subtitle": "Data your plugins have stored for this server.",
      "title": "Storage"
    },
    "suggestions": {
      "anonymous": "Anonymous",
      "anonymous_hint": "Hides the submitter's name on the public post.",
      "approve": "Approve",
      "blacklist_add": "Bar member",
      "blacklist_added": "That member is now barred.",
      "blacklist_description": "Members who cannot use the suggestion boards. They are not told why.",
      "blacklist_needs_action": "Choose at least one thing to block.",
      "blacklist_none": "Nobody is barred.",
      "blacklist_reason": "Why",
      "blacklist_reason_hint": "Staff see this. The member does not.",
      "blacklist_removed": "Lifted that member's bar.",
      "blacklist_submit": "Cannot post",
      "blacklist_title": "Barred members",
      "blacklist_until": "until {when}",
      "blacklist_user": "Member ID",
      "blacklist_vote": "Cannot vote",
      "board_anonymous": "Authors can post anonymously",
      "board_anyone": "Anyone",
      "board_close": "Close",
      "board_comments": "Comments are open",
      "board_count": "{count} suggestions",
      "board_count_label": "suggestions",
      "board_create": "Create board",
      "board_created": "Created the board {name}.",
      "board_delete": "Delete this board",
      "board_delete_confirm": "Delete {name}? The suggestions on it are kept and stop belonging to a board.",
      "board_deleted": "Deleted the board {name}.",
      "board_destination": {
        "channel": "One message per suggestion",
        "forum": "A forum post per suggestion",
        "thread": "A message with a thread"
      },
      "board_digest": "Summary posted {cadence} at {hour}:00 UTC",
      "board_digest_off": "Off",
      "board_digest_to": "{cadence} at {hour}:00 UTC in {channel}",
      "board_fact_behaviour": "Behavior",
      "board_fact_channel": "Channel",
      "board_fact_digest": "Summary",
      "board_fact_posts": "Posts as",
      "board_fact_submit": "Who may suggest",
      "board_fact_vote": "Who may vote",
      "board_new": "New board",
      "board_no_channel": "Not set",
      "board_off": "Switched off",
      "board_reaction_warning": "Still using reactions. Reactions cannot tell who voted, so the counts on this board cannot be checked.",
      "board_review": "Suggestions wait for staff approval",
      "board_saved": "Saved the board {name}.",
      "board_submit_roles": "Only {roles} can suggest",
      "board_vote_roles": "Only {roles} can vote",
      "boards_description": "Each board has its own channel, questions, statuses and voting rules. You can edit all of them here or with /suggestion board in Discord.",
      "boards_empty_hint": "Create one here, or run /suggestion board create in Discord.",
      "boards_empty_title": "No boards yet",
      "boards_title": "Boards",
      "cadence": {
        "daily": "daily",
        "monthly": "monthly",
        "weekly": "weekly"
      },
      "canned_add": "Save reply",
      "canned_added": "Saved the reply {name}.",
      "canned_body": "Reply",
      "canned_description": "Answers staff use often, so a common decision is one click instead of retyping.",
      "canned_name": "Short name",
      "canned_no_status": "Leave the status alone",
      "canned_none": "No saved replies yet.",
      "canned_removed": "Removed the reply {name}.",
      "canned_status": "Apply a status with it",
      "canned_title": "Saved replies",
      "channel": "Suggestion Channel",
      "consider": "Consider",
      "decided_when": "decided {when}",
      "delete": "Delete",
      "deleted": "Deleted suggestion #{number}.",
      "deny": "Deny",
      "edit_board": "Edit",
      "empty_archive_hint": "A suggestion moves here once you approve or deny it. Marking one as considered keeps it in the active list.",
      "empty_archive_title": "No suggestions have been settled yet",
      "empty_hint": "Members can submit suggestions with /suggest.",
      "empty_title": "No suggestions yet",
      "failed": "Failed",
      "field_account_age": "Account age",
      "field_allow_anonymous": "Allow anonymous suggestions",
      "field_allow_attachments": "Allow images",
      "field_allow_comments": "Allow comments",
      "field_allow_downvote": "Downvote button",
      "field_allow_neutral": "Neutral button",
      "field_allow_upvote": "Upvote button",
      "field_allow_vote_change": "Members may change their vote",
      "field_anonymous_hides_staff": "Hide the author from staff too",
      "field_anonymous_hides_staff_hint": "Hiding the author from the public post and hiding them from staff are different promises. Most servers want only the first.",
      "field_archive_channel": "Attachment channel",
      "field_archive_channel_hint": "Where images are re-hosted. Discord's own links expire, so a stored one stops working.",
      "field_author_may_vote": "Authors may vote on their own",
      "field_auto_archive": "Archive after no activity for",
      "field_auto_archive_warn": "Warn before archiving",
      "field_auto_archive_warn_hint": "A notice in the channel this many days before.",
      "field_auto_thread": "Open a thread on each suggestion",
      "field_blocked_roles": "Barred",
      "field_blocked_roles_hint": "These roles cannot post or vote. This wins over the two lists above.",
      "field_channel": "Channel",
      "field_cooldown": "Wait between suggestions",
      "field_description": "Description",
      "field_destination": "Posts as",
      "field_detect_duplicates": "Warn about duplicates",
      "field_detect_duplicates_hint": "Shows similar suggestions before somebody posts. It never stops them posting.",
      "field_digest_cadence": "How often",
      "field_digest_channel": "Summary channel",
      "field_digest_enabled": "Post a summary on a schedule",
      "field_digest_enabled_hint": "A quiet period is skipped rather than posting a summary of nothing.",
      "field_digest_hour": "Hour to post",
      "field_edit_window": "Author may edit for",
      "field_enabled": "Accepting suggestions",
      "field_enabled_hint": "When this is off, nobody can post to the board and the existing suggestions stay where they are.",
      "field_hide_counts": "Hide the counts until it is decided",
      "field_hide_counts_hint": "Stops people following the crowd, at the cost of nobody knowing where a suggestion stands.",
      "field_highlight_channel": "Highlight channel",
      "field_highlight_channel_hint": "Where a suggestion is posted again once it crosses a score you set.",
      "field_log_channel": "Log channel",
      "field_max_open": "Open suggestions per member",
      "field_max_vote_weight": "Most one vote can be worth",
      "field_max_vote_weight_hint": "A ceiling however the weights add up. Without one, a member with a dozen roles can outvote the server.",
      "field_name": "Name",
      "field_require_review": "Hold for approval",
      "field_require_review_hint": "Suggestions wait for a staff member instead of being posted straight away.",
      "field_review_channel": "Review channel",
      "field_review_channel_hint": "Where suggestions wait when they need approval first. Without one they are held and nobody is told.",
      "field_staff_may_vote": "Staff may vote",
      "field_staff_roles": "Staff roles",
      "field_submit_roles": "Who may suggest",
      "field_submit_roles_hint": "Holding any one of these is enough. Leave empty to let everybody post.",
      "field_tenure": "Time in the server",
      "field_thread_archive": "Thread goes quiet after",
      "field_vote_mode": "Voting method",
      "field_vote_roles": "Who may vote",
      "field_vote_roles_hint": "Separate from who may suggest, so you can restrict posting and leave voting open.",
      "field_weight_stacking": "When somebody has several weighted roles",
      "field_weight_stacking_hint": "Which weight applies when a member holds more than one of the roles you have given a weight to.",
      "field_zero_off": "0 turns this off.",
      "filter_all": "All statuses",
      "filter_all_boards": "All boards",
      "filter_clear": "Clear filters",
      "filter_none": "Nothing matches those filters.",
      "filter_none_hint": "Try a different status, or clear the search.",
      "filter_search": "Search suggestions",
      "form_add": "Add a question",
      "form_choices": "Choices",
      "form_choices_hint": "Separated by commas.",
      "form_key": "Machine name",
      "form_key_hint": "Stored with each answer. Changing it orphans the answers already given.",
      "form_kind": "Answer type",
      "form_kind_paragraph": "Paragraph",
      "form_kind_select": "Pick from a list",
      "form_kind_short": "One line",
      "form_label": "Question",
      "form_max": "Longest answer",
      "form_min": "Shortest answer",
      "form_modal_count": "{count} of 5 boxes used",
      "form_placeholder": "Placeholder",
      "form_remove": "Remove",
      "form_required": "Must be answered",
      "form_saved": "Saved the questions.",
      "gates_to_post": "To post",
      "gates_to_vote": "To vote",
      "group_basics": "Channels",
      "group_basics_blurb": "Where suggestions are posted, and the other channels this board uses.",
      "group_digest": "Summary",
      "group_digest_blurb": "A recap of the board, posted on a schedule.",
      "group_discussion": "Discussion",
      "group_discussion_blurb": "Threads and comments on each suggestion.",
      "group_form": "The questions members are asked",
      "group_form_hint": "Discord allows five boxes in one popup. A dropdown is asked separately and does not count.",
      "group_gates": "Limits",
      "group_gates_blurb": "What a member has to satisfy before they can post or vote.",
      "group_lifecycle": "Archiving",
      "group_lifecycle_blurb": "What happens to a suggestion nobody has touched in a while.",
      "group_rules": "Triggers and form",
      "group_rules_blurb": "What happens at a score, and the questions members are asked.",
      "group_submission": "Submitting",
      "group_submission_blurb": "What happens when somebody sends a suggestion.",
      "group_thresholds": "Score triggers",
      "group_thresholds_hint": "When a suggestion's score reaches a number, do something about it.",
      "group_voting": "Voting",
      "group_voting_blurb": "Which buttons appear, who may press them, and what a vote is worth.",
      "group_who": "Access",
      "group_who_blurb": "Which roles can post and vote here. Leave a list empty to let everybody in.",
      "locked_note": "Voting is closed on this suggestion.",
      "no_changes": "No changes",
      "note_placeholder": "Optional note to the member (shown with the decision)...",
      "open_in_discord": "Open in Discord",
      "pending_note": "Waiting for a staff member to approve it. It has not been posted yet.",
      "response_add": "Write an answer",
      "response_label": "Your team's answer",
      "response_placeholder": "Write the answer the author will be sent...",
      "response_save": "Save answer",
      "response_saved": "Answer saved on suggestion #{number}.",
      "save": "Save",
      "saved": "Saved.",
      "set_status": "Set status",
      "settings_description": "The default channel and anonymity. Everything else lives on a board.",
      "settings_legacy_note": "These two settings are the pre-board ones. They apply to your first board, and anything you set per board in Discord wins.",
      "settings_title": "Suggestions",
      "sort_busiest": "Most voted on",
      "sort_newest": "Newest first",
      "sort_oldest": "Oldest first",
      "sort_top": "Most wanted",
      "stacking": {
        "additive": "Add them up",
        "highest": "Use the highest",
        "multiplicative": "Multiply them"
      },
      "status": {
        "approved": "approved",
        "considered": "considered",
        "denied": "denied",
        "pending": "pending"
      },
      "status_add": "Add a status",
      "status_added": "Added the status {label}.",
      "status_color": "Color",
      "status_danger": "Delete this status",
      "status_default_set": "New suggestions now start in {label}.",
      "status_delete": "Remove this status",
      "status_delete_confirm": "Delete {label}? Suggestions already in it have to be moved first.",
      "status_deleted": "Removed the status {label}.",
      "status_effect_archives": "Take it off the board",
      "status_effect_archives_hint": "Removes the post. The suggestion and its votes are kept.",
      "status_effect_locks": "Close voting",
      "status_effect_locks_discussion": "Close the discussion thread",
      "status_effect_locks_hint": "Nobody can vote once a suggestion reaches this.",
      "status_effect_notifies": "Tell the author",
      "status_effect_notifies_hint": "Sends them a DM when a suggestion reaches this, unless they turned DMs off.",
      "status_effect_resolved": "Counts as decided",
      "status_effect_resolved_hint": "Moves it out of the active list and stops the auto-archive clock.",
      "status_effect_roadmap": "Show on the roadmap",
      "status_effects": "What this status does",
      "status_emoji": "Emoji",
      "status_flag_archives": "takes it off the board",
      "status_flag_default": "where new ones start",
      "status_flag_locks": "closes voting",
      "status_flag_locks_discussion": "closes the discussion thread",
      "status_flag_none": "no effects",
      "status_flag_notifies": "tells the author",
      "status_flag_resolved": "counts as decided",
      "status_flag_roadmap": "shown on the roadmap",
      "status_label": "Label",
      "status_make_default": "Make this where new suggestions start",
      "status_saved": "Saved the status {label}.",
      "status_set": "Suggestion #{number} {status}.",
      "status_slug": "Machine name",
      "status_slug_auto": "Left empty, this follows the label.",
      "status_slug_hint": "What an export matches on. Changing it breaks an older export.",
      "statuses_description": "The states a suggestion can be in on this server, and what each one does. Editable here or with /suggestion status in Discord.",
      "statuses_title": "Statuses",
      "subtitle": "Every suggestion your community has filed, and what your team decided.",
      "summary_awaiting": "Waiting on review",
      "summary_decided": "Decided",
      "summary_open": "Open",
      "summary_voters": "People voting",
      "summary_votes": "Votes cast",
      "tab_board": "Board",
      "tab_boards": "Boards",
      "tab_settings": "Settings",
      "tag_add": "Add tag",
      "tag_added": "Added the tag {label}.",
      "tag_label": "Tag",
      "tag_remove": "Remove this tag",
      "tag_removed": "Removed the tag {label}.",
      "tags_description": "Labels staff put on suggestions, for grouping and the roadmap.",
      "tags_none": "No tags yet.",
      "tags_title": "Tags",
      "threshold_add": "Add trigger",
      "threshold_added": "Added a trigger at {score}.",
      "threshold_highlight": "Post it in the highlight channel",
      "threshold_lock": "Close voting",
      "threshold_needs_action": "Choose at least one thing for it to do.",
      "threshold_no_status": "Leave the status alone",
      "threshold_none": "No triggers yet.",
      "threshold_ping": "Tell staff",
      "threshold_remove": "Remove this trigger",
      "threshold_removed": "Removed the trigger at {score}.",
      "threshold_score": "Score",
      "threshold_status": "Set a status",
      "title": "Suggestions",
      "unit_days": "days",
      "unit_minutes": "minutes",
      "unit_seconds": "seconds",
      "unit_utc": "UTC",
      "unsaved_count": "{count} unsaved",
      "vote_down": "Downvote",
      "vote_mode": {
        "buttons": "Buttons",
        "reaction_legacy": "Reactions (old)"
      },
      "vote_neutral": "No opinion",
      "vote_up": "Upvote",
      "voters_empty": "Nobody has voted on this yet.",
      "voters_merged": "arrived by merge",
      "voters_show": "Who voted",
      "voters_title": "Who voted on #{number}",
      "voters_weight": "worth {weight}",
      "votes_imported": "Plus {up} up and {down} down from before button voting. Those came from reactions, so there is no record of who cast them.",
      "votes_none": "No votes yet",
      "votes_people": "{count} people voted",
      "votes_score": "score {score}",
      "votes_summary": "{up} up, {down} down"
    },
    "tagbrowser": {
      "empty": "This server has no tags yet.",
      "footer": "Powered by Vex",
      "heading": "Server tags",
      "heading_guild": "{name} - Tags",
      "no_matches": "No tags match your search.",
      "not_public_description": "This server hasn't opted in to sharing its tags on the web. A server manager can enable it from the dashboard's Tags page.",
      "not_public_title": "Tags aren't public",
      "search_one_placeholder": "Search {count} tag...",
      "search_placeholder": "Search {count} tags...",
      "subtitle": "Browse this server's saved answers and FAQ.",
      "uses_count": "{count} uses"
    },
    "tags": {
      "cancel": "Cancel",
      "content": "Content",
      "copy_link": "Copy Link",
      "delete_failed": "Failed to delete",
      "deleted": "Tag deleted.",
      "edit_tag": "Edit /{name}",
      "empty_description": "Create one members can recall in Discord.",
      "empty_title": "No tags yet",
      "name": "Name",
      "name_placeholder": "rules",
      "new_tag": "New Tag",
      "open": "Open",
      "public_browser_description": "Share a read-only page of these tags that anyone can browse, with no Discord or login needed. Great for a public FAQ or rules page.",
      "public_browser_title": "Public Tag Browser",
      "public_disabled": "Public tag browser disabled.",
      "public_enabled": "Public tag browser enabled.",
      "save": "Save",
      "save_failed": "Failed to save",
      "saved": "Tag saved.",
      "subtitle_1": "Custom text snippets members recall with",
      "subtitle_2": ".",
      "title": "Tags",
      "update_failed": "Failed to update",
      "uses_count": "{count} uses"
    },
    "terms_gate": {
      "accept": "Agree and continue",
      "checkbox": "I have read and agree to the Terms of Service and the Privacy Policy.",
      "decline": "Sign out",
      "failed": "Your agreement could not be saved. Please try again.",
      "opens_new_tab": "Opens in a new tab",
      "read_privacy": "Read the Privacy Policy",
      "read_terms": "Read the Terms of Service",
      "stale": "These terms changed while this page was open. Reload to read the current version.",
      "subtitle": "Vex has terms of service and a privacy policy. Please read them and agree to carry on.",
      "summary_control": "You can ask for your data to be removed at any point using the contact address in the privacy policy.",
      "summary_data": "Vex stores your Discord user ID so it can remember your settings and your moderation record in the servers you share with it.",
      "summary_note": "The summary above is not the agreement. The linked documents are.",
      "summary_title": "In short",
      "title": "Before you continue",
      "updated_body": "You agreed to an earlier version. Please read the current one and agree again.",
      "updated_title": "These documents have been updated",
      "version": "Version {version}"
    },
    "tickets": {
      "activity_title": "Activity",
      "add_question": "Add a question",
      "add_reply": "Save reply",
      "answers_title": "What they told us",
      "appearance_simple": "Heading and text",
      "appearance_template": "An embed template",
      "back_to_queue": "Back to the list",
      "block_add": "Block",
      "block_expired": "Expired",
      "block_reason": "Reason",
      "block_user_id": "User ID",
      "blocked_description": "These people cannot open a ticket in this server.",
      "blocked_roles": "Roles that cannot open tickets",
      "blocked_roles_hint": "Anybody with one of these roles is refused.",
      "blocked_title": "Blocked from opening tickets",
      "button_description": "Description shown under the option",
      "button_emoji": "Emoji",
      "by_priority_title": "By priority",
      "by_type_title": "By type",
      "category": "Ticket Category",
      "category_hint": "New ticket channels are created under this category.",
      "category_placeholder": "Select a category...",
      "channel_mode": "Where tickets open",
      "channel_mode_hint": "A channel is what most servers expect and it survives being ignored for a month. A private thread costs no channel slot, so a busy server never runs into Discord's limit of 50 channels per category, but Discord archives an idle thread on its own.",
      "chip_claimed": "Claimed",
      "chip_unclaimed": "Unclaimed",
      "claim": "Claim",
      "claimed_by": "Claimed by",
      "clear_filters": "Clear all",
      "close": "Close ticket",
      "close_on_leave": "Close tickets when the opener leaves",
      "close_on_leave_hint": "When somebody who opened a ticket leaves the server, close it. Closing also deletes the channel after the delay set above, and that cannot be undone.",
      "close_on_leave_wait": "Wait first (minutes)",
      "close_on_leave_wait_hint": "Set this to 0 to close immediately. A short wait is worth having because people often leave and rejoin within a minute, and a ticket closed in that gap is gone.",
      "close_reason": "Close reason",
      "closing_description": "What Vex does once a ticket is done.",
      "closing_title": "When a ticket closes",
      "cooldown": "Wait between tickets (seconds)",
      "cooldown_hint": "How long somebody waits after opening one before opening another.",
      "delete_after": "Delete the channel after (seconds)",
      "delete_after_hint": "The ticket itself is kept and stays readable here. Only the Discord channel is removed. 0 keeps the channel.",
      "deleted": "deleted",
      "deleted_type": "A type that no longer exists",
      "disabled": "Off",
      "download": "Download",
      "edit_panel": "Edit panel",
      "edit_type": "Edit type",
      "edited": "edited",
      "empty_archive_hint": "A ticket moves here when it is closed. Its transcript stays readable.",
      "empty_archive_title": "No closed tickets yet",
      "empty_hint": "Post a panel with /ticket panel so members can open tickets.",
      "empty_title": "No tickets yet",
      "event": {
        "auto_closed": "Closed automatically",
        "claimed": "Claimed",
        "closed": "Closed",
        "inactivity_warned": "Warned about inactivity",
        "kept_open": "Kept open after an inactivity prompt",
        "opened": "Opened",
        "opener_left": "Opener left the server",
        "participant_added": "Someone was added",
        "participant_removed": "Someone was removed",
        "priority_changed": "Priority changed",
        "renamed": "Renamed",
        "reopened": "Reopened",
        "sla_breached": "Nobody had replied yet",
        "status_changed": "Status changed",
        "tagged": "Tagged",
        "transferred": "Transferred",
        "type_changed": "Moved to another type",
        "unclaimed": "Unclaimed",
        "untagged": "Tag removed"
      },
      "failed": "Failed",
      "feedback_enabled": "Ask them to rate the help they got",
      "feedback_hint": "Vex DMs a 1 to 5 rating request when the ticket closes.",
      "field_key": "Field key",
      "field_label": "Question",
      "field_paragraph": "Long answer",
      "field_placeholder": "Placeholder",
      "field_required": "Required",
      "field_short": "Short answer",
      "filter_any_priority": "Any priority",
      "filter_any_status": "Any status",
      "filter_any_type": "Any type",
      "filter_search": "Search subjects",
      "form_full": "Discord does not allow more than 5 questions in one popup.",
      "form_hint": "Asked in a popup before the ticket opens. Discord allows at most 5 questions in one popup.",
      "form_title": "Questions to ask",
      "group_basics": "Basics",
      "group_limits": "Limits and timers",
      "group_says": "What Vex says",
      "group_where": "Where tickets open",
      "group_who": "Who handles them",
      "inactivity_close": "Close after silence (hours)",
      "inactivity_hint": "0 turns this off.",
      "inactivity_warn": "Warn after silence (hours)",
      "kind": {
        "audio": "Audio",
        "file": "File",
        "gif": "GIF",
        "image": "Image",
        "video": "Video"
      },
      "layout_buttons": "Buttons",
      "layout_select": "A dropdown",
      "limits_description": "These apply to every type. A type can make any of them stricter, never looser.",
      "limits_title": "Who can open a ticket",
      "log_channel": "Log Channel",
      "log_channel_hint": "Closed ticket notices and transcripts are posted here.",
      "mark_open": "Mark as open",
      "mark_pending": "Waiting on them",
      "max_open": "Max open tickets per person",
      "max_open_hint": "Counts every type together. 0 means no limit.",
      "min_account_age": "Minimum account age (days)",
      "min_age_hint": "0 means anybody can open a ticket.",
      "min_member_age": "Minimum time in server (days)",
      "mode_channel": "A private channel",
      "mode_thread": "A private thread",
      "move_down": "Move down",
      "move_up": "Move up",
      "naming_template": "Channel name",
      "naming_template_hint": "You can use {number}, {username} and {type}.",
      "new_panel": "New panel",
      "new_type": "New type",
      "no_blocks_hint": "Block someone here, or with /ticket blacklist.",
      "no_blocks_title": "Nobody is blocked",
      "no_messages": "No messages were logged.",
      "no_panels_hint": "A panel lets people open the types you choose, from one message.",
      "no_panels_title": "No panels yet",
      "no_replies_hint": "Save the answers your staff type most often.",
      "no_replies_title": "No saved replies yet",
      "no_staff_yet": "Nobody has claimed or closed a ticket in this window.",
      "no_subject": "No subject",
      "no_types_hint": "Add one to decide where tickets open and who can see them.",
      "no_types_title": "No ticket types yet",
      "no_volume": "No tickets were opened in this window.",
      "open_message": "Opening Message",
      "open_message_hint": "The first message Vex posts in the ticket.",
      "opened_at": "Opened",
      "opened_by": "Opened by",
      "page_of": "Page {page} of {pages}",
      "panel_appearance": "How this panel looks",
      "panel_appearance_hint": "Write the heading and text here, or use an embed template if you need images, fields or a footer.",
      "panel_channel": "Channel",
      "panel_color": "Colour",
      "panel_color_hint": "The stripe down the left of the panel.",
      "panel_description": "Text",
      "panel_description_hint": "Discord formatting works here. Use **two asterisks** for bold, and a blank line to start a new paragraph. To mention somebody, paste their ID in the form <@123456789>.",
      "panel_description_placeholder": "Appeal your jail below. After hitting the button, answer the questions.",
      "panel_enabled": "Panel is on",
      "panel_enabled_hint": "Turn this off to stop the panel being posted, without deleting it.",
      "panel_heading": "Heading",
      "panel_heading_placeholder": "Ban Appeals",
      "panel_layout": "How types are offered",
      "panel_layout_hint": "Buttons suit a few types. A dropdown suits many.",
      "panel_name": "Name",
      "panel_name_taken": "A panel named \"{name}\" already exists. Choose a different name.",
      "panel_not_posted": "Not posted yet. Use /ticket panel to post it.",
      "panel_placeholder": "Placeholder on the dropdown",
      "panel_placeholder_default": "Pick a topic",
      "panel_placeholder_hint": "The greyed-out line shown before somebody picks an option.",
      "panel_posted": "Posted. Editing this panel edits that message.",
      "panel_template": "Which template",
      "panel_types": "Types this panel offers",
      "panel_types_hint": "Pick the types this panel offers. For each one you can change how its button reads here, without renaming the type itself. Leave a field empty to use the type's own name and emoji.",
      "panels_description": "A panel is the message people click to open a ticket. Post it with /ticket panel.",
      "panels_title": "Panels",
      "parent_channel": "Thread parent channel",
      "parent_channel_hint": "Threads are created under this channel.",
      "pick_one_hint": "Choose one from the list to read it and act on it.",
      "pick_one_title": "Pick a ticket",
      "ping_roles": "Roles to ping",
      "ping_roles_hint": "Pinged once when a ticket of this type opens.",
      "priority": {
        "high": "High",
        "low": "Low",
        "normal": "Normal",
        "urgent": "Urgent"
      },
      "rating": "Rating",
      "reopen": "Reopen",
      "replies_description": "Staff can drop these into a ticket with /ticket reply.",
      "replies_title": "Saved replies",
      "reply_body": "What Vex sends",
      "reply_name": "Name",
      "reply_placeholders": "You can use {user}, {ticket}, {claimer} and {server}.",
      "reply_uses": "used {count} times",
      "require_close_reason": "Ask staff why they are closing it",
      "required_roles": "Roles required to open",
      "required_roles_hint": "If empty, anybody can open this kind of ticket.",
      "save": "Save",
      "saved": "Saved.",
      "settings_description": "Where tickets are opened and who handles them.",
      "settings_title": "Tickets",
      "show_closed": "Closed",
      "showing": "{total} tickets",
      "sla_hint": "Vex posts a reminder if no staff member has replied yet. 0 turns this off.",
      "sla_minutes": "Warn staff after (minutes)",
      "staff_claimed": "Claimed",
      "staff_closed": "Closed",
      "staff_hint": "Time to close is measured from the moment somebody claimed the ticket, so an agent is not charged for the hours it sat in the queue before they picked it up.",
      "staff_member": "Staff member",
      "staff_rating": "Rating",
      "staff_rating_value": "{score} from {count}",
      "staff_roster_pending": "Vex has not published this server's staff list yet, so this table shows everyone who has handled a ticket rather than only current staff.",
      "staff_title": "Staff",
      "staff_to_claim": "Time to claim",
      "staff_to_close": "Time to close",
      "stat_first_response": "Average first reply",
      "stat_open": "Still open",
      "stat_rating": "Average rating",
      "stat_resolution": "Average time to close",
      "stat_total": "Tickets opened",
      "stat_unclaimed": "Nobody has claimed",
      "stat_urgent": "Urgent",
      "status": {
        "closed": "Closed",
        "open": "Open",
        "pending": "Waiting"
      },
      "style_danger": "Red",
      "style_primary": "Blurple",
      "style_secondary": "Grey",
      "style_success": "Green",
      "subtitle": "Private support channels with fully logged transcripts.",
      "support_roles": "Support Roles",
      "support_roles_hint": "Members with these roles can see and claim tickets.",
      "tab_blocked": "Blocked",
      "tab_insights": "Insights",
      "tab_panels": "Panels",
      "tab_replies": "Saved replies",
      "tab_settings": "Settings",
      "tab_setup": "Setup",
      "tab_tickets": "Tickets",
      "tab_types": "Types",
      "timers_description": "Vex can chase a ticket nobody has answered, and close one nobody replies to.",
      "timers_title": "Reminders and auto-close",
      "title": "Tickets",
      "transcript_heading": "Transcript ({count} messages)",
      "transcript_title": "Ticket #{number} transcript",
      "transcript_to_opener": "DM the transcript to the person who opened it",
      "type_blurb": "Description",
      "type_blurb_hint": "Shown under the name on a panel.",
      "type_deleted": "Ticket type deleted.",
      "type_description": "Everything about this kind of ticket, from where it opens to who handles it.",
      "type_emoji": "Emoji",
      "type_enabled": "People can open this kind of ticket",
      "type_key": "Key",
      "type_key_hint": "Set once and never changed. Panels already posted have this key in their buttons, so changing it would stop those buttons working.",
      "type_limit_hint": "0 means this type adds no limit of its own.",
      "type_max_open": "Max open of this type",
      "type_name": "Name",
      "type_summary": "{mode} · {count} tickets so far",
      "types_description": "Each type has its own category, staff roles, form and limits. A server that only wants one kind of ticket needs exactly one type.",
      "types_title": "Ticket types",
      "volume_hint": "One bar per day, oldest on the left.",
      "volume_title": "Tickets opened",
      "window": "Over the last",
      "window_30": "30 days",
      "window_7": "7 days",
      "window_90": "90 days"
    },
    "transfer": {
      "apply_button": "Apply These Settings",
      "choose_file": "Choose File",
      "dropped_title": "These could not be matched and will be left empty",
      "export_button": "Download Settings File",
      "export_description": "Downloads this server's settings as a file you can keep or import elsewhere.",
      "export_failed": "The settings could not be exported.",
      "export_note": "Dashboard access grants are never included. They name specific people and roles in this server, so carrying them into another server would hand out permissions there.",
      "export_title": "Export Settings",
      "exported": "Settings file downloaded.",
      "import_description": "Load a settings file from this or another server. Nothing changes until you apply it.",
      "import_failed": "Those settings could not be imported.",
      "import_title": "Import Settings",
      "import_warning": "Importing replaces this server's settings. Export a copy first if you want to be able to go back.",
      "imported": "Settings imported.",
      "preview_button": "Preview Changes",
      "remap_summary": "{matched} channels and roles were matched by name. {dropped} could not be found in this server.",
      "same_guild": "This file came from this server, so every channel and role in it still points at the right thing.",
      "skipped_sections": "Dashboard access grants in this file were ignored. Set those up under Dashboard Access instead.",
      "subtitle": "Move this server's Vex settings to another server, or keep a copy as a backup.",
      "title": "Export and Import"
    },
    "upgrade": {
      "back": "Back to your servers",
      "body": "This server is on the {current} plan. This page needs {required}. A server admin can upgrade from Billing.",
      "cta": "Go to Billing",
      "current_plan": "Current plan",
      "required_plan": "Required plan",
      "title": "This page needs an upgrade"
    },
    "verification": {
      "abandon": {
        "kick": "They were kicked.",
        "none": "Nothing was done.",
        "quarantine": "They were quarantined."
      },
      "abandon_action": "If a member never verifies",
      "abandon_after": "Wait this many minutes",
      "abandon_hint": "Checked once, after the time below. Members in the review queue are left alone.",
      "abandon_kick": "Kick them",
      "abandon_none": "Do nothing",
      "abandon_quarantine": "Quarantine them",
      "add_choice": "Add a choice",
      "add_question": "Add a question",
      "alert_channel": "Alert channel",
      "alert_channel_hint": "Where Vex posts a notice when an alt is detected. Falls back to your raid alert channel, then the mod-log channel.",
      "allowlist": "Members who skip verification",
      "alt_action": "When a member shares a network or browser",
      "alt_action_hint": "A shared network is a lead, not proof. Vex never kicks or bans for it.",
      "alt_alert": "Tell staff",
      "alt_ban": "Ban the account",
      "alt_kick": "Kick the account",
      "alt_none": "Only record it",
      "alt_review": "Send to the review queue",
      "alts_description": "Members in this server who verified from the same IP or the same browser. The IP is matched by a one-way hash, never the address itself.",
      "alts_empty_description": "No two verified members share an IP address yet.",
      "alts_empty_title": "No shared IPs found",
      "alts_title": "Possible alt accounts",
      "apply_import": "Apply changes",
      "approve": "Approve",
      "approved": "Approved. Their roles are on the way.",
      "bad_user": "That is not a valid member ID.",
      "blacklist_add": "Block",
      "blacklist_empty": "Nobody is blocked.",
      "blacklist_hint": "These members cannot verify here until the block ends.",
      "blacklist_title": "Blocked from verifying",
      "blacklisted": "Blocked from verifying",
      "bypass_roles": "Bypass roles",
      "bypass_roles_hint": "Members with one of these roles are verified without the steps.",
      "captcha": "Captcha",
      "captcha_none": "None",
      "choices_hint": "Select the correct answer.",
      "col_account_age": "Account age",
      "col_device": "Device",
      "col_ip": "IP",
      "col_member": "Member",
      "col_times": "Times",
      "col_verified": "Verified",
      "days": "Days",
      "days_hint": "0 means until you remove it.",
      "days_old": "{days}d old",
      "denied": "Denied.",
      "deny": "Deny",
      "device_cookie": "Browser cookie",
      "device_cookie_hint": "Sets a 30 day cookie after the member reads the disclosure. It links accounts made in the same browser.",
      "disclosure_preview": "What members are told is collected",
      "disclosure_preview_hint": "Built from the settings above. It changes when they do.",
      "dismissed": "They will not be linked again.",
      "dm_on_join": "Send new members a message",
      "dm_on_join_hint": "New members get a direct message telling them how to verify.",
      "dm_toggle": "DM new members to verify",
      "dm_toggle_hint": "When someone joins, Vex sends them a direct message with a verify link. Members with closed DMs can still verify through the channel button.",
      "doctor": {
        "aggressive_thresholds": "Quarantine or deny is switched on. Watch the review numbers for members held back by mistake.",
        "captcha_no_keys": "{provider} is chosen, but no keys are set for it. Verification will follow the outage setting.",
        "captcha_unused_in_button_mode": "A captcha is chosen, but button mode has no web page, so it is never shown.",
        "discord_onboarding_on": "Discord Onboarding is on. Make sure it does not need a role that only verification grants.",
        "discord_screening_on": "Discord's own Membership Screening is on. Members pass two gates, which is usually redundant.",
        "module_off": "The verification module is turned off.",
        "no_kick": "Members who never verify are set to be kicked, but Vex cannot kick members.",
        "no_manage_roles": "Vex does not have the Manage Roles permission.",
        "no_panel_channel": "No panel channel is set, so there is no Verify button in the server.",
        "no_verified_role": "No verified role is set, so nobody can be verified.",
        "oauth_off": "Discord login is off, so a forwarded link can be used by someone else.",
        "panel_channel_missing": "The panel channel no longer exists.",
        "panel_channel_no_send": "Vex cannot send messages in the panel channel.",
        "raid_escalation_without_raid": "Raid escalation is set, but raid protection is off, so it never happens.",
        "role_above_bot": "A configured role is at or above Vex's highest role. Move Vex's role higher.",
        "role_managed": "A configured role is managed by an integration and cannot be given out.",
        "role_missing": "A configured role no longer exists.",
        "role_privileged": "A verified role has staff permissions. Passing verification must never hand those out.",
        "unverified_is_verified": "The unverified role is also a verified role.",
        "web_not_https": "The dashboard is not served over HTTPS. Verification pages should be."
      },
      "doctor_clean": "No problems found.",
      "enable": "Require verification",
      "enable_hint": "New members must verify before they can use the server. Enabling this also turns on the Raid Protection module, which verification runs inside.",
      "erase_all": "Erase all verification data",
      "erase_all_confirm": "Erase every verification record, attempt, linkage and block for this server? Roles are not changed. This cannot be undone.",
      "erase_confirm": "Erase this member's verification data? Their roles are not changed. This cannot be undone.",
      "erase_member": "Erase their data",
      "erased": "Their verification data was erased.",
      "erased_all": "All verification data for this server was erased.",
      "escalation_lockdown": "Pause verification",
      "escalation_none": "Change nothing",
      "escalation_review": "Send everyone to review",
      "escalation_stricter": "Lower the score thresholds",
      "export": "Download settings",
      "failure_reasons": "Why verifications failed",
      "fp_rate": "Let in after review",
      "fp_rate_hint": "Of the members Vex held back and staff then decided on, the share staff let in. A high number means the settings are too strict.",
      "funnel": "Where members drop off",
      "grant": {
        "failed": "Discord returned an error while changing roles.",
        "forbidden": "Discord refused to change this member's roles.",
        "jailed": "The member is jailed, so Vex did not give them the verified role.",
        "no_manage_roles": "Vex does not have the Manage Roles permission.",
        "not_member": "The member is no longer in the server.",
        "role_above_bot": "A verified role is above Vex's highest role, or is managed by an integration.",
        "role_missing": "A verified role no longer exists.",
        "role_privileged": "A verified role now has staff permissions, so Vex refused to give it."
      },
      "import_bad": "That is not valid exported settings.",
      "import_label": "Paste exported settings",
      "import_version": "These settings were exported by a different version of Vex.",
      "imported": "The settings were imported.",
      "last_days": "Last {days} days",
      "linkage_caution": "Most shared networks are innocent. Families, flatmates, schools, workplaces and mobile carriers put many people behind one address. A shared browser is a stronger lead, but a shared family computer causes it too. Use these to decide who to look at, not who to punish.",
      "linkage_caution_title": "Read this before acting on a match",
      "linkage_device": "{count} members share a browser",
      "linkage_ip": "{count} members share a network",
      "lockdown": "Pause verification now",
      "lockdown_hint": "New arrivals wait in the review queue until you turn this off.",
      "log_channel": "Log channel",
      "log_verbosity": "How much to log",
      "lookup": "Look up",
      "manual_review": "Staff approve every verification",
      "manual_review_hint": "Members who pass wait in the review queue instead of getting their roles straight away.",
      "mark_correct": "Mark as the correct answer",
      "median_time": "Typical time to verify",
      "member_erasure_hint": "To erase one member's data, look them up on the Members tab. Members can also erase their own data from the verification page.",
      "member_lookup": "Member ID",
      "min_score": "Minimum score",
      "mode": "Mode",
      "mode_button": "Button only",
      "mode_button_hint": "A click in Discord is enough. This is the weakest check.",
      "mode_web": "Web page",
      "mode_web_hint": "Members open a single-use link and complete the steps below.",
      "no_attempts": "No attempts are on record.",
      "no_changes": "Nothing would change.",
      "no_failures": "No verifications failed in this range.",
      "no_linkages": "No members share a network or browser.",
      "no_questions": "There are no questions. Members will not be asked anything.",
      "no_signals": "No risk signals fired.",
      "not_found": "That verification was not found.",
      "not_same_person": "Not the same person",
      "oauth_off_warning": "Without Discord login, anyone holding a member's link can use it once. Links are still single-use and short-lived.",
      "on_outage": "If the captcha service is down",
      "on_outage_hint": "Sending members to review keeps them out of the server without locking them out entirely.",
      "outage_fail_closed": "Refuse until it is back",
      "outage_fail_open": "Let members through without it",
      "outage_review": "Send to the review queue",
      "p90": "Nine in ten finish within {value}.",
      "page_rules": "Rules text",
      "page_welcome": "Welcome text",
      "pair_dismissed": "Marked as not the same person",
      "panel_button": "Button text",
      "panel_channel": "Panel channel",
      "panel_color": "Panel color",
      "panel_description": "Panel text",
      "panel_queued": "Vex will post the panel in a moment.",
      "panel_title": "Panel title",
      "pending": "Waiting for review",
      "permanent": "Until removed",
      "post_panel": "Post or refresh the panel",
      "preview_import": "Preview changes",
      "privacy_hint": "Evidence is deleted automatically after the retention period.",
      "privacy_title": "Stored data",
      "question_prompt": "Question {n}",
      "questions_invalid": "Every question needs text, at least two filled choices and a correct answer.",
      "queue_empty": "Nobody is waiting for review.",
      "raid_escalation": "When raid mode is on",
      "raid_escalation_hint": "Turns back to normal on its own when raid mode ends.",
      "reason": "Reason",
      "record_line": "Verified {times} times, last on {when}.",
      "records_description": "Every member who has verified. The IP and device are shown as short fingerprints of a one-way hash, so accounts that share one can be spotted without exposing the address.",
      "records_empty_description": "Records appear here once members verify on the website.",
      "records_empty_title": "No verifications yet",
      "records_title": "Verification records",
      "remember": "Remember members who rejoin",
      "remember_days": "Remember for this many days",
      "remember_hint": "A member who verified in the last {days} days is verified again on rejoin without the steps.",
      "remove": "Remove",
      "remove_choice": "Remove this choice",
      "remove_question": "Remove this question",
      "remove_roles": "Roles to remove on success",
      "require_oauth": "Require Discord login",
      "require_oauth_hint": "The logged-in account must be the one the link was made for. This stops a forwarded link from verifying someone else.",
      "retention": "Keep evidence for this many days",
      "retention_hint": "Attempts and network data are deleted after this. The longest allowed is 180 days.",
      "risk": {
        "deny_at": "Deny",
        "flag_at": "Flag for staff",
        "quarantine_at": "Quarantine",
        "review_at": "Send to review",
        "w_account_age": "New account",
        "w_default_username": "Generated looking username",
        "w_device_reuse": "Shared browser",
        "w_failed_attempts": "Several failed attempts",
        "w_ip_changed": "Network changed mid-way",
        "w_ip_reuse": "Shared network",
        "w_no_avatar": "No avatar",
        "w_provider_score": "Low captcha score",
        "w_too_fast": "Finished too fast",
        "w_too_slow": "Took very long"
      },
      "risk_enabled": "Score risk",
      "role_privileged": "A verified role has staff permissions. Passing verification must never hand those out, so choose a different role.",
      "saved": "Verification settings saved.",
      "score": "Score {score}",
      "score_distribution": "Risk scores",
      "secret": "Secret key",
      "secret_bad_provider": "Choose a captcha provider first.",
      "secret_hint": "Stored encrypted. It is never shown again after saving.",
      "secret_no_key": "This Vex install has no encryption key set, so captcha secrets cannot be stored. Ask the operator to set PLUGIN_SECRETS_KEY.",
      "secret_save": "Save key",
      "secret_saved": "The captcha key was saved.",
      "secret_stored": "A secret for {provider} is stored. Enter a new one to replace it.",
      "secret_too_long": "That key is empty or too long.",
      "section": {
        "discord": "In Discord",
        "evidence": "Evidence",
        "evidence_hint": "What Vex collects to spot repeat accounts. Everything here is described to members on the page.",
        "logging": "Logging",
        "page": "The verification page",
        "page_hint": "Members see this before they verify.",
        "questions": "Questions",
        "questions_hint": "Multiple choice questions about your rules. Every answer must be right to pass.",
        "raid": "During a raid",
        "risk": "Risk scoring",
        "risk_hint": "Each signal adds its weight to a score from 0 to 100. A score is a lead for staff, not a verdict.",
        "roles": "Roles",
        "status": "Status",
        "steps": "Steps",
        "steps_hint": "What a member does to get in."
      },
      "setup_description": "Turn verification on and choose the roles it manages. Members verify by linking their Discord account on the website.",
      "setup_title": "Setup",
      "shared_device": "{count} accounts on one browser",
      "shared_ip": "{count} accounts on one IP",
      "signal": {
        "default_username": "Generated looking username",
        "device_reuse": "Shared browser",
        "failed_attempts": "Several failed attempts",
        "ip_changed": "Network changed mid-way",
        "ip_reuse": "Shared network",
        "no_avatar": "No avatar",
        "provider_score": "Low captcha score",
        "too_fast": "Finished very fast",
        "too_slow": "Took very long",
        "young_account": "New account"
      },
      "signals_are_leads": "These are leads, not proof. Each one has innocent explanations.",
      "site_key": "Site key",
      "site_key_hint": "The public key from your captcha provider. Leave empty to use the operator's key if one is set.",
      "spike": "Failed attempts that count as a raid signal",
      "spike_hint": "This many failures in ten minutes is reported to raid protection. Set 0 to turn this off.",
      "staff_decisions": "{count} staff decisions",
      "stats_range": "Range",
      "status": {
        "approved": "Approved by staff",
        "denied": "Denied",
        "expired": "Expired",
        "failed": "Failed",
        "issued": "Link issued",
        "loaded": "Page opened",
        "passed": "Passed",
        "quarantined": "Quarantined",
        "review": "Waiting for review",
        "revoked": "Unverified by staff"
      },
      "status_active": "Verification is active. New members are asked to verify.",
      "status_needs_role": "Almost there. Choose a verified role above to activate verification.",
      "status_off": "Verification is off. New members join without verifying.",
      "step": {
        "attempted": "Submitted",
        "completed": "Passed",
        "granted": "Got their roles",
        "joined": "Joined",
        "loaded": "Opened the page",
        "started": "Started"
      },
      "strength_stronger": "A stronger lead, but still not proof.",
      "strength_weaker": "A weaker lead. Shared networks are common.",
      "subtitle": "{count} members have verified. This data is private to staff and is never shown to members.",
      "tab": {
        "data": "Data",
        "linkages": "Linkages",
        "members": "Members",
        "queue": "Review queue",
        "setup": "Setup",
        "stats": "Stats"
      },
      "thresholds_hint": "A score at or above each number triggers that action. Set a number above 100 to turn the action off.",
      "title": "Verification & Alt Detection",
      "transfer_hint": "Settings only. Captcha secrets and member data are never included.",
      "transfer_title": "Export and import",
      "ttl": "Link lifetime in minutes",
      "ttl_hint": "A link works once, and only for this long.",
      "until": "Until {when}",
      "unverified_done": "Unverified. Their verified roles are being removed.",
      "unverified_role": "Unverified role",
      "unverified_role_hint": "Held from joining until verification. Removed on success.",
      "unverify_member": "Unverify",
      "user_id": "Member ID",
      "verbosity_minimal": "Only what needs staff",
      "verbosity_normal": "Also every verification",
      "verbosity_verbose": "Also scores and linkages",
      "verified_done": "Verified. Their roles are on the way.",
      "verified_role": "Verified role",
      "verified_role_hint": "Granted once a member verifies. Verification cannot activate until this is set.",
      "verified_roles": "Verified roles",
      "verified_roles_hint": "Given on success. Roles with staff permissions are refused.",
      "verify_member": "Verify",
      "welcome_action": "After verifying",
      "welcome_channel": "Post in a channel",
      "welcome_channel_label": "Welcome channel",
      "welcome_dm": "Send a direct message",
      "welcome_message": "Welcome message",
      "welcome_message_hint": "You can use {user}, {username} and {server}.",
      "welcome_none": "Do nothing"
    },
    "verify": {
      "already_verified": "You are already verified here.",
      "back_to_discord": "Back to Discord",
      "bypassed": "Your role lets you skip verification. You are verified.",
      "captcha_expired": "The challenge expired. Please try again.",
      "captcha_failed": "The challenge was not passed. Please try again.",
      "captcha_low_score": "The challenge could not confirm you are a person. Please try again.",
      "captcha_missing": "Please complete the challenge first.",
      "captcha_outage": "The challenge service is not responding. Please try again in a few minutes.",
      "captcha_unavailable": "The challenge could not load. Check your connection and reload the page.",
      "captcha_wrong_site": "The challenge was not completed on this page. Please try again here.",
      "collect": {
        "captcha": "{provider} runs the challenge. It sees your IP address and browser while it does.",
        "device_cookie": "A random ID saved in this browser. Only a scrambled form of it is stored.",
        "discord_account": "Your Discord account ID, its age, your username and whether you have an avatar.",
        "erasure": "You can delete this data at any time from this page after logging in, or by asking the server's staff.",
        "history": "Whether you passed, and the reason if you did not.",
        "ip_hash": "A scrambled form of your IP address. The address itself is never stored.",
        "never": "Your answers to the questions are checked and then discarded. Your messages and your date of birth are never collected.",
        "timing": "How long you took to finish this page."
      },
      "collect_label": {
        "captcha": "Captcha",
        "device_cookie": "Browser Cookie",
        "discord_account": "Discord Account",
        "history": "Result",
        "ip_hash": "IP Address",
        "timing": "Time Taken"
      },
      "continue_with_discord": "Continue with Discord",
      "denied": "This verification was not approved.",
      "denied_next": "If you think this is a mistake, contact the server's staff and quote the reference below.",
      "denied_title": "Verification was not approved",
      "disclosure_title": "What This Page Collects",
      "erase_cancel": "Cancel",
      "erase_confirm": "Delete it? Your roles are not changed.",
      "erase_done": "Your verification data for this server was deleted.",
      "erase_failed": "That did not work. Try again, or ask the server staff.",
      "erase_mine": "Delete my verification data for this server",
      "erase_yes": "Delete",
      "error_blacklisted": "You cannot verify in this server. Contact the server's staff if you think this is wrong.",
      "error_generic": "Something went wrong.",
      "error_identity": "This link belongs to a different Discord account.",
      "error_link_gone": "This link has expired or was already used.",
      "error_login_required": "Log in with Discord to continue.",
      "error_not_a_member": "You're not a member of this server.",
      "error_not_active": "Verification isn't active on this server.",
      "error_rate_limited": "Too many attempts. Please wait a minute and try again.",
      "error_unavailable": "Verification is temporarily unavailable. Please try again shortly.",
      "error_wrong_answers": "Some answers were not right. Read the rules and try again.",
      "failed_title": "That did not work",
      "gone_next": "Go back to Discord and press Verify again for a new link.",
      "gone_title": "This link has expired or was already used",
      "heading": "Verify",
      "heading_for": "Verify for {name}",
      "kept_days": "Kept {days} days",
      "loading": "Loading",
      "lockdown": "Verification is paused right now. You are in the queue and staff will review you.",
      "login_prompt": "Log in with Discord to verify your identity and unlock the server.",
      "not_enabled": "This server doesn't have web verification tursned on right now.",
      "not_enabled_title": "Verification is not available",
      "passed_body": "Your roles in {name} will appear in a moment.",
      "passed_title": "You are verified",
      "pending_review": "You are already waiting in the review queue. Staff will get to you.",
      "quarantined": "Your access is limited while staff take a look.",
      "reference": "Reference: {id}",
      "remembered": "You verified here before, so you were verified again automatically.",
      "review_title": "Waiting for staff",
      "rules_title": "Server rules",
      "sent_to_review": "Staff will review your verification. You will get your roles if they approve it.",
      "staff_decision": "A staff member decided this.",
      "start": "Get my verification link",
      "start_prompt": "Vex will make a single-use link for your Discord account.",
      "subtitle": "Confirm you're human to unlock the server.",
      "success_message": "You're verified. Welcome!",
      "switch_account": "Log in with a different account",
      "try_again": "Try again",
      "verify_me": "Verify Me",
      "verifying": "Verifying...",
      "verifying_as": "Verifying as",
      "wrong_account": "This link was made for a different Discord account.\nYou are logged in as {name}."
    },
    "voice_leveling": {
      "add_reward": "Add reward",
      "all_channels": "Every voice channel",
      "all_channels_hint": "Turn this off to give XP in only the channels you pick.",
      "announce_channel": "Announce channel",
      "announce_channel_hint": "A voice level-up has no chat message to reply to. If you leave this empty, nothing is posted.",
      "announce_description": "Placeholders: {user} {username} {level}",
      "announce_title": "Level-up announcement",
      "announce_toggle": "Announce voice level-ups",
      "bonus_description": "Voice XP can follow the bonus days and bonus hours set on the Leveling page.",
      "bonus_follow": "Follow the message bonus schedule",
      "bonus_follow_hint": "When this is on, a double XP day pays double in voice too. Turn it off to keep voice XP at a flat rate all week.",
      "bonus_title": "Bonus XP",
      "channels": "Channels that earn XP",
      "channels_hint": "Only these channels give XP. Anywhere else gives none. Stage channels are not listed because voice XP is not tracked in them.",
      "curve_base": "Base",
      "curve_base_hint": "The flat cost of every voice level. Raise this to slow everything down evenly.",
      "curve_cubic": "Cubic",
      "curve_cubic_hint": "The steepest part of the curve. Leave it at 0 for a gentle climb. Set 4 here with 6, 4 and 1 in the other three to make each level cost n to the fourth.",
      "curve_description": "How much voice XP each level costs. This is its own curve, so changing it leaves message levels alone.",
      "curve_linear": "Linear",
      "curve_linear_hint": "Raise this to make each voice level steadily more expensive than the last.",
      "curve_preview": "With these numbers, voice level 1 costs {one} XP, level 5 costs {five}, and level 10 costs {ten}.",
      "curve_quadratic": "Quadratic",
      "curve_quadratic_hint": "Raise this to make later voice levels much harder while early ones stay quick.",
      "curve_title": "Voice level curve",
      "curve_totals_hint": "At the rate above, a member earns the per minute amount once for every minute they spend unmuted in a tracked channel.",
      "curve_totals_level": "Level",
      "curve_totals_step": "XP for the next level",
      "curve_totals_title": "What this curve works out to",
      "curve_totals_total": "Total XP to reach it",
      "empty_hint": "Members show up here once they sit unmuted in a tracked voice channel with this turned on.",
      "empty_title": "No voice XP yet",
      "leaderboard_title": "Voice leaderboard ({total})",
      "level": "Level",
      "level_badge": "Lvl {level}",
      "message": "Message",
      "minutes_amount": "{minutes} min",
      "mute_note": "A member only earns while unmuted. Muting yourself and being muted by a moderator both stop it.",
      "no_channels": "No channels are picked, so nobody is earning voice XP. Pick at least one, or turn every voice channel back on.",
      "no_rewards": "No voice role rewards yet.",
      "no_xp_description": "Roles that earn no voice XP.",
      "no_xp_note": "Roles on the Leveling page's no-XP list never earn voice XP either. Anything you add here is on top of that list.",
      "no_xp_roles": "No-XP roles",
      "no_xp_title": "No-XP roles",
      "public_leaderboard": "Public leaderboard",
      "public_leaderboard_hint": "Shows the voice leaderboard to members on the web portal. If off, voice ranks are private and only staff can see them on the dashboard.",
      "rate": "XP per minute",
      "rate_description": "How much voice XP a member earns, and where they earn it.",
      "rate_hint": "Granted once a minute to each member who qualifies. Set this to 0 to pause without losing your channel list.",
      "rate_title": "Earning rate",
      "require_company": "Only earn with someone else in the channel",
      "require_company_hint": "When this is on, a member alone in a voice channel earns nothing. At least two people have to be in the channel together, and both of them unmuted. Bots do not count, so a music bot sitting in the channel will not satisfy this.",
      "rewards_description": "Give members roles when they reach a voice level. These are separate from the message level rewards.",
      "rewards_title": "Voice role rewards",
      "role": "Role",
      "saved": "Voice leveling settings saved and synced to the bot.",
      "separate_notice": "Voice XP is completely separate from message XP. A member has a message level and a voice level, and earning one does not move the other.",
      "stack_rewards": "Stack rewards",
      "stack_rewards_hint": "Members keep lower reward roles when they earn a higher one. If off, the old role is swapped for the new one.",
      "subtitle": "A separate XP track for time spent in voice, with its own levels and its own leaderboard.",
      "tab_leaderboard": "Leaderboard",
      "tab_settings": "Settings",
      "title": "Voice Leveling",
      "xp_amount": "{xp} XP"
    },
    "voicestats": {
      "channel_unknown": "Channel {id}",
      "duration_hm": "{hours}h {minutes}m",
      "duration_m": "{minutes}m",
      "duration_s": "{seconds}s",
      "empty_description": "Vex records voice time from now on. Numbers appear once a member spends time in a voice channel.",
      "empty_title": "No voice data yet",
      "export": "Export CSV",
      "range_days": "Last {days} days",
      "range_label": "Time range",
      "stat_channels": "Channels used",
      "stat_members": "Members in voice",
      "stat_total": "Total voice time",
      "subtitle": "Time your members spend in voice channels.",
      "title": "Voice Stats",
      "top_channels_description": "Ranked by time members spent in them.",
      "top_channels_empty": "Vex has not recorded voice time in any channel yet.",
      "top_channels_title": "Top channels",
      "top_members_description": "Ranked by time spent in voice.",
      "top_members_empty": "Vex has not recorded voice time for any member yet.",
      "top_members_title": "Top members"
    },
    "welcome": {
      "autorole_description": "Roles that are automatically given when a member joins.",
      "autorole_title": "Autorole",
      "channel": "Channel",
      "dm_description": "Optionally send the new member a DM as well.",
      "dm_message": "DM Message",
      "dm_title": "Welcome DM",
      "leave_description": "Posted when a member leaves.",
      "leave_title": "Leave Message",
      "message": "Message",
      "message_description": "Posted in a channel when a member joins.",
      "message_title": "Welcome Message",
      "post_leave": "Post a leave message",
      "post_welcome": "Post a welcome message",
      "roles": "Roles",
      "roles_hint": "Vex's highest role must be above these for it to assign them.",
      "saved": "Welcome settings saved and synced to the bot.",
      "send_dm": "Send a welcome DM",
      "subtitle": "Greet new members, say goodbye, and auto-assign roles on join.",
      "title": "Welcome & Leave"
    }
  }
}
