headerNameInvalid:'Header name cannot contain whitespace or colon: {name}',
headersHint:'Merged on top of adapter defaults (user wins). Hop-by-hop headers (Host / Content-Length / ...) are ignored.',
headersParseError:'Cannot parse line: {line}',
bodyMode:'Body handling',
bodyModeOff:'Default',
bodyModeMerge:'Merge',
bodyModeReplace:'Replace',
bodyModeHintOff:'Use the adapter default body (includes challenge validation).',
bodyModeHintMerge:'Shallow-merge with the default body; user fields win but model / messages / contents are protected (use Replace to change those).',
bodyModeHintReplace:'Use the JSON below as the complete body. Challenge validation is skipped; HTTP 2xx + non-empty response text is treated as operational.',
bodyJson:'Body JSON',
bodyJsonFormat:'Format',
bodyJsonHint:'Parsed on blur. Empty means no override.',
bodyJsonError:'JSON parse failed',
bodyJsonObjectError:'Body must be a JSON object (no arrays or primitives)'
},
templateField:{
label:'Request template',
none:'No template',
placeholder:'Pick a template (filtered by current provider)',
applyHint:'Picking a template copies its headers and body to this monitor (snapshot). Later template edits are not auto-synced.'
},
template:{
manageButton:'Templates',
managerTitle:'Request template manager',
createButton:'New template',
emptyState:'No templates for this provider yet',
missingName:'Template name is required',
createSuccess:'Template created',
updateSuccess:'Template updated',
deleteSuccess:'Template deleted',
applyButton:'Apply to monitors',
applyTooltip:'Overwrite snapshot fields on associated monitors',
applyTitle:'Apply template',
applyConfirm:'Apply',
applyConfirmMessage:'Overwrite {n} associated monitor(s) with the current configuration of "{name}"? Any local customizations on those monitors will be discarded.',
applySuccess:'Applied to {n} monitor(s)',
applyPickerTitle:'Apply template "{name}"',
applyPickerHint:'Select which monitors to overwrite (all selected by default). Any local customizations will be discarded.',
applyPickerEmpty:'No monitors are currently associated to this template',
applyPickerConfirm:'Apply to {n} monitor(s)',
selectNone:'Select none',
selectedCount:'Selected {n} / {total}',
deleteConfirm:'Delete template "{name}"? {n} associated monitor(s) will be disassociated but keep their current snapshot and continue running.',
associatedCount:'{n} associated monitor(s)',
headersSummary:'{n} custom header(s)',
form:{
name:'Template name',
namePlaceholder:'e.g. Claude Code mimicry',
description:'Description',
descriptionPlaceholder:'Optional: what this template is for, capture date, etc.'
}
}
},
// Subscriptions
// Subscriptions
subscriptions:{
subscriptions:{
title:'Subscription Management',
title:'Subscription Management',
...
@@ -4406,6 +4696,7 @@ export default {
...
@@ -4406,6 +4696,7 @@ export default {
description:'Manage registration, email verification, default values, and SMTP settings',
description:'Manage registration, email verification, default values, and SMTP settings',
tabs:{
tabs:{
general:'General',
general:'General',
features:'Feature Switches',
security:'Security',
security:'Security',
users:'Users',
users:'Users',
gateway:'Gateway',
gateway:'Gateway',
...
@@ -4413,6 +4704,24 @@ export default {
...
@@ -4413,6 +4704,24 @@ export default {
backup:'Backup',
backup:'Backup',
payment:'Payment',
payment:'Payment',
},
},
features:{
channelMonitor:{
title:'Channel Monitor',
description:'Periodically probe configured channels and surface availability / latency to users. Turning it off stops the scheduler and returns an empty list on the user page.',
configureLink:'Configure monitors in Channel Management > Channel Monitor',
enabled:'Enable Channel Monitor',
enabledHint:'Disabling stops background checks; existing history is preserved.',