### The panel (docs/design/plan.md, Panel). Texts the web panel shows; the panel loads this file ### and common.ftl from locales/, one source with the bot. Voice: docs/brand/voice.md. ### ### Card 0105 wrote the shell's texts only: navigation, the header's switches, notifications, ### loading and the 404 page. Cards 0106 and 0112 add the screens' texts here. ## The shell (card 0105, web/src/components/shell). shell-skip-to-content = Skip to content shell-home = { -product }, back to Today shell-subtitle = Moderation panel # Card 0242: on every screen while the panel runs without Cloudflare, for test groups only. shell-test-mode = Test mode: use the panel with test groups only. shell-nav-label = Main shell-nav-today = Today shell-nav-cases = Cases shell-nav-protected = Protected shell-nav-shields = Shields shell-nav-dna = Group DNA shell-nav-trail = Trail shell-nav-settings = Settings shell-menu-open = Open the menu shell-menu-close = Close the menu shell-language = Language shell-language-en = English shell-language-sv = Swedish shell-theme-dark = Switch to the dark theme shell-theme-light = Switch to the light theme shell-notifications = Notifications shell-notifications-unread = { $count -> [one] One new notification *[other] { $count } new notifications } shell-notifications-empty = No notifications yet. shell-loading = Loading… ## The 404 page (docs/brand/voice.md, Examples). shell-not-found-title = Nothing here. shell-not-found-body = We checked. Twice. shell-not-found-back = Back to Today ## The screens (card 0106, web/src/features and web/src/routes). Every value in them comes from ## the panel API; these texts only name the fields (docs/design/panel-checklist.md). Codes the API ## returns get a text here; a code without one is shown as the code itself. panel-retry = Try again panel-close = Close panel-cancel = Cancel panel-dismiss = Dismiss panel-none = None panel-not-set = Not set panel-yes = Yes panel-no = No panel-load-more = Load more panel-days = { $count -> [one] 1 day *[other] { $count } days } panel-years = { $count -> [one] 1 year *[other] { $count } years } ## Errors and sign-in. Plain, no humour (docs/brand/voice.md, rule 3). panel-error-not-signed-in = You are not signed in. panel-sign-in-how = Send /panel to { -product } in a private chat. It answers with a link that signs you in. panel-error-refused = Your role in this group cannot open this. panel-error-not-found = Not found in this group. panel-error-network = No answer from the panel. Check your connection and try again. panel-error-unavailable = That didn't load. Nothing was changed. Try again. panel-link-missing = This link has no sign-in code. panel-link-refused = This link no longer works. Links work once, for five minutes. panel-no-group = You hold no role the panel can open in any group. panel-no-group-refused = { $count -> [one] One group refused: { $reason } *[other] { $count } groups refused: { $reason } } panel-screen-not-allowed = Your role in this group cannot open this screen. ## Groups. The API holds no group name, so a group is shown by its ID (checklist section 8, point 1). panel-group-picker = Group panel-group-option = Group { $id } · { $roles } panel-group-id = Group { $id } panel-group-status-active = Active panel-group-status-inactive = Inactive panel-role-owner = Owner panel-role-super-user = Super User panel-role-moderator = Moderator panel-role-base = Base role panel-role-custom = Custom role ## Shared words for the log. panel-col-who = Who panel-col-where = Where panel-col-when = When panel-col-by = By panel-col-banned-by = Banned by panel-col-action = Action panel-col-reason = Reason panel-col-ends = Ends panel-col-history = History panel-col-event = Event panel-col-command = Command panel-col-refusal = Why refused panel-col-sequence = No. panel-col-object = Object panel-col-change = Change panel-col-hash = Hash panel-actor-person = Telegram ID { $id } panel-actor-person-unknown = A person panel-actor-rule = Rule: { $rule } panel-banned-by = Banned by { $actor } panel-from-other-group = From another group panel-event-ban = Ban panel-event-mute = Mute panel-event-restriction = Restriction panel-event-unban = Unban panel-event-unmute = Unmute panel-event-unrestrict = Restriction lifted panel-reason-spam = Spam panel-reason-harassment = Harassment panel-reason-off-topic = Off-topic panel-reason-illegal-content = Illegal content panel-reason-other = Other panel-join = Joined panel-leave = Left panel-sanction-scheduled-end = Scheduled to end on { $date } panel-sanction-until-lifted = Until lifted panel-lifted-on = Lifted on { $date } panel-history-until = Leaves the history on { $date }, in { $days -> [one] 1 day *[other] { $days } days } panel-history-until-due = Leaves the history on { $date } ## The protected category. Plain and factual only (docs/brand/voice.md, rule 4). panel-category = Serious violation of Telegram's terms panel-protected-badge = Protected entry panel-protected-lifted-by-person = Lifted only by a person panel-protected-sub = Serious violations of Telegram's terms. The minimum record only. panel-protected-notice = This entry is protected. Only the minimum record is kept. No message, preview or media is stored or shown. panel-protected-empty = No protected entries in this group. ## Today. panel-today-sub = What needs you, by severity. Since { $time }. panel-today-list = Needs you panel-today-empty = Nothing needs you right now. panel-today-empty-body = No lost rights, refused commands, raids or failed actions since this time yesterday. panel-severity-high = High panel-severity-medium = Medium panel-severity-low = Low panel-today-right-missing = { -product } can no longer { $right } in this group. panel-today-right-missing-body = Give the right back to resume. panel-today-checked-at = Checked { $time } panel-today-rights-unchecked = { -product }'s rights in this group have not been checked yet. panel-today-rights-unchecked-body = The check runs when { -product } next hears from the group. panel-today-refused = { $count -> [one] One refused command *[other] { $count } refused commands } panel-today-since = Since { $time } panel-today-open-trail = Open Trail panel-today-raid-close = Gate closed by the raid shield. panel-today-raid-reopen = Gate reopened by the raid shield. panel-today-raid-result = Result: { $result } panel-today-open-shields = Open Shields panel-today-command = { $action }: { $state } panel-raid-result-shadow = Shadow mode, nothing done panel-raid-result-applied = Applied panel-raid-result-refused = Refused panel-raid-result-failed = Failed panel-right-restrict-members = restrict members panel-right-delete-messages = delete messages panel-right-promote-members = promote members ## Live, on Today (card 0112, web/src/features/live). One count per minute from GET .../live. ## A withheld count is "too few", as Group DNA says it (locales/*/dna.ftl), never a number (B30). panel-live-title = Live panel-live-sub = The last hour, one count per minute. { $from } to { $to }. panel-live-joins = Joins panel-live-leaves = Leaves panel-live-shield-hits = Shield hits panel-live-actions = Actions panel-live-latest = Latest minute, { $time } panel-live-too-few = Too few panel-live-too-few-hint = Too few: fewer than five people, so the number is not shown. panel-live-all-too-few = Every count this hour involved fewer than five people, so none is shown. panel-live-unknown = Unknown panel-live-chart = { $metric } per minute, oldest first panel-live-every-minute = Every minute panel-live-table = Counts per minute, newest first panel-live-minute = Minute panel-live-stale = Showing the minutes up to { $time }. panel-live-refused = Attempts without the right show up as refused commands in Trail. panel-live-open-refused = Open refused commands ## Cases. panel-cases-sub = Bans, mutes and restrictions in this group, newest first. panel-cases-search = Search by Telegram ID panel-filter-all-actions = All actions panel-filter-all-reasons = All reasons panel-cases-shown = Showing { $shown } of { $loaded } loaded entries panel-cases-no-match = No loaded entry matches. Load more, or clear the search. panel-cases-empty = Zero bans. Either your group is lovely, or nobody's looking. panel-cases-empty-body = Nothing in this group's history yet. panel-open-case = Open the case of Telegram ID { $id } panel-case-title = Telegram ID { $id } panel-case-title-loading = Case panel-case-sub = Everything this group's history holds about this person, newest first. panel-case-timeline = Timeline panel-command-line = Panel command: { $action } ## Actions and the ten-second undo. panel-action-ban = Ban panel-action-mute = Mute panel-action-restrict = Restrict panel-action-unban = Unban panel-action-unmute = Unmute panel-action-done-ban = Ban Telegram ID { $id } panel-action-done-mute = Mute Telegram ID { $id } panel-action-done-restrict = Restrict Telegram ID { $id } panel-action-done-unban = Unban Telegram ID { $id } panel-action-done-unmute = Lift the mute or restriction of Telegram ID { $id } panel-action-done-move-to-category = Move to the protected category panel-action-done-move-from-category = Move out of the protected category panel-field-duration = Duration (10m, 2h, 7d, 2w, 1y) panel-field-duration-optional = Duration, optional (10m, 2h, 7d, 2w, 1y) panel-field-duration-hint = For example 7d panel-field-reason = Reason panel-field-reason-none = No reason panel-field-preset = What stays allowed panel-preset-text-only = Text only panel-preset-no-link-previews = No link previews panel-preset-no-stickers-animations-inline = No stickers, animations or inline bots panel-preset-no-polls = No polls panel-undo = Undo · { $seconds }s panel-undo-label = Undo, { $seconds } seconds left panel-command-queueing = Sending… panel-command-holding = Queued. The bot runs it when the undo ends. panel-command-withdrawing = Undoing… panel-command-too-late = Too late to undo: the bot had taken it. panel-command-not-queued = Not queued. Nothing was changed. panel-command-undo-failed = Undo failed: { $reason } panel-command-withdraw-accepted = Undo accepted. The bot closes the command without running it. panel-command-cannot-follow = Your role cannot read the command's result here, so the panel cannot follow it. panel-command-stalled = Not final when last read. panel-command-check-again = Check again panel-command-state-pending = Waiting panel-command-state-running = Running panel-command-state-succeeded = Done panel-command-state-failed = Failed panel-command-state-refused = Refused panel-command-state-unresolved = Unresolved panel-command-state-withdrawn = Undone panel-command-action-ban = Ban panel-command-action-mute = Mute panel-command-action-restrict = Restrict panel-command-action-unban = Unban panel-command-action-unmute = Unmute panel-command-action-move-to-category = Move to the protected category panel-command-action-move-from-category = Move out of the protected category panel-command-action-withdraw = Undo panel-outcome-too-late = too late panel-outcome-interrupted = interrupted panel-outcome-duplicate = duplicate panel-outcome-unavailable = Telegram unavailable panel-outcome-target-invalid = target not valid panel-outcome-internal-failure = internal failure panel-outcome-hold = held panel-outcome-pass = let through panel-outcome-remove = removed panel-outcome-close = gate closed panel-outcome-reopen = gate reopened panel-outcome-delete = deleted panel-outcome-mute = muted panel-outcome-ban = banned panel-outcome-warn = warned ## The command palette (checklist section 2.1). The hint names no @username: the panel cannot ## find a person by one. panel-palette-open = Command panel-palette-title = Command palette panel-palette-placeholder = ban 7d spam panel-palette-hint = Actions here: { $actions }. Target a Telegram ID shown on a loaded screen. Or type a screen's name. panel-palette-hint-no-actions = Your role here has no actions. Type a screen's name. panel-palette-no-group = Pick a group first. panel-palette-run = Run panel-palette-screens = Screens panel-palette-go = Go to { $screen } panel-palette-not-loaded = Telegram ID { $id } is not in what is loaded. Open it in Cases first. panel-palette-refused-empty = Type a command. panel-palette-refused-unknown-action = "{ $word }" is not a command. panel-palette-refused-not-allowed = Your role in this group cannot { $word }. panel-palette-refused-missing-target = Add a Telegram ID. panel-palette-refused-bad-target = "{ $word }" is not a Telegram ID. panel-palette-refused-missing-preset = Add what stays allowed: text_only, no_link_previews, no_stickers_animations_inline or no_polls. panel-palette-refused-missing-duration = Add a duration, such as 2h or 7d. panel-palette-refused-bad-duration = "{ $word }" is not a duration. Use m, h, d, w or y, such as 7d. panel-palette-refused-duration-out-of-range = "{ $word }" is outside what is allowed: at least one minute; a mute or restriction under 366 days, a ban at most three years. panel-palette-refused-unexpected-word = "{ $word }" cannot be sent. The panel sends no text, only a reason code: spam, harassment, off_topic, illegal_content or other. ## Shields. No switch: no command changes a shield (checklist section 8, point 3). panel-shields-sub = Each shield, its mode and what it did. panel-shield-period = Results from { $from } to { $to }. panel-shield-days = Period panel-shields-empty = No shields in this group yet. panel-shields-empty-body = A shield appears here when it is set up for the group. panel-shield-mode-shadow = Shadow mode panel-shield-mode-on = On panel-shield-mode-off = Off panel-shadow-mode = Shadow mode panel-shield-changed = Mode since { $time } panel-shield-shadow-results = In the shadows: would have panel-shield-live-results = Live panel-shield-hits = Hits panel-shield-stopped = Stopped panel-shield-stopped-two-minutes = Stopped within two minutes panel-shield-applied = Applied panel-shield-refused = Refused panel-shield-failed = Failed panel-shield-by-outcome = By outcome panel-rule-gate = Join gate panel-rule-raid = Raid shield panel-rule-flood = Flood shield panel-rule-links = Link shield panel-rule-words = Word shield panel-rule-warn = Warnings ## Trail. panel-trail-sub = What happened in this group. panel-trail-tab-logs = Logs panel-trail-tab-audit = Audit panel-trail-refused = Refused commands panel-trail-refused-empty = No refused commands. panel-trail-membership = Joins and leaves panel-trail-membership-empty = No joins or leaves. panel-list-limit = Showing the newest { $count }. Older entries are not loaded here. panel-sender-chat = Anonymous admin, chat { $id } panel-refusal-no-role = No role panel-refusal-missing-permission = Missing permission panel-refusal-anonymous-sender = Anonymous sender panel-refusal-stale-status = Status out of date panel-refusal-not-entitled = Not entitled panel-refusal-bot-rights-missing = The bot lacks the right panel-refusal-target-invalid = Target not valid panel-refusal-other = Other panel-refusal-telegram-status-unchecked = Telegram status not checked yet panel-audit-clean = Every entry read here is intact. panel-audit-mismatch = Some of the entries read here do not match their hash or link. panel-audit-summary = { $checked } entries checked, { $mismatches } hash mismatches. { $pairs } adjacent pairs checked, { $broken } broken links. panel-audit-scope = Each line checks only this group's entries read on that page, and links only between entries next to each other on it. It says nothing about entries not read. panel-audit-entries = Audit entries panel-audit-empty = No audit entries in this group. panel-audit-range = No. { $first } to { $last }: panel-audit-order = Oldest first. Newer entries follow when loaded. panel-audit-newest = Read up to the newest entry. panel-audit-load-newer = Load newer entries panel-hash-valid = Matches panel-hash-invalid = Mismatch ## Settings. Read only: no command changes a setting (checklist section 8, point 3). panel-settings-sub = This group's settings and roles, as { -product } holds them. panel-settings-group = Group panel-settings-status = Status panel-settings-language = Language panel-settings-reason-required = Reason required panel-settings-appeals = Appeals panel-settings-retention = History kept for panel-settings-retention-confirmed = Retention purpose confirmed panel-settings-title-mirror = Mirror role titles by default panel-settings-bot-rights = { -product }'s rights panel-settings-rights-unchecked = Not checked yet panel-settings-roles = Roles panel-role-all-actions = All actions panel-role-no-flags = No permissions panel-role-mirror-title = Title mirrored panel-role-holders = Holders panel-role-no-holders = Nobody holds this role. panel-role-granted = { $origin }, { $time } panel-grant-origin-activation = At activation panel-grant-origin-command = By command panel-grant-origin-admin-sync = From Telegram's admins panel-flag-ban = Ban panel-flag-unban = Unban panel-flag-mute = Mute panel-flag-unmute = Unmute panel-flag-restrict = Restrict panel-flag-default-permissions = Default permissions panel-flag-define-roles = Define roles panel-flag-assign-roles = Assign roles panel-flag-settings = Settings panel-flag-read-history = Read history ## Durations, in the bot's units. panel-duration-y = { $count -> [one] 1 year *[other] { $count } years } panel-duration-w = { $count -> [one] 1 week *[other] { $count } weeks } panel-duration-d = { $count -> [one] 1 day *[other] { $count } days } panel-duration-h = { $count -> [one] 1 hour *[other] { $count } hours } panel-duration-m = { $count -> [one] 1 minute *[other] { $count } minutes } panel-duration-s = { $count -> [one] 1 second *[other] { $count } seconds } # Group DNA: counts only, never a profile of a person. panel-dna-sub = Your group's activity, compared with its own past. panel-dna-privacy = Counts below five, or based on fewer than five people, are withheld. A weekly total is shown when at least one hour reached five people for that measure; it includes quieter hours. Missing observations are never shown as zero. panel-dna-withheld = Withheld panel-dna-pulse = Activity pulse panel-dna-pulse-sub = Messages in the last completed hour compared with the hour before it. The ring shows the latest hour's share of the two hours together. panel-dna-previous = Previous hour panel-dna-through = Stored hours through { $time } UTC. This is not a live feed. panel-dna-trend-higher = Higher than the previous period panel-dna-trend-lower = Lower than the previous period panel-dna-trend-same = Same as the previous period panel-dna-trend-too_few = Comparison withheld panel-dna-weeks = Weekly activity panel-dna-weeks-sub = Messages in four completed weeks, starting Monday at 00:00 UTC. Each label is the week's start date. panel-dna-trends = Last completed week compared with the week before it panel-dna-messages = Messages · last completed week panel-dna-joins = Joins · last completed week panel-dna-leaves = Leaves · last completed week panel-dna-shields = Shield hits by kind panel-dna-shields-sub = Last completed week, including shadow and active shields. Hits do not mean an action was applied. panel-dna-hours = Hourly activity panel-dna-hours-sub = Messages in the last 24 completed hours. Times are UTC, oldest first.