main
/** Chat: sidebar lists, composer, transcript, threads and voice. */
export const chat = {
'chat.rooms.title': 'Channels',
'chat.rooms.empty': 'No channels yet',
'chat.rooms.create': 'New channel',
'chat.rooms.name': 'Channel name',
'chat.rooms.topic': 'Topic',
'chat.rooms.private': 'Private channel',
'chat.rooms.created': 'Channel created.',
'chat.rooms.updated': 'Channel updated.',
'chat.rooms.deleted': 'Channel deleted.',
'chat.dms.title': 'Direct messages',
'chat.dms.empty': 'No direct messages yet',
'chat.upload.failedStatus': 'Upload failed ({status})',
'chat.composer.placeholder': 'Message #{room}',
'chat.composer.send': 'Send',
'chat.composer.attach': 'Add attachment',
'chat.composer.emoji': 'Emoji',
'chat.composer.tooLong': 'Message is too long (maximum {max} characters).',
'chat.composer.empty': 'Message cannot be empty.',
'chat.composer.sent': 'Message sent.',
'chat.composer.failed': 'Sending failed. Please try again.',
'chat.composer.unauthorized': 'Your session expired — sign in again',
'chat.composer.forbidden': 'You cannot post in this channel',
'chat.composer.notFound': 'That channel or message no longer exists',
'chat.composer.rateLimited': 'Sending too fast — try again shortly',
'chat.composer.unavailable': 'No response from the service; the message was not sent',
'chat.message.edited': 'edited',
'chat.message.deleted': 'Message deleted',
'chat.message.edit': 'Edit message',
'chat.message.delete': 'Delete message',
'chat.message.reply': 'Reply',
'chat.message.thread': 'Thread',
'chat.message.save': 'Save',
'chat.message.unsave': 'Unsave',
'chat.message.pin': 'Pin',
'chat.message.unpin': 'Unpin',
'chat.message.copyLink': 'Copy link',
'chat.message.saved': 'Message saved.',
'chat.message.unsaved': 'Message removed from saved.',
'chat.message.deletedNotice': 'Message deleted.',
'chat.message.editedNotice': 'Message updated.',
'chat.message.deleteConfirm': 'Delete this message? This cannot be undone.',
'chat.day.today': 'Today',
'chat.day.yesterday': 'Yesterday',
'chat.day.weekday': '{weekday}',
'chat.thread.title': 'Threads',
'chat.thread.empty': 'No threads yet',
'chat.thread.create': 'New thread',
'chat.thread.replies': '{count} replies',
'chat.thread.archived': 'Archived',
'chat.thread.archivedNotice': 'Thread archived.',
'chat.attachment.image': 'Image',
'chat.attachment.video': 'Video',
'chat.attachment.audio': 'Audio',
'chat.attachment.pdf': 'PDF',
'chat.attachment.text': 'Text',
'chat.attachment.file': 'File',
'chat.attachment.download': 'Download attachment',
'chat.attachment.tooLarge': 'The attachment exceeds the size limit.',
'chat.attachment.uploadFailed': 'Attachment upload failed. Please retry.',
'chat.voice.join': 'Join voice',
'chat.voice.leave': 'Leave voice',
'chat.voice.mute': 'Mute',
'chat.voice.unmute': 'Unmute',
'chat.voice.stage': 'Stage',
'chat.voice.connected': 'Connected to the voice channel',
'chat.voice.disconnected': 'Left the voice channel',
'chat.voice.restore': 'Restore sound',
'chat.voice.failed': 'Could not join the voice channel. Please retry.',
'chat.voice.members': 'Members online',
'chat.voice.empty': 'Nobody else is in this channel yet',
'chat.voice.membersCount': '{count} members are already here',
'chat.member.list': 'Members',
'chat.member.invite': 'Invite members',
'chat.member.online': 'Online',
'chat.mention.everyone': 'Mention everyone',
'chat.notification.newMessage': '{author} mentioned you in #{room}',
'chat.notification.reply': '{author} replied to your message',
'chat.notification.viewChannel': 'View channel',
// Room header, connection banner and room lifecycle.
'chat.room.slowModeTitle': 'Slow mode — one message every {seconds}s',
'chat.room.dmTopicPlaceholder': 'Every conversation starts with a hello',
'chat.room.topicPlaceholder': 'Share what you are thinking and get things done together',
'chat.room.transcriptPane': 'Transcript',
'chat.room.callPane': 'Call view',
'chat.room.pins': 'Pinned messages',
'chat.room.threads': 'Threads',
'chat.room.members': 'Channel members',
'chat.room.membersWithCount': 'Channel members · {count}',
'chat.room.options': 'Channel options',
'chat.room.mute': 'Mute this channel',
'chat.room.unmute': 'Unmute',
'chat.room.favorite': 'Favourite this channel',
'chat.room.unfavorite': 'Remove from favourites',
'chat.room.clearDraft': 'Clear draft',
'chat.room.closeDm': 'Close this conversation',
'chat.room.settings': 'Channel settings',
'chat.room.info': 'Channel info',
'chat.room.dmSettings': 'Conversation settings',
'chat.room.ownedByViewer': 'You own this channel',
'chat.room.leave': 'Leave channel',
'chat.room.details': 'Channel details',
'chat.room.accessDenied': 'You cannot view this channel',
'chat.room.gone': 'This channel no longer exists or was deleted',
'chat.room.goneHint':
'The link may have expired, or the owner deleted the channel. Pick another one from the list on the left.',
'chat.room.settingsNoteDm':
'A direct message only exposes a few settings beyond its name; closing it removes it from the list.',
'chat.room.settingsNoteManage': 'These fields are written to the room itself, so every member sees the change.',
'chat.room.settingsNoteView': 'You have read access only — the settings below are read-only.',
'chat.room.nameHint': 'Lowercase letters, digits and hyphens are the safest choice',
'chat.room.topicHint': 'Shown in the title bar; up to 1024 characters',
'chat.room.private': 'Private channel (members only)',
'chat.room.rateLimit': 'Slow mode (seconds)',
'chat.room.rateLimitHint': '0 disables it; the shortest gap between two messages from one member',
'chat.room.deleteNote': 'The channel stops being visible and its messages will not come back.',
'chat.room.deleteConfirm': 'Delete the channel',
'chat.room.deleteAction': 'Delete this channel',
'chat.room.saved': 'Saved',
'chat.room.slowModeShort': 'Slow mode {seconds}s',
// Realtime connection banner.
'chat.connection.authRequired': 'The realtime connection needs a fresh sign-in',
'chat.connection.stopped': 'Realtime stopped; messages will not update automatically',
'chat.connection.connecting': 'Connecting to the realtime channel…',
'chat.connection.closed': 'Realtime disconnected; messages will not update automatically',
'chat.connection.retry': 'Reconnect',
// Transcript.
'chat.transcript.aria': 'Chat messages',
'chat.transcript.accessDenied': 'You no longer have access to this channel',
'chat.transcript.accessDeniedHint': 'The server revoked read access here. Pick another channel from the left.',
'chat.transcript.loadingOlder': 'Loading earlier messages…',
'chat.transcript.threadStart': 'The thread starts here',
'chat.transcript.start': 'Every good conversation starts somewhere',
'chat.transcript.loadFailed': 'Messages failed to load',
'chat.transcript.seedFailed': 'The latest messages could not be loaded',
'chat.transcript.threadEmptyTitle': 'Keep the discussion going',
'chat.transcript.threadEmptyBody': 'Share your take and be the first to reply.',
'chat.transcript.roomEmptyTitle': 'Welcome to {room}',
'chat.transcript.roomEmptyBody': 'A new topic, a fresh idea, or just a hello. Let us start here.',
'chat.transcript.newMessages': '{count} new messages',
'chat.transcript.newMessages_one': '{count} new message',
'chat.transcript.newMessages_other': '{count} new messages',
'chat.transcript.backToLatest': 'Back to the latest',
'chat.transcript.pinned': 'Pinned',
'chat.transcript.replyDeleted': 'Replying to a deleted message',
'chat.transcript.thisDeleted': '(this message was deleted)',
'chat.transcript.deletedShort': '(deleted)',
'chat.transcript.jumpToOriginal': 'Jump to the original message',
'chat.transcript.actions': 'Message actions',
'chat.transcript.typingOne': '{name} is typing…',
'chat.transcript.typingTwo': '{first} and {second} are typing…',
'chat.transcript.typingMany': '{names} are typing…',
'chat.transcript.mine': 'You',
'chat.transcript.unsent': 'Not sent',
'chat.transcript.sending': 'Sending',
'chat.transcript.sendFailed': 'Sending failed',
'chat.transcript.editHint': 'Enter to save · Shift+Enter for a new line · Esc to cancel',
'chat.transcript.react': 'Add a reaction',
'chat.transcript.replyInThread': 'Reply in a thread',
'chat.transcript.quoteReply': 'Quote reply',
'chat.transcript.copied': 'Copied',
'chat.transcript.copyText': 'Copy text',
'chat.transcript.more': 'More actions',
'chat.transcript.lastReply': 'Last reply {time}',
'chat.transcript.locked': 'Locked',
// Reactions and unread markers.
'chat.reaction.aria': '{emoji}, {count} reacted',
'chat.reaction.ariaMine': '{emoji}, {count} reacted, including you',
'chat.reaction.title': '{count} reacted',
'chat.unread.count': '{count} unread',
'chat.unread.label': 'Unread',
// System lines written by the backend into a room.
'chat.system.integration': 'Integration',
'chat.system.postWithContent': '{author}: {content}',
'chat.system.post': '{author} posted a message',
'chat.system.threadCreated': '{author} started a thread',
'chat.system.joined': '{author} joined this channel',
'chat.system.left': '{author} left this channel',
'chat.system.topicChanged': '{author} changed the topic to "{topic}"',
'chat.system.topicUpdated': '{author} updated the channel topic',
'chat.system.pinned': '{author} pinned a message',
'chat.system.reminder': '{author} set a reminder: {content}',
'chat.system.reminderSet': '{author} set a reminder',
'chat.system.message': 'System message',
'chat.system.sent': '{author} sent a message',
// Thread panels.
'chat.panel.close': 'Close panel',
'chat.panel.resize': 'Resize side panel',
'chat.panel.clearFocus': 'Restore chat clarity',
'chat.panel.loadedMembers': 'Loading space members…',
'chat.panel.searching': 'Searching…',
'chat.thread.lockedNotice': 'This thread is locked and cannot be replied to',
'chat.thread.archivedReadOnly': 'This thread is archived and read-only',
'chat.thread.byOwner': "{name}'s thread",
'chat.thread.fromOwner': 'Thread from {name}',
'chat.thread.summary': '{replies} replies · {participants} participants',
'chat.thread.participants': '{count} people',
'chat.thread.participants_one': '{count} participant',
'chat.thread.participants_other': '{count} participants',
'chat.thread.count': '{count} threads',
'chat.thread.follow': 'Turn on alerts',
'chat.thread.followTitle': 'Notify me about every new reply in this thread',
'chat.thread.following': 'Alerts on',
'chat.thread.followingTitle': 'New replies will notify you; click to turn alerts off',
'chat.thread.unfollow': 'Turn off alerts',
'chat.thread.unfollowTitle': 'Stop notifying me about this thread',
'chat.thread.lock': 'Lock the thread (no new replies)',
'chat.thread.unlock': 'Unlock the thread',
'chat.thread.locked': 'Locked',
'chat.thread.missing': 'Not found',
'chat.thread.missingHint':
'This thread may have been deleted, or it is still loading. Close this and reopen it from the thread list.',
'chat.thread.emptyHint':
'No threads yet. Choose "Reply in a thread" from a message toolbar to keep the discussion organised.',
// Pin list.
'chat.pins.count': '{count} pinned',
'chat.pins.empty': 'Nothing is pinned yet. Hover a message and pin it from "More actions".',
'chat.pins.jump': 'Jump to this message',
'chat.pins.jumpShort': 'Jump',
// Member roster.
'chat.member.count': '{count} people',
'chat.member.count_one': '{count} person',
'chat.member.count_other': '{count} people',
'chat.member.owner': 'Owner',
'chat.member.forbidden': 'This is a private channel; its member list is not shared with you.',
'chat.member.loadFailed': 'The member list failed to load.',
'chat.member.self': 'This is you',
'chat.member.dmTitle': 'Direct message @{username}',
'chat.member.addCount': 'Add ({count})',
'chat.member.allInRoom': 'Everyone in this space is already in this channel.',
'chat.member.listFailed': 'Space members could not be read',
// Search panel.
// Attachments.
'chat.attachment.unknownType': 'Unknown type',
'chat.attachment.preview': 'Preview',
'chat.attachment.closePreview': 'Close preview',
// Emoji picker.
'chat.emoji.common': 'Frequent',
'chat.emoji.gestures': 'Gestures',
'chat.emoji.symbols': 'Symbols',
'chat.emoji.custom': 'Space',
'chat.emoji.search': 'Search emoji',
'chat.emoji.searchClear': 'Clear search',
// Voice surface.
'chat.voice.channelFallback': 'Voice channel',
'chat.voice.callAria': 'Call',
'chat.voice.barDragHint': 'Drag the empty area to move it; double-click to reset',
'chat.voice.mic': 'Microphone',
'chat.voice.camera': 'Camera',
'chat.voice.screenShare': 'Share screen',
'chat.voice.noPublish': 'You cannot speak right now',
'chat.voice.return': 'Back to the voice channel',
'chat.voice.hangUp': 'Leave the call',
'chat.voice.disabled': 'Voice is not enabled',
'chat.voice.joinFailed': 'Could not join the voice channel',
'chat.voice.handFailed': 'Raising your hand failed',
'chat.voice.handCancelFailed': 'Withdrawing your hand failed',
'chat.voice.handDecideFailed': 'The approval failed',
'chat.voice.sharing': '{name} is sharing their screen',
'chat.voice.stageHint':
'This is a stage channel: join to listen, raise your hand to speak, and the microphone opens once a host approves.',
'chat.voice.joinHint': 'Joining turns on your microphone; you can mute it or turn the camera off at any time.',
'chat.voice.handPending': 'Hand raised — waiting for a host to approve',
'chat.voice.cancelHand': 'Withdraw your hand',
'chat.voice.joining': 'Joining…',
'chat.voice.tilePlaced': 'Drag to park it, resize from the bottom-right, double-click to return to the grid',
'chat.voice.tileHint': 'Press and drag to any free spot',
'chat.voice.forceUnmute': 'Unmute',
'chat.voice.forceMute': 'Mute',
'chat.voice.kick': 'Remove from the call',
'chat.voice.tileSpeaking': '{name} is speaking',
'chat.voice.solo': 'Nobody is here with you yet — invite members to join.',
'chat.voice.hands': 'Speaking requests',
'chat.voice.canSpeak': 'You may speak now',
'chat.voice.raiseHand': 'Raise your hand to speak',
'chat.voice.pendingCount': '{count} pending',
'chat.voice.noHands': 'No pending requests',
'chat.voice.revoke': 'Revoke',
'chat.voice.speaking': '{name} · speaking',
'chat.voice.notice.micDenied': 'Microphone access was denied; joining in listen-only mode',
'chat.voice.notice.connectFailed': 'The voice connection failed',
'chat.voice.notice.kicked': 'A moderator removed you from the call',
'chat.voice.notice.duplicate': 'This account joined the call somewhere else',
'chat.voice.notice.dropped': 'The voice connection dropped — click to rejoin',
'chat.voice.notice.micUnavailable': 'The microphone is unavailable',
'chat.voice.notice.cameraUnavailable': 'The camera is unavailable',
'chat.voice.notice.screenUnavailable': 'Screen sharing is unavailable',
'chat.voice.notice.audioBlocked':
'The browser still blocks audio playback — check the sound permission for this site',
'chat.voice.notice.mediaUnreachable':
'The voice channel could not be established: the browser cannot reach the voice service. Rejoin; contact an administrator if it keeps failing.',
'chat.voice.notice.permissionDenied':
'The browser denied microphone/camera permission — restore it from the address bar and retry',
'chat.voice.notice.tokenInvalid': 'The voice token is invalid or expired — join again',
'chat.voice.notice.deviceMissing': 'No usable device found - check that a microphone/camera is connected.',
'chat.voice.notice.deviceInUse': 'The device is in use by another application.',
'chat.voice.notice.browserUnsupported': 'This browser cannot do voice calls - use Chrome or Edge.',
'chat.voice.mutedByHost': 'The host muted your microphone.',
'chat.voice.unmutedByHost': 'The host gave you the microphone back.',
'chat.voice.reconnecting': 'Voice connection dropped - reconnecting automatically...',
'chat.voice.reconnectFailed': 'Automatic reconnection failed. Select rejoin to try again.',
'chat.voice.rejoin': 'Rejoin',
'chat.voice.deviceSystemDefault': 'System default',
'chat.voice.deviceOff': 'Off',
'chat.voice.joinWithMic': 'Open the microphone when joining',
'chat.voice.deviceNoMic': 'Allow microphone access to list devices',
'chat.voice.deviceNoOutput': 'System default output',
'chat.voice.deviceNoCamera': 'Allow camera access to list devices',
'chat.voice.debugDetails': 'Connection details',
'chat.voice.deviceTitle': 'Devices & preview',
'chat.voice.deviceHint': 'Pick your devices, then join. The microphone follows your choice.',
'chat.voice.deviceJoin': 'Join channel',
'chat.voice.speaker': 'Speaker',
'chat.voice.micTest': 'Say something - the level bar below will move',
'chat.voice.micLevel': 'Microphone level',
'chat.voice.volume': 'Volume for {name}',
'chat.voice.focus': 'Focus {name}',
'chat.voice.clearFocus': 'Clear focus',
'chat.voice.shareAudio': 'Also share computer sound',
'chat.voice.shareCancelled': 'Screen share cancelled',
'chat.voice.autoLayout': 'Reset to automatic layout',
'chat.voice.prevPage': 'Previous page',
'chat.voice.nextPage': 'Next page',
'chat.voice.aria.joined': '{name} joined the call',
'chat.voice.aria.left': '{name} left the call',
'chat.voice.tileMenu': 'Actions for {name}',
'chat.voice.qualityHigh': 'Good connection',
'chat.voice.qualityMedium': 'Fair connection',
'chat.voice.qualityLow': 'Poor connection',
'chat.voice.qualityUnknown': 'Connection quality unknown',
// Bullet comments (danmaku).
'chat.danmaku.title': 'Bullet comments',
'chat.danmaku.count': '{count} comments',
'chat.danmaku.loadOlder': 'Load earlier',
'chat.danmaku.empty': 'No bullet comments yet',
'chat.danmaku.flying': 'Fly across the screen',
'chat.danmaku.placeholder': 'Fire a bullet comment…',
'chat.danmaku.label': 'Bullet comment',
// Composer leftovers.
'chat.composer.attachmentLimit': 'A message takes at most {max} attachments; the extra ones were not added',
'chat.composer.blockedUploading': 'An attachment is uploading; sending unlocks automatically when it finishes',
'chat.composer.blockedFailed': 'An attachment failed to upload — retry or remove it before sending',
} as const