302 lines
13 KiB
Plaintext
302 lines
13 KiB
Plaintext
{
|
|
"@@locale": "en",
|
|
"@@x-source-of-truth": "DEC-015 (register v0.9.5). Template ARB for English. Server-provided content is NOT translated (ADR-008 / DEC-015).",
|
|
|
|
"appTitle": "Chanora",
|
|
|
|
"homeNotProductionReadyBanner": "Beta build — voice in/out wired; not production ready.",
|
|
|
|
"fieldServerHost": "Server address",
|
|
"fieldNickname": "Nickname",
|
|
"fieldServerPassword": "Server password",
|
|
"fieldServerPasswordHelp": "Leave blank if the server does not require one.",
|
|
"fieldPassword": "Password",
|
|
"fieldDisplayName": "Display name",
|
|
|
|
"connectAction": "Connect",
|
|
"disconnectAction": "Leave server",
|
|
"disconnectConfirmTitle": "Leave server?",
|
|
"disconnectConfirmBody": "You will disconnect from the current server.",
|
|
"disconnectConfirmCancel": "Stay",
|
|
"disconnectConfirmAction": "Leave",
|
|
"refreshAction": "Refresh",
|
|
"diagnosticsAction": "Diagnostics",
|
|
"diagnosticsSaveAction": "Save export",
|
|
"diagnosticsLiveUpdating": "Live updating",
|
|
"shareAction": "Share",
|
|
"diagnosticsSaved": "Diagnostic export saved to {path}",
|
|
"@diagnosticsSaved": {
|
|
"placeholders": { "path": { "type": "String" } }
|
|
},
|
|
"aboutAction": "About",
|
|
"aboutVersion": "Version {version}",
|
|
"@aboutVersion": {
|
|
"placeholders": { "version": { "type": "String" } }
|
|
},
|
|
"aboutAuthor": "Author: Edison Jwa",
|
|
"aboutNonAffiliation": "Chanora is independent and is not affiliated with, endorsed by, sponsored by, or officially associated with TeamSpeak.",
|
|
"aboutLicenseHeading": "License",
|
|
"aboutLicenseBody": "Chanora is dual-licensed under the Apache License, Version 2.0 or the MIT License, at your option. The full license texts ship as LICENSE-APACHE and LICENSE-MIT at the repository root.",
|
|
"aboutThirdPartyHeading": "Third-party software",
|
|
"aboutThirdPartyBody": "Chanora is built on tsclientlib, flutter_rust_bridge, platform-native audio backends, rusqlite, and the Flutter framework, among others. See the NOTICE file at the repository root for the current attribution list.",
|
|
"copyAction": "Copy",
|
|
"closeAction": "Close",
|
|
"openAction": "Open",
|
|
"cancelAction": "Cancel",
|
|
"retryAction": "Retry",
|
|
"chatAction": "Chat",
|
|
"chatCloseAction": "Close chat",
|
|
"chatNewPrivateAction": "New private chat",
|
|
"chatSearchClientsHint": "Search clients...",
|
|
"chatDirectMessageAction": "Private message",
|
|
"chatPokeAction": "Poke",
|
|
"clientInfoAction": "Info",
|
|
"startAudioAction": "Start audio",
|
|
"pttHoldToTalk": "Hold to talk",
|
|
"pttTransmitting": "Transmitting…",
|
|
"pttHoldToTalkSemanticsHint": "Press and hold to transmit voice; release to stop.",
|
|
"pttCapabilityBadge": "PTT: {level} ({backend})",
|
|
"@pttCapabilityBadge": {
|
|
"placeholders": {
|
|
"level": { "type": "String" },
|
|
"backend": { "type": "String" }
|
|
}
|
|
},
|
|
"pttCapabilityBoundKey": "Key: {key}",
|
|
"@pttCapabilityBoundKey": {
|
|
"placeholders": {
|
|
"key": { "type": "String" }
|
|
}
|
|
},
|
|
"pttCapabilityExplainTitle": "Push-to-Talk capability",
|
|
"pttCapabilityExplainFocusedHeading": "Focused PTT",
|
|
"pttCapabilityExplainFocusedBody": "Chanora is currently using Focused Push-to-Talk: the binding only fires while the Chanora window is focused. This is the universal fallback used on every platform when a global capture path is not available.",
|
|
"pttCapabilityExplainGoGlobalWindows": "On Windows, Global PTT is engaged automatically once you bind a key. No additional permission is required.",
|
|
"pttCapabilityExplainGoGlobalMacos": "On macOS, Global PTT requires Input Monitoring permission. Open System Settings → Privacy & Security → Input Monitoring, allow Chanora, then re-bind the key.",
|
|
"pttCapabilityExplainGoGlobalLinux": "On Linux, Global PTT requires a GNOME-Wayland desktop with the GlobalShortcuts portal. Re-bind the key and accept the desktop's shortcut dialog when it appears.",
|
|
"pttCapabilityExplainGoGlobalIos": "On iOS, Apple does not expose global hotkeys to apps. Chanora uses the on-screen Push-to-Talk button and only transmits while the app is in the foreground.",
|
|
"pttCapabilityExplainGoGlobalGeneric": "Global PTT is not available in this environment. Focused PTT will keep working while the Chanora window has focus.",
|
|
"pttConfigureAction": "Configure",
|
|
"pttConfigureTitle": "Configure Push-to-Talk binding",
|
|
"pttConfigurePrompt": "Press the key or mouse side button you want to use for Push-to-Talk.",
|
|
"pttConfigureWaiting": "(waiting for input…)",
|
|
"pttConfigureCaptured": "Captured",
|
|
"pttConfigurePrivacyNote": "Chanora never logs the actual key value. Only the input class (keyboard / mouse-side-button) and a platform-neutral label leave this dialog.",
|
|
"pttConfigureSaveAction": "Save",
|
|
"pttConfigurePortalRedirect": "Your desktop environment will open its own shortcut dialog. Pick the key you want to use for Push-to-Talk.",
|
|
"inputMuteAction": "Mute mic",
|
|
"inputUnmuteAction": "Unmute mic",
|
|
"outputMuteAction": "Mute speaker",
|
|
"outputUnmuteAction": "Unmute speaker",
|
|
"joinChannelAction": "Join channel",
|
|
"leaveChannelAction": "Leave channel",
|
|
"channelPasswordTitle": "Channel password",
|
|
"bookmarksHeading": "Bookmarks",
|
|
"bookmarksEmpty": "No bookmarks yet. Enter a server above and tap \"Save bookmark\".",
|
|
"bookmarkAddAction": "Save bookmark",
|
|
"bookmarkAddTitle": "Save bookmark",
|
|
"bookmarkDeleteAction": "Delete bookmark",
|
|
|
|
"statusIdle": "Not connected",
|
|
"statusConnecting": "Connecting…",
|
|
"statusConnected": "Connected to {server}",
|
|
"@statusConnected": {
|
|
"placeholders": { "server": { "type": "String" } }
|
|
},
|
|
"statusError": "Error: {message}",
|
|
"@statusError": {
|
|
"placeholders": { "message": { "type": "String" } }
|
|
},
|
|
|
|
"statusReconnecting": "Reconnecting… attempt {attempt}, in {delay}s",
|
|
"@statusReconnecting": {
|
|
"placeholders": {
|
|
"attempt": { "type": "int" },
|
|
"delay": { "type": "int" }
|
|
}
|
|
},
|
|
"statusConnectionLost": "Connection lost: {reason}",
|
|
"@statusConnectionLost": {
|
|
"placeholders": { "reason": { "type": "String" } }
|
|
},
|
|
|
|
"audioStatsLine": "TX {sent} frames • RX {received} frames • Mic {ptt}",
|
|
"@audioStatsLine": {
|
|
"placeholders": {
|
|
"sent": { "type": "int" },
|
|
"received": { "type": "int" },
|
|
"ptt": { "type": "String" }
|
|
}
|
|
},
|
|
|
|
"channelsHeading": "Channels",
|
|
"clientsHeading": "Online clients",
|
|
"serverWelcomeHeading": "Server welcome message",
|
|
"countChannelsAndClients": "{channels} channels • {clients} online",
|
|
"@countChannelsAndClients": {
|
|
"placeholders": {
|
|
"channels": { "type": "int" },
|
|
"clients": { "type": "int" }
|
|
}
|
|
},
|
|
|
|
"voiceModePtt": "PTT",
|
|
"voiceModeContinuous": "Continuous",
|
|
"voiceModeVoiceActivity": "Voice activity",
|
|
"voiceModeComingSoon": "Coming soon",
|
|
"voiceModeLabel": "Transmit mode",
|
|
"voiceReleaseTailLabel": "Release tail",
|
|
"voiceReleaseTailHint": "ms",
|
|
"voiceLeaveAction": "Leave voice",
|
|
"voiceHardMuteLabel": "Mute microphone",
|
|
"voiceOutputMuteLabel": "Mute speakers",
|
|
"voiceSettingsTitle": "Voice settings",
|
|
"voiceBindKeyAction": "Bind PTT key",
|
|
"voiceBoundKeyLabel": "Bound key",
|
|
"voicePttHoldHint": "Hold the button",
|
|
"voiceMicOn": "on",
|
|
"voiceMicOff": "off",
|
|
"voiceSheetTitle": "Voice",
|
|
"audioOutputLabel": "Audio output",
|
|
"audioRouteSpeaker": "Speaker",
|
|
"audioRouteReceiver": "iPhone receiver",
|
|
"audioRouteBluetooth": "Bluetooth",
|
|
"audioRouteWiredHeadset": "Wired headset",
|
|
"audioRouteCarAudio": "Car audio",
|
|
"audioRouteAirplay": "AirPlay",
|
|
"audioRouteUnknown": "Unknown",
|
|
"channelJoinAlreadyIn": "Already in this channel.",
|
|
"channelJoinFailedPermission": "Insufficient permission to join this channel.",
|
|
"channelJoinFailedPassword": "Wrong channel password.",
|
|
"channelJoinFailedFull": "Channel is full.",
|
|
"channelJoinFailedFamilyFull": "Channel family limit reached.",
|
|
"channelJoinFailedPrivate": "This channel is private.",
|
|
"channelJoinFailedTimeout": "Could not join channel: the server didn't respond in time.",
|
|
"channelJoinFailedFlooding": "Too many channel switches. Please wait a moment.",
|
|
"channelJoinFailedGeneric": "Could not join channel: {message}",
|
|
"@channelJoinFailedGeneric": {
|
|
"placeholders": {
|
|
"message": { "type": "String" }
|
|
}
|
|
},
|
|
"networkPermissionTitle": "Network Permission Required",
|
|
"networkPermissionBody": "Chanora needs permission to access the network. On macOS, go to System Settings → Privacy & Security → Local Network and enable Chanora, then try again.",
|
|
"networkPermissionOpenSettings": "Open System Settings",
|
|
"microphonePermissionTitle": "Microphone Permission Required",
|
|
"microphonePermissionBody": "Chanora needs permission to access the microphone. On macOS, go to System Settings → Privacy & Security → Microphone and enable Chanora.",
|
|
"microphonePermissionRequiredForVoice": "Microphone permission is required for voice transmission.",
|
|
"permissionGrantAction": "Grant",
|
|
"startupPermissionsTitle": "Permissions",
|
|
"startupPermissionsBody": "Chanora requests microphone, Bluetooth headset, and notification permissions at startup so voice, headset routing, and the foreground session work correctly.",
|
|
"startupPermissionsNotNow": "Not now",
|
|
"startupPermissionsAllow": "Allow",
|
|
"audioRouteSystemDefault": "System default",
|
|
"audioRouteEarpiece": "Earpiece",
|
|
"audioRouteUsbHeadset": "USB headset",
|
|
"audioRouteOtherDevice": "Other device",
|
|
"audioRouteRefreshDevices": "Refresh audio devices",
|
|
"audioRouteCannotSelect": "This output cannot be selected.",
|
|
"audioRouteChangeFailed": "Could not change audio output.",
|
|
"iosAudioInterrupted": "Audio interrupted by system (phone call)",
|
|
"iosAudioResuming": "Audio resuming",
|
|
"linkTrustTitle": "Open external link?",
|
|
"linkTrustBody": "You are about to open a link to:\n\n{domain}",
|
|
"@linkTrustBody": {
|
|
"placeholders": {
|
|
"domain": { "type": "String" }
|
|
}
|
|
},
|
|
"linkTrustRememberDomain": "Trust all links from this domain",
|
|
"clientInfoFetchingProfile": "Fetching TeamSpeak profile",
|
|
"clientInfoLoadingProfile": "Loading profile...",
|
|
"clientInfoProfileUnavailable": "Profile unavailable",
|
|
"clientInfoProfileUnavailableBody": "The server did not return profile details for this client.",
|
|
"clientInfoIdentitySection": "Identity",
|
|
"clientInfoMembershipSection": "Membership",
|
|
"clientInfoConnectionSection": "Connection",
|
|
"clientInfoHistorySection": "History",
|
|
"clientInfoTransferSection": "Transfer",
|
|
"clientInfoClientId": "Client ID",
|
|
"clientInfoDatabaseId": "Database ID",
|
|
"clientInfoUniqueId": "Unique ID",
|
|
"clientInfoDescription": "Description",
|
|
"clientInfoAvatar": "Avatar",
|
|
"clientInfoServerGroups": "Server groups",
|
|
"clientInfoChannelGroup": "Channel group",
|
|
"clientInfoChannelId": "Channel ID",
|
|
"clientInfoOnline": "Online",
|
|
"clientInfoIdle": "Idle",
|
|
"clientInfoPing": "Ping",
|
|
"clientInfoAddress": "Address",
|
|
"clientInfoPacketLossClientToServer": "Packet loss C->S",
|
|
"clientInfoPacketLossServerToClient": "Packet loss S->C",
|
|
"clientInfoFirstConnected": "First connected",
|
|
"clientInfoLastConnected": "Last connected",
|
|
"clientInfoConnections": "Connections",
|
|
"clientInfoDownloadedMonth": "Downloaded this month",
|
|
"clientInfoUploadedMonth": "Uploaded this month",
|
|
"clientInfoDownloadedTotal": "Downloaded total",
|
|
"clientInfoUploadedTotal": "Uploaded total",
|
|
"clientInfoUnknown": "Unknown",
|
|
"clientInfoHidden": "Hidden",
|
|
"clientInfoNone": "None",
|
|
"pokeSnackBarClearAction": "Clear",
|
|
"pokeSnackBarMoreIndicator": "...",
|
|
"pokeSnackBarIncomingNoMessage": "{sender} pokes you",
|
|
"@pokeSnackBarIncomingNoMessage": {
|
|
"placeholders": {
|
|
"sender": { "type": "String" }
|
|
}
|
|
},
|
|
"pokeSnackBarIncomingWithMessage": "{sender} pokes you: {message}",
|
|
"@pokeSnackBarIncomingWithMessage": {
|
|
"placeholders": {
|
|
"sender": { "type": "String" },
|
|
"message": { "type": "String" }
|
|
}
|
|
},
|
|
"pokeHistorySelfNoMessage": "<{time}> You poked \"{target}\".",
|
|
"@pokeHistorySelfNoMessage": {
|
|
"placeholders": {
|
|
"time": { "type": "String" },
|
|
"target": { "type": "String" }
|
|
}
|
|
},
|
|
"pokeHistorySelfWithMessage": "<{time}> You poked \"{target}\" with message: {message}",
|
|
"@pokeHistorySelfWithMessage": {
|
|
"placeholders": {
|
|
"time": { "type": "String" },
|
|
"target": { "type": "String" },
|
|
"message": { "type": "String" }
|
|
}
|
|
},
|
|
"pokeHistoryIncomingNoMessage": "<{time}> \"{sender}\" pokes you",
|
|
"@pokeHistoryIncomingNoMessage": {
|
|
"placeholders": {
|
|
"time": { "type": "String" },
|
|
"sender": { "type": "String" }
|
|
}
|
|
},
|
|
"pokeHistoryIncomingWithMessage": "<{time}> \"{sender}\" pokes you: {message}",
|
|
"@pokeHistoryIncomingWithMessage": {
|
|
"placeholders": {
|
|
"time": { "type": "String" },
|
|
"sender": { "type": "String" },
|
|
"message": { "type": "String" }
|
|
}
|
|
},
|
|
"clientVolumeAction": "User Volume",
|
|
"clientVolumeTitle": "{name} — volume",
|
|
"@clientVolumeTitle": {
|
|
"placeholders": { "name": { "type": "String" } }
|
|
},
|
|
"clientVolumeLabel": "{percent}%",
|
|
"@clientVolumeLabel": {
|
|
"placeholders": { "percent": { "type": "int" } }
|
|
},
|
|
"clientVolumeMuteAction": "Mute user",
|
|
"clientVolumeUnmuteAction": "Unmute user",
|
|
"clientVolumeResetAction": "Reset to default",
|
|
"permissionDenied": "Permission Denied"
|
|
}
|