码桶

发现社区成员的开源项目

en.js42 KB
export default {
        title: 'DNS Manager',
        subtitle: 'Manage your Cloudflare domains securely',
        serverMode: 'Server Mode',
        clientMode: 'Client Mode',
        usernameLabel: 'Username',
        usernamePlaceholder: 'Enter username...',
        passwordLabel: 'Password',
        passwordPlaceholder: 'Enter password...',
        tokenLabel: 'Cloudflare API Token',
        tokenPlaceholder: 'Paste your API token...',
        tokenHint: 'Tokens are sent via header as a transparent proxy.',
        apiTokenTab: 'API Token',
        globalKeyTab: 'Global API Key',
        globalKeyEmailLabel: 'Cloudflare Account Email',
        globalKeyEmailPlaceholder: '[email protected]',
        globalKeyLabel: 'Global API Key',
        globalKeyPlaceholder: 'Enter your Global API Key',
        globalKeyHint: 'Find it at Cloudflare Dashboard > My Profile > API Tokens > Global API Key:',
        globalKeyWarning: 'Security: Global API Key grants full account control. If leaked, an attacker gains complete access to your Cloudflare account. API Token is recommended for granular permissions.',
        serverHint: 'The backend runs on Pages environment variables.',
        loginBtn: 'Access Dashboard',
        loginFailed: 'Login failed',
        sessionExpired: 'Session expired. Please log in again.',
        errorOccurred: 'An error occurred',
        yourDomains: 'Your Domains',
        domainSubtitle: 'Select a zone to manage its DNS and SaaS settings',
        refresh: 'Refresh',
        id: 'ID',
        manage: 'Manage',
        back: 'Back to Zones',
        dnsRecords: 'DNS Records',
        saasHostnames: 'Custom Hostnames',
        addRecord: 'Add Record',
        type: 'Type',
        name: 'Name',
        content: 'Content',
        proxied: 'Proxied',
        actions: 'Actions',
        hostname: 'Hostname',
        status: 'Status',
        sslStatus: 'SSL Status',
        confirmDelete: 'Are you sure you want to delete this record?',
        logout: 'Logout',
        managed: 'Managed',
        clientOnly: 'Client-Only',
        cancel: 'Cancel',
        save: 'Save',
        saving: 'Saving...',
        addModalTitle: 'Add New DNS Record',
        confirmTitle: 'Confirm Action',
        confirmDeleteText: 'This action cannot be undone, are you sure you want to continue?',
        yes: 'Confirm',
        no: 'No',
        statusActive: 'Active',
        statusPending: 'Pending',
        statusInitializing: 'Initializing',
        statusMoved: 'Moved',
        statusDeactivated: 'Deactivated',
        rememberMe: 'Stay logged in',
        rememberToken: 'Remember API Token',
        searchPlaceholder: 'Search records...',
        editRecord: 'Edit Record',
        addSaaS: 'Add Custom Hostname',
        confirmDeleteSaaS: 'Are you sure you want to delete this custom hostname?',
        proxiedHint: 'Traffic will be accelerated and protected by Cloudflare',
        hostnamePlaceholder: 'Enter full hostname (e.g. shop.example.com)',
        fallbackOrigin: 'Fallback Origin',
        fallbackOriginPlaceholder: 'e.g. origin.example.com',
        updateFallback: 'Update Fallback Origin',
        fallbackStatus: 'Fallback Status',
        sslMethod: 'SSL Method',
        sslType: 'SSL Type',
        sslMethodTxt: 'TXT Record',
        sslMethodHttp: 'HTTP Validation',
        sslMethodCname: 'CNAME Validation',
        sslMethodEmail: 'Email Validation',
        httpWarning: 'Security Warning: Insecure HTTP connection detected. To protect your token, sending sensitive information over non-HTTPS is prohibited (except for Localhost).',
        recommended: 'Recommended',
        copied: 'Copied to clipboard',
        updateSuccess: 'Update Successful',
        addSuccess: 'Added Successfully',
        deleteSuccess: 'Deleted Successfully',
        importSuccess: 'Import Successful',
        exportSuccess: 'Export Successful',
        batchDelete: 'Batch Delete',
        confirmBatchDelete: 'Are you sure you want to delete {count} selected records?',
        comment: 'Comment',
        tags: 'Tags',
        addTag: 'Add tag',
        commentPlaceholder: 'Add a comment...',
        tagsPlaceholder: 'Type a tag and press Enter',
        priority: 'Priority',
        weight: 'Weight',
        port: 'Port',
        service: 'Service',
        protocol: 'Protocol',
        tag: 'Tag',
        flags: 'Flags',
        import: 'Import',
        export: 'Export',
        uploadFile: 'Upload Config File',
        order: 'Order',
        preference: 'Preference',
        regex: 'Regex',
        replacement: 'Replacement',
        algorithm: 'Algorithm',
        fingerprint: 'Fingerprint',
        keyTag: 'Key Tag',
        digestType: 'Digest Type',
        digest: 'Digest',
        usage: 'Usage',
        selector: 'Selector',
        matchingType: 'Matching Type',
        certificate: 'Certificate',
        target: 'Target',
        value: 'Value',
        ttl: 'TTL',
        ttlAuto: 'Automatic',
        ttl1min: '1 min',
        ttl2min: '2 min',
        ttl5min: '5 min',
        ttl10min: '10 min',
        ttl15min: '15 min',
        ttl30min: '30 min',
        ttl1h: '1 hour',
        ttl2h: '2 hours',
        ttl5h: '5 hours',
        ttl12h: '12 hours',
        ttl1d: '1 day',
        ownership: 'Ownership Verification',
        sslValidation: 'SSL Validation',
        verifyMethod: 'Verification Method',
        verifyType: 'Verification Type',
        verifyName: 'Verification Name',
        verifyValue: 'Verification Value',
        certificateStatus: 'Certificate Status',
        hostnameStatus: 'Hostname Status',
        verificationRecords: 'Verification Records',
        noVerificationNeeded: 'No verification needed',
        editSaaS: 'Edit Custom Hostname',
        minTlsVersion: 'Minimum TLS Version',
        certType: 'Certificate Type',
        certCloudflare: 'Cloudflare Provided',
        certCustom: 'Custom Certificate',
        originServer: 'Origin Server',
        defaultOrigin: 'Default Origin',
        customOrigin: 'Custom Origin',
        originPlaceholder: 'e.g. origin.example.com',
        tlsDefault: 'TLS 1.0 (Default)',
        active: 'Active',
        pending_validation: 'Pending Validation',
        pending_deployment: 'Pending Deployment',
        pending: 'Pending',
        switchZone: 'Switch Domain',
        deleteZone: 'Delete Zone',
        deleteZoneWarning: 'This will permanently remove this domain and all its DNS records, settings, and configurations from your Cloudflare account. This action cannot be undone.',
        deleteZoneTypeConfirm: 'Type {zone} to confirm deletion:',
        zoneDeleted: 'Zone deleted successfully',
        zoneDeleteFailed: 'Failed to delete zone',
        saasNotEnabled: 'Custom Hostnames Not Enabled',
        saasNotEnabledDesc: 'Cloudflare offers 100 free Custom Hostnames (SSL for SaaS) on all plans, but you need to enable it first in the Cloudflare dashboard and add a valid payment method.',
        saasStep1: '1. Go to Cloudflare Dashboard → SSL/TLS → Custom Hostnames',
        saasStep2: '2. Add a valid payment method (you will not be charged)',
        saasStep3: '3. Once enabled, you can manage up to 100 custom hostnames for free',
        unbindZone: 'Unbind Zone',
        unbindZoneDesc: 'Remove this domain from the manager only. The zone will remain in your Cloudflare account. Refresh to re-add it.',
        zoneUnbound: 'Zone removed from manager',
        unbindZoneConfirmShort: 'Remove this zone from the manager?',
        deleteGroup: 'Delete Credential Group',
        deleteGroupDesc: 'This will remove the credential and all {count} zone(s) under it. Zones remain in your Cloudflare account, but the token/key will be deleted.',
        zoneActions: 'Zone Actions',
        toggleSidebar: 'Toggle Sidebar',
        overview: 'Overview',
        selectZone: 'Select a zone',
        noZonesFound: 'No domains found. Please check your token or add a domain in Cloudflare.',
        fallbackError: 'Unable to edit this record as it is configured as a fallback origin for SSL for SaaS.',
        invalidPassword: 'Invalid password',
        accountLocked: 'Account temporarily locked. Please try again later.',
        serverNotConfigured: 'Server is not configured for password login',
        switchAccount: 'Switch Account',
        not_set: 'Not Set',
        invalidToken: 'Invalid API Token',
        tokenRequired: 'API Token is required',
        verifyFailed: 'Token verification failed',
        noZonesServerExplanation: 'You are in Server Mode, but no CF_API_TOKEN is configured on the server, or the token lacks permission to access any domains.',
        noZonesClientExplanation: 'Your API token may be invalid, expired, or missing the required permissions.',
        noZonesRetryWithToken: 'Retry with API Token',
        noZonesEnterToken: 'Enter a Cloudflare API token to connect directly.',
        noZonesGetToken: 'Create a token at:',
        tokenRequiredPermissions: 'Required: Zone > Zone Read, DNS Edit, Zone Settings Edit, Cache Purge, SSL and Certificates Edit',
        backToLogin: 'Back to Login',
        retryFetch: 'Retry',
        saveToServer: 'Save to Server',
        saveToServerHint: 'Save this token to the server so you can manage domains by just logging in with your password.',
        tokenSaved: 'Token saved to server',
        tokenSaveFailed: 'Failed to save token',
        useDirectly: 'Use Directly',
        addAccount: 'Add Account',
        addNewToken: 'Add New Token',
        addAccountTitle: 'Add Cloudflare Account',
        accountName: 'Account Name (optional)',
        accountNamePlaceholder: 'e.g. My Blog',
        removeAccount: 'Remove Account',
        confirmRemoveAccount: 'Remove this account? The token will be deleted from the server.',
        accountAdded: 'Account added',
        accountRemoved: 'Account removed',
        storageServer: 'Managed',
        storageLocal: 'Local',
        switchingStorage: 'Switching...',
        switchedToLocal: 'Switched to local mode',
        switchedToServer: 'Switched to managed mode',
        localModeTitle: 'Local Mode',
        localModeDesc: 'Tokens are stored only in your browser, nothing goes through the server.',
        localTokens: 'Local Tokens',
        noLocalTokens: 'No local tokens yet. Add a Cloudflare API token to get started.',
        addLocalToken: 'Add Local Token',
        localTokenAdded: 'Token added locally',
        removeLocalToken: 'Remove',
        confirmRemoveLocalToken: 'Remove this local token?',
        localTokenRemoved: 'Local token removed',
        uploadToServer: 'Upload to server',
        uploadedToServer: 'Uploaded to server',
        switchToLocal: 'Switch to local storage',
        localBadge: 'Local',
        apiTokenBadge: 'API Token',
        globalKeyBadge: 'Global Key',
        usersManagement: 'User Management',
        addUser: 'Add User',
        editUser: 'Edit User',
        deleteUser: 'Delete User',
        confirmDeleteUser: 'Delete this user? All their tokens will also be removed.',
        roleAdmin: 'Admin',
        roleUser: 'User',
        userCreated: 'User created',
        userUpdated: 'User updated',
        userDeleted: 'User deleted',
        newPassword: 'New Password',
        newPasswordPlaceholder: 'Enter new password (leave empty to keep)',
        role: 'Role',
        loginAnotherAccount: 'Login Another Account',
        addSessionTitle: 'Login Another Account',
        sessionAdded: 'Account added',
        removeSession: 'Logout this account',
        setupAccount: 'Setup Account',
        setupAccountDesc: 'Set your password using the setup token from your admin',
        setupTokenLabel: 'Setup Token',
        setupTokenPlaceholder: 'Paste setup token from admin...',
        setupSuccess: 'Account activated. You can now log in.',
        setupFailed: 'Setup failed',
        needsSetup: 'Account not set up yet. Please use your setup token first.',
        changePassword: 'Change Password',
        currentPassword: 'Current Password',
        currentPasswordPlaceholder: 'Enter current password...',
        newPasswordPlaceholder2: 'Enter new password...',
        confirmNewPassword: 'Confirm New Password',
        confirmNewPasswordPlaceholder: 'Re-enter new password...',
        passwordChanged: 'Password changed',
        passwordMismatch: 'Passwords do not match',
        passwordTooWeak: 'Password must be at least 8 characters with at least 1 letter and 1 number',
        passwordChangeError: 'Failed to change password',
        setupTokenCopied: 'Setup token copied',
        resetSetupToken: 'Reset Setup Token',
        userStatusPending: 'Pending',
        userStatusActive: 'Active',
        adminPasswordNote: 'Admin password is managed via environment variables',
        register: 'Register',
        registerDesc: 'Create a new account',
        registerSuccess: 'Registration complete. You can now log in.',
        registerFailed: 'Registration failed',
        registrationDisabled: 'Registration is disabled. Contact an admin for an invitation.',
        appSettings: 'Settings',
        openRegistration: 'Open Registration',
        openRegistrationDesc: 'Allow anyone to self-register without an invitation token',
        settingsSaved: 'Settings saved',
        inviteTokenMode: 'Invite Token Mode',
        inviteTokenModeDesc: 'New users need an admin-provided invitation token to register',
        badgeE2E: 'E2E Encrypted',
        badgeZeroKnowledge: 'Zero-Knowledge',
        badgeSHA256: 'PBKDF2 Hashed',
        badgeJWT: 'JWT Auth',
        badgeHTTPS: 'HTTPS Only',
        badgeNoPlaintext: 'No Plaintext Passwords',
        passkey: 'Passkey',
        passkeyLogin: 'Passkey Login',
        passkeyLoginDesc: 'Sign in with a registered passkey',
        passkeyLoginBtn: 'Sign in with Passkey',
        passkeyManage: 'Manage Passkeys',
        passkeyRegister: 'Register Passkey',
        passkeyRegistered: 'Passkey registered',
        passkeyDeleted: 'Passkey deleted',
        passkeyNone: 'No passkeys registered',
        passkeyName: 'Name',
        passkeyCreatedAt: 'Registered',
        passkeyNoSupport: 'Passkeys are not supported by this browser',
        passkeyNoCredentials: 'No passkeys registered for this user',
        passkeyError: 'Passkey operation failed',
        passkeyUsernameRequired: 'Please enter your username first',
        badgePasskey: 'Passkey Support',
        darkMode: 'Dark Mode',
        lightMode: 'Light Mode',
        // Audit Log
        auditLog: 'Audit Log',
        auditLogEmpty: 'No audit entries yet',
        auditLogClear: 'Clear Log',
        auditLogClearConfirm: 'Are you sure you want to clear all audit logs?',
        auditLogCleared: 'Audit log cleared',
        auditTime: 'Time',
        auditUser: 'User',
        auditAction: 'Action',
        auditDetail: 'Detail',
        auditPrev: 'Previous',
        auditNext: 'Next',
        // Global Search
        globalSearchPlaceholder: 'Search DNS records across all zones...',
        searchResults: 'Search Results',
        searchNoResults: 'No matching records found',
        searchMinChars: 'Enter at least 2 characters',
        searching: 'Searching...',
        searchResultCount: 'Found {count} records (searched {zones} zones)',
        // TOTP/2FA
        totpManage: 'Two-Factor Auth',
        totpSetupDesc: 'Add extra security with an authenticator app',
        totpEnabled: '2FA is enabled',
        totpNotEnabled: '2FA is not enabled',
        totpEnable: 'Enable 2FA',
        totpDisable: 'Disable 2FA',
        totpScanQR: 'Scan QR code with authenticator app or enter key manually',
        totpSecretKey: 'Secret Key',
        totpEnterCode: 'Enter code to complete setup',
        totpCodePlaceholder: '6-digit code',
        totpVerify: 'Verify',
        totpVerified: '2FA enabled successfully',
        totpDisabled: '2FA has been disabled',
        totpDisableDesc: 'Enter current 2FA code to disable',
        totpRequired: 'Enter your 2FA code',
        totpInvalid: 'Invalid verification code',
        totpStep: 'Two-Factor Verification',
        // DNS History/Rollback
        dnsHistory: 'DNS History',
        noSnapshots: 'No snapshots available',
        snapshotTime: 'Time',
        snapshotUser: 'User',
        snapshotAction: 'Action',
        rollback: 'Rollback',
        rollbackConfirm: 'Are you sure you want to rollback to this snapshot? Current records will be replaced.',
        rollbackSuccess: 'Rollback completed',
        rollbackDetail: 'Deleted: {deleted}, Created: {created}, Updated: {updated}',
        // Diff View
        compare: 'Compare',
        diffTitle: 'Snapshot Diff',
        diffNoChanges: 'No differences between snapshot and current records',
        diffAdded: 'added',
        diffRemoved: 'removed',
        diffModified: 'modified',
        diffAddedSection: 'Added records (in current, not in snapshot)',
        diffRemovedSection: 'Removed records (in snapshot, not in current)',
        diffModifiedSection: 'Modified records',
        diffBefore: 'Snapshot',
        diffAfter: 'Current',
        // Bulk Operations
        bulkOperations: 'Bulk Operations',
        bulkDesc: 'Manage DNS records across multiple zones',
        bulkCreate: 'Bulk Create',
        bulkDelete: 'Bulk Delete',
        bulkAllZones: 'All Zones',
        bulkSelectedZones: 'Selected Zones',
        bulkExecute: 'Execute',
        bulkExecuting: 'Executing...',
        bulkResults: 'Results',
        bulkSuccess: 'Bulk operation completed',
        bulkSelectZones: 'Select zones',
        bulkRecordType: 'Record Type',
        bulkRecordName: 'Record Name',
        bulkRecordContent: 'Record Content',
        // Webhook
        webhookUrl: 'Webhook URL',
        webhookUrlPlaceholder: 'https://example.com/webhook',
        webhookDesc: 'Configure webhook to receive DNS change and login event notifications',
        webhookSaved: 'Webhook saved',
        // DNS Templates
        templates: 'Templates',
        templateSpf: 'SPF (Allow domain mail servers)',
        templateDmarc: 'DMARC (Basic policy)',
        templateGoogleMx: 'Google Workspace MX',
        templateWwwCname: 'WWW redirect (CNAME)',
        templateMailMx: 'Mail (MX basic)',
        templateGoogleVerify: 'Verify (Google)',
        templateApplied: 'Template applied',
        // Bulk Import
        bulkImport: 'Bulk Import',
        bulkImportDesc: 'Bulk import DNS records via JSON',
        pasteJson: 'Paste JSON',
        uploadJsonFile: 'Or upload a .json file',
        previewRecords: 'Preview Records',
        importRecords: 'Import Records',
        importing: 'Importing...',
        importResultCreated: 'Successfully created {count} records',
        importResultErrors: '{count} records failed to import',
        invalidJson: 'Invalid JSON format',
        noRecordsFound: 'No records found',
        jsonFormatHint: 'Format: { "records": [{ "type": "A", "name": "@", "content": "1.2.3.4" }] }',
        // Zone Permissions
        allowedZones: 'Zone Permissions',
        allowedZonesDesc: 'Restrict which zones this user can manage (empty = all zones)',
        allowedZonesPlaceholder: 'Type a zone name and press Enter, e.g. example.com',
        allowedZonesAll: 'All zones (unrestricted)',
        allowedZonesAdd: 'Add',
        allowedZonesRemove: 'Remove',
        // Dashboard
        dashboard: 'Dashboard',
        dashboardZones: 'Zones',
        dashboardRecords: 'DNS Records',
        dashboardAccounts: 'Accounts',
        dashboardLastLogin: 'Last Login',
        dashboardRecentActivity: 'Recent Activity',
        dashboardNoActivity: 'No recent activity',
        dashboardJustNow: 'Just now',
        // Scheduled Changes
        scheduledChanges: 'Scheduled Changes',
        scheduleForLater: 'Schedule for later',
        scheduleDateTime: 'Scheduled date & time',
        scheduleConfirm: 'Schedule',
        scheduleCreated: 'Scheduled change created',
        scheduleCancelled: 'Scheduled change cancelled',
        scheduleMustBeFuture: 'Scheduled time must be in the future',
        noScheduledChanges: 'No scheduled changes',
        scheduledFor: 'Scheduled for',
        cancelSchedule: 'Cancel schedule',
        scheduleActionCreate: 'Create',
        scheduleActionUpdate: 'Update',
        scheduleActionDelete: 'Delete',
        // Keyboard Shortcuts
        keyboardShortcuts: 'Keyboard Shortcuts',
        shortcutFocusSearch: 'Focus search',
        shortcutNewRecord: 'New DNS record',
        shortcutCloseModal: 'Close modal',
        shortcutShowHelp: 'Show shortcuts help',
        shortcutGeneral: 'General',
        shortcutOr: 'or',
        errorBoundaryTitle: 'Something went wrong',
        errorBoundaryMessage: 'This section encountered an unexpected error. Please try again, or refresh the page if the problem persists.',
        errorBoundaryRetry: 'Try Again',
        errorBoundaryDetails: 'Error details',
        offlineMessage: 'You are offline. Some features may be unavailable.',
        // Onboarding Tour
        onboardingWelcomeTitle: 'Welcome to DNS Manager',
        onboardingWelcomeDesc: 'Let us give you a quick tour of the main features to get you started.',
        onboardingZoneTitle: 'Zone Selector',
        onboardingZoneDesc: 'Switch between and manage your different domains here. Click the domain name to open the switcher.',
        onboardingDnsTitle: 'DNS Records',
        onboardingDnsDesc: 'View, edit, and manage all DNS records. Supports inline proxy status toggling.',
        onboardingTemplatesTitle: 'Templates',
        onboardingTemplatesDesc: 'Quickly add common DNS records using prebuilt templates like SPF, DMARC, Google MX, etc.',
        onboardingSearchTitle: 'Search',
        onboardingSearchDesc: 'Use the search box to quickly filter records. Search by name, type, and content.',
        onboardingDoneTitle: 'All Set!',
        onboardingDoneDesc: 'You now know the basics. Start managing your DNS records!',
        onboardingSkip: 'Skip',
        onboardingNext: 'Next',
        onboardingFinish: 'Done',
        // DNS Record Grouping
        groupBy: 'Group by',
        groupByNone: 'None',
        groupByType: 'Type',
        groupBySubdomain: 'Subdomain',
        // Import Formats
        importFormatHint: 'Supports JSON, BIND zone file, and CSV formats. Format is auto-detected.',
        importDetectedFormat: 'Detected format',
        importPasteData: 'Paste data',
        importUploadFile: 'Upload file',
        importPlaceholder: 'JSON: [{"type":"A","name":"@","content":"1.2.3.4"}]\nBIND: @ IN A 1.2.3.4\nCSV: type,name,content,ttl,proxied',
        importCsvMissingHeaders: 'CSV is missing required column headers (type, name, content)',
        // Share Snapshot
        shareSnapshot: 'Share',
        shareSnapshotTitle: 'Share Snapshot',
        shareSnapshotDesc: 'Create a read-only share link (valid for 7 days)',
        shareLinkCopied: 'Share link copied',
        // Inline Edit
        inlineEditHint: 'Double-click to quick edit',
        inlineEditSave: 'Save',
        inlineEditCancel: 'Cancel',
        inlineEditSaving: 'Saving...',
        // Drag and Drop Reorder
        dragHandle: 'Drag to reorder',
        dragReorderHint: 'Drag rows to change priority order',
        priorityUpdated: 'Priority updated',
        priorityUpdateFailed: 'Failed to update priority',
        // DNS Monitors
        monitors: 'DNS Monitors',
        monitorAdd: 'Add Monitor',
        monitorDelete: 'Delete Monitor',
        monitorAdded: 'Monitor added',
        monitorDeleted: 'Monitor deleted',
        monitorNone: 'No monitors yet',
        monitorNoneHint: 'Add a monitor to track DNS record changes',
        monitorZone: 'Zone',
        monitorSelectZone: 'Select zone...',
        monitorRecordName: 'Record Name',
        monitorExpectedContent: 'Expected Content',
        monitorExpected: 'Expected',
        monitorLastCheck: 'Last check',
        monitorAutoRefresh: 'Auto-refreshes every 60 seconds',
        // Cache Management
        cacheTab: 'Cache',
        cacheDevMode: 'Development Mode',
        cacheDevModeDesc: 'Development mode temporarily disables caching for your zone. Auto-expires in 3 hours.',
        cacheDevModeOn: 'Enable Development Mode',
        cacheDevModeOff: 'Disable Development Mode',
        cacheDevModeExpires: 'Auto-expires in {time}',
        devModeEnabled: 'Development mode enabled',
        devModeDisabled: 'Development mode disabled',
        cachePurgeAll: 'Purge All Cache',
        cachePurgeAllDesc: 'Remove all cached files for this zone. This action cannot be undone.',
        cachePurgeAllBtn: 'Purge All Cache',
        cachePurgeAllConfirm: 'This will purge all cached files for this zone. Are you sure?',
        cachePurgeAllSuccess: 'All cache has been purged',
        cachePurgeUrls: 'Purge by URL',
        cachePurgeUrlsDesc: 'Enter URLs to purge from cache, one per line (max 30 per request).',
        cachePurgeUrlsPlaceholder: 'https://example.com/page1\nhttps://example.com/page2',
        cachePurgeUrlsBtn: 'Purge URLs',
        cachePurgeUrlsSuccess: 'Successfully purged {count} URL(s)',
        cacheUrlsEmpty: 'Please enter at least one URL',
        cacheUrlsLimit: 'Maximum 30 URLs per request (Cloudflare API limit)',
        tokenPermissionHint: 'Your API token is missing permissions. Add: Zone Settings Edit, Cache Purge, SSL and Certificates Edit.',
        loadSettingsError: 'Failed to load settings: {error}',

        // Speed Optimization
        speedTab: 'Speed',
        speedQuickActions: 'Quick Speed Optimization',
        speedQuickActionsDesc: 'Enable or disable all speed optimizations at once, including compression, preloading, and protocol enhancements.',
        speedEnableAll: 'Enable All Speed Optimizations',
        speedDisableAll: 'Disable All',
        speedEnableAllSuccess: 'All speed optimizations enabled',
        speedDisableAllSuccess: 'All speed optimizations disabled',
        speedAdvanced: 'Advanced / Customize',
        speed_rocket_loader: 'Rocket Loader',
        speedRocketLoaderDesc: 'Defers loading of JavaScript to improve paint times. May break some JS-dependent features.',
        speedRocketLoaderWarning: 'May cause issues with inline scripts',
        speed_minify: 'Auto Minify',
        speedMinifyDesc: 'Reduce file size by removing unnecessary characters',
        speed_brotli: 'Brotli Compression',
        speedBrotliDesc: 'Apply Brotli compression for faster page loads',
        speed_early_hints: 'Early Hints (Smart Hints)',
        speedEarlyHintsDesc: 'Send preload hints to browsers before the full response is ready',
        speed_h2_prioritization: 'HTTP/2 Prioritization',
        speedH2Desc: 'Optimize the order of resource delivery over HTTP/2',
        speed_0rtt: '0-RTT Connection Resumption',
        speed0rttDesc: 'Allow TLS 1.3 connections to resume without a full handshake',
        speed_fonts: 'Cloudflare Fonts',
        speedFontsDesc: 'Rewrite Google Fonts to be served from your domain, improving privacy and performance by eliminating third-party connections.',
        speed_polish: 'Polish (Image Optimization)',
        speedPolishDesc: 'Optimize image sizes on your site. Lossless reduces file size without quality loss; Lossy provides greater compression.',
        speedPolish_off: 'Off',
        speedPolish_lossless: 'Lossless',
        speedPolish_lossy: 'Lossy',
        speed_mirage: 'Mirage',
        speedMirageDesc: 'Accelerate image loading on mobile devices by lazy-loading images and serving optimized placeholders.',
        speed_image_resizing: 'Image Resizing',
        speedImageResizingDesc: 'Resize, crop, and convert images on the fly via URL parameters or Workers.',

        // SSL/TLS
        sslTab: 'SSL/TLS',
        sslModeTitle: 'SSL/TLS Encryption Mode',
        sslModeDescription: 'Choose how Cloudflare encrypts traffic between visitors and your origin server.',
        sslModeOff: 'Off',
        sslModeOffDesc: 'No encryption. All traffic is sent in plaintext.',
        sslModeFlexible: 'Flexible',
        sslModeFlexibleDesc: 'Encrypts traffic between the browser and Cloudflare only. No SSL certificate needed on origin.',
        sslModeFull: 'Full',
        sslModeFullDesc: 'End-to-end encryption, but does not validate the origin certificate.',
        sslModeStrict: 'Full (Strict)',
        sslModeStrictDesc: 'End-to-end encryption with origin certificate validation. Most secure option.',
        sslAlwaysHttps: 'Always Use HTTPS',
        sslAlwaysHttpsDesc: 'Redirect all HTTP requests to HTTPS.',
        sslMinTls: 'Minimum TLS Version',
        sslMinTlsDesc: 'Set the minimum TLS version allowed for connections to your domain.',
        sslAutoRewrites: 'Automatic HTTPS Rewrites',
        sslAutoRewritesDesc: 'Fix mixed content by rewriting HTTP to HTTPS.',
        sslUpdateSuccess: 'SSL/TLS setting updated successfully',
        sslOffWarning: 'Warning: SSL is off. Your site traffic is unencrypted and vulnerable to interception.',
        sslDiagramBrowser: 'Browser',
        sslDiagramOrigin: 'Origin',
        errPermission: 'Insufficient Permissions',
        errPermissionDesc: 'This API token does not have the required permissions. Ensure it has Zone:Read and DNS:Edit scopes.',
        errAuth: 'Invalid or Expired Credential',
        errAuthDesc: 'This API token or key is invalid, has been deleted, or has expired. Please re-add a valid credential.',
        errNetwork: 'Network Error',
        errNetworkDesc: 'Could not reach the Cloudflare API. Please check your network connection and try again.',
        errUnknown: 'An unexpected error occurred',
        retry: 'Retry',
        goToCfDashboard: 'Open CF Dashboard',
        loadingRecords: 'Loading...',
        searchZones: 'Search zones...',
        // Sidebar section labels
        sidebarPerformance: 'Performance',
        sidebarSecurity: 'Security',
        sidebarConfig: 'Configuration',
        sidebarMonitoring: 'Monitoring',
        // Tab labels
        pageRulesTab: 'Page Rules',
        securityTab: 'Security',
        networkTab: 'Network',
        scrapeShieldTab: 'Scrape Shield',
        workersTab: 'Workers',
        rulesTab: 'Redirect Rules',
        analyticsTab: 'Analytics',
        dnsSettingsTab: 'DNS Settings',
        dnsSettingsTitle: 'DNS Settings',
        enable: 'Enable',
        disable: 'Disable',
        disabled: 'Disabled',
        dnssecDesc: 'DNSSEC protects your domain from DNS spoofing and cache poisoning by digitally signing DNS records. Once enabled, you need to add the DS record at your registrar.',
        dnssecPending: 'DNSSEC is pending activation. Add the DS record to your domain registrar.',
        cnameFlattening: 'CNAME Flattening',
        cnameFlattenRoot: 'Flatten at root only',
        cnameFlattenAll: 'Flatten all CNAMEs',
        cnameFlatteningDesc: 'CNAME flattening resolves CNAME records to A records for improved compatibility. Enabled at the root (@) by default.',
        cnameFlattenPaidOnly: '"Flatten all CNAMEs" is only available on paid plans.',
        paidOnly: 'Paid',
        nameservers: 'Nameservers',
        nameserversDesc: 'Cloudflare nameservers currently assigned to this domain.',
        pointDnsTo: 'Point your domain DNS to:',
        transformTab: 'Transform Rules',
        originTab: 'Origin Rules',
        emailTab: 'Email Routing',
        customPagesTab: 'Custom Pages',
        sidebarEmail: 'Email & Pages',
        // DNS Settings
        dsTitle: 'DNS Settings',
        dsDesc: 'Manage DNS-level settings like DNSSEC, CNAME flattening, and nameservers.',
        dsDnssec: 'DNSSEC',
        dsDnssecDesc: 'Protect DNS queries with digital signatures to prevent DNS spoofing and cache poisoning.',
        dsDnssecEnabled: 'DNSSEC Enabled',
        dsDnssecDisabled: 'DNSSEC Disabled',
        dsDnssecPending: 'DNSSEC Pending',
        dsDsRecord: 'DS Record',
        dsDsRecordHint: 'Add this DS record at your domain registrar to activate DNSSEC.',
        dsCnameFlattening: 'CNAME Flattening',
        dsCnameFlatteningDesc: 'Control CNAME flattening behavior. Flattening resolves CNAME records to their final IP address.',
        dsFlattenAll: 'Flatten all CNAMEs',
        dsFlattenAtRoot: 'Flatten at root only',
        dsNameservers: 'Nameservers',
        dsNameserversDesc: 'Cloudflare nameservers currently assigned to this zone.',
        // Transform Rules
        trTitle: 'Transform Rules',
        trDesc: 'Manage URL rewrite and HTTP request/response header modification rules.',
        trUrlRewrites: 'URL Rewrites',
        trHeaderMods: 'Header Modifications',
        trNoRules: 'No transform rules configured.',
        trInfoCard: 'Transform rules are part of Cloudflare\'s Ruleset Engine. Complex rule creation and editing is available in the Cloudflare Dashboard. You can enable/disable existing rules here.',
        trManageInDashboard: 'Manage in Dashboard',
        // Origin Rules
        orTitle: 'Origin Rules',
        orDesc: 'Manage rules that control how requests reach your origin server, including host header rewrites and port overrides.',
        orNoRules: 'No origin rules configured.',
        orInfoCard: 'Origin rules are part of Cloudflare\'s Ruleset Engine. Complex rule creation and editing is available in the Cloudflare Dashboard. You can enable/disable existing rules here.',
        orManageInDashboard: 'Manage in Dashboard',
        // Email Routing
        erTitle: 'Email Routing',
        erDesc: 'Configure email forwarding rules to route emails sent to your domain to destination mailboxes.',
        erAddRule: 'Add Rule',
        erEditRule: 'Edit Rule',
        erDeleteConfirm: 'Delete this email routing rule?',
        erSaved: 'Email routing rule saved',
        erDeleted: 'Email routing rule deleted',
        erNoRules: 'No email routing rules.',
        erEnable: 'Email Routing',
        erEnableDesc: 'Enable email routing for this zone.',
        erMatchType: 'Match Type',
        erExactMatch: 'Exact address',
        erCatchAll: 'Catch-all',
        erFromAddress: 'From Address',
        erForwardTo: 'Forward to',
        // Custom Pages
        cpTitle: 'Custom Error Pages',
        cpDesc: 'Customize the pages Cloudflare shows visitors during specific events like WAF challenges, rate limiting, and more.',
        cpNoPages: 'No custom pages available.',
        cpCustomUrl: 'Custom Page URL',
        cpUrlHint: 'Leave empty to revert to default page.',
        // Scrape Shield
        ssTitle: 'Scrape Shield',
        ssDesc: 'Protect your website from content scraping and data leaks.',
        ss_email_obfuscation: 'Email Address Obfuscation',
        ssEmailObfuscationDesc: 'Hide email addresses on your pages from bots while keeping them visible to humans.',
        ss_server_side_exclude: 'Server-Side Excludes',
        ssServerSideExcludeDesc: 'Automatically hide specific content from suspicious visitors (content wrapped in <!--sse-->...<!--/sse--> tags).',
        ss_hotlink_protection: 'Hotlink Protection',
        ssHotlinkProtectionDesc: 'Prevent other sites from linking directly to your images and resources, saving bandwidth.',
        // Network
        netTitle: 'Network Settings',
        netDesc: 'Manage network-level settings like HTTP/3, WebSockets, IPv6, and more.',
        net_websockets: 'WebSockets',
        netWebsocketsDesc: 'Allow WebSocket connections to your origin server.',
        net_ip_geolocation: 'IP Geolocation',
        netIpGeoDesc: 'Include the visitor\'s country code in request headers (CF-IPCountry).',
        net_ipv6: 'IPv6 Compatibility',
        netIpv6Desc: 'Enable IPv6 support for your domain.',
        net_pseudo_ipv4: 'Pseudo IPv4',
        netPseudoIpv4Desc: 'Add a pseudo IPv4 header for visitors connecting via IPv6.',
        net_opportunistic_onion: 'Onion Routing',
        netOnionDesc: 'Allow access to your site via the Tor network.',
        net_http3: 'HTTP/3 (QUIC)',
        netHttp3Desc: 'Enable the HTTP/3 protocol for faster connections.',
        net_true_client_ip_header: 'True-Client-IP',
        netTrueClientIpDesc: 'Send a True-Client-IP header with the end-user\'s IP to your origin.',
        net_max_upload: 'Max Upload Size',
        netMaxUploadDesc: 'Maximum allowed HTTP request body size (varies by plan).',
        // Security
        secTitle: 'Security Settings',
        secLevel: 'Security Level',
        secLevelDesc: 'Controls how aggressively Cloudflare\'s security features challenge visitors.',
        secEssentiallyOff: 'Essentially Off',
        secEssentiallyOffDesc: 'Only challenges the most grievous offenders.',
        secLow: 'Low',
        secLowDesc: 'Challenges only the most threatening visitors.',
        secMedium: 'Medium',
        secMediumDesc: 'Challenges both moderate and high threat visitors.',
        secHigh: 'High',
        secHighDesc: 'Challenges all visitors with low, moderate, and high threat scores.',
        secUnderAttack: 'I\'m Under Attack!',
        secUnderAttackDesc: 'Shows a JS challenge page for every request. Only use during DDoS attacks.',
        secUnderAttackWarning: 'Under Attack mode is enabled! All visitors will see a 5-second challenge page.',
        secBrowserCheck: 'Browser Integrity Check',
        secBrowserCheckDesc: 'Evaluates visitor browser HTTP headers to detect common abuse patterns.',
        secChallengeTtl: 'Challenge Passage TTL',
        secChallengeTtlDesc: 'How long a visitor who passed a challenge can browse before being challenged again.',
        secPrivacyPass: 'Privacy Pass',
        secPrivacyPassDesc: 'Reduce the number of CAPTCHAs shown to visitors with Privacy Pass tokens.',
        secFirewallRules: 'Firewall Rules',
        secFirewallRulesDesc: 'View existing firewall rules. You can enable/disable rules here.',
        secNoFirewallRules: 'No firewall rules configured.',
        // Workers Routes
        wrTitle: 'Workers Routes',
        wrDesc: 'Manage routes that direct requests to Cloudflare Workers.',
        wrAddRoute: 'Add Route',
        wrPattern: 'Route Pattern',
        wrPatternPlaceholder: '*example.com/path/*',
        wrScript: 'Worker Script',
        wrScriptPlaceholder: 'my-worker',
        wrScriptHint: 'Leave empty to create a route exclusion',
        wrWorkerScript: 'Worker Script',
        wrNoRoutes: 'No Workers routes configured.',
        wrNoScript: 'No script (route disabled)',
        wrDeleteConfirm: 'Are you sure you want to delete this Workers route?',
        wrSaved: 'Workers route saved',
        wrDeleted: 'Workers route deleted',
        wrEditRoute: 'Edit Route',
        // Page Rules
        prTitle: 'Page Rules',
        prDesc: 'Configure specific settings and behaviors for requests matching URL patterns.',
        prAddRule: 'Add Rule',
        prUrlPattern: 'URL Pattern',
        prUrlPlaceholder: '*example.com/path/*',
        prActions: 'Actions',
        prAddAction: 'Add Action',
        prActive: 'Active',
        prPaused: 'Paused',
        prDeleteConfirm: 'Are you sure you want to delete this page rule?',
        prSaved: 'Page rule saved',
        prDeleted: 'Page rule deleted',
        prNoRules: 'No page rules configured.',
        prEditRule: 'Edit Rule',
        // Redirect Rules
        rlTitle: 'Redirect Rules',
        rlDesc: 'Manage URL redirects powered by Cloudflare\'s Ruleset Engine.',
        rlManageInDashboard: 'Manage in Dashboard',
        rlInfoCard: 'Redirect rules are part of Cloudflare\'s Ruleset Engine. Complex rule creation and editing is available in the Cloudflare Dashboard. You can enable/disable existing rules here.',
        rlNoRules: 'No redirect rules configured.',
        // Rule CRUD
        addRule: 'Add Rule',
        editRule: 'Edit Rule',
        saveRule: 'Save Rule',
        deleteRuleConfirm: 'Are you sure you want to delete this rule?',
        ruleSaved: 'Rule saved',
        ruleDeleted: 'Rule deleted',
        ruleDescription: 'Description',
        ruleExpression: 'Expression (Wirefilter)',
        ruleExpressionPlaceholder: '(http.host eq "example.com")',
        ruleEnabled: 'Enabled',
        staticValue: 'Static',
        dynamicExpression: 'Dynamic',
        rlTargetUrl: 'Target URL',
        rlStatusCode: 'Status Code',
        rlPreserveQuery: 'Preserve Query String',
        orOriginHost: 'Origin Hostname',
        orOriginPort: 'Origin Port',
        orHostHeader: 'Host Header Override',
        trRewritePath: 'Rewrite Path',
        trRewriteQuery: 'Rewrite Query',
        trHeaderOperation: 'Header Operations',
        trHeaderName: 'Header Name',
        trHeaderValue: 'Value',
        trHeaderOpSet: 'Set',
        trHeaderOpAdd: 'Add',
        trHeaderOpRemove: 'Remove',
        trAddHeaderOp: 'Add Header',
        copyToken: 'Copy Token',
        tokenCopied: 'Token copied to clipboard',
        // Analytics
        anTitle: 'Traffic Analytics',
        anTotalRequests: 'Total Requests',
        anCachedRequests: 'Cached',
        anBandwidth: 'Bandwidth',
        anCachedBandwidth: 'Cached',
        anThreats: 'Threats Blocked',
        anVisitors: 'Unique Visitors',
        anHttpStatus: 'HTTP Status Distribution',
        anCountries: 'Top Countries',
        // DNS Analytics
        dnsAnalyticsTab: 'DNS Analytics',
        dnsAnTitle: 'DNS Analytics',
        dnsAnQueryCount: 'Total Queries',
        dnsAnNxdomain: 'NXDOMAIN',
        dnsAnOfTotal: 'of total',
        dnsAnQueryTypes: 'Query Types',
        dnsAnResponseCodes: 'Response Codes',
        dnsAnNoData: 'No DNS analytics data available for this time range.',
        // Bulk Settings
        bulkApplySetting: 'Apply Setting',
        bulkSettingName: 'Setting',
        bulkSettingValue: 'Value',
        // Enhanced Monitors
        monitorTrafficSpike: 'Traffic Spike',
        monitorErrorRate: 'Error Rate',
        monitorSslExpiry: 'SSL Expiry',
        monitorThreshold: 'Threshold',
        monitorTimeWindow: 'Time Window',
        monitorStatusType: 'Status Type',
        monitorDaysBefore: 'Alert',
        monitorDaysBeforeUnit: 'days before expiry',
        // Firewall CRUD
        fwCreateRule: 'Create Rule',
        fwEditRule: 'Edit Rule',
        fwExpression: 'Expression',
        fwAction: 'Action',
        fwPriority: 'Priority',
        fwPaused: 'Paused',
        fwDeleteConfirm: 'Are you sure you want to delete this firewall rule?',
        fwSaved: 'Firewall rule saved',
        fwDeleted: 'Firewall rule deleted',
        // Bot Fight Mode
        botFightMode: 'Bot Fight Mode',
        botFightModeDesc: 'Automatically detect and mitigate bot traffic.',
        // Accessibility
        skipToContent: 'Skip to content',
};