export default {
  app: {
    name: 'Wormhole',
    tagline: 'Intranet tunneling + reverse proxy gateway',
  },
  common: {
    refresh: 'Refresh',
    save: 'Save',
    cancel: 'Cancel',
    close: 'Close',
    search: 'Search',
    delete: 'Delete',
    edit: 'Edit',
    create: 'Create',
    confirm: 'Confirm',
    actions: 'Actions',
    enabled: 'Enabled',
    disabled: 'Disabled',
    yes: 'Yes',
    no: 'No',
    name: 'Name',
    status: 'Status',
    id: 'ID',
    optional: 'Optional',
    loading: 'Loading…',
    viewAll: 'View all',
    logout: 'Sign out',
    language: 'Language',
    zh: '中文',
    en: 'English',
    hint: 'Notice',
    export: 'Export',
    import: 'Import',
    start: 'Start',
    stop: 'Stop',
    pause: 'Pause',
    resume: 'Resume',
    block: 'Block',
    traffic: 'Traffic',
    target: 'Target',
    client: 'Client',
    mode: 'Mode',
    port: 'Port',
    prefix: 'Prefix',
    resource: 'Resource',
    method: 'Method',
    path: 'Path',
    time: 'Time',
    type: 'Type',
    running: 'Running',
    stopped: 'Stopped',
    paused: 'Paused',
    on: 'On',
    off: 'Off',
    online: 'Online',
    offline: 'Offline',
    selectClient: 'Please select a client',
    dash: '-',
  },
  nav: {
    groups: {
      overview: 'Overview',
      tunnel: 'Tunnel',
      security: 'Security',
      system: 'System',
    },
    dashboard: 'Dashboard',
    clients: 'Clients',
    tunnels: 'Tunnels',
    hosts: 'Hosts',
    ipRules: 'IP rules',
    requestIPs: 'Request IPs',
    users: 'Visitors',
    settings: 'Settings',
  },
  topbar: {
    dashboard: 'Dashboard',
    clients: 'Client management',
    tunnels: 'Tunnel management',
    hosts: 'Host routing',
    ipRules: 'IP rules',
    requestIPs: 'Request IP monitor',
    users: 'Visitor users',
    settings: 'System settings',
    fallback: 'Wormhole',
  },
  login: {
    title: 'Sign in',
    username: 'Username',
    password: 'Password',
    submit: 'Sign in',
    hint: 'Default account admin / admin',
    lockDefault: 'Too many login attempts. Please try again later.',
    lockMinutes: 'Too many login attempts. Try again in {n} minute(s).',
    lockSeconds: 'Too many login attempts. Try again in {n} second(s).',
  },
  dashboard: {
    title: 'Dashboard',
    description: 'System status, traffic and access monitoring',
    openapi: 'OpenAPI',
    statClientTotal: 'Total clients',
    statClientOnline: 'Online clients',
    statTunnelRunning: 'Running tunnels',
    statHostTotal: 'Total hosts',
    systemResources: 'System resources',
    trafficOverview: 'Traffic overview',
    cpu: 'CPU',
    memory: 'Memory',
    load: 'Load',
    inlet: 'Inbound',
    export: 'Outbound',
    resourceTrend: 'Resource trend',
    trafficTrend: 'Traffic trend',
    tunnelTop10: 'Top 10 tunnels by traffic',
    hostTop10: 'Top 10 hosts by traffic',
    ipTop10: 'Top 10 request IPs',
    rankTunnels: 'Tunnel traffic ranking',
    rankHosts: 'Host traffic ranking',
    rankIps: 'Request IP ranking',
    visitorIp: 'Visitor IP',
    directIp: 'Direct IP',
    hitCount: 'Hits',
    host: 'Host',
    listenPort: 'Port',
  },
  clients: {
    title: 'Client management',
    description: 'Manage Agent connections and verify_key',
    add: 'Add client',
    edit: 'Edit client',
    verifyKey: 'Verify Key',
    rateLimit: 'Rate limit (KB/s)',
    maxConn: 'Max connections',
    confirmDelete: 'Delete this client?',
  },
  tunnels: {
    title: 'Tunnel management',
    description: 'Configure TCP/UDP port forwarding tunnels',
    add: 'Add tunnel',
    edit: 'Edit tunnel',
    searchPlaceholder: 'Search name, port, target',
    listenPort: 'Listen port',
    targetAddr: 'Target address',
    visitorAuth: 'Visitor auth',
    confirmDelete: 'Delete this tunnel?',
    tcp: 'TCP',
    udp: 'UDP',
  },
  hosts: {
    title: 'Host routing',
    description: 'HTTP/HTTPS reverse proxy and Host routing',
    add: 'Add host',
    edit: 'Edit host',
    searchPlaceholder: 'Search host, target',
    host: 'Host',
    location: 'Path prefix',
    autoHttps: 'Auto HTTPS',
    visitorAuth: 'Visitor auth',
    confirmDelete: 'Delete this host?',
  },
  ipRules: {
    title: 'IP rules',
    description: 'Allow / deny lists and CIDR access control',
    add: 'Add rule',
    edit: 'Edit rule',
    pattern: 'Pattern',
    patternPlaceholder: 'IP / CIDR / regex',
    ruleType: 'Type',
    allow: 'Allow',
    deny: 'Deny',
    resourceType: 'Resource type',
    global: 'Global',
    tunnel: 'Tunnel',
    host: 'Host',
    resource: 'Resource',
    resourceId: 'Resource ID',
    selectResource: 'Select a resource',
    noResource: 'No resources available. Create one first.',
    resourceRequired: 'Please select a resource',
    confirmDelete: 'Delete this rule?',
  },
  requestIPs: {
    title: 'Request IP monitor',
    description: 'Visitor IP (X-Forwarded-For preferred) and direct IP',
    searchPlaceholder: 'Search IP',
    resourceType: 'Resource type',
    resourceId: 'Resource ID',
    hitCount: 'Hit count',
    lastSeen: 'Last seen',
    confirmBlock: 'Add this IP to the block list?',
  },
  users: {
    title: 'Visitor users',
    description: 'Manage visitor accounts for protected hosts/tunnels',
    add: 'Add visitor',
    edit: 'Edit visitor',
    username: 'Username',
    password: 'Password',
    passwordPlaceholderEdit: 'Leave blank to keep unchanged',
    accessLogs: 'Access logs',
    accessLogsTitle: 'Access logs · {name}',
    logsHint: 'Latest {n} entries (max 200, static assets excluded)',
    login: 'Login',
    visit: 'Visit',
    confirmDelete: 'Delete this visitor?',
  },
  settings: {
    title: 'System settings',
    description: 'Server runtime parameters (some changes require restart)',
    listenPorts: 'Listen ports',
    bridgeAddr: 'Bridge address',
    httpAddr: 'Admin API / Web',
    httpProxyPort: 'HTTP proxy port',
    httpsProxyPort: 'HTTPS proxy port',
    tlsCert: 'TLS certificate',
    tlsKey: 'TLS private key',
    tlsOptional: 'Optional, leave blank to disable',
    authSecurity: 'Auth & security',
    jwtSecret: 'JWT secret',
    jwtSecretPlaceholder: 'Leave blank to keep unchanged',
    tokenTtl: 'Token TTL (hours)',
    loginMaxAttempts: 'Max login attempts',
    loginWindow: 'Attempt window (minutes)',
    loginLockout: 'Lockout duration (minutes)',
    adminAccount: 'Admin account',
    currentPassword: 'Current password',
    newPassword: 'New password',
    confirmPassword: 'Confirm password',
    changePassword: 'Change admin password',
    metrics: 'Metrics',
    flushInterval: 'Flush interval (seconds)',
    apiKey: 'API Key',
    apiKeyHint: 'For programmatic API access (port 8529), use header {header}. Docs: {doc}',
    createApiKey: 'Create API Key',
    createApiKeyTitle: 'Create API Key',
    apiKeyNamePlaceholder: 'e.g. CI/CD',
    apiKeySave: 'Save this key: {key}',
    fillPassword: 'Please enter current and new password',
    passwordMismatch: 'New passwords do not match',
    enterApiKeyName: 'Please enter a name',
  },
  ipForward: {
    replace: {
      label: 'Replace real IP',
      hint: 'Overwrite X-Forwarded-For and X-Real-IP with visitor IP, no proxy chain preserved',
    },
    append: {
      label: 'Standard forward headers',
      hint: 'Append X-Forwarded-For and set X-Real-IP per reverse-proxy convention (like Nginx proxy_add_x_forwarded_for)',
    },
    ipForward: 'IP forwarding',
    customHeaders: 'Custom headers',
    headerName: 'Header name',
    headerValue: 'Header value',
    addHeader: 'Add header',
  },
  visitorAuth: {
    title: 'Visitor auth',
    enable: 'Enable auth',
    allowVisitors: 'Allowed visitors',
    allVisitors: 'All visitors',
    selectedVisitors: 'Selected visitors',
    selectVisitors: 'Select visitor users',
    ttl: 'Credential TTL',
    ttlHint: 'Seconds; browser stores credential after successful login',
    tunnelHint: 'With visitor auth, the port serves HTTP (for web apps). For SSH/TCP use host reverse proxy.',
  },
  importExport: {
    importTitle: 'Bulk import',
    importMode: 'Import mode',
    upsert: 'Upsert (update if exists)',
    skip: 'Skip existing (new only)',
    create: 'Create all (skip conflicts)',
    pending: 'Pending import',
    pendingCount: '{n} item(s)',
    startImport: 'Start import',
    exportSuccess: 'Exported {n} item(s)',
    importDone: 'Import done: created {created}, updated {updated}, skipped {skipped}, failed {failed}',
    parseFailed: 'Failed to parse file',
  },
  clientSelect: {
    placeholder: 'Select client',
    label: '{name} (#{id}) · {status}',
  },
  rank: {
    defaultTitle: 'Details',
  },
  message: {
    loginSuccess: 'Signed in',
    loginFailed: 'Sign in failed',
    loginRateLimit: 'Too many login attempts',
    saveSuccess: 'Saved',
    saveFailed: 'Save failed',
    deleteSuccess: 'Deleted',
    exportFailed: 'Export failed',
    importFailed: 'Import failed',
    loadFailed: 'Load failed',
    saved: 'Saved',
    savedRestart: 'Saved. Restart wormhole server for listen port changes to take effect.',
    passwordUpdated: 'Admin password updated',
    passwordChangeFailed: 'Password change failed',
    apiKeyCreated: 'Created. Copy and save the key.',
    blockSuccess: 'Added to block list',
  },
}
