{
  "settings": {
    "title": "Settings",
    "closeAria": "Close settings",
    "backToMenuAria": "Back to settings menu",
    "sections": {
      "general": "General",
      "server": "Server"
    },
    "nav": {
      "general": "General",
      "plugins": "Client plugins",
      "theme": "Theme Studio",
      "network": "Network",
      "notifications": "Notifications",
      "voice": "Voice & Audio",
      "updates": "Updates",
      "localApi": "Local API",
      "data": "Data",
      "debugging": "Debugging",
      "server": "Server",
      "serverPlugins": "Server plugins",
      "members": "Members",
      "bans": "Bans",
      "permissions": "Permissions"
    },
    "pages": {
      "general": "General",
      "clientPlugins": "Client Plugins",
      "network": "Network",
      "theme": "Theme Studio",
      "notifications": "Notifications",
      "voice": "Voice & Audio",
      "updates": "Updates",
      "localApi": "Local API",
      "data": "Data",
      "debugging": "Debugging",
      "server": "Server Settings",
      "serverPlugins": "Server Plugins",
      "members": "Members",
      "bans": "Bans",
      "permissions": "Permissions"
    },
    "selectServer": "Select a server...",
    "thirdPartyLicenses": {
      "link": "Third-party licenses",
      "title": "Third-party licenses",
      "description": "License information for bundled third-party libraries used by the app.",
      "closeAria": "Close third-party licenses",
      "viewLicense": "View license",
      "packages": "Packages",
      "licenseText": "License text"
    },
    "theme": {
      "activeTheme": "Active Theme",
      "description": "Launch Theme Studio to edit the live draft, inspect themeable regions, or switch to a saved theme.",
      "minimized": "Minimized",
      "savedTheme": "Saved Theme",
      "chooseSavedTheme": "Choose saved theme",
      "noSavedThemes": "No saved themes",
      "editInStudio": "Edit In Studio",
      "reopenStudio": "Re-open Theme Studio",
      "openStudio": "Open Theme Studio",
      "restoreDefault": "Restore Default"
    },
    "dataLoading": "Loading data settings...",
    "serverPlugins": {
      "title": "Open this server to manage plugins",
      "description": "Server plugin installs and activation are shown for the currently open chat server. Select or open {{serverName}} in the app, then return here.",
      "thisServer": "this server"
    },
    "standalone": {
      "goBack": "Go back",
      "pluginStore": "Plugin Store"
    },
    "network": {
      "serverEndpoints": {
        "title": "Server Endpoints",
        "restoreDefaults": "Restore Defaults",
        "testAll": "Test All",
        "description": "Active server endpoints stay enabled at the same time. You pick the endpoint when creating and registering a new server.",
        "descriptionModal": "Active server endpoints stay enabled at the same time. You pick the endpoint when creating a new server.",
        "active": "Active",
        "incompatible": "Update the client in order to connect to other users",
        "activate": "Activate",
        "deactivate": "Deactivate",
        "remove": "Remove server",
        "removeShort": "Remove",
        "addNew": "Add New Server",
        "serverNamePlaceholder": "Server name (e.g., My Server)",
        "serverNamePlaceholderShort": "Server name",
        "serverUrlPlaceholder": "Server URL (e.g., http://localhost:3001)",
        "errors": {
          "invalidUrl": "Please enter a valid URL",
          "duplicateUrl": "This server URL already exists"
        },
        "auth": {
          "authorized": "Authorized",
          "needsSignIn": "Needs sign-in",
          "signIn": "Sign in"
        }
      },
      "connection": {
        "title": "Connection Settings",
        "titleShort": "Connection",
        "autoReconnect": {
          "label": "Auto-reconnect",
          "description": "Automatically reconnect when connection is lost",
          "descriptionShort": "Reconnect when connection is lost"
        },
        "searchAllServers": {
          "label": "Search all servers",
          "description": "Search across all configured server directories",
          "descriptionShort": "Search across all server directories"
        }
      },
      "ice": {
        "title": "ICE Servers (STUN / TURN)",
        "restoreDefaults": "Restore Defaults",
        "description": "ICE servers are used for NAT traversal. STUN discovers your public address; TURN relays traffic when direct connections fail. Higher entries have priority.",
        "turnUser": "User: {{username}}",
        "moveUp": "Move up (higher priority)",
        "moveDown": "Move down (lower priority)",
        "remove": "Remove",
        "empty": "No ICE servers configured. P2P connections may fail across networks.",
        "addTitle": "Add ICE Server",
        "stunPlaceholder": "stun:stun.example.com:19302",
        "turnPlaceholder": "turn:turn.example.com:3478",
        "username": "Username",
        "credential": "Credential",
        "addServer": "Add Server",
        "errors": {
          "urlRequired": "URL is required",
          "urlPrefixStun": "URL must start with stun:",
          "urlPrefixTurn": "URL must start with turn: or turns:",
          "usernameRequired": "Username is required for TURN servers",
          "credentialRequired": "Credential is required for TURN servers",
          "duplicateUrl": "This URL already exists"
        }
      }
    },
    "general": {
      "application": "Application",
      "reopenLastChat": {
        "label": "Reopen last chat on launch",
        "description": "Open the same server and text channel the next time Toju starts.",
        "aria": "Toggle reopen last chat on launch"
      },
      "autoStart": {
        "label": "Launch on system startup",
        "description": "Automatically start Toju when you sign in",
        "desktopOnly": "This setting is only available in the desktop app.",
        "aria": "Toggle launch on startup"
      },
      "closeToTray": {
        "label": "Minimize to tray on close",
        "description": "Keep Toju running in the tray when you click the X button",
        "desktopOnly": "This setting is only available in the desktop app.",
        "aria": "Toggle minimize to tray on close"
      },
      "experimentalVlc": {
        "label": "Experimental VLC.js playback",
        "checking": "Checking for a bundled VLC.js runtime...",
        "available": "Offer a manual player for unsupported downloaded audio and video files.",
        "unavailable": "No VLC.js runtime is bundled. Unsupported desktop media can be opened in the system player.",
        "aria": "Toggle experimental VLC.js playback"
      },
      "gameDetection": {
        "title": "Game detection",
        "description": "Toju prefers the currently focused window when detecting your game. Add process names here to permanently hide apps that get mistakenly identified as games (e.g. \"spotify\", \"obs64\"). Entries are matched case-insensitively against the executable name without its extension.",
        "processPlaceholder": "Process name (e.g. spotify)",
        "processAria": "Process name to ignore",
        "add": "Add",
        "empty": "No ignored processes yet.",
        "removeProcessAria": "Remove {{name}} from ignore list"
      }
    },
    "voice": {
      "devices": {
        "title": "Devices",
        "microphone": "Microphone",
        "speaker": "Speaker",
        "microphoneFallback": "Microphone {{index}}",
        "speakerFallback": "Speaker {{index}}"
      },
      "volume": {
        "title": "Volume",
        "input": "Input Volume: {{value}}%",
        "output": "Output Volume: {{value}}%",
        "notification": "Notification Volume: {{value}}%",
        "notificationHint": "Controls join, leave & notification sounds",
        "test": "Test",
        "previewAria": "Preview notification sound",
        "previewTitle": "Preview sound"
      },
      "quality": {
        "title": "Quality & Processing",
        "latencyProfile": "Latency Profile",
        "latencyLow": "Low (fast)",
        "latencyBalanced": "Balanced",
        "latencyHigh": "High (quality)",
        "audioBitrate": "Audio Bitrate: {{value}} kbps",
        "screenShareQuality": "Screen share quality",
        "askScreenShare": {
          "label": "Ask before screen sharing",
          "description": "Let the user confirm quality before each new screen share",
          "aria": "Toggle screen share quality prompt"
        },
        "noiseReduction": {
          "label": "Noise reduction",
          "description": "Suppress background noise using RNNoise",
          "descriptionLong": "Use RNNoise to suppress background noise from your microphone",
          "aria": "Toggle noise reduction"
        },
        "systemAudio": {
          "label": "Screen share system audio",
          "description": "Share other computer audio while filtering Toju audio when supported",
          "hint": "Your microphone stays on the normal voice channel. The shared screen audio should only contain desktop sound.",
          "aria": "Toggle system audio in screen share"
        }
      },
      "screenShareQuality": {
        "performance": {
          "label": "Performance saver",
          "description": "720p / 30 FPS with lower CPU and bandwidth usage."
        },
        "balanced": {
          "label": "Balanced",
          "description": "1080p / 30 FPS for stable quality in most cases."
        },
        "high-fps": {
          "label": "High FPS",
          "description": "1080p / 60 FPS for games and fast motion."
        },
        "quality": {
          "label": "Sharp text",
          "description": "1440p / 30 FPS for detailed UI and text clarity."
        }
      },
      "desktopPerformance": {
        "title": "Desktop Performance",
        "hardwareAcceleration": {
          "label": "Hardware acceleration",
          "description": "Use GPU acceleration for rendering and WebRTC when available",
          "aria": "Toggle hardware acceleration"
        },
        "restartRequired": {
          "title": "Restart required",
          "description": "Restart Toju to apply the new hardware acceleration setting.",
          "button": "Restart app"
        }
      },
      "standalone": {
        "title": "Voice Settings",
        "notificationVolume": {
          "label": "Notification volume",
          "description": "Volume for join, leave, and notification sounds"
        }
      }
    },
    "data": {
      "localData": {
        "title": "Local data",
        "description": "Manage the folder that contains local messages, rooms, attachments, avatars, saved themes, and desktop storage.",
        "restartApp": "Restart app"
      },
      "desktopOnly": "Data management is only available in the packaged Electron desktop app.",
      "currentFolder": {
        "title": "Current data folder",
        "resolving": "Resolving data folder..."
      },
      "openFolder": "Open folder",
      "opening": "Opening...",
      "export": {
        "title": "Export data",
        "description": "Create a portable .dat archive that can be imported on another client.",
        "button": "Export data",
        "exporting": "Exporting..."
      },
      "import": {
        "title": "Import all data",
        "description": "Restore a .dat archive. Existing local data is moved to a backup folder first.",
        "button": "Import data",
        "importing": "Importing...",
        "confirm": "Importing data replaces the current local data. Existing data will be moved to a backup folder first. Continue?"
      },
      "erase": {
        "title": "Erase user data",
        "description": "Remove local app data from this device and recreate an empty database.",
        "button": "Erase user data",
        "erasing": "Erasing...",
        "confirm": "Erase all local Toju data on this device? This cannot be undone."
      },
      "messages": {
        "openedFolder": "Opened the current data folder.",
        "couldNotOpenFolder": "Could not open the data folder.",
        "exportCancelled": "Export cancelled.",
        "exportedTo": "Exported data to {{path}}.",
        "exported": "Exported data.",
        "importCancelled": "Import cancelled.",
        "importedWithBackup": "Imported data. Previous data was backed up to {{path}}.",
        "imported": "Imported data.",
        "erased": "Local data erased. Restart the app to finish resetting the session.",
        "operationFailed": "Data operation failed."
      }
    },
    "updates": {
      "desktop": {
        "title": "Desktop app updates",
        "description": "Use a hosted release manifest to check for new packaged desktop builds and apply them after a restart."
      },
      "mobile": {
        "title": "Mobile app updates",
        "description": "Check the Play Store or App Store for newer native builds. Android can install in-app updates when Google Play allows it.",
        "unsupported": "Store updates are only available in the packaged Android or iOS app."
      },
      "unsupported": "Automatic updates are only available in the packaged Electron desktop app or native mobile app.",
      "installed": "Installed",
      "storeVersion": "Store version",
      "latestInManifest": "Latest in manifest",
      "targetVersion": "Target version",
      "lastChecked": "Last checked",
      "unknown": "Unknown",
      "automatic": "Automatic",
      "notCheckedYet": "Not checked yet",
      "status": "Status",
      "waitingMobile": "Waiting for the first store update check.",
      "waitingDesktop": "Waiting for release information from the active server.",
      "checkForUpdates": "Check for updates",
      "openAppStore": "Open app store",
      "installUpdate": "Install update",
      "restartToFinish": "Restart to finish update",
      "policy": {
        "title": "Update policy",
        "description": "Choose whether the app tracks the newest release, stays on a specific release, or turns updates off entirely.",
        "mode": "Mode",
        "modeAuto": "Newest release",
        "modeVersion": "Specific version",
        "modeOff": "Turn off auto updates",
        "pinnedVersion": "Pinned version",
        "chooseRelease": "Choose a release..."
      },
      "refreshReleaseInfo": "Refresh release info",
      "restartToUpdate": "Restart to update",
      "manifest": {
        "title": "Manifest URL priority",
        "description": "Add one manifest URL per line. The app tries them from top to bottom and falls back to the next URL when a manifest cannot be loaded or is invalid.",
        "usingDefaults": "Using connected server defaults",
        "usingSaved": "Using saved manifest URLs",
        "emptyHint": "When this list is empty, the app automatically uses manifest URLs reported by your configured servers.",
        "urlsLabel": "Manifest URLs",
        "placeholder": "https://example.com/releases/latest/download/release-manifest.json",
        "noServerManifest": "None of your configured servers currently report a manifest URL.",
        "save": "Save manifest URLs",
        "useDefaults": "Use connected server defaults"
      },
      "serverBlocked": {
        "title": "Server update required",
        "connectedServer": "Connected server",
        "requiredMinimum": "Required minimum",
        "notReported": "Not reported"
      },
      "resolvedManifest": {
        "title": "Resolved manifest URL",
        "empty": "No working manifest URL has been resolved yet."
      },
      "statusLabels": {
        "idle": "Idle",
        "checking": "Checking",
        "downloading": "Downloading",
        "restartRequired": "Restart required",
        "upToDate": "Up to date",
        "disabled": "Disabled",
        "unsupported": "Unsupported",
        "manifestMissing": "Manifest missing",
        "versionUnavailable": "Version unavailable",
        "pinnedBelowCurrent": "Pinned below current",
        "error": "Error"
      },
      "mobileStatusLabels": {
        "idle": "Idle",
        "checking": "Checking",
        "downloading": "Downloading",
        "upToDate": "Up to date",
        "updateAvailable": "Update available",
        "unsupported": "Unsupported",
        "error": "Error"
      }
    },
    "localApi": {
      "title": "Local HTTP API",
      "description": "Expose your client to local automation tools and scripts. Authentication is verified against your signaling server, and access is off by default.",
      "desktopOnly": "The local API is only available in the packaged Electron desktop app.",
      "server": {
        "title": "Server",
        "description": "Enable to start a local HTTP server. By default it only listens on the loopback interface.",
        "run": "Run local API server",
        "runHint": "Start the HTTP server on this machine.",
        "docusaurus": "Serve Docusaurus documentation at /docusaurus",
        "docusaurusHint": "Hosts the built app and plugin documentation from local desktop resources.",
        "exposeLan": "Allow connections from your network",
        "exposeLanHint": "Bind to all interfaces (0.0.0.0). Other devices on your LAN will be able to reach the API. Only enable this on networks you trust.",
        "port": "Port",
        "portHint": "Change the listening port if 17878 is in use. Press save to apply.",
        "savePort": "Save port"
      },
      "auth": {
        "title": "Authentication",
        "description": "Bearer tokens are issued only after a username/password is verified against one of the signaling servers below. Add the full URL (including https://) of every signaling server you trust.",
        "placeholder": "https://signaling.example.com",
        "save": "Save allowed servers"
      },
      "docs": {
        "title": "Documentation",
        "description": "Browse the API in a privacy-respecting locally hosted Scalar reference. No telemetry, no AI, no remote network calls.",
        "scalar": "Serve Scalar documentation at /docs",
        "scalarHint": "Loads from local app resources only. The OpenAPI document is always available at /api/openapi.json.",
        "openApi": "Open API docs in browser",
        "openAppDocs": "Open app docs in browser",
        "copyBaseUrl": "Copy base URL",
        "listeningAt": "Listening at"
      },
      "status": {
        "running": "Running at {{url}}",
        "starting": "Starting...",
        "error": "Error: {{message}}",
        "stopped": "Stopped",
        "unknown": "unknown"
      },
      "errors": {
        "invalidPort": "Port must be an integer between 1 and 65535",
        "couldNotOpenDocs": "Could not open documentation",
        "updateFailed": "Failed to update settings"
      }
    },
    "debugging": {
      "title": "App-wide debugging",
      "description": "Capture UI events, navigation activity, console output, and global runtime errors in a live debug console.",
      "processRam": "Process RAM",
      "ramHint": "Live total working set from Electron app metrics. Updates every 2 seconds.",
      "capturedEvents": "Captured events",
      "lastUpdate": "Last update: {{label}}",
      "noLogsYet": "No logs yet",
      "errors": "Errors",
      "errorsHint": "Unhandled runtime failures and rejected promises.",
      "warnings": "Warnings",
      "warningsHint": "Navigation cancellations, offline events, and other warnings.",
      "console": {
        "title": "Floating debug console",
        "description": "When debugging is enabled, a bug icon appears in the app so you can open the docked console without blocking the rest of the UI.",
        "open": "Open console",
        "openActive": "Console open",
        "clear": "Clear logs"
      }
    },
    "permissions": {
      "intro": "Roles now define who can moderate, manage channels, upload files, and join voice. Channel overrides are optional and apply on top of the base role permissions.",
      "readOnly": "You can inspect this server's access model, but only members with Manage Roles can edit it.",
      "roles": {
        "title": "Roles",
        "hint": "Higher roles appear first.",
        "add": "Role",
        "system": "System",
        "protected": "Protected role",
        "name": "Role Name",
        "color": "Color",
        "save": "Save Role",
        "moveUp": "Move Up",
        "moveDown": "Move Down",
        "delete": "Delete",
        "systemHint": "System roles can still have their permissions tuned, but their name, color, and membership in the base hierarchy stay fixed.",
        "editHint": "Edit the role metadata here, then tune its global permissions and per-channel overrides below."
      },
      "slowMode": {
        "title": "Slow Mode",
        "description": "Sets the minimum delay between messages for everyone in the server.",
        "off": "Off",
        "5s": "5 seconds",
        "10s": "10 seconds",
        "30s": "30 seconds",
        "1m": "1 minute",
        "2m": "2 minutes"
      },
      "basePermissions": {
        "title": "Base Permissions",
        "description": "These defaults apply everywhere unless a channel override changes them."
      },
      "channelOverrides": {
        "title": "Channel Overrides",
        "description": "Override the selected role inside a specific channel without changing the server-wide default.",
        "noChannels": "This server has no channels yet.",
        "channel": "Channel"
      },
      "states": {
        "inherit": "Inherit",
        "allow": "Allow",
        "deny": "Deny"
      },
      "newRole": "New Role",
      "selectServer": "Select a server from the sidebar to manage"
    },
    "server": {
      "title": "Room Settings",
      "readOnly": "You are viewing this server's details without server-management permission.",
      "image": {
        "title": "Server Image",
        "description": "Synced to members and shown in server discovery.",
        "upload": "Upload image",
        "uploadAria": "Upload server image",
        "remove": "Remove image",
        "removeAria": "Remove server image",
        "readError": "Could not read that image."
      },
      "roomName": "Room Name",
      "description": "Description",
      "private": {
        "label": "Private Room",
        "description": "Require approval to join",
        "yes": "Yes",
        "no": "No"
      },
      "maxUsers": "Max Users (0 = unlimited)",
      "password": {
        "title": "Server Password",
        "whitelisted": "Joined members stay whitelisted until they are kicked or banned.",
        "addOptional": "Add an optional password so new members need it to join.",
        "remove": "Remove Password",
        "keep": "Keep Password",
        "enabled": "Password protection is currently enabled.",
        "willRemove": "Password protection will be removed when you save.",
        "disabled": "Password protection is currently disabled.",
        "setNew": "Set New Password",
        "set": "Set Password",
        "keepCurrentPlaceholder": "Leave blank to keep the current password",
        "optionalPlaceholder": "Optional password required for new joins",
        "willReplace": "The new password will replace the current one when you save.",
        "viewerHint": "Invite links bypass the password, but bans still apply.",
        "enabledShort": "Enabled",
        "disabledShort": "Disabled"
      },
      "save": "Save Settings",
      "saved": "Saved!",
      "dangerZone": "Danger Zone",
      "deleteRoom": "Delete Room",
      "deleteConfirm": {
        "title": "Delete Room",
        "confirm": "Delete Room",
        "message": "Are you sure you want to delete this room? This action cannot be undone."
      },
      "selectServer": "Select a server from the sidebar to manage"
    },
    "members": {
      "empty": "No other members found for this server",
      "online": "Online",
      "kick": "Kick",
      "ban": "Ban",
      "assignedRoles": "Assigned Roles",
      "readOnlyRoles": "You can view this member's roles, but you do not have permission to change them.",
      "selectServer": "Select a server from the sidebar to manage"
    },
    "bans": {
      "empty": "No banned users",
      "unknownUser": "Unknown User",
      "reason": "Reason: {{reason}}",
      "expires": "Expires: {{date}}",
      "permanent": "Permanent",
      "selectServer": "Select a server from the sidebar to manage"
    }
  }
}
