Files
glchat/web/src/i18n/locales/en.json
T
grendervill ed98c78c9e feat(social): блокировка пользователей
- PUT/DELETE /users/@me/blocks/{id}: блокировка снимает дружбу и заявки в обе
  стороны, разблокировка возвращает возможность писать (AGENT.md 7.2)
- блокировка запрещает личные сообщения (ошибка dm.blocked), открытие беседы и
  заявки в друзья с любой стороны
- клиент: раздел «Заблокированные» в друзьях со снятием блокировки, действие
  «Заблокировать» в меню строки друга и в меню модерации участника
- тесты: Go (блокировка, заявки, беседа, сообщение) и Vitest (список, снятие,
  блокировка из меню)
2026-09-21 19:21:00 +03:00

1131 lines
41 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"app": {
"name": "glchat",
"tagline": "Self-hosted communication: text, voice, video",
"skipToContent": "Skip to content"
},
"status": {
"title": "Foundation deployed",
"description": "The server responds, the database runs in WAL mode, migrations are applied. Chat features arrive in the next phases.",
"connecting": "Checking server status…",
"instance": "Instance",
"version": "Version",
"apiVersion": "API version",
"schemaReady": "Database",
"schemaOk": "ready",
"maxUpload": "Maximum upload size",
"checks": "Checks",
"retry": "Retry",
"back": "Back",
"users": "Users",
"guilds": "Servers",
"registration": "Registration"
},
"health": {
"online": "Server is reachable",
"offline": "Server is unreachable"
},
"errors": {
"network.unreachable": "The server is not responding. Check your connection and try again.",
"network.aborted": "The request was aborted.",
"instance.not_ready": "The instance is still starting. Try again in a few seconds.",
"internal.error": "Internal server error.",
"not_found": "The requested resource was not found.",
"unknown": "Unknown error ({{code}}).",
"auth.2fa_required": "Enter the two-factor code from your authenticator app.",
"auth.totp_invalid": "The two-factor code is incorrect.",
"auth.invalid_credentials": "Wrong email or password.",
"auth.step_up_required": "Confirm your identity: enter your password again.",
"auth.guild_limit_reached": "You have reached the server limit on this instance.",
"auth.session_invalid": "Your session has expired. Sign in again.",
"auth.unauthorized": "Sign-in is required.",
"auth.registration_disabled": "Registration is disabled on this instance.",
"auth.username_taken": "This username is already taken.",
"auth.email_taken": "This email is already registered.",
"auth.weak_password": "The password is too weak. Use at least 8 characters.",
"auth.too_many_attempts": "Too many attempts. Try again later.",
"permissions.denied": "You do not have permission for this action.",
"instance.admin_required": "This action is available to the instance admin only.",
"guild.not_found": "Server not found.",
"guild.member_limit_reached": "This server has reached its member limit.",
"channel.not_found": "Channel not found.",
"validation.failed": "Check the fields you filled in.",
"rate.limited": "Too many requests. Please wait a moment.",
"perm.denied": "You do not have permission to do that.",
"rate_limited": "Too many requests. Please wait a moment.",
"message.edit_window_expired": "This message can no longer be edited: more than 24 hours passed.",
"file.too_large": "The file exceeds the allowed size.",
"request.bad": "Malformed request.",
"file.not_found": "File not found.",
"invite.expired": "This invite has expired.",
"invite.exhausted": "This invite has no uses left.",
"user.not_found": "No user with that username was found.",
"emoji": {
"name_taken": "An emoji with that name already exists.",
"invalid_type": "PNG, JPEG, WebP and GIF are supported.",
"invalid_name": "Emoji name: 2–32 characters — latin letters, digits and “_”."
},
"emojis": {
"limit_reached": "The server has reached its emoji limit."
},
"voice.disabled": "Voice is not configured on this instance.",
"voice.channel_full": "No free slots in this room.",
"voice.token_refresh_failed": "Could not renew the voice session. Please join again.",
"sound": {
"invalid_type": "MP3, OGG, WAV, WebM and M4A are supported.",
"invalid_name": "Sound name: 2–32 characters, latin letters, digits and «_».",
"name_taken": "A sound with this name already exists."
},
"sounds": {
"limit_reached": "The limit of sounds of this kind is reached.",
"event_required": "Choose an event for a palette sound."
},
"voice.not_connected": "Join a voice channel first."
},
"theme": {
"switchToLight": "Light theme",
"switchToDark": "Dark theme",
"label": "Theme",
"dark": "Dark",
"light": "Light"
},
"language": {
"label": "Language",
"ru": "Русский",
"en": "English"
},
"common": {
"loading": "Loading…",
"retry": "Retry",
"cancel": "Cancel",
"close": "Close",
"save": "Save",
"saving": "Saving…",
"create": "Create",
"creating": "Creating…",
"join": "Join",
"leave": "Leave",
"back": "Back",
"copy": "Copy",
"copied": "Copied",
"delete": "Delete",
"yes": "Yes",
"no": "No",
"optional": "optional",
"dismiss": "Dismiss"
},
"footer": {
"source": "Source code",
"license": "AGPL-3.0"
},
"auth": {
"login": {
"title": "Sign in",
"subtitle": "Sign in to keep talking",
"email": "Email",
"emailPlaceholder": "you@example.com",
"password": "Password",
"totp": "2FA or recovery code",
"totpHint": "If 2FA is enabled; a recovery code like xxxx-xxxx-xxxx also works.",
"submit": "Sign in",
"submitting": "Signing in…",
"noAccount": "No account yet?",
"registerLink": "Create one",
"forgot": "Forgot your password? Ask the instance admin.",
"instanceStatus": "Instance status",
"registrationDisabled": "Registration on this instance is disabled by the admin.",
"totpRequired": "Enter the 2FA or recovery code — sign-in needs it."
},
"register": {
"title": "Create account",
"subtitle": "Create an account on {{instance}}",
"username": "Username",
"usernameHint": "3–32 characters: latin letters, digits, “_” and “-”.",
"displayName": "Display name",
"email": "Email",
"password": "Password",
"passwordHint": "At least 8 characters.",
"requirements": "Password requirements: {{list}}",
"requirementLength": "at least 8 characters",
"requirementLetter": "at least one letter",
"requirementDigit": "at least one digit",
"submit": "Create account",
"submitting": "Creating account…",
"haveAccount": "Already have an account?",
"loginLink": "Sign in",
"disabledTitle": "Registration is closed",
"disabledBody": "The instance admin disabled self-service registration. Ask for an invite or contact the admin."
},
"validation": {
"usernameFormat": "Username: 3–32 characters, latin letters, digits, “_” or “-”.",
"usernameRequired": "Enter a username.",
"displayNameRequired": "Enter a display name.",
"emailInvalid": "Enter a valid email address.",
"passwordShort": "The password must be at least 8 characters long.",
"passwordLetter": "Add at least one letter to the password.",
"passwordDigit": "Add at least one digit to the password.",
"passwordMismatch": "The passwords do not match."
}
},
"onboarding": {
"title": "Welcome to glchat",
"greeting": "Hi, {{name}}!",
"subtitle": "A couple of steps and you are ready.",
"displayName": "How should we show you?",
"displayNameHint": "Other members see this name.",
"bio": "Tell us about yourself",
"bioPlaceholder": "What you do, what you like…",
"language": "Interface language",
"theme": "Theme",
"start": "Get started",
"starting": "Preparing your workspace…",
"skip": "Skip and start",
"note": "You can change all of this later in settings."
},
"guilds": {
"railLabel": "Servers",
"listLabel": "Server list",
"add": "Create a server",
"addShort": "Create a server",
"create": {
"title": "Create a server",
"name": "Server name",
"namePlaceholder": "For example, “Friends”",
"hint": "You can rename it later in the server settings.",
"submit": "Create",
"limit": "You can create at most {{count}} servers on this instance.",
"limitReached": "You have reached the server limit — remove one of your servers first.",
"template": "Server template",
"templateCounts": "{{text}} text · {{voice}} voice · {{roles}} roles"
},
"empty": {
"title": "You have no servers yet",
"body": "Create your own server or join one with an invite.",
"create": "Create your own server"
},
"leave": "Leave server",
"leaveConfirm": "Leave the server “{{name}}”?",
"switchTo": "Open server {{name}}"
},
"channels": {
"title": "Channels",
"text": "Text channels",
"voice": "Voice channels",
"category": "Category",
"empty": "This server has no visible channels yet.",
"select": "Open channel {{name}}",
"add": "Create a channel",
"settings": "Server settings",
"create": {
"title": "New channel",
"name": "Channel name",
"namePlaceholder": "for example, general",
"type": "Channel type",
"typeText": "Text",
"typeVoice": "Voice",
"parent": "Category",
"noParent": "No category",
"submit": "Create"
},
"chatPlaceholder": {
"title": "Chat arrives in Phase 2",
"body": "The channel “{{name}}” is ready. Messages and voice arrive in the next phase."
},
"noSelection": {
"title": "Pick a channel",
"body": "The server and channel lists are on the left. Pick a channel to open it."
},
"notInGuild": {
"title": "Server unavailable",
"body": "Looks like you are not a member of this server."
},
"selectUnread": "Open channel {{name}}, {{count}} unread",
"selectMentions": "Open channel {{name}}, {{count}} mentions",
"slowmode": "slowmode {{seconds}}s",
"leaveHint": "You can leave the server in server settings → “Danger zone”.",
"invite": "Invite to server",
"inviteTitle": "Server invite",
"inviteHint": "The link expires after a while. Send it to whoever you want to invite.",
"inviteCreating": "Creating a link…",
"inviteLink": "Invite link",
"inviteCopy": "Copy",
"inviteCopied": "Copied",
"inviteNew": "New link",
"settingsChannel": "Channel settings"
},
"voice": {
"title": "Voice room",
"join": "Join",
"joining": "Connecting…",
"connected": "Connected",
"reconnecting": "Reconnecting…",
"refreshing": "Renewing session…",
"disconnect": "Disconnect",
"disabled": "Voice is not configured on this instance",
"empty": "Nobody is in the room yet",
"you": "You",
"speaking": "Speaking",
"muted": "Microphone is off",
"soundOn": "Sound is on",
"deafened": "Sound is off",
"cameraOn": "Camera is on",
"screenOn": "Screen sharing",
"serverMuted": "Microphone was muted by a moderator",
"serverDeafened": "Sound was muted by a moderator",
"speakingWhileMuted": "You are speaking while muted",
"volume": "Participant volume",
"controls": "Voice controls",
"channelParticipants": "Participants of “{{name}}”",
"mic": {
"on": "Unmute microphone",
"off": "Mute microphone"
},
"sound": {
"on": "Unmute sound",
"off": "Mute sound"
},
"camera": {
"on": "Turn camera on",
"off": "Turn camera off"
},
"screen": {
"on": "Start screen sharing",
"off": "Stop screen sharing",
"quality": "Screen share quality",
"presets": {
"1080p60": "1080p · 60 fps",
"1080p30": "1080p · 30 fps",
"720p30": "720p · 30 fps",
"480p30": "480p · 30 fps"
}
},
"quality": {
"excellent": "Excellent connection",
"good": "Good connection",
"poor": "Poor connection",
"lost": "Connection lost",
"unknown": "Connecting"
},
"menu": {
"label": "Participant {{name}}",
"moderation": "Moderation",
"mute": "Server mute",
"unmute": "Remove server mute",
"deafen": "Server deafen",
"undeafen": "Remove server deafen",
"move": "Move",
"moveTo": "Move to “{{name}}”"
},
"channelMenu": {
"label": "Voice room {{name}}"
},
"soundboard": {
"title": "Soundboard",
"open": "Open the soundboard",
"searchLabel": "Search sounds",
"searchPlaceholder": "Sound name",
"empty": "This server has no soundboard sounds yet.",
"noResults": "Nothing found.",
"playLabel": "Play the sound {{name}}",
"rateLimited": "Too fast: try again in {{seconds}} s.",
"notConnected": "Join a voice channel first.",
"playedBy": "{{name}} played «{{sound}}»"
},
"stats": {
"title": "Statistics",
"open": "Open connection statistics",
"resolution": "Resolution",
"frameRate": "Frame rate",
"codec": "Codec",
"bitrate": "Bitrate",
"kbps": "kbps",
"ms": "ms",
"rtt": "Round-trip time",
"packetLoss": "Packet loss",
"jitter": "Jitter"
},
"publishQuality": {
"label": "Video quality",
"short": {
"low": "Low",
"medium": "Medium",
"high": "High"
},
"level": {
"low": "Low quality",
"medium": "Medium quality",
"high": "High quality"
}
},
"latency": "{{ms}} ms",
"latencyHint": "latency to the voice server",
"latencyUnknown": "ping unknown"
},
"friends": {
"rail": "Friends",
"title": "Friends",
"sidebarLabel": "Friends and direct messages",
"sidebarHint": "Direct messages live here — they are not in the server rail.",
"dmSection": "Direct messages",
"dmEmpty": "No direct messages yet.",
"friendsSection": "Friends",
"friendsEmpty": "Your friend list is empty.",
"open": "Open a conversation with {{name}}",
"empty": {
"title": "Add friends to start talking",
"body": "Find someone by username and send a friend request — a direct conversation appears once it is accepted.",
"search": "Find friends"
},
"search": {
"title": "Friend search",
"close": "Close search",
"label": "Search by username",
"placeholder": "Enter a username",
"hint": "Type at least 2 characters.",
"empty": "Nobody found.",
"add": "Add friend",
"adding": "Sending…",
"requested": "Request sent",
"friend": "Already friends",
"message": "Message",
"open": "Search friends"
},
"requests": {
"incoming": "Incoming requests",
"outgoing": "Outgoing requests",
"accept": "Accept",
"decline": "Decline",
"cancel": "Cancel"
},
"list": {
"label": "Friend list",
"message": "Message",
"more": "Actions: {{name}}",
"menu": "Actions for {{name}}",
"remove": "Remove friend",
"block": "Block",
"toggle": "Friends ({{count}})"
},
"lastSeen": {
"label": "Last seen",
"online": "Online now",
"unknown": "Offline for a while",
"at": "Last seen: {{time}}"
},
"dm": {
"unknown": "Recipient",
"notFound": {
"title": "Conversation unavailable",
"body": "This direct conversation was not found: it may be deleted or closed to you."
}
},
"blocked": {
"section": "Blocked ({{count}})",
"unblock": "Unblock",
"alreadyBlocked": "Blocked"
}
},
"invites": {
"title": "Join with an invite",
"hint": "Paste a code or a link like https://<domain>/invite/<code>.",
"label": "Invite code or link",
"placeholder": "e.g. ab12cd or https://example.com/invite/ab12cd",
"invalid": "Could not recognise the invite code.",
"join": "Join",
"joining": "Joining…",
"members": "Members: {{count}}",
"alreadyMember": "You are already on this server"
},
"chat": {
"log": "Message log of {{name}}",
"loadMore": "Load more",
"loadingMore": "Loading…",
"today": "Today",
"yesterday": "Yesterday",
"edited": "(edited)",
"pending": "sending…",
"newMessages": "New messages",
"adminBadge": "admin",
"types": {
"whisper": "whisper",
"scream": "loud",
"private": "private",
"system": "System message"
},
"unknownAuthor": "unknown",
"start": {
"title": "This is the start of #{{name}}",
"body": "There are no messages here yet. Say something — everyone in the channel will see it.",
"directTitle": "This is the beginning of your conversation with {{name}}",
"directBody": "No messages here yet. Say hello first."
},
"message": {
"by": "Message from {{name}} in {{channel}}",
"sentAt": "Sent {{time}}"
},
"reply": {
"to": "reply to {{name}}",
"missing": "deleted message",
"composer": "Replying to {{name}}",
"cancel": "Cancel reply"
},
"actions": {
"menu": "Message actions",
"reply": "Reply",
"react": "Add reaction",
"pin": "Pin",
"unpin": "Unpin",
"edit": "Edit",
"delete": "Delete",
"deleteConfirm": "Delete this message?",
"copy": "Copy text"
},
"reactions": {
"title": "Reactions",
"add": "React with {{emoji}}",
"toggle": "Reaction {{emoji}}: {{count}}"
},
"emoji": {
"title": "Emoji picker",
"quick": "Quick reactions",
"popular": "Popular emoji",
"pick": "React with {{emoji}}",
"server": "Server emojis",
"search": "Search server emojis",
"searchPlaceholder": "Emoji name",
"notFound": "Nothing found.",
"pickServer": "Pick emoji {{name}}",
"animated": "animated"
},
"edit": {
"label": "Edit message",
"hint": "Enter to save, Escape to cancel",
"save": "Save",
"cancel": "Cancel"
},
"composer": {
"label": "Message to {{name}}",
"placeholder": "Message #{{name}}",
"send": "Send",
"hint": "Enter to send, Shift+Enter for a new line",
"attach": "Attach a file",
"fileInput": "Choose files",
"uploading": "Uploading attachments…",
"attachments": "Message attachments",
"removeAttachment": "Remove attachment {{name}}",
"counter": "{{count}}/{{max}}",
"tooLarge": "File “{{name}}” exceeds the {{limit}} limit",
"rateLimited": "Too many messages. You can send again in {{seconds}} s.",
"denied": "You are not allowed to send messages in this channel.",
"readOnly": "This channel is read-only for you.",
"directLabel": "Message to {{name}}",
"directPlaceholder": "Message {{name}}",
"autocomplete": {
"hint": "↑/↓ — select, Enter — insert, Escape — close",
"mentions": "Server members",
"channels": "Server channels",
"emoji": "Emoji",
"commands": "Commands"
},
"commands": {
"me": "action: name and italic text",
"whisper": "whisper: muted message",
"scream": "loud: large accented text",
"ls": "direct message: /ls username text"
},
"emoji": "Emoji"
},
"typing_one": "{{names}} is typing…",
"typing_few": "{{names}} are typing…",
"typing_many": "{{names}} are typing…",
"typing_other": "{{names}} are typing…",
"pins": {
"open": "Pinned messages",
"title": "Pinned in #{{name}}",
"empty": "No pinned messages in this channel yet.",
"jump": "Jump"
},
"search": {
"open": "Search this channel",
"title": "Message search",
"label": "Search field",
"placeholder": "Search messages",
"hint": "Type at least two characters.",
"empty": "Nothing found."
},
"unread": "Unread messages: {{count}}",
"mentions": "Mentions: {{count}}",
"spoiler": {
"show": "Reveal spoiler",
"hide": "Hide spoiler"
},
"logDirect": "Direct conversation with {{name}}",
"system": {
"member": "a member",
"memberJoin": "{{name}} joined the server",
"memberKick": "{{name}} left the server (kicked)",
"channelCreated": "Room #{{name}} created",
"voiceChannelCreated": "Voice room {{name}} created",
"memberLeave": "{{name}} left the server"
},
"webhookBadge": "webhook",
"webhookAuthor": "webhook"
},
"user": {
"panelLabel": "User panel",
"settings": "User settings",
"menu": {
"label": "User menu",
"open": "Open the user menu",
"account": "Account settings",
"guilds": "Server settings",
"status": "Status",
"noBio": "No bio yet."
},
"logout": "Sign out",
"loggingOut": "Signing out…",
"statusLabel": "Status: {{status}}",
"status": {
"online": "Online",
"idle": "Idle",
"dnd": "Do not disturb",
"invisible": "Invisible",
"offline": "Offline"
},
"voice": {
"input": "Input device",
"output": "Output device",
"camera": "Camera",
"micVolume": "Microphone volume",
"outputVolume": "Sound volume",
"micOn": "Unmute microphone",
"micOff": "Mute microphone",
"cameraOn": "Turn camera on",
"cameraOff": "Turn camera off",
"soundOn": "Undeafen",
"soundOff": "Deafen",
"micSettings": "Microphone settings",
"cameraSettings": "Camera settings",
"soundSettings": "Sound settings",
"audioSettings": "Audio & video settings"
},
"devices": {
"default": "Default device",
"unavailable": "Devices are unavailable",
"empty": "No devices found",
"unnamed": "Device {{index}}"
}
},
"gateway": {
"label": "Connection",
"status": {
"idle": "Not connected",
"connecting": "Connecting…",
"connected": "Connected",
"reconnecting": "Reconnecting…",
"disconnected": "Connection lost"
},
"invalidated": "The server closed the session. Sign in again."
},
"settings": {
"title": "Settings",
"back": "Back to app",
"switcher": {
"label": "Settings sections",
"account": "Server settings",
"servers": "My servers"
},
"tabs": {
"label": "Settings sections",
"profile": "Profile",
"security": "Security",
"appearance": "Appearance",
"notifications": "Notifications",
"server": "Server",
"voice": "Audio & video",
"language": "Language & region",
"instance": "Instance",
"channel": "Channel"
},
"profile": {
"avatar.change": "Change avatar",
"avatar.uploading": "Uploading…",
"title": "Profile",
"description": "How other members see you.",
"displayName": "Display name",
"bio": "About me",
"bioPlaceholder": "A few words about you",
"customStatus": "Custom status",
"customStatusPlaceholder": "For example, “Writing code”",
"customStatusEmoji": "Status emoji",
"customStatusEmojiPlaceholder": "🚀",
"saved": "Profile saved.",
"username": "Username",
"badges": "Badges",
"noBadges": "none",
"tabsLabel": "Profile tabs",
"tabs": {
"main": "General",
"server": "Server"
},
"timezoneDefault": "default (MSK)",
"avatar": {
"change": "Change avatar",
"choose": "Choose avatar file",
"remove": "Remove avatar",
"formats": "JPEG, PNG, WebP, GIF",
"limit": "{{formats}} up to {{limit}}",
"tooLarge": "The file is larger than {{limit}} — pick a smaller image.",
"uploading": "Uploading…"
},
"decorations": {
"title": "Decorations",
"hint": "Profile badges and frames.",
"empty": "No decorations yet.",
"stub": "Badges, frames and profile effects are coming later."
},
"style": {
"title": "Profile decoration",
"description": "Frame, icon, nick colour and effect. You can only pick what your roles grant: on a server the role wins, then the per-server style, then the friends style.",
"scope": "Where to apply",
"scopeGlobal": "For friends (DMs and global places)",
"preview": "preview",
"frame": "Avatar frame",
"badge": "Icon next to the nick",
"color": "Nick colour",
"colorDefault": "Same as role",
"effect": "Nick effect",
"none": "No element",
"noFrames": "No frames granted by roles yet — a server admin grants them.",
"noBadges": "No icons granted by roles yet.",
"reset": "Reset style",
"priorityHint": "Changes apply immediately.",
"effects": {
"none": "No effect",
"gradient": "Gradient",
"glow": "Glow",
"fire": "Fire",
"shimmer": "Shimmer",
"glitch": "Glitch"
}
}
},
"security": {
"title": "Security",
"description": "Password, active sessions and two-factor authentication.",
"passwordTitle": "Change password",
"currentPassword": "Current password",
"newPassword": "New password",
"confirmPassword": "Repeat the new password",
"submitPassword": "Change password",
"passwordChanged": "Password changed.",
"stepUpTitle": "Confirm your identity",
"stepUpBody": "The server requires your password again for this action{{totp}}.",
"stepUpTotp": " and a 2FA code",
"stepUpSubmit": "Confirm",
"stepUpSuccess": "Identity confirmed.",
"stepUpExpired": "The confirmation expired, enter your password again.",
"stepUpPassword": "Your password",
"sessionsTitle": "Active sessions",
"sessionsEmpty": "No active sessions.",
"sessionCurrent": "current",
"sessionCreated": "Created",
"sessionSeen": "Last seen",
"sessionIp": "IP",
"sessionAgent": "Device",
"unknownAgent": "Unknown device",
"logoutAll": "Sign out everywhere",
"logoutAllConfirm": "End all sessions, including this one?",
"logoutAllDone": "All sessions have been ended.",
"twoFactorTitle": "Two-factor authentication",
"twoFactorEnabled": "2FA is on",
"twoFactorDisabled": "2FA is off",
"twoFactorEnable": "Enable 2FA",
"twoFactorSetupHint": "Add the secret to your authenticator app, then enter the six-digit code.",
"twoFactorSecret": "Secret",
"twoFactorUri": "otpauth link",
"twoFactorQrAlt": "QR code for 2FA setup",
"twoFactorQrUnavailable": "The QR code is unavailable — add the secret manually.",
"twoFactorCode": "Code from the app",
"twoFactorConfirm": "Enable",
"twoFactorEnabledDone": "2FA is enabled. Save your recovery codes.",
"recoveryTitle": "Recovery codes",
"recoveryHint": "Every code works once. They are shown only once.",
"recoveryCopyAll": "Copy all codes"
},
"appearance": {
"title": "Appearance",
"description": "Interface theme and language. Stored locally in your browser.",
"theme": "Theme",
"themeHint": "The dark theme is on by default.",
"language": "Language",
"languageHint": "Russian is the primary interface language."
},
"instance": {
"title": "Instance",
"description": "Instance admin only. Read-only data.",
"notAdmin": "This section is available to the instance admin only.",
"settings": "Instance settings",
"settingsEmpty": "No settings configured.",
"guilds": "Servers ({{count}})",
"guildsEmpty": "No servers.",
"userId": "User ID",
"users": "Users ({{count}})",
"usersEmpty": "No users.",
"audit": "Audit log (last {{count}})",
"auditEmpty": "No entries.",
"memberCount": "{{count}} members",
"adminBadge": "admin",
"mainBadge": "main",
"usersIdHint": "User IDs are visible to the instance administrator only.",
"dashboard": {
"title": "Server dashboard",
"refreshHint": "updates every second",
"cpu": "CPU",
"cpuCaption_one": "{{count}} core",
"cpuCaption_few": "{{count}} cores",
"cpuCaption_many": "{{count}} cores",
"cpuCaption_other": "{{count}} cores",
"memory": "Memory",
"diskHint": "Disk: used / total. {{free}} free",
"databaseHint": "Database: main file and WAL ({{wal}})",
"containerRow": "Instance container",
"containerHint": "Profile limits",
"hostRow": "Whole server",
"hostHint": "Entire machine"
},
"health": {
"title": "Instance healthcheck",
"collecting": "Collecting data…",
"unavailable": "The instance does not answer dashboard requests.",
"ping": "Ping",
"pingValue": "{{ms}} ms",
"pingUnavailable": "—",
"pingHint": "Instance response time for a dashboard request (HTTP)",
"summary": {
"ok": "All good",
"warn": "Warnings",
"failed": "Errors"
},
"status": {
"ok": "running",
"warn": "warning",
"failed": "failed",
"off": "disabled"
},
"checks": {
"app": "Application",
"database": "Database",
"disk": "Disk",
"storage": "Data writes",
"voice": "Voice (SFU)",
"gateway": "Gateway",
"metrics": "Metrics"
}
}
},
"servers": {
"pickerLabel": "My servers",
"empty": "You have no servers yet.",
"emptyTitle": "No servers yet",
"emptyHint": "Join the instance main server or create your own — its settings will show up here.",
"select": "Open settings of the server {{name}}",
"notFound": "The server was not found among the ones you can access.",
"readOnlyHint": "Only the owner and members with ADMINISTRATOR or MANAGE_GUILD can edit this.",
"general": {
"title": "General",
"description": "Every member sees the server name and description.",
"name": "Server name",
"guildDescription": "Description",
"descriptionPlaceholder": "What this server is about",
"saved": "Server settings saved."
},
"nickname": {
"title": "My profile on this server",
"description": "The nickname is visible on this server only.",
"label": "Nickname",
"placeholder": "Leave empty to reset the nickname",
"current": "Current nickname:",
"none": "not set",
"saved": "Nickname saved.",
"applyAll": "Apply to all servers",
"applyAllHint": "One nickname for every server you are in.",
"applyAllPending": "Applying…",
"applyAllProgress": "Servers updated: {{done}} of {{total}}",
"applyAllDone": "Nickname applied on all servers ({{total}}).",
"applyAllFailed": "Failed to update servers: {{failed}}."
},
"members": {
"title": "Members",
"description": "The first {{limit}} members of the server.",
"empty": "No members found.",
"roles": "Roles: {{roles}}",
"more": "The full member list with roles arrives in the next phases.",
"moderate": "Moderate {{name}}",
"timeout": "Timeout",
"timeoutClear": "Clear timeout",
"banReason": "Ban reason",
"banReasonPlaceholder": "optional",
"ban": "Ban",
"kick": "Kick"
},
"roles": {
"title": "Roles",
"description": "Role colour and position. Role management arrives in the next phases.",
"empty": "This server has no roles yet.",
"position": "Position {{position}}",
"default": "default",
"frame": "Frame",
"badge": "Icon",
"nickColor": "Nick colour",
"nickEffect": "Nick effect",
"decorationSaved": "Role decoration saved."
},
"danger": {
"title": "Danger zone",
"description": "These actions cannot be undone.",
"leaveOwnerHint": "The owner cannot leave their own server: transfer ownership or delete the server first.",
"leaveHint": "Leave the server and lose access to its channels.",
"leave": "Leave server",
"leaveConfirmTitle": "Leave the server?",
"leaveConfirmBody": "You will leave “{{name}}”. You can come back with an invite.",
"leaveConfirm": "Leave",
"deleteHint": "Delete the server together with its channels, roles and members.",
"delete": "Delete server",
"deleteConfirmTitle": "Delete the server?",
"deleteConfirmBody": "“{{name}}” will be deleted permanently.",
"deleteConfirm": "Delete"
},
"selectLabel": "Choose a server",
"emojis": {
"title": "Emojis",
"description": "Custom server emojis: up to {{limit}}, 512 KB each.",
"counter": "{{count}} of {{limit}}",
"empty": "The server has no emojis yet.",
"animated": "animated",
"rename": "Rename",
"renameLabel": "Rename emoji {{name}}",
"renameTitle": "Rename emoji",
"delete": "Delete",
"deleteLabel": "Delete emoji {{name}}",
"deleteConfirmTitle": "Delete emoji?",
"deleteConfirmBody": "Emoji {{name}} will be deleted permanently.",
"deleteConfirm": "Delete",
"uploadTitle": "Upload an emoji",
"uploadHint": "Drop a file below or pick one: PNG, JPEG, WebP or GIF up to {{limit}}.",
"name": "Emoji name",
"namePlaceholder": "for example, pepe_happy",
"nameHint": "2–32 characters: latin letters, digits and “_”.",
"dropHint": "Drop a file here",
"chooseFile": "Choose file",
"file": "Emoji file",
"fileSelected": "{{name}} · {{size}}",
"upload": "Upload",
"uploading": "Uploading…"
},
"sounds": {
"title": "Sounds",
"description": "Server soundboard and sound palette: up to {{limit}} sounds of each kind, 512 KB each.",
"counter": "{{count}} of {{limit}}",
"empty": "No sounds of this kind yet.",
"uploadTitle": "Upload a sound",
"uploadHint": "Drop a file below or choose it: MP3, OGG, WAV, WebM or M4A up to {{limit}}.",
"name": "Sound name",
"namePlaceholder": "for example, airhorn",
"nameHint": "2–32 characters: latin letters, digits and «_».",
"emoji": "Emoji",
"emojiPlaceholder": "for example, 📣",
"emojiHint": "Optional icon for the soundboard grid.",
"event": "Event",
"dropHint": "Drop the file here",
"file": "Sound file",
"chooseFile": "Choose a file",
"fileSelected": "{{name}} · {{size}}",
"upload": "Upload",
"uploading": "Uploading…",
"rename": "Rename",
"renameLabel": "Rename the sound {{name}}",
"renameTitle": "Rename the sound",
"delete": "Delete",
"deleteLabel": "Delete the sound {{name}}",
"deleteConfirmTitle": "Delete the sound?",
"deleteConfirmBody": "The sound {{name}} will be deleted permanently.",
"deleteConfirm": "Delete",
"kinds": {
"soundboard": "Soundboard",
"ui": "Sound palette"
},
"events": {
"member_join": "Member joined",
"member_leave": "Member left",
"mention": "Mention",
"message": "New message",
"message_send": "Message sent",
"voice_join": "Joined a voice channel",
"voice_leave": "Left a voice channel",
"mic_on": "Microphone on",
"mic_off": "Microphone off",
"camera_on": "Camera on",
"camera_off": "Camera off",
"screen_on": "Screen share started",
"screen_off": "Screen share stopped",
"kick": "Member kicked",
"ban": "Member banned",
"mute": "Member muted",
"role_grant": "Role granted",
"role_revoke": "Role revoked"
}
},
"bans": {
"title": "Bans",
"description": "Banned users cannot return by invite until the ban is lifted.",
"empty": "No bans.",
"remove": "Unban",
"noReason": "no reason",
"bannedBy": "banned by {{name}}, {{date}}",
"unknownActor": "unknown",
"timeoutLabel": "Timeout:",
"timeoutMinutes_one": "{{count}} minute",
"timeoutMinutes_few": "{{count}} minutes",
"timeoutMinutes_many": "{{count}} minutes",
"timeoutMinutes_other": "{{count}} minutes",
"timeoutAction": "Timeout {{minutes}} min"
},
"audit": {
"title": "Audit log",
"description": "Guild moderator actions. Filters are applied server-side.",
"filterAction": "Action",
"filterActor": "Actor ID",
"filterTarget": "Target ID",
"apply": "Apply",
"reset": "Reset",
"empty": "No entries."
},
"appearance": {
"title": "Appearance",
"description": "Server icon, banner, invite splash and accent color.",
"icon": "Server icon",
"iconHint": "Square image shown in the server list.",
"banner": "Banner",
"bannerHint": "Wide image for the server header.",
"splash": "Invite splash",
"splashHint": "Background of the invite page.",
"accent": "Accent color",
"accentHint": "Color of buttons and highlights inside the server.",
"accentDefault": "Theme color",
"accentBlurple": "Blue",
"accentGreen": "Green",
"accentOrange": "Orange",
"accentRed": "Red",
"accentPurple": "Purple",
"upload": "Upload",
"remove": "Remove",
"empty": "none",
"notImage": "An image file is required (PNG, JPEG, GIF, WebP).",
"tooLarge": "The file is larger than 8 MB."
},
"cosmetics": {
"title": "Decoration gallery",
"description": "Avatar frames and icons next to the nick. Uploaded items are granted to roles in the Roles section; animated GIF and WebP keep their animation.",
"upload": "Upload",
"empty": "Nothing uploaded yet.",
"limit": "{{used}} of {{total}} used",
"name": "Item name",
"notImage": "An image file is required",
"tooLarge": "File is larger than 5 MB",
"deleteConfirm": "Delete the item? It disappears from all roles and personal styles.",
"kind": {
"frame": "Frames",
"badge": "Icons"
}
}
},
"navLabel": "Settings sections",
"notifications": {
"title": "Notifications",
"description": "Sounds, mentions and web push.",
"stub": "Notification settings are coming later."
},
"voice": {
"title": "Audio & video",
"description": "Input and output devices and volume. Changes apply to the current voice room immediately.",
"input": "Microphone",
"camera": "Camera",
"output": "Sound",
"micVolume": "Microphone volume",
"outputVolume": "Sound volume",
"stub": "Changes apply immediately and are stored on this device.",
"micMode": "Microphone activation",
"micModes": {
"voice": "Voice activity",
"push_to_talk": "Push-to-talk"
},
"pttKey": "Key",
"pttHint": "Hold the key to talk. Works while the window is focused and the cursor is not in a text field.",
"pttKeys": {
"space": "Space",
"v": "V",
"b": "B",
"n": "N",
"alt": "Alt",
"ctrl": "Ctrl"
},
"sounds": "Sounds",
"eventSounds": "Server event sounds",
"eventSoundsHint": "Play the server palette sounds: member joins, mentions and other events.",
"soundboard": "Soundboard",
"soundboardHint": "Play soundboard sounds in a voice channel.",
"latency": "Participant ping",
"latencySharing": "Show ping in the voice room",
"latencySharingHint": "Participant latency to the instance updates every second; your own ping is shared with the room.",
"interfaceSounds": "Built-in interface sounds",
"interfaceSoundsHint": "Short signals for messages, mentions and voice joins when the server has no custom sound."
},
"language": {
"title": "Language & region",
"description": "Time zone and interface language.",
"timezone": "Time zone",
"timezoneHint": "Used for message times.",
"locale": "Interface language",
"localeHint": "Applies immediately.",
"saved": "Region settings saved."
},
"channel": {
"noGuild": "Pick a server to configure its channel.",
"noChannels": "This server has no text channels.",
"pick": "Channel",
"noPermission": "Only the server owner and members with MANAGE_WEBHOOKS can manage the channel.",
"webhooks": {
"title": "Webhooks",
"description": "A webhook posts messages to the channel without a user session: requests go to the tokenised URL.",
"empty": "No webhooks yet.",
"create": "Create webhook",
"name": "Webhook name",
"avatar": "Avatar",
"avatarHint": "PNG, JPEG, WebP or GIF up to 2 MB.",
"submit": "Create",
"rename": "Rename",
"rotate": "New link",
"url": "Webhook URL",
"createdAt": "created {{date}}",
"limit": "{{count}} used",
"deleteConfirm": "Delete the webhook? The link stops working, messages already sent stay.",
"stepUpBody": "Creating a webhook requires confirming your identity: enter your password{{totp}}."
},
"title": "Channel background",
"description": "An image behind the message feed. Animated GIF and WebP keep their animation; with the system reduce-motion setting the first frame is shown.",
"empty": "No background set.",
"upload": "Upload background",
"remove": "Remove background",
"notImage": "An image file is required",
"tooLarge": "File is larger than 5 MB"
}
},
"badges": {
"instanceAdmin": "Instance administrator",
"guildOwner": "Server owner",
"earlySupporter": "Early supporter",
"verified": "Verified"
}
}