Files
ChatApp/packages/shared/src/i18n/locales/en/app.json
T
byGalax 21376daf39 perf(P6B.T10): i18next tree-shake — prune dead locale keys
Audited all four i18next namespaces (common, auth, errors, app) against
static t() call-site grep across the entire desktop source tree.
Pruned 40 dead keys per locale, 80 total lines removed across 6 files.

Dead keys removed:
- app: call.{e2ee_active_hint,still_live,voice_connected},
       chats.{show_archived,show_active}, admin.nav,
       friends.confirm_unfriend, settings.{danger_zone,this_device,
       presence,section_ringtone}
- auth: signed_in.{title,session_active,user_id,admin,yes,no,sign_out,
        device_active,device_platform,device_registered_at},
        entire device.* section (old device-registration UI)
- common: loading, cancel, retry, online, offline, idle, dnd, invisible

Dynamic-key patterns were found and respected: t('errors:'+code)
keeps all errors keys; t('app:presence.'+val) keeps all presence keys;
t('app:annotator.tool.'+id) uses defaultValue so its locale entries
were not required.
2026-05-16 23:55:04 +02:00

251 lines
9.6 KiB
JSON

{
"nav": {
"chats": "Chats",
"friends": "Friends",
"settings": "Settings",
"admin": "Admin"
},
"sidebar": {
"search_placeholder": "Search…",
"new_chat": "New chat",
"sign_out": "Sign out"
},
"presence": {
"online": "Online",
"idle": "Idle",
"dnd": "Do not disturb",
"invisible": "Invisible",
"offline": "Offline",
"status_placeholder": "Set status…"
},
"chats": {
"empty_title": "No conversations yet",
"empty_subtitle": "Start a chat from the Friends tab.",
"select_prompt": "Select a conversation",
"select_subtitle": "Pick a chat from the list, or start a new one.",
"deleted": "(deleted)",
"edited": "edited",
"seen": "Seen",
"typing_one": "{{name}} is typing…",
"typing_many": "{{count}} people are typing…",
"new_chat": "New chat",
"new_group": "New group",
"call_outgoing": "Outgoing call",
"call_incoming": "Incoming call",
"call_missed": "Missed call",
"call_no_answer": "No answer",
"call_declined": "Call declined",
"you": "You",
"attachment": "Attachment",
"reply": "Reply",
"forward": "Forward",
"replying_to": "Replying to {{name}}",
"quote_unavailable": "Message not available",
"search_in_conv": "Search in conversation…",
"search_none": "No matches",
"forward_preview": "Preview",
"forward_attachments_dropped": "Attachments are not forwarded.",
"forward_no_targets": "No other conversations available.",
"forward_done": "Sent",
"forward_send": "Send to {{count}}",
"forward_attachments_count_one": "{{count}} attachment forwarded",
"forward_attachments_count_other": "{{count}} attachments forwarded",
"archive": "Archive",
"unarchive": "Unarchive",
"archived_title": "Archive",
"archived_empty_title": "Nothing archived",
"archived_empty_subtitle": "Archived conversations appear here.",
"mute": "Mute",
"unmute": "Unmute",
"mute_1h": "1 hour",
"mute_8h": "8 hours",
"mute_24h": "24 hours",
"mute_1w": "1 week",
"mute_forever": "Until further notice",
"row_menu": "Actions"
},
"call": {
"start_audio": "Voice call",
"incoming_title": "Incoming call",
"incoming_from": "{{name}} is calling",
"incoming_group_from": "{{name}} is calling the group",
"outgoing_ringing": "Calling…",
"connecting": "Connecting…",
"connected": "In call",
"accept": "Accept",
"decline": "Decline",
"hangup": "Hang up",
"mute": "Mute",
"unmute": "Unmute",
"busy": "Busy — already in a call",
"active_in_conv": "Active call · {{count}} in room",
"join": "Join",
"in_call": "In call",
"waiting_for_peers": "Waiting for others…",
"share_screen": "Share screen",
"stop_share_screen": "Stop sharing",
"is_sharing_screen": "{{name}} is sharing their screen",
"watch_screen": "Watch screen",
"stop_watching": "Stop watching",
"fullscreen": "Fullscreen",
"e2ee_active_hint": "Audio + video are end-to-end encrypted"
},
"group": {
"create_title": "New group",
"create_name_label": "Group name",
"create_name_placeholder": "Team chat",
"create_members_label": "Add friends",
"create_members_empty": "No friends yet — add some first.",
"create_cta": "Create group",
"create_cta_loading": "Creating…",
"info_title": "Group info",
"info_members": "Members",
"info_role_admin": "Admin",
"info_role_mod": "Mod",
"info_role_member": "Member",
"info_add_title": "Add members",
"info_add_empty": "All your friends are already in this group.",
"info_add_help": "Pick a friend to add them directly.",
"info_leave": "Leave group",
"info_leave_confirm": "Leave this group?"
},
"friends": {
"title": "Friends",
"search_placeholder": "Search by username…",
"search_min_chars": "Type at least 2 characters.",
"search_no_results": "No users matched.",
"search_results_title": "Search results",
"send_request": "Send request",
"request_sent": "Request sent",
"already_friends": "Already friends",
"incoming_request": "Wants to be friends",
"tab_friends": "Friends",
"tab_pending": "Pending",
"tab_requests": "Requests",
"empty_friends": "No friends yet.",
"empty_pending": "No outgoing requests.",
"empty_requests": "No incoming requests.",
"action_message": "Message",
"action_unfriend": "Unfriend",
"action_accept": "Accept",
"action_decline": "Decline",
"action_cancel": "Cancel"
},
"admin": {
"title": "Admin panel",
"settings_title": "Global settings",
"invites_enabled": "Allow new signups",
"invites_enabled_hint": "When off, no new users can sign up even with a valid invite.",
"invites_title": "Invite codes",
"invites_create": "New code",
"invites_empty": "No invites yet.",
"invites_disable": "Disable",
"invites_enable": "Enable",
"invites_delete": "Delete",
"invites_copy": "Copy",
"invites_copied": "Copied",
"users_title": "Users",
"users_empty": "No profiles yet.",
"users_flag_admin": "Admin",
"users_flag_banned": "Banned",
"users_flag_blocked_inviting": "Blocked from inviting",
"invite_col_code": "Code",
"invite_col_uses": "Uses",
"invite_col_expires": "Expires",
"invite_col_status": "Status",
"invite_col_created": "Created",
"invite_status_active": "Active",
"invite_status_disabled": "Disabled",
"invite_status_expired": "Expired",
"invite_expires_never": "Never"
},
"settings": {
"title": "Settings",
"section_account": "Account",
"section_appearance": "Appearance",
"section_privacy": "Privacy",
"section_devices": "Devices",
"section_voice": "Voice",
"audio_quality": "Audio quality",
"audio_voice": "Voice (Recommended)",
"audio_hifi": "HiFi / Music",
"audio_voice_hint": "Mono 48 kbps with noise suppression, echo cancellation and auto-gain. Optimised for speech in a room.",
"audio_hifi_hint": "Stereo 510 kbps Opus with all DSP off — best for music/broadcast. Requires a quiet environment.",
"e2ee_calls": "End-to-end encryption (calls)",
"e2ee_calls_hint": "Audio + video are encrypted before upload. The server only sees ciphertext. All participants must have the option enabled.",
"e2ee_calls_unsupported": "Your browser doesn't support Insertable Streams. E2EE calls unavailable.",
"ptt_enabled": "Push-to-Talk",
"ptt_enabled_hint": "Mic stays muted until the key is held. Overrides the regular mute button.",
"ptt_key": "Hotkey",
"ptt_press_key": "Press a key…",
"section_screen_share": "Screen share",
"screen_share_quality": "Quality",
"screen_share_hint": "WebRTC dynamically adjusts bitrate + resolution to match network conditions (SVC/VP9). Values are upper bounds. Changes apply on the next call.",
"language": "Language",
"show_read_receipts": "Show read receipts",
"show_read_receipts_hint": "When off, others can't see when you read their messages — and you won't see when they read yours.",
"allow_dms_strangers": "Allow DMs from strangers",
"allow_dms_strangers_hint": "When off, only friends can DM you.",
"sign_out": "Sign out",
"ringtone_incoming": "Incoming call",
"ringtone_default_active": "Default ringtone (double beep)",
"ringtone_custom_active": "{{name}} · {{size}} MB",
"ringtone_upload": "Upload",
"ringtone_replace": "Replace",
"ringtone_preview": "Preview",
"ringtone_stop": "Stop",
"ringtone_reset": "Reset",
"ringtone_hint": "MP3, WAV, OGG or M4A up to 8 MB. Incoming calls only — outgoing keeps the default.",
"ringtone_error_too_large": "File too large (max {{max}} MB).",
"ringtone_error_not_audio": "Only audio files are supported.",
"ringtone_error_generic": "Could not save the ringtone.",
"ringtone_error_play": "Could not play the ringtone.",
"section_soundboard": "Soundboard"
},
"soundboard": {
"summary_title": "Your sounds",
"summary_empty": "No sounds stored yet.",
"summary_counts": "{{sounds}} sounds · {{categories}} categories · {{hotkeys}} with hotkey",
"settings_hint": "Hotkeys are optional. Sounds can also be played from the in-call panel.",
"manage": "Manage",
"manager_title": "Manage soundboard",
"manager_hint": "Any number of sounds, hotkeys optional. Hotkeys fire only while in a call.",
"add": "Add sound",
"empty": "No sounds yet. Upload some above.",
"category_placeholder": "Category…",
"category_uncategorized": "(Uncategorized)",
"hotkey_capture": "Bind hotkey (Esc = cancel)",
"hotkey_press": "Press…",
"hotkey_none": "No hotkey",
"hotkey_clear": "Clear hotkey",
"hotkey_conflict_ptt": "Conflicts with Push-to-Talk.",
"hotkey_conflict_sound": "Already bound to \"{{name}}\".",
"gain_title": "Volume",
"preview": "Preview",
"preview_stop": "Stop",
"move_up": "Move up",
"move_down": "Move down",
"delete": "Delete",
"delete_confirm": "Delete this sound?",
"error_too_large": "File too large (max {{max}} MB).",
"error_not_audio": "Only audio files are supported.",
"error_generic": "Could not save the sound.",
"toggle": "Soundboard",
"panel_title": "Soundboard",
"panel_close": "Close",
"panel_search": "Search…",
"panel_empty": "No sounds stored. Add some from settings.",
"panel_no_matches": "No matches.",
"panel_master": "Master",
"panel_monitor": "Monitor",
"panel_stop_all": "Stop all",
"pad_stop": "Stop"
},
"update": {
"available": "Update available",
"install": "Install & restart",
"downloading": "Downloading",
"installing": "Installing…"
}
}