{
  "__namespace__": "module.operationsCreditNotifications",
  "actions": {
    "applyConfig": "Save config",
    "applyTemplate": "Apply template",
    "changeTemplate": "Change template",
    "detail": "Details",
    "dryRun": "Estimate Send",
    "more": "More",
    "refresh": "Refresh",
    "requeue": "Requeue",
    "reset": "Reset",
    "search": "Search",
    "syncTemplate": "Query template",
    "syncingTemplate": "Querying"
  },
  "config": {
    "description": "Manage credit SMS notification switches, templates, sending rules, quiet hours, and do-not-send lists in one place.",
    "emptyBlockedCreators": "No blocked creators yet.",
    "emptyOptedOutCreators": "No opted-out creators yet.",
    "fieldTips": {
      "blockedCreatorList": "Shows creators currently in the blocked list. Changes from the input take effect after saving the config.",
      "creatorIdentifierList": "Enter creator mobile numbers or IDs separated by commas.",
      "creatorIdentifierListEmail": "Enter creator emails or IDs separated by commas.",
      "creatorIdentifierListPhone": "Enter creator mobile numbers or IDs separated by commas.",
      "creatorList": "Enter creator IDs separated by commas.",
      "dailySmsLimit": "After this daily cap is reached, no new SMS will be sent that day.",
      "enabled": "Controls whether credit SMS notifications are enabled. Applies only to future notifications.",
      "estimatedDays": "Triggers low-balance reminders when the estimated remaining usable days reach this value.",
      "fallbackFixedValue": "Falls back to a fixed balance threshold when consumption data is insufficient.",
      "lookbackDays": "Number of recent days used to calculate average daily consumption.",
      "minConsumedDays": "If valid consumption days are below this value, estimated-day rules are not used.",
      "mobileList": "Enter mobile numbers separated by commas.",
      "optedOutCreators": "Opt-out lists are generated by the unsubscribe flow and are read-only.",
      "perCreatorPerTypePerDay": "Maximum messages generated for the same creator and notification type per day.",
      "perMobilePerDay": "Maximum credit SMS messages sent to the same mobile per day.",
      "quietEnd": "Quiet hours end time, for example 08:00.",
      "quietStart": "Quiet hours start time, for example 22:00.",
      "smsUnitCost": "Used to estimate SMS cost. Actual billing is determined by the SMS provider.",
      "softlimitThreshold": "Balance below this value triggers page alerts, SMS reminders, or debug blocking.",
      "templateCode": "Select the SMS template used by this notification type. Apply the template after changes to complete validation.",
      "templateSelect": "Select the SMS template used by this notification type. Apply the template after changes to complete validation.",
      "thresholds": "For example 100,50,10; reminders trigger when balance falls below a configured threshold.",
      "timezone": "Timezone used by quiet hours, for example Asia/Shanghai.",
      "windows": "For example 7d,3d,1d,0d means 7 days before, 3 days before, 1 day before, and on expiry day."
    },
    "fields": {
      "blacklistCreatorBids": "Operator-blocked creator IDs",
      "blacklistMobiles": "Operator-blocked mobiles",
      "blockedCreatorList": "Blocked creators",
      "blockedCreators": "Blocked creators",
      "dailySmsLimit": "Daily sending cap",
      "disableDebug": "Block debug when balance is low",
      "dryRunRequired": "Require estimate before send",
      "enabled": "Enable credit SMS notifications",
      "estimatedDays": "Remaining usable days",
      "estimatedDaysEnabled": "Remind by usable days",
      "fallbackFixedValue": "Fallback balance threshold",
      "lookbackDays": "Consumption lookback days",
      "mergeSameCreator": "Merge same creator",
      "minConsumedDays": "Minimum valid consumption days",
      "optOutCreatorBids": "Opted-out creator IDs",
      "optOutMobiles": "Opted-out mobiles",
      "optedOutCreators": "Opted-out creators",
      "perCreatorPerTypePerDay": "Daily cap per creator/type",
      "perMobilePerDay": "Daily cap per mobile",
      "quietEnd": "Quiet hours end",
      "quietHoursEnabled": "Enable quiet hours",
      "quietStart": "Quiet hours start",
      "smsUnitCost": "SMS unit cost",
      "softlimitEnabled": "Enable balance protection",
      "softlimitSms": "Send balance protection SMS",
      "softlimitThreshold": "Protection balance threshold",
      "teacherPageAlert": "Admin page alert",
      "templateCode": "SMS template",
      "templateSelect": "Select SMS template",
      "thresholds": "Balance reminder thresholds",
      "timezone": "Timezone",
      "windows": "Expiry reminder windows"
    },
    "inputPlaceholders": {
      "blockedCreatorsEmail": "Enter creator email or ID, separated by commas",
      "blockedCreatorsPhone": "Enter creator mobile number or ID, separated by commas"
    },
    "invalidConfig": "Config could not be saved. Check the form values.",
    "listDialog": {
      "add": "Add",
      "addedBlockedCreators": "Added {count} creators.",
      "blockedCreatorLimit": "Add up to {count} creators at a time.",
      "blockedDescription": "Search, view, and remove blocked creators. Changes take effect after saving the config.",
      "blockedSummary": "{count} blocked creators",
      "delete": "Delete",
      "duplicateBlockedCreators": "The input is already in the blocked list.",
      "emptyNickname": "No nickname",
      "emptyPreview": "No details yet",
      "emptyResult": "No matching results.",
      "invalidBlockedCreators": "Unrecognized content: {values}",
      "manage": "Manage",
      "optedOutDescription": "Opted-out creators are read-only. Search by contact or nickname.",
      "optedOutSummary": "{count} opted-out creators",
      "searchPlaceholderEmail": "Search email or nickname",
      "searchPlaceholderPhone": "Search mobile or nickname",
      "view": "View"
    },
    "loadFailed": "Notification policy could not be loaded. Refresh and try again.",
    "loadRequired": "Notification policy has not loaded successfully, so config cannot be saved.",
    "masterSwitchDescription": "When disabled, no new credit SMS notifications will be generated. Historical records are not affected.",
    "placeholders": {
      "available": "Available placeholders",
      "available_credits": "Available credits",
      "avg_daily_consumption": "Average daily consumption",
      "collapse": "Collapse",
      "credits": "Credit amount",
      "estimated_remaining_days": "Estimated remaining days",
      "expand": "Expand",
      "expires_at": "Expiration time",
      "groups": {
        "creditExpiring": "Expiry reminder variables",
        "creditGranted": "Grant reminder variables",
        "lowBalanceEstimated": "Remaining-days variables",
        "lowBalanceFixed": "Fixed-balance / fallback variables"
      },
      "guideHint": "Check when changing templates",
      "guideTitle": {
        "credit_expiring": "Credit Expiry Variable Guide",
        "credit_granted": "Credit Granted Variable Guide",
        "low_balance": "Credit Balance Variable Guide"
      },
      "lookback_days": "Consumption lookback days",
      "notes": {
        "emptyVariables": "Within one notification type, variables unused by the actual trigger path are sent as empty strings.",
        "estimatedLowBalance": "Remaining-days alerts estimate usable days from average daily consumption; fixed threshold variables are empty.",
        "expiresAtOptional": "If the granted credits have no expiration time, the expiration variable is empty.",
        "fallbackLowBalance": "When consumption history is insufficient and a fallback threshold is configured, the fixed-balance path is used; fixed variables are populated and estimated variables are empty.",
        "fixedLowBalance": "Fixed-balance alerts populate only balance, threshold, and threshold type variables.",
        "unsupportedValidation": "Templates that use variables unsupported by the system are blocked during template sync or enabled-config save.",
        "windowSource": "The reminder window variable comes from the expiry window config, such as 7d, 3d, 1d, or 0d."
      },
      "source": "Grant source",
      "threshold": "Fixed balance threshold",
      "threshold_kind": "Threshold type",
      "tolerance": "SMS templates may use only some placeholders; missing unused variables will not block saving or sending.",
      "trigger_days": "Trigger remaining days",
      "window": "Reminder window"
    },
    "saveStickyHint": "Save config changes for them to apply to future notifications.",
    "saved": "Config saved.",
    "sectionDescriptions": {
      "budget": "Controls the daily SMS sending cap and estimates expected cost.",
      "frequency": "Limits how many SMS messages the same mobile or creator can receive in one day.",
      "lists": "Creators in these lists will no longer receive credit SMS messages. Opted-out creators are generated by the unsubscribe flow and are read-only.",
      "quietHours": "During quiet hours, SMS messages will be delayed or skipped according to policy.",
      "softlimit": "When the balance is below the protection line, remind creators and limit further debug usage to prevent continued spend."
    },
    "sections": {
      "budget": "SMS Budget",
      "deliveryPolicy": "Sending Rules",
      "frequency": "Sending Frequency",
      "lists": "Do-not-send Lists",
      "masterSwitch": "Master Switch",
      "quietHours": "Quiet Hours",
      "softlimit": "Balance Protection",
      "types": "Notification Types"
    },
    "templateList": {
      "editPlaceholder": "Select or enter a template for this type",
      "error": "Provider template list failed to load. Showing locally queried templates or manual input only.",
      "fallbackManual": "SMS provider templates failed to load. Enter a template code manually.",
      "fallbackWithCache": "SMS provider templates failed to load. Showing local cached templates.",
      "itemSource": {
        "local": "Local cached template",
        "provider": "Provider template"
      },
      "placeholder": "Select a template or enter a template code",
      "source": {
        "empty": "No selectable templates yet. Enter a template code manually.",
        "local": "Template list is loaded from local cache.",
        "provider": "Template list is loaded from the SMS provider."
      }
    },
    "templateSync": {
      "compatible": "Template variables are supported",
      "content": "Template content",
      "error": "Sync error",
      "incompatible": "Template has unsupported variables",
      "status": "Audit status",
      "syncFailed": "Template query failed. Try again later.",
      "templateCodeRequired": "Enter the SMS template code first.",
      "unsupported": "Unsupported template variables",
      "unused": "Unused system variables",
      "variables": "Template variables"
    },
    "title": "SMS Config",
    "typeDescriptions": {
      "credit_expiring": "Reminds creators to use credits before they expire.",
      "credit_granted": "Reminds creators to check the result after credits are added.",
      "low_balance": "Reminds creators when credit balance is below a threshold or estimated usable days are low."
    },
    "unsavedDialog": {
      "cancel": "Keep editing",
      "description": "Leaving this page will discard your changes and restore the last saved configuration.",
      "discard": "Leave without saving",
      "save": "Save and leave",
      "title": "Unsaved changes"
    }
  },
  "detail": {
    "description": "View delivery path, timing, and provider response for this notification record.",
    "fallback": "No record selected",
    "fields": {
      "attemptedAt": "Last attempted at",
      "createdAt": "Created at",
      "dedupeKey": "Dedupe marker",
      "errorCode": "Error code",
      "errorMessage": "Failure reason",
      "metadata": "Metadata",
      "notificationBid": "Notification record ID",
      "policySnapshot": "Policy snapshot",
      "providerResponse": "Provider response",
      "requestedAt": "Requested at",
      "sentAt": "Sent at",
      "sourceBid": "Trigger object ID",
      "sourceObject": "Trigger object",
      "template": "SMS template",
      "templateCode": "Template code",
      "templateName": "Template name",
      "templateParams": "Template params",
      "updatedAt": "Updated at"
    },
    "params": {
      "available_credits": "Available credits",
      "avg_daily_consumption": "Average daily consumption",
      "credits": "Credits",
      "estimated_remaining_days": "Estimated remaining days",
      "expires_at": "Expiration time",
      "lookback_days": "Consumption lookback days",
      "source": "Grant source",
      "threshold": "Alert threshold",
      "threshold_kind": "Threshold type",
      "trigger_days": "Trigger remaining days",
      "window": "Reminder window"
    },
    "sections": {
      "business": "Related data",
      "delivery": "Delivery timeline",
      "diagnostics": "Diagnostics",
      "message": "SMS content",
      "provider": "Provider",
      "snapshots": "Snapshots",
      "summary": "Summary",
      "time": "Time",
      "trigger": "Trigger information"
    },
    "sourceObject": {
      "ledger": "Credit ledger",
      "wallet": "Balance account",
      "wallet_bucket": "Credit batch"
    },
    "summary": {
      "creator": "Creator",
      "notification": "Notification type",
      "status": "Delivery status"
    },
    "title": "Notification details"
  },
  "dryRun": {
    "candidateCount": "Estimated {count} matches",
    "description": "Estimate how many notifications match the current config. No SMS will be sent.",
    "empty": "No estimate result yet.",
    "metrics": {
      "candidate": "Estimated matches",
      "cost": "Estimated cost",
      "created": "Estimated created"
    },
    "rawResult": "Raw result",
    "title": "Estimate Send"
  },
  "empty": "No credit notification records.",
  "filters": {
    "all": "All",
    "createdTime": "Created time",
    "creator": "Creator",
    "creatorBid": "Creator ID",
    "creatorPlaceholder": "Email / nickname",
    "mobile": "Mobile",
    "notificationType": "Notification type",
    "sourceBid": "Trigger business ID",
    "sourceType": "Trigger scenario",
    "status": "Delivery status",
    "time": "Time",
    "timeRangePlaceholder": "Start time ~ End time"
  },
  "loadError": "Credit notification data could not be loaded. Refresh and try again.",
  "messages": {
    "requeueDone": "Requeue task submitted.",
    "requeueFailed": "Requeue task failed."
  },
  "overview": {
    "activeFilter": "Active filter",
    "failed": "Send failures",
    "failedTooltip": "All provider failures that can be requeued from the detail list.",
    "pending": "Pending",
    "pendingTooltip": "All notifications created but not yet completed.",
    "sent": "Sent",
    "sentTooltip": "All notifications marked as sent after provider submission.",
    "skipped": "Skipped",
    "skippedTooltip": "All notifications not sent because of missing mobile, opt-out, or duplicate suppression.",
    "total": "All notification records",
    "totalTooltip": "Total number of all notification records."
  },
  "records": {
    "totalCount": "{count} notification records"
  },
  "sourceType": {
    "ledger": "Credit grant reminder",
    "wallet": "Credit balance reminder",
    "wallet_bucket": "Credit expiry reminder"
  },
  "status": {
    "failed_provider": "Provider failed",
    "pending": "Pending",
    "sent": "Sent",
    "skipped": "Skipped",
    "skipped_no_mobile": "No mobile",
    "skipped_opt_out": "Opted out",
    "suppressed_duplicate": "Duplicate"
  },
  "subtitle": "Inspect credit grant, expiry, and low-balance notification delivery, and configure SMS policy.",
  "table": {
    "action": "More",
    "createdAt": "Created at",
    "creator": "Creator",
    "dedupeKey": "Dedupe key",
    "error": "Error",
    "mobile": "Mobile",
    "notification": "Notification type",
    "source": "Trigger scenario",
    "status": "Delivery status",
    "template": "Template",
    "templateParams": "Param snapshot"
  },
  "tabs": {
    "config": "SMS Config",
    "records": "Notification records"
  },
  "templateName": {
    "credit_expiring": "Credit expiry reminder notification template",
    "credit_granted": "Credit granted reminder template",
    "low_balance": "Credit balance reminder template"
  },
  "title": "Credit Notifications",
  "type": {
    "credit_expiring": "Credit expiry",
    "credit_granted": "Credit grant",
    "low_balance": "Low balance"
  }
}
