{
  "common": {
    "save": "Jimat",
    "cancel": "Batal",
    "delete": "Padam",
    "loading": "Memuatkan...",
    "error": "Ralat berlaku",
    "success": "Kejayaan",
    "confirm": "Adakah anda pasti?",
    "refresh": "Segarkan semula",
    "close": "tutup",
    "add": "Tambah",
    "edit": "Sunting",
    "search": "Cari",
    "back": "belakang",
    "next": "Seterusnya",
    "submit": "Hantar",
    "reset": "Tetapkan semula",
    "copy": "salin",
    "copied": "disalin!",
    "enabled": "Didayakan",
    "disabled": "Dilumpuhkan",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "noData": "Tiada data tersedia",
    "nothingHere": "Nothing here yet",
    "configure": "Konfigurasikan",
    "manage": "Urus",
    "name": "Nama",
    "actions": "Tindakan",
    "status": "Status",
    "type": "taip",
    "model": "Model",
    "models": "model",
    "provider": "Pembekal",
    "account": "Akaun",
    "time": "Masa",
    "details": "Butiran",
    "created": "Dicipta",
    "lastUsed": "Last Refreshed",
    "loadMore": "Muatkan Lagi",
    "noResults": "Tiada hasil ditemui",
    "reloadPage": "Muat Semula Halaman",
    "connected": "Bersambung",
    "disconnected": "Terputus sambungan",
    "notConfigured": "Tidak dikonfigurasikan",
    "testConnection": "Sambungan Ujian",
    "enable": "Dayakan",
    "disable": "Lumpuhkan",
    "columns": "Lajur",
    "newest": "Terbaru",
    "oldest": "Tertua",
    "all": "Semua",
    "none": "tiada",
    "yes": "ya",
    "no": "Tidak",
    "on": "__MISSING__:ON",
    "off": "__MISSING__:OFF",
    "warning": "Amaran",
    "note": "Nota",
    "free": "Percuma",
    "skipToContent": "Langkau ke kandungan",
    "maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
    "maintenanceServerUnreachable": "Server is unreachable. Reconnecting...",
    "accept": "Terima",
    "accountId": "ID Akaun",
    "alias": "Alias",
    "apiKeyId": "ID Kunci API",
    "apiKeyName": "Nama Kunci API",
    "apiKeySecret": "Rahsia Kunci API",
    "authorization": "Keizinan",
    "content-type": "Jenis Kandungan",
    "content-length": "Panjang Kandungan",
    "cookie": "Kuki",
    "file": "Fail",
    "host": "hos",
    "id": "ID",
    "import": "Import",
    "limit": "had",
    "offset": "Offset",
    "open": "Buka",
    "origin": "asal usul",
    "promptTokens": "Token Gesaan",
    "completionTokens": "Token Penyiapan",
    "totalTokens": "Jumlah Token",
    "rawModel": "Model Mentah",
    "scope": "Skop",
    "skill": "Kemahiran",
    "sortBy": "Isih Mengikut",
    "sortOrder": "Susun Susunan",
    "tab": "Tab",
    "text": "Teks",
    "textarea": "Textarea",
    "tool": "alat",
    "toolId": "ID alat",
    "web": "Web",
    "whereUsed": "Di mana Digunakan",
    "whitelist": "Senarai putih",
    "blacklist": "Senarai hitam",
    "resolve": "Selesaikan",
    "force": "Paksa",
    "base64url": "URL Base64",
    "hex": "Hex",
    "range": "Julat",
    "component": "Komponen",
    "redirect_uri": "Ubah hala URI",
    "idempotency-key": "Kunci Idepotency",
    "error_description": "Penerangan Ralat",
    "code": "Kod",
    "compatible": "serasi",
    "chat-completions": "Selesai Sembang",
    "oauth": "OAuth",
    "auth_token": "Token Pengesahan",
    "crypto": "Kripto",
    "hours": "jam",
    "selfsigned": "Ditandatangani sendiri",
    "proxy_id": "ID proksi",
    "proxyId": "ID proksi",
    "connectionId": "ID Sambungan",
    "resolveConnectionId": "Selesaikan ID Sambungan",
    "resolve_connection_id": "Selesaikan ID Sambungan",
    "scope_id": "ID Skop",
    "scopeId": "ID Skop",
    "jwtSecret": "Rahsia JWT",
    "keytar": "Keytar",
    "better-sqlite3": "lebih baik-sqlite3",
    "undici": "undici",
    "builder-id": "ID Pembina",
    "musicDesc": "Penerangan Muzik",
    "musicGeneration": "Penjanaan Muzik",
    "idc": "IDC",
    "cloud-status-changed": "Status awan berubah",
    "where_used": "Di mana Digunakan",
    "windowMs": "Tetingkap (ms)",
    "social-github": "GitHub",
    "social-google": "Google",
    "TOOL_ALLOWLIST": "Senarai Benarkan Alat",
    "TOOL_DENYLIST": "Senarai Penafian Alat",
    "Failed to save pricing": "Gagal menyimpan harga",
    "Failed to reset pricing": "Gagal menetapkan semula harga",
    "apikey": "Kunci API",
    "http": "HTTP",
    "goToDashboard": "Go to Dashboard",
    "checkSystemStatus": "Check System Status",
    "selectModel": "Select Model",
    "combos": "Combos",
    "noModelsFound": "No models found",
    "clear": "Clear",
    "done": "Done",
    "errorOccurred": "Error Occurred",
    "comboDeleted": "Combo Deleted",
    "hide": "Hide",
    "creating": "Creating",
    "comboCreated": "Combo Created",
    "swapFormats": "Swap Formats",
    "daysAgo": "Days Ago",
    "retries": "Retries",
    "errorDuringRestore": "Error During Restore",
    "eventsAppearHint": "Events Appear Hint",
    "noLockouts": "No Lockouts",
    "webSearchDesc": "Web Search Desc",
    "audioProvidersHeading": "Audio Providers Heading",
    "cloudAgentProviders": "Pembekal Agen Awan",
    "minutesAgo": "Minutes Ago",
    "a": "A",
    "liveAutoRefreshing": "Live Auto Refreshing",
    "webSearch": "Web Search",
    "anthropicPrefixPlaceholder": "Anthropic Prefix Placeholder",
    "addModelToCombo": "Add Model To Combo",
    "failedToLoad": "Failed To Load",
    "categoryMedia": "Category Media",
    "enableCloud": "Enable Cloud",
    "expirationBannerExpiringSoon": "Expiration Banner Expiring Soon",
    "retry": "Retry",
    "embeddings": "Embeddings",
    "errorCount": "Error Count",
    "backupReasonManual": "Backup Reason Manual",
    "safeSearchModerate": "Safe Search Moderate",
    "activeLimiters": "Active Limiters",
    "a2aCardTitle": "A2A Card Title",
    "cloudWorkerUnreachable": "Cloud Worker Unreachable",
    "testFailed": "Test Failed",
    "compatibleBaseUrlHint": "Compatible Base Url Hint",
    "usageTracking": "Usage Tracking",
    "disableCloudTitle": "Disable Cloud Title",
    "noConnections": "No Connections",
    "providerHealth": "Provider Health",
    "confirmDbImport": "Confirm Db Import",
    "notAvailableSymbol": "Not Available Symbol",
    "backupsAvailable": "Backups Available",
    "providerAuto": "Provider Auto",
    "newProviderNamePlaceholder": "New Provider Name Placeholder",
    "a2aQuickStartStep2": "A2A Quick Start Step2",
    "ok": "Ok",
    "available": "Available",
    "noBackupYet": "No Backup Yet",
    "more": "More",
    "noCompatibleYet": "No Compatible Yet",
    "multiProvider": "Multi Provider",
    "repairEnvHint": "Repair Env Hint",
    "disablingCloud": "Disabling Cloud",
    "testBench": "Test Bench",
    "valid": "Valid",
    "cloudBenefitShare": "Cloud Benefit Share",
    "mcpCardTitle": "Mcp Card Title",
    "disableConfirm": "Disable Confirm",
    "filters": "Filters",
    "expirationBannerExpiredDesc": "Expiration Banner Expired Desc",
    "saveComboDefaults": "Save Combo Defaults",
    "cloudConnectedVerified": "Cloud Connected Verified",
    "uptime": "Uptime",
    "compatibleProdPlaceholder": "Compatible Prod Placeholder",
    "fallbackChainsTitle": "Fallback Chains Title",
    "oauthLabel": "Oauth Label",
    "a2aCardDescription": "A2A Card Description",
    "okShort": "Ok Short",
    "maintenance": "Maintenance",
    "formatConverter": "Format Converter",
    "zedImportNetworkError": "Zed Import Network Error",
    "apiKeyLabel": "Api Key Label",
    "noModelsForProvider": "No Models For Provider",
    "mcpCardDescription": "Mcp Card Description",
    "apiTypeLabel": "Api Type Label",
    "configuredProvidersLabel": "Configured Providers Label",
    "maxRetriesLabel": "Max Retries Label",
    "title": "Title",
    "output": "Output",
    "prefixHint": "Prefix Hint",
    "skipWizard": "Skip Wizard",
    "failedCount": "Failed Count",
    "confirmDbImportDesc": "Confirm Db Import Desc",
    "entries": "Entries",
    "until": "Until",
    "disableCombo": "Disable Combo",
    "liveMonitorDescriptionPrefix": "Live Monitor Description Prefix",
    "runningCount": "Running Count",
    "noActiveConnectionsInGroup": "No Active Connections In Group",
    "savedSuccessfully": "Saved Successfully",
    "systemStorage": "System Storage",
    "videoDesc": "Video Desc",
    "maxResults": "Max Results",
    "timeRangeMonth": "Time Range Month",
    "testSummary": "Test Summary",
    "failedSetPassword": "Failed Set Password",
    "audio": "Audio",
    "restore": "Restore",
    "disableWarning": "Disable Warning",
    "moderationsDesc": "Moderations Desc",
    "providerHealthStatusAria": "Provider Health Status Aria",
    "modelNamePlaceholder": "Model Name Placeholder",
    "mcpQuickStartStep2": "Mcp Quick Start Step2",
    "quickStart": "Quick Start",
    "fullExportFailedWithError": "Full Export Failed With Error",
    "loadingBackups": "Loading Backups",
    "anthropicBaseUrlPlaceholder": "Anthropic Base Url Placeholder",
    "description": "Description",
    "noProviderFound": "No Provider Found",
    "auto": "Auto",
    "protocolsDescription": "Protocols Description",
    "cloudSessionNote": "Cloud Session Note",
    "advancedSettings": "Advanced Settings",
    "defaultStrategy": "Default Strategy",
    "purgeExpiredLogs": "Purge Expired Logs",
    "justNow": "Just Now",
    "providerTestFailed": "Provider Test Failed",
    "openaiBaseUrlPlaceholder": "Openai Base Url Placeholder",
    "image": "Image",
    "failedCreateChain": "Failed Create Chain",
    "importDatabase": "Import Database",
    "allDataLocal": "All Data Local",
    "sectionTitle": "Section Title",
    "failedToggle": "Failed Toggle",
    "editCombo": "Edit Combo",
    "testResults": "Test Results",
    "searchQuery": "Search Query",
    "addCcCompatible": "Add Cc Compatible",
    "duplicate": "Duplicate",
    "createCombo": "Create Combo",
    "searchTypeWeb": "Search Type Web",
    "addChain": "Add Chain",
    "prefixLabel": "Prefix Label",
    "listModelsDesc": "List Models Desc",
    "databaseSize": "Database Size",
    "chainCreated": "Chain Created",
    "providerTestTimeout": "Provider Test Timeout",
    "routingStrategy": "Routing Strategy",
    "translateAction": "Translate Action",
    "exportFailed": "Export Failed",
    "connectedVerificationPending": "Connected Verification Pending",
    "a2aQuickStartTitle": "A2A Quick Start Title",
    "couldNotTest": "Could Not Test",
    "testAllCompatible": "Test All Compatible",
    "anthropicCompatibleName": "Anthropic Compatible Name",
    "disabling": "Disabling",
    "failedEnable": "Failed Enable",
    "categoryUtility": "Category Utility",
    "customUrlOptional": "Custom Url Optional",
    "localProviders": "Local Providers",
    "comboNamePlaceholder": "Combo Name Placeholder",
    "memoryRss": "Memory Rss",
    "disableProvider": "Disable Provider",
    "welcomeDesc": "Welcome Desc",
    "nameLabel": "Name Label",
    "allOperational": "All Operational",
    "backupNow": "Backup Now",
    "providerMaxRetriesAria": "Provider Max Retries Aria",
    "textToSpeechDesc": "Text To Speech Desc",
    "machineId": "Machine Id",
    "globalProxy": "Global Proxy",
    "hitsMisses": "Hits Misses",
    "testDesc": "Test Desc",
    "chatDesc": "Chat Desc",
    "importSuccess": "Import Success",
    "chat": "Chat",
    "a2aQuickStartStep1": "A2A Quick Start Step1",
    "importFailed": "Import Failed",
    "inputPlaceholder": "Input Placeholder",
    "providerModelsTitle": "Provider Models Title",
    "lastBackup": "Last Backup",
    "yourEndpoint": "Your Endpoint",
    "autoDisableThresholdDesc": "Auto Disable Threshold Desc",
    "rerankDesc": "Rerank Desc",
    "modelsPathPlaceholder": "Models Path Placeholder",
    "noCombosYet": "No Combos Yet",
    "connectedVerificationPendingWithError": "Connected Verification Pending With Error",
    "comboDefaultsGuideHint1": "Combo Defaults Guide Hint1",
    "enableCloudTitle": "Enable Cloud Title",
    "configuredProvidersHint": "Configured Providers Hint",
    "paused": "Paused",
    "llmProviders": "Llm Providers",
    "enableCombo": "Enable Combo",
    "removeProviderOverrideAria": "Remove Provider Override Aria",
    "nodeVersion": "Node Version",
    "openai": "Openai",
    "exportFailedWithError": "Export Failed With Error",
    "proxyConfigured": "Proxy Configured",
    "concurrencyPerModel": "Concurrency Per Model",
    "protocolTasksLabel": "Protocol Tasks Label",
    "oauthProviders": "Oauth Providers",
    "lockedCount": "Locked Count",
    "deleteChainConfirm": "Delete Chain Confirm",
    "recentTranslations": "Recent Translations",
    "zedImportButton": "Zed Import Button",
    "responsesDesc": "Responses Desc",
    "testedCount": "Tested Count",
    "providersCommaSeparatedPlaceholder": "Providers Comma Separated Placeholder",
    "signatureDefaults": "Signature Defaults",
    "errorCreating": "Error Creating",
    "timeRangeYear": "Time Range Year",
    "compatibleLabel": "Compatible Label",
    "cloudDisabledSuccess": "Cloud Disabled Success",
    "deleteConfirm": "Delete Confirm",
    "check": "Check",
    "safeSearch": "Safe Search",
    "protocolLastActivity": "Protocol Last Activity",
    "openMcpDashboard": "Open Mcp Dashboard",
    "testBenchTab": "Test Bench Tab",
    "chatPathLabel": "Chat Path Label",
    "retryDelay": "Retry Delay",
    "errorUpdating": "Error Updating",
    "ideCliIntegrations": "Ide Cli Integrations",
    "imageGeneration": "Image Generation",
    "apiKeyRequired": "Api Key Required",
    "resetAllTitle": "Reset All Title",
    "connectionError": "Connection Error",
    "modelName": "Model Name",
    "apiKeyForCheck": "Api Key For Check",
    "cloudRequestTimeout": "Cloud Request Timeout",
    "showConfiguredOnly": "Show Configured Only",
    "showFreeOnly": "Percuma sahaja",
    "addFirstProvider": "Tambahkan pembekal pertama anda",
    "addFirstProviderDesc": "Sambungkan pembekal AI untuk memulakan penghalaan permintaan melalui OmniRoute. Anda boleh menggunakan pembekal percuma, kunci API atau akaun OAuth.",
    "learnMore": "Ketahui lebih lanjut",
    "includeDomains": "Include Domains",
    "promptCache": "Prompt Cache",
    "cloudConnected": "Cloud Connected",
    "deleteChain": "Delete Chain",
    "chatPathPlaceholder": "Chat Path Placeholder",
    "databasePath": "Database Path",
    "usingLocalServer": "Using Local Server",
    "globalComboConfig": "Global Combo Config",
    "backupFailed": "Backup Failed",
    "tabProtocols": "Tab Protocols",
    "continue": "Continue",
    "categorySearch": "Category Search",
    "rateLimitStatus": "Rate Limit Status",
    "repairEnvSuccess": "Repair Env Success",
    "nameRequired": "Name Required",
    "country": "Country",
    "trackMetricsDesc": "Track Metrics Desc",
    "durationSecondsShort": "Duration Seconds Short",
    "formatConverterDescription": "Format Converter Description",
    "cloudBenefitAccess": "Cloud Benefit Access",
    "maxRetries": "Max Retries",
    "queueTimeout": "Queue Timeout",
    "addProvider": "Add Provider",
    "realtime": "Realtime",
    "totalTranslations": "Total Translations",
    "protocolActiveStreamsLabel": "Protocol Active Streams Label",
    "repairEnv": "Repair Env",
    "modelsCount": "Models Count",
    "viewBackups": "View Backups",
    "responsesApi": "Responses Api",
    "copyComboName": "Copy Combo Name",
    "failures": "Failures",
    "failedUpdate": "Failed Update",
    "imageDesc": "Image Desc",
    "failedCreate": "Failed Create",
    "remainingOfLimit": "Remaining Of Limit",
    "protocolsTitle": "Protocols Title",
    "expirationBannerExpiringSoonDesc": "Expiration Banner Expiring Soon Desc",
    "source": "Source",
    "failed": "Failed",
    "apiKeyMgmt": "Api Key Mgmt",
    "mcpQuickStartStep1": "Mcp Quick Start Step1",
    "runTest": "Run Test",
    "loadingFallbackChains": "Loading Fallback Chains",
    "healthy": "Healthy",
    "version": "Version",
    "saveBlockWeighted": "Save Block Weighted",
    "zedImportNone": "Zed Import None",
    "noBackupsYet": "No Backups Yet",
    "noGlobalProxy": "No Global Proxy",
    "noModels": "No Models",
    "stickyLimit": "Sticky Limit",
    "passedCount": "Passed Count",
    "zedImportFailed": "Zed Import Failed",
    "saving": "Saving",
    "testAll": "Test All",
    "globalProxyDesc": "Global Proxy Desc",
    "latencyP99": "Latency P99",
    "connectingToCloud": "Connecting To Cloud",
    "responses": "Responses",
    "errorDeleting": "Error Deleting",
    "openaiPrefixPlaceholder": "Openai Prefix Placeholder",
    "enterPassword": "Enter Password",
    "openA2aDashboard": "Open A2A Dashboard",
    "enableProvider": "Enable Provider",
    "modeTest": "Mode Test",
    "failedDeleteChain": "Failed Delete Chain",
    "providerDesc": "Provider Desc",
    "templateLoadHint": "Template Load Hint",
    "lastFailure": "Last Failure",
    "moveDown": "Move Down",
    "providerLabel": "Provider Label",
    "clearCacheFailed": "Clear Cache Failed",
    "imagesGenerations": "Images Generations",
    "repairEnvWorking": "Repair Env Working",
    "millisecondsShort": "Milliseconds Short",
    "globalLabel": "Global Label",
    "failuresPlural": "Failures Plural",
    "completionsLegacyDesc": "Completions Legacy Desc",
    "searchProviders": "Search Providers",
    "chatPathHint": "Chat Path Hint",
    "defaultStrategyDesc": "Default Strategy Desc",
    "latencyP95": "Latency P95",
    "textToSpeech": "Text To Speech",
    "searchType": "Search Type",
    "messages": "Messages",
    "aggregatorsGateways": "Aggregators Gateways",
    "comboStrategyAria": "Combo Strategy Aria",
    "input": "Input",
    "testingConnection": "Testing Connection",
    "excludeDomains": "Exclude Domains",
    "webCookieProviders": "Web Cookie Providers",
    "allTestsPassed": "All Tests Passed",
    "openaiCompatibleName": "Openai Compatible Name",
    "warningCostOptimizedPartialPricing": "Warning Cost Optimized Partial Pricing",
    "comboDefaultsGuideTitle": "Combo Defaults Guide Title",
    "hoursAgo": "Hours Ago",
    "notAvailable": "Not Available",
    "skipAndContinue": "Skip And Continue",
    "moderations": "Moderations",
    "proxyConfig": "Proxy Config",
    "upstreamProxyProviders": "Upstream Proxy Providers",
    "exportAll": "Export All",
    "queuedCount": "Queued Count",
    "resetAll": "Reset All",
    "noTranslations": "No Translations",
    "avgLatency": "Avg Latency",
    "throttleStatus": "Throttle Status",
    "backupRetentionDesc": "Backup Retention Desc",
    "noCBData": "No Cb Data",
    "chainDeleted": "Chain Deleted",
    "timeLeft": "Time Left",
    "expirationBannerExpired": "Expiration Banner Expired",
    "language": "Language",
    "invalidFileType": "Invalid File Type",
    "monitoredProviders": "Monitored Providers",
    "errors": "Errors",
    "heap": "Heap",
    "chatCompletions": "Chat Completions",
    "exampleTemplatesHint": "Example Templates Hint",
    "retryDelayLabel": "Retry Delay Label",
    "audioTranscription": "Audio Transcription",
    "fallbackChainsDesc": "Fallback Chains Desc",
    "exampleTemplates": "Example Templates",
    "connectionsCount": "Connections Count",
    "modelsPathLabel": "Models Path Label",
    "activeProvidersHint": "Active Providers Hint",
    "activeLockouts": "Active Lockouts",
    "invalid": "Invalid",
    "skipPassword": "Skip Password",
    "moveUp": "Move Up",
    "timeRange": "Time Range",
    "stickyLimitDesc": "Sticky Limit Desc",
    "cloudBenefitEdge": "Cloud Benefit Edge",
    "custom": "Custom",
    "verifying": "Verifying",
    "baseUrlLabel": "Base Url Label",
    "setPassword": "Set Password",
    "safeSearchStrict": "Safe Search Strict",
    "noChangesSinceBackup": "No Changes Since Backup",
    "modelsPathHint": "Models Path Hint",
    "audioTranscriptions": "Audio Transcriptions",
    "testCombo": "Test Combo",
    "mcpQuickStartTitle": "Mcp Quick Start Title",
    "comboUpdated": "Combo Updated",
    "weighted": "Weighted",
    "providers": "Providers",
    "ccCompatibleLabel": "Cc Compatible Label",
    "noFallbackChainsDesc": "No Fallback Chains Desc",
    "yesImport": "Yes Import",
    "lockoutsAutoRefreshHint": "Lockouts Auto Refresh Hint",
    "tabApis": "Tab Apis",
    "sectionDescription": "Section Description",
    "filter": "Filter",
    "purgeLogsFailed": "Purge Logs Failed",
    "latency": "Latency",
    "testAllOAuth": "Test All O Auth",
    "mcpQuickStartStep3": "Mcp Quick Start Step3",
    "repairEnvFailed": "Repair Env Failed",
    "zedImportHint": "Zed Import Hint",
    "modelsAcrossEndpoints": "Models Across Endpoints",
    "autoDisableBannedAccounts": "Auto Disable Banned Accounts",
    "securityDesc": "Security Desc",
    "listModels": "List Models",
    "backupRestore": "Backup Restore",
    "target": "Target",
    "zedImportSuccess": "Zed Import Success",
    "lastHeaderUpdate": "Last Header Update",
    "categoryCore": "Category Core",
    "noFallbackChains": "No Fallback Chains",
    "noSearchProviders": "No Search Providers",
    "autoBalance": "Auto Balance",
    "noModelsYet": "No Models Yet",
    "signatureFamily": "Signature Family",
    "externalApiCalls": "External Api Calls",
    "providerOverridesDesc": "Provider Overrides Desc",
    "signatureTool": "Signature Tool",
    "connectionFailed": "Connection Failed",
    "activeLimitersPlural": "Active Limiters Plural",
    "doneDesc": "Done Desc",
    "down": "Down",
    "noDataYet": "No Data Yet",
    "activeProviders": "Active Providers",
    "nameInvalid": "Name Invalid",
    "skip": "Skip",
    "createChain": "Create Chain",
    "audioSpeech": "Audio Speech",
    "cacheCleared": "Cache Cleared",
    "searchTypeNews": "Search Type News",
    "durationMillisecondsShort": "Duration Milliseconds Short",
    "addOpenAICompatible": "Add Open Ai Compatible",
    "chatTesterTab": "Chat Tester Tab",
    "queued": "Queued",
    "domainPlaceholder": "Domain Placeholder",
    "durationMinutesShort": "Duration Minutes Short",
    "verifyingConnection": "Verifying Connection",
    "imageProviders": "Image Providers",
    "protocolToolsLabel": "Protocol Tools Label",
    "queryPlaceholder": "Query Placeholder",
    "videoGeneration": "Video Generation",
    "timeRangeWeek": "Time Range Week",
    "limitExhausted": "Limit Exhausted",
    "failedDisable": "Failed Disable",
    "inMemoryNote": "In Memory Note",
    "compatibleHint": "Compatible Hint",
    "errorShort": "Error Short",
    "advancedHint": "Advanced Hint",
    "restoreFailed": "Restore Failed",
    "searchProvidersHeading": "Search Providers Heading",
    "comboName": "Combo Name",
    "autoDisableDescription": "Auto Disable Description",
    "embeddingsDesc": "Embeddings Desc",
    "operational": "Operational",
    "testAllApiKey": "Test All Api Key",
    "backupCreated": "Backup Created",
    "errorDuringImport": "Error During Import",
    "comboDefaultsGuideHint2": "Combo Defaults Guide Hint2",
    "connecting": "Connecting",
    "fillModelAndProviders": "Fill Model And Providers",
    "syncing": "Syncing",
    "resetConfirm": "Reset Confirm",
    "trackMetrics": "Track Metrics",
    "successful": "Successful",
    "recovering": "Recovering",
    "autoDisableThreshold": "Auto Disable Threshold",
    "anthropic": "Anthropic",
    "syncingData": "Syncing Data",
    "cloudBenefitPorts": "Cloud Benefit Ports",
    "compatibleProviders": "Compatible Providers",
    "freeTierProviders": "Pembekal Peringkat Percuma",
    "freeTierLabel": "Peringkat percuma tersedia",
    "freeTierProvidersDesc": "Penyedia dengan peringkat percuma — sesetengahnya memerlukan pendaftaran kunci API, yang lain tidak memerlukan bukti kelayakan langsung.",
    "clearCache": "Clear Cache",
    "reqs": "Reqs",
    "addAnthropicCompatible": "Add Anthropic Compatible",
    "apiKeyProviders": "Api Key Providers",
    "tabsAria": "Tabs Aria",
    "resetting": "Resetting",
    "millisecondsAbbr": "Milliseconds Abbr",
    "backupReasonPreRestore": "Backup Reason Pre Restore",
    "disableCloud": "Disable Cloud",
    "newProviderNameAria": "New Provider Name Aria",
    "passwordsMismatch": "Passwords Mismatch",
    "a2aQuickStartStep3": "A2A Quick Start Step3",
    "liveMonitorDescriptionSuffix": "Live Monitor Description Suffix",
    "failedAddProvider": "Failed Add Provider",
    "addAtLeastOneProvider": "Add At Least One Provider",
    "reasonSeparator": "Reason Separator",
    "zedImporting": "Zed Importing",
    "confirmPasswordPlaceholder": "Confirm Password Placeholder",
    "whatYouGet": "What You Get",
    "signatureSession": "Signature Session",
    "errorCountNoCode": "Error Count No Code",
    "testing": "Testing",
    "providersCommaSeparated": "Providers Comma Separated",
    "exportDatabase": "Export Database",
    "hitRate": "Hit Rate",
    "completionsLegacy": "Completions Legacy",
    "removeModel": "Remove Model",
    "timeRangeDay": "Time Range Day",
    "cloudRequestFailed": "Cloud Request Failed",
    "updatedAt": "Updated At",
    "monitoredProvidersHint": "Monitored Providers Hint",
    "connectionSuccessful": "Connection Successful",
    "latencyP50": "Latency P50",
    "logsDeleted": "Logs Deleted",
    "chatTester": "Chat Tester",
    "safeSearchOff": "Safe Search Off",
    "nameHint": "Name Hint",
    "debugToggle": "Debug Toggle",
    "embedding": "Embedding",
    "issuesLabel": "Issues Label",
    "optionAny": "Option Any",
    "maxNestingDepth": "Max Nesting Depth",
    "rerank": "Rerank",
    "checking": "Checking",
    "getStarted": "Get Started",
    "restoreSuccess": "Restore Success",
    "issuesDetected": "Issues Detected",
    "signatureCache": "Signature Cache",
    "modelLockouts": "Model Lockouts",
    "usingCloudProxy": "Using Cloud Proxy",
    "loadingHealth": "Loading Health",
    "providerOverrides": "Provider Overrides",
    "audioTranscriptionDesc": "Audio Transcription Desc",
    "learnedFromHeaders": "Learned From Headers",
    "totalRequests": "Total Requests",
    "cloudUnstableNote": "Cloud Unstable Note",
    "gamificationAdmin": "Pentadbir gamification",
    "monitorAnomaliesAndHealth": "Pantau anomali dan kesihatan sistem",
    "flaggedAnomalies": "Anomali Dibenderakan",
    "noAnomaliesDetected": "Tiada anomali dikesan",
    "apiKey": "Kunci API",
    "xpLastHour": "XP (1j)",
    "zScore": "Skor Z",
    "tokensCommunityServers": "Pelayan Komuniti",
    "tokensServerNamePlaceholder": "Nama pelayan",
    "tokensApiKeyPlaceholder": "kunci API",
    "tokensTokenBalance": "Baki Token",
    "tokensSendTokens": "Hantar Token",
    "tokensRecipientApiKeyId": "ID Kunci API Penerima",
    "tokensRecipientApiKeyIdPlaceholder": "Masukkan ID kunci API penerima",
    "tokensReasonOptional": "Sebab (pilihan)",
    "tokensReasonPlaceholder": "cth. bonus, ganjaran",
    "tokensTransactionHistory": "Sejarah Transaksi",
    "tokensNoTransactionsYet": "Tiada transaksi lagi",
    "tokensInviteCodes": "Kod Jemputan",
    "tokensMaxUses": "Kegunaan Maks",
    "tokensRedeemCode": "Tebus Kod",
    "tokensRedeemCodePlaceholder": "Masukkan kod jemputan",
    "tokensYourActiveInvites": "Jemputan Aktif Anda",
    "tierCoverageTitle": "Liputan peringkat",
    "tierCoverageSubtitle": "Pembekal dikonfigurasikan setiap peringkat sandaran",
    "batchDetailCopyId": "Salin ID",
    "batchDetailClose": "tutup",
    "batchDetailEndpoint": "Titik akhir",
    "batchDetailModel": "Model",
    "batchDetailWindow": "Tingkap",
    "batchDetailCreated": "Dicipta",
    "providerTopologyEmpty": "Tiada pembekal disambungkan lagi",
    "badgeToastUnlocked": "Lencana Dibuka!",
    "batchListSearchPlaceholder": "Cari mengikut ID, titik akhir, model…",
    "batchListDeleteAllCompletedTitle": "Padamkan semua kumpulan yang lengkap",
    "batchListBatchesTable": "kelompok",
    "changelogViewerLoading": "Memuatkan changelog daripada GitHub...",
    "profileLoading": "Memuatkan profil...",
    "profileHowToEarn": "Bagaimana untuk mendapatkan",
    "bootstrapBannerDismiss": "Tolak",
    "batchListDeleteBatchTitle": "Padamkan kumpulan dan failnya",
    "leaderboardYourRank": "Kedudukan anda",
    "leaderboardLoading": "Memuatkan papan pendahulu...",
    "batchFileDetailCopyId": "Salin ID",
    "batchFileDetailClose": "tutup",
    "batchFileDetailFailedToLoad": "Gagal memuatkan kandungan fail",
    "batchFilesListSearchPlaceholder": "Cari mengikut ID atau nama fail…",
    "batchFilesListFilesTable": "Fail",
    "batchPageLoadingMore": "Memuatkan lagi…",
    "recommended": "__MISSING__:Recommended",
    "batchConceptTitle": "Batch processing",
    "batchConceptSubtitle": "Process thousands of requests asynchronously at ~50% of the cost (24h window). Ideal for evaluations, classification, and embeddings.",
    "batchConceptHowItWorks": "How it works",
    "batchConceptBenefit50pct": "50% discount on input + output tokens",
    "batchConceptAsync24h": "Async with a 24h completion window",
    "batchConceptUseCases": "Best for bulk classification, evaluations, and embeddings",
    "filesConceptTitle": "Batch files",
    "filesConceptSubtitle": "JSONL files used by batches: input requests, results, and errors.",
    "filesConceptInput": "Input — your JSONL with one request per line",
    "filesConceptOutput": "Output — results from completed requests",
    "filesConceptError": "Errors — requests that failed",
    "filesConceptRetention": "Retention: 30 days by default (29 days on Anthropic)",
    "wizardTitle": "New batch",
    "wizardClose": "Close",
    "wizardNext": "Next",
    "wizardBack": "Back",
    "wizardCancel": "Cancel",
    "wizardCreate": "Create batch",
    "wizardCreating": "Creating…",
    "wizardStep1Destination": "Destination",
    "wizardStep2Input": "Input",
    "wizardStep3Validate": "Validate",
    "wizardStep4Cost": "Cost & create",
    "wizardProviderLabel": "Provider",
    "wizardEndpointLabel": "Endpoint",
    "wizardModelLabel": "Model",
    "wizardInputKindJsonl": "JSONL",
    "wizardInputKindCsv": "CSV (we'll convert)",
    "wizardDropOrPick": "Drop a file or click to pick",
    "wizardCsvMappingTitle": "Map CSV columns → request fields",
    "wizardCsvMappingAddField": "Add field",
    "wizardValidationOk": "All lines valid",
    "wizardValidationErrors": "Validation errors",
    "wizardValidationPreview": "Preview (first 5 requests)",
    "wizardValidationSamplingNote": "File is large — validated by sampling (first 1000 + last 100 lines). Full validation runs server-side.",
    "wizardCostSync": "Sync cost",
    "wizardCostBatch": "Batch cost (-50%)",
    "wizardCostSavings": "Savings",
    "wizardCostEstimatedNotice": "Estimated cost — real billing may vary.",
    "wizardErrorUpload": "Failed to upload file. Try again.",
    "wizardErrorCreate": "Failed to create batch. Try again.",
    "wizardEmptyProviders": "Connect a provider with batch support (OpenAI, Anthropic, or Gemini) to create a batch.",
    "uploadModalTitle": "Upload batch file",
    "uploadModalDropOrPick": "Drop a .jsonl file or click to pick",
    "uploadModalUpload": "Upload",
    "uploadModalCancel": "Cancel",
    "uploadModalError": "Upload failed. Try again.",
    "uploadModalSuccess": "Uploaded",
    "uploadModalSizeLimit": "Max 512 MB",
    "batchListNewButton": "New batch",
    "batchListAutoRefresh": "Auto-refresh 30s",
    "batchListCostColumn": "Cost",
    "batchActionCancel": "Cancel",
    "batchActionDownloadOutput": "Download output",
    "batchActionDownloadErrors": "Download errors",
    "batchActionRetry": "Retry failed",
    "batchActionRetryConfirm": "Retry {n} failed request(s)? Final cost depends on actual tokens consumed.",
    "expirationBadgeCritical": "Critical",
    "expirationBadgeWarning": "Soon",
    "expirationBadgeNormal": "Pending",
    "expirationBadgeExpired": "Expired",
    "filesListUploadButton": "Upload",
    "filesListUsedByColumn": "Used by",
    "filesListUsedByNone": "None",
    "filesListDelete": "Delete",
    "filesListDownload": "Download",
    "batchDetailActionCancel": "Cancel batch",
    "batchDetailActionRetry": "Retry failed requests",
    "batchDetailCancelling": "Cancelling…",
    "batchDetailRetrying": "Preparing retry…",
    "batchDetailCancelConfirm": "Cancel this batch? In-progress requests will stop.",
    "batchActionCancelError": "Failed to cancel batch. Try again.",
    "batchActionRetryError": "Failed to retry failed requests. Try again.",
    "batchConceptRetentionNote": "Results and error files are retained for 30 days (Anthropic: 29 days)",
    "filesListUsedByRoleInput": "input",
    "filesListUsedByRoleOutput": "output",
    "filesListUsedByRoleError": "error",
    "batchListProgressPartial": "(partial)",
    "filesListSizeColumn": "Size",
    "batchListProviderColumn": "Provider",
    "batchListProviderUnknown": "—",
    "batchListBatchCreated": "Batch {id} created — refreshing list…",
    "batchListBatchCreatedDismiss": "Dismiss",
    "batchListRefreshing": "Refreshing…",
    "batchListRefresh": "Refresh",
    "uploadFileModalRemove": "Remove",
    "uploadFileModalUploading": "Uploading…",
    "wizardInputReading": "Reading file…",
    "wizardInputReady": "Ready",
    "wizardInputLargeFileLabel": "Large file — sampling validation",
    "wizardInputCsvJsonlReady": "JSONL generated — ready to validate.",
    "wizardInputLargeFileWarning": "Large file detected — validation runs by sampling (first 5 MB + last 100 KB). Full validation happens server-side.",
    "wizardCostWindow24h": "24h completion window",
    "wizardValidationFieldsOk": "required fields valid",
    "batchListProviderOther": "Other",
    "batchListTitle": "Batches",
    "batchListCount": "{count} batches",
    "batchListRemovingCompleted": "Removing…",
    "batchListRemoveCompleted": "Remove completed",
    "batchListTableStatus": "Status",
    "batchListTableId": "ID",
    "batchListTableEndpoint": "Endpoint",
    "batchListTableModel": "Model",
    "batchListTableProgress": "Progress",
    "batchListTableCreated": "Created",
    "batchListTableExpires": "Expires",
    "batchListLoading": "Loading…",
    "batchListEmpty": "No batches found",
    "batchListValidating": "Validating…",
    "batchStatusAll": "All statuses",
    "batchStatusInProgress": "In progress",
    "batchStatusValidating": "Validating",
    "batchStatusFinalizing": "Finalizing",
    "batchStatusCompleted": "Completed",
    "batchStatusFailed": "Failed",
    "batchStatusCancelled": "Cancelled",
    "batchStatusCancelling": "Cancelling",
    "batchStatusExpired": "Expired",
    "batchStatusCompletedWithFailures": "completed with failures",
    "batchStatusInProgressWithFailures": "in progress (with failures)",
    "batchStatusFinalizingWithFailures": "finalizing (with failures)",
    "batchStatusCancelledWithFailures": "cancelled with failures",
    "batchStatusExpiredWithFailures": "expired (partial)",
    "wizardCostEstimating": "Estimating cost…",
    "wizardCostRequests": "Requests",
    "wizardCostInputTok": "input tok",
    "wizardCostOutputTok": "output tok",
    "wizardCostWindow": "Window",
    "wizardDestinationSelectProvider": "Select a provider…",
    "wizardDestinationSelectModel": "Select a model…",
    "wizardDestinationConnectProvider": "Connect a provider"
  },
  "sidebar": {
    "home": "Rumah",
    "dashboard": "Papan pemuka",
    "providers": "Pembekal",
    "combos": "Kombo",
    "usage": "Penggunaan",
    "analytics": "Analitis",
    "costs": "Kos",
    "health": "Kesihatan",
    "proxy": "Proksi",
    "limits": "Had & Kuota",
    "cliTools": "Alat CLI",
    "media": "Media",
    "settings": "tetapan",
    "translator": "Penterjemah",
    "playground": "Playground",
    "searchTools": "Search Tools",
    "agents": "Ejen",
    "cloudAgents": "Agen Awan",
    "memory": "Memory",
    "skills": "Skills",
    "omniSkills": "OmniSkills",
    "agentSkills": "AgentSkills",
    "docs": "Dokumen",
    "issues": "Isu",
    "endpoints": "Titik Akhir",
    "endpointsSubtitle": "URL sambungan AI anda",
    "apiManager": "Pengurus API",
    "apiManagerSubtitle": "Urus kunci dan akses API",
    "embeddedServices": "__MISSING__:Embedded Services",
    "embeddedServicesSubtitle": "__MISSING__:Manage local proxy services",
    "logs": "Log",
    "webhooks": "Webhooks",
    "webhooksSubtitle": "Dapatkan pemberitahuan tentang acara",
    "combosSubtitle": "Pembekal kumpulan untuk failover",
    "batchSubtitle": "Memproses berbilang permintaan",
    "contextCavemanSubtitle": "Pemampatan segera",
    "contextRtkSubtitle": "Penapisan output",
    "auditLog": "Log Audit",
    "shutdown": "Tutup",
    "restart": "Mulakan semula",
    "shutdownConfirm": "Tutup OmniRoute?",
    "restartConfirm": "Mulakan semula OmniRoute?",
    "version": "v{version}",
    "debug": "Nyahpepijat",
    "system": "Sistem",
    "help": "Tolong",
    "primarySection": "Main",
    "cliSection": "CLI",
    "debugSection": "Debug",
    "systemSection": "System",
    "helpSection": "Help",
    "serverDisconnected": "Pelayan Terputus Sambungan",
    "serverDisconnectedMsg": "Pelayan proksi telah dihentikan atau dimulakan semula.",
    "expandSidebar": "Kembangkan bar sisi",
    "collapseSidebar": "Runtuhkan bar sisi",
    "themes": "Themes",
    "presetColors": "Popular colors",
    "createTheme": "Create theme",
    "chooseColor": "Pick one color",
    "themeCoral": "Coral",
    "themeBlue": "Blue",
    "themeRed": "Red",
    "themeGreen": "Green",
    "themeViolet": "Violet",
    "themeOrange": "Orange",
    "themeCyan": "Cyan",
    "cliToolsShort": "Alat",
    "cache": "Cache",
    "cacheShort": "Cache",
    "batch": "Batch Jobs",
    "themeSystem": "Theme System",
    "whitelabelingDesc": "Whitelabeling Desc",
    "switchThemes": "Switch Themes",
    "themeAccentDesc": "Theme Accent Desc",
    "uploadFavicon": "Upload Favicon",
    "themeDark": "Theme Dark",
    "customLogoDesc": "Custom Logo Desc",
    "sidebarVisibilityToggle": "Sidebar Visibility Toggle",
    "themeAccent": "Theme Accent",
    "resetFavicon": "Reset Favicon",
    "whitelabeling": "Whitelabeling",
    "darkMode": "Dark Mode",
    "uploadLogo": "Upload Logo",
    "themeLight": "Theme Light",
    "appName": "App Name",
    "appNameDesc": "App Name Desc",
    "resetLogo": "Reset Logo",
    "customFavicon": "Custom Favicon",
    "hideHealthLogs": "Hide Health Logs",
    "customLogo": "Custom Logo",
    "appearance": "Appearance",
    "themeSelectionAria": "Theme Selection Aria",
    "themeCreate": "Theme Create",
    "customFaviconDesc": "Custom Favicon Desc",
    "logoPreview": "Logo Preview",
    "themeCustom": "Theme Custom",
    "hideHealthLogsDesc": "Hide Health Logs Desc",
    "faviconPreview": "Favicon Preview",
    "changelog": "Changelog",
    "contextSection": "Context & Cache",
    "contextCaveman": "Caveman",
    "contextRtk": "RTK",
    "contextCombos": "Engine Combos",
    "routingSection": "Routing",
    "protocolsSection": "Protocols",
    "agentsAiSection": "Agents & AI",
    "cacheContextSection": "Cache & Context",
    "analyticsSection": "Analytics",
    "costsSection": "Costs",
    "monitoringSection": "Monitoring",
    "auditSecuritySection": "Audit & Security",
    "devtoolsSection": "Dev Tools",
    "configurationSection": "Configuration",
    "aiFeaturesSection": "AI Features",
    "mcp": "MCP",
    "a2a": "A2A",
    "apiEndpoints": "API Endpoints",
    "batchFiles": "Files",
    "analyticsEvals": "Evals",
    "analyticsSearch": "Search",
    "analyticsUtilization": "Utilization",
    "analyticsComboHealth": "Combo Health",
    "analyticsCompression": "Compression",
    "costsBudget": "Budget",
    "costsQuotaShare": "Quota Sharing",
    "costsPricing": "Pricing",
    "logsProxy": "Proxy Logs",
    "logsConsole": "Console",
    "logsActivity": "Activity",
    "auditMcp": "MCP Audit",
    "auditA2a": "Audit A2A",
    "settingsGeneral": "General",
    "settingsAppearance": "Appearance",
    "settingsAi": "AI Settings",
    "settingsSecurity": "Security",
    "settingsFeatureFlags": "Bendera Ciri",
    "settingsAuthz": "__MISSING__:Authz",
    "settingsRouting": "Routing",
    "settingsResilience": "Resilience",
    "settingsAdvanced": "Advanced",
    "omniProxySection": "OmniProxy",
    "quotaTracker": "Provider Quota",
    "providerQuota": "Provider Quota",
    "runtime": "Runtime",
    "consoleLogs": "Console Logs",
    "globalRouting": "Global Routing",
    "mitmProxy": "MITM Proxy",
    "oneProxy": "1Proxy",
    "agenticFeaturesSection": "Agentic Features",
    "otherFeaturesSection": "Other Features",
    "compressionContextGroup": "Compression Context",
    "toolsGroup": "Tools",
    "integrationsGroup": "Integrations",
    "proxyGroup": "Proxy",
    "costsParametersGroup": "Costs Parameters",
    "auditGroup": "Audit",
    "batchGroup": "Batch",
    "homeSubtitle": "Dashboard overview",
    "providersSubtitle": "Manage AI providers",
    "quotaTrackerSubtitle": "Track usage limits",
    "providerQuotaSubtitle": "Track provider usage limits",
    "runtimeSubtitle": "Realtime resilience & sessions",
    "contextCombosSubtitle": "Combine compression engines",
    "cliToolsSubtitle": "Configure CLI runtimes",
    "agentsSubtitle": "Manage local agents",
    "cloudAgentsSubtitle": "Manage cloud-based agents",
    "apiEndpointsSubtitle": "Expose custom endpoints",
    "proxySubtitle": "HTTP proxy settings",
    "mitmProxySubtitle": "MITM interception",
    "oneProxySubtitle": "Public proxy gateway",
    "leaderboard": "Leaderboard",
    "profile": "Profile",
    "tokens": "Tokens",
    "leaderboardSubtitle": "Rankings and achievements",
    "profileSubtitle": "Account and preferences",
    "tokensSubtitle": "Token usage and budgets",
    "usageSubtitle": "Traffic and usage stats",
    "analyticsComboHealthSubtitle": "Combo target reliability",
    "analyticsUtilizationSubtitle": "Provider utilization",
    "costsSubtitle": "Spend breakdown",
    "cacheSubtitle": "Cache hit rates",
    "analyticsCompressionSubtitle": "Token savings stats",
    "analyticsSearchSubtitle": "Search tool analytics",
    "analyticsEvalsSubtitle": "Eval suite results",
    "logsSubtitle": "Application logs",
    "logsProxySubtitle": "Proxy traffic logs",
    "consoleLogsSubtitle": "Console output",
    "logsActivitySubtitle": "User activity log",
    "healthSubtitle": "System health check",
    "costsPricingSubtitle": "Per-model pricing rules",
    "costsBudgetSubtitle": "Budget limits",
    "costsQuotaShareSubtitle": "Share provider quotas across keys",
    "auditLogSubtitle": "Authorization audit",
    "auditMcpSubtitle": "MCP server audit",
    "auditA2aSubtitle": "A2A protocol audit",
    "translatorSubtitle": "Format conversion",
    "playgroundSubtitle": "Test prompts live",
    "searchToolsSubtitle": "Search tool registry",
    "memorySubtitle": "Persistent agent memory",
    "omniSkillsSubtitle": "Sandbox skill registry",
    "agentSkillsSubtitle": "A2A skill registry",
    "mcpSubtitle": "MCP server controls",
    "a2aSubtitle": "A2A protocol server",
    "mediaSubtitle": "Cached media files",
    "batchFilesSubtitle": "Batch input/output files",
    "settingsSubtitle": "All settings",
    "settingsGeneralSubtitle": "App basics",
    "settingsAppearanceSubtitle": "Theme and layout",
    "settingsAiSubtitle": "AI behavior defaults",
    "globalRoutingSubtitle": "Global routing rules",
    "settingsResilienceSubtitle": "Retries and breakers",
    "settingsAdvancedSubtitle": "Power user options",
    "settingsSecuritySubtitle": "Auth and encryption",
    "settingsFeatureFlagsSubtitle": "Togol keupayaan sistem",
    "settingsSidebar": "Sidebar",
    "settingsSidebarSubtitle": "Customize sidebar layout",
    "settingsAuthzSubtitle": "__MISSING__:Route inventory and bypass policy",
    "docsSubtitle": "Documentation",
    "issuesSubtitle": "Report a bug",
    "changelogSubtitle": "Release notes"
  },
  "webhooks": {
    "title": "Webhooks",
    "description": "Konfigurasikan panggilan balik HTTP untuk acara sistem.",
    "configuredWebhooks": "Webhook yang dikonfigurasikan",
    "configuredWebhooksDesc": "Urus titik akhir penghantaran, acara yang dilanggan, status dan hantaran ujian.",
    "addWebhook": "Tambah Webhook",
    "editWebhook": "Edit Webhook",
    "name": "Nama",
    "namePlaceholder": "Pemantauan pengeluaran",
    "unnamedWebhook": "webhook tanpa nama",
    "url": "URL titik akhir",
    "events": "Peristiwa",
    "allEvents": "Semua acara",
    "secret": "Rahsia",
    "secretPlaceholder": "Biarkan kosong untuk menjana rahsia secara automatik",
    "secretEditPlaceholder": "Biarkan kosong untuk menyimpan rahsia semasa",
    "status": "Status",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "errored": "Ralat",
    "total": "Jumlah",
    "lastTriggered": "Tercetus Terakhir",
    "actions": "Tindakan",
    "enabled": "Didayakan",
    "enabledDesc": "Webhook yang dilumpuhkan kekal disimpan tetapi tidak menerima penghantaran.",
    "refresh": "Muat semula",
    "loading": "Memuatkan webhook...",
    "never": "tidak pernah",
    "failureCount": "{count, plural, =0 {no failures} one {# failure} other {# failures}}",
    "testWebhook": "Hantar Ujian",
    "testSuccess": "Ujian webhook berjaya dihantar.",
    "testFailed": "Ujian webhook gagal.",
    "saveSuccess": "Webhook berjaya disimpan.",
    "saveFailed": "Gagal menyimpan webhook.",
    "loadFailed": "Gagal memuatkan webhooks.",
    "delete": "Padam",
    "deleteConfirm": "Adakah anda pasti mahu memadamkan webhook ini?",
    "deleteSuccess": "Webhook berjaya dipadamkan.",
    "deleteFailed": "Gagal memadamkan webhook.",
    "edit": "Sunting",
    "enable": "Dayakan",
    "disable": "Lumpuhkan",
    "noWebhooks": "Tiada webhook dikonfigurasikan lagi.",
    "signatureTitle": "Tandatangan Webhook",
    "signatureDescription": "Setiap penghantaran termasuk pengepala X-Webhook-Signature yang ditandatangani dengan HMAC-SHA256 menggunakan rahsia webhook. Sahkan tandatangan sebelum mempercayai muatan.",
    "wizard": {
      "cancel": "__MISSING__:Cancel",
      "step1Title": "__MISSING__:Select Integration",
      "step2Title": "__MISSING__:Configure Target",
      "step3Title": "__MISSING__:Events & Test",
      "back": "__MISSING__:Back",
      "next": "__MISSING__:Next",
      "finish": "__MISSING__:Finish",
      "step1Desc": "__MISSING__:Select the target integration system for this webhook."
    },
    "howItWorks": {
      "step1": "__MISSING__:Choose an integration provider (e.g. Slack, Discord, custom webhook) and set up the connection details.",
      "step2": "__MISSING__:Configure system events to subscribe to (e.g. completion errors, model fallbacks, or usage limits).",
      "step3": "__MISSING__:Verify the configuration by sending a test payload to make sure the endpoint receives it.",
      "step4": "__MISSING__:Secure your endpoint by validating the X-Webhook-Signature HMAC-SHA256 header using the webhook's secret.",
      "title": "__MISSING__:How Webhooks Work",
      "customOnly": "__MISSING__:Only applicable for custom endpoint integrations.",
      "hmacRecipeTitle": "__MISSING__:HMAC Verification Recipe",
      "hmacRecipe": "__MISSING__:To verify webhook payloads in Node.js, compute the HMAC-SHA256 of the raw request body using your secret key. Compare it to the X-Webhook-Signature header using timingSafeEqual.",
      "timeoutNote": "__MISSING__:Webhook deliveries have a timeout of 10 seconds.",
      "retryNote": "__MISSING__:Failed deliveries are retried up to 5 times with exponential backoff.",
      "docsLink": "__MISSING__:Read the full Webhooks developer guide",
      "hmacRecipePython": "__MISSING__:Python HMAC verification: hmac.new(secret, body, hashlib.sha256).hexdigest()",
      "hmacRecipeBash": "__MISSING__:Bash HMAC verification: echo -n \"$body\" | openssl dgst -sha256 -hmac \"$secret\""
    },
    "deliveries": {
      "title": "__MISSING__:Delivery Logs",
      "loadFailed": "__MISSING__:Failed to load webhook delivery logs.",
      "empty": "__MISSING__:No deliveries recorded yet. Trigger an event or send a test payload.",
      "status": "__MISSING__:Status",
      "event": "__MISSING__:Event",
      "latency": "__MISSING__:Latency",
      "at": "__MISSING__:Sent At"
    },
    "kinds": {
      "comingSoon": "__MISSING__:Coming Soon",
      "slack": "__MISSING__:Slack",
      "slackDesc": "__MISSING__:Post system events directly into a Slack channel",
      "telegram": "__MISSING__:Telegram",
      "telegramDesc": "__MISSING__:Send event messages using a Telegram bot",
      "discord": "__MISSING__:Discord",
      "discordDesc": "__MISSING__:Deliver real-time updates directly to a Discord server",
      "custom": "__MISSING__:Custom Webhook",
      "customDesc": "__MISSING__:Deliver system event payloads to any HTTPS endpoint",
      "email": "__MISSING__:Email Notification",
      "emailDesc": "__MISSING__:Receive summary updates via email",
      "pagerduty": "__MISSING__:PagerDuty",
      "pagerdutyDesc": "__MISSING__:Trigger alerts on PagerDuty for critical system issues",
      "teams": "__MISSING__:Microsoft Teams",
      "teamsDesc": "__MISSING__:Forward system notifications to Microsoft Teams channels"
    },
    "testPayloadSent": "__MISSING__:Test Payload Sent",
    "testResponse": "__MISSING__:Test Response",
    "validateUrl": {
      "checking": "__MISSING__:Checking URL...",
      "ok": "__MISSING__:URL is valid",
      "blockedPrivate": "__MISSING__:URL is a blocked private address",
      "invalidUrl": "__MISSING__:Invalid URL format"
    },
    "custom": {
      "endpointUrl": "__MISSING__:Endpoint URL",
      "endpointUrlPlaceholder": "__MISSING__:https://api.yourdomain.com/webhook",
      "secretKey": "__MISSING__:Secret Key",
      "secretKeyPlaceholder": "__MISSING__:Enter secret key or leave blank to auto-generate",
      "secretKeyHint": "__MISSING__:Used to sign the payload header for authentication."
    },
    "discord": {
      "webhookUrl": "__MISSING__:Discord Webhook URL",
      "webhookUrlPlaceholder": "__MISSING__:https://discord.com/api/webhooks/...",
      "webhookUrlHint": "__MISSING__:The webhook URL copied from your Discord channel integration settings.",
      "tutorial": "__MISSING__:How to create a Discord webhook:"
    },
    "slack": {
      "webhookUrl": "__MISSING__:Slack Webhook URL",
      "webhookUrlPlaceholder": "__MISSING__:https://hooks.slack.com/services/...",
      "webhookUrlHint": "__MISSING__:The webhook URL copied from your Slack Incoming Webhooks integration.",
      "tutorial": "__MISSING__:How to create a Slack webhook:"
    },
    "telegram": {
      "botToken": "__MISSING__:Telegram Bot Token",
      "botTokenPlaceholder": "__MISSING__:123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ",
      "botTokenHint": "__MISSING__:The HTTP API token received from @BotFather when creating your bot.",
      "chatId": "__MISSING__:Telegram Chat ID / Channel",
      "chatIdPlaceholder": "__MISSING__:-100123456789 or @channelname",
      "chatIdHint": "__MISSING__:The unique numerical identifier or public username of the chat/channel.",
      "tutorial": "__MISSING__:How to configure Telegram webhook:"
    }
  },
  "compliance": {
    "auditTitle": "Audit",
    "auditDescription": "Semak peristiwa pematuhan dan panggilan alat MCP daripada satu pandangan operasi.",
    "complianceTab": "Pematuhan",
    "mcpTab": "Audit MCP",
    "title": "Audit Pematuhan",
    "description": "Peristiwa dasar, akses, pembekal dan keselamatan yang direkodkan oleh log audit pematuhan.",
    "eventType": "Jenis Acara",
    "eventTypePlaceholder": "Tapis mengikut tindakan atau jenis acara",
    "severity": "Keterukan",
    "allSeverities": "Semua keterukan",
    "info": "info",
    "warning": "Amaran",
    "critical": "kritikal",
    "sourceIp": "IP sumber",
    "userOrKey": "Pengguna / Kunci",
    "action": "Tindakan",
    "result": "Hasilnya",
    "details": "Butiran",
    "timestamp": "Cap masa",
    "from": "daripada",
    "to": "Kepada",
    "refresh": "Muat semula",
    "export": "Eksport",
    "clearFilters": "Kosongkan penapis",
    "loading": "Memuatkan acara audit...",
    "showing": "Menunjukkan {count} daripada {total} acara",
    "policyViolation": "Pelanggaran Dasar",
    "accessDenied": "Akses Ditolak",
    "injectionBlocked": "Suntikan Disekat",
    "noEvents": "Tiada peristiwa pematuhan direkodkan.",
    "failedFetch": "Gagal mengambil log audit pematuhan.",
    "viewDetails": "Lihat butiran",
    "closeDetails": "Tutup butiran",
    "notAvailable": "—",
    "system": "sistem",
    "previous": "Sebelumnya",
    "next": "Seterusnya",
    "mcpAudit": "Audit MCP",
    "mcpAuditDesc": "Entri audit panggilan alat direkodkan oleh pelayan MCP.",
    "failedFetchMcpAudit": "Gagal mengambil log audit MCP.",
    "tool": "alat",
    "toolPlaceholder": "Tapis mengikut nama alat",
    "duration": "Tempoh",
    "apiKey": "Kunci API",
    "output": "Keluaran",
    "allResults": "Semua keputusan",
    "success": "Kejayaan",
    "failure": "Kegagalan",
    "noMcpEvents": "Tiada peristiwa audit MCP direkodkan.",
    "a2aAudit": "Audit A2A",
    "a2aAuditDesc": "Jejak audit pelaksanaan tugas yang direkodkan oleh pelayan A2A.",
    "a2aShowingTasks": "Menunjukkan {count} daripada {total} tugasan",
    "a2aSkill": "Kemahiran",
    "a2aSkillPlaceholder": "Tapis mengikut nama kemahiran",
    "a2aState": "negeri",
    "a2aAllStates": "Semua negeri",
    "a2aStateSubmitted": "diserahkan",
    "a2aStateWorking": "sedang bekerja",
    "a2aStateCompleted": "Selesai",
    "a2aStateFailed": "gagal",
    "a2aStateCancelled": "Dibatalkan",
    "a2aTaskId": "ID tugas",
    "a2aEvents": "Peristiwa",
    "a2aArtifacts": "Artifak",
    "a2aNoTasks": "Tiada tugas A2A direkodkan.",
    "a2aLoadingTasks": "Memuatkan tugas A2A..."
  },
  "themesPage": {
    "title": "Themes",
    "description": "Choose a preset theme or create your own with a single color",
    "presetColors": "Popular colors",
    "customTheme": "Custom theme",
    "customThemeDesc": "Click create theme and pick one color",
    "createTheme": "Create theme",
    "activePreset": "Active theme"
  },
  "header": {
    "logout": "Log keluar",
    "language": "Bahasa",
    "providers": "Pembekal",
    "providerDescription": "Urus sambungan pembekal AI anda",
    "combos": "Kombo",
    "comboDescription": "Gabungan model dengan sandaran",
    "usage": "Penggunaan & Analitis",
    "usageDescription": "Pantau penggunaan API anda, penggunaan token dan log permintaan",
    "analytics": "Analitis",
    "analyticsDescription": "Carta, arah aliran dan cerapan penilaian",
    "cliTools": "Alat CLI",
    "cliToolsDescription": "Konfigurasikan alatan CLI",
    "home": "Rumah",
    "homeDescription": "Selamat datang ke OmniRoute",
    "endpoint": "Endpoints",
    "endpointDescription": "Manage proxy endpoints, MCP, A2A, and API endpoints",
    "mcp": "MCP",
    "mcpDescription": "Model Context Protocol server management and tools",
    "a2a": "A2A",
    "a2aDescription": "Agent-to-Agent protocol tasks and observability",
    "settings": "tetapan",
    "settingsDescription": "Urus pilihan anda",
    "openaiCompatible": "Serasi OpenAI",
    "anthropicCompatible": "Serasi Anthropic",
    "media": "Media",
    "mediaDescription": "Generate images, videos, and music",
    "themes": "Themes",
    "themesDescription": "Choose a color theme for the whole dashboard panel",
    "costsDescription": "Track spending, analyze trends, and manage your AI budget across all providers",
    "cacheDescription": "Monitor provider prompt cache efficiency and local semantic response reuse.",
    "limitsDescription": "Configure rate limits and quotas per API key and provider",
    "runtimeDescription": "Live runtime observability — circuit breakers, cooldowns, model lockouts, sessions and quota alerts",
    "apiManagerDescription": "Manage API keys and access control for your OmniRoute instance",
    "batchDescription": "Process large volumes of requests asynchronously with batched API calls",
    "contextCavemanDescription": "Rule-based message compression, language packs, analytics and output mode controls.",
    "contextRtkDescription": "Command-aware compression for tool output, terminal logs and build results.",
    "contextCombosDescription": "Define how engines are combined for different routing scenarios.",
    "changelogDescription": "Stay up to date with the latest platform features and announcements.",
    "agentsDescription": "Manage and configure AI agent tools: Codex, Devin, Jules, and custom agents",
    "cloudAgentsDescription": "Orchestrate cloud-based AI agents with live task tracking and plan approval",
    "memoryDescription": "Persistent conversational memory with semantic search and FTS5 full-text indexing",
    "skillsDescription": "Install and manage sandbox skills for automated prompt and tool execution",
    "agentSkillsDescription": "Agent-ready skills catalog with one-click URL copy for AI client integration",
    "translatorDescription": "Translate and test prompts across API formats: OpenAI ↔ Claude ↔ Gemini",
    "playgroundDescription": "Test prompts interactively with live provider responses and format inspection",
    "searchToolsDescription": "Search analytics, provider breakdown, cache hit rates, and cost tracking",
    "logsDescription": "Real-time request logs, error traces, and streaming event inspector",
    "auditDescription": "Compliance audit trail of API key usage, MCP tool calls, and policy events",
    "webhooksDescription": "Configure webhook endpoints to receive real-time event notifications",
    "healthDescription": "System health overview: providers, circuit breakers, rate limits, and database",
    "proxyDescription": "Configure upstream proxy settings for outbound provider connections",
    "apiEndpointsDescription": "Manage custom API endpoint configurations and routing overrides",
    "batchFilesDescription": "Browse and manage batch job output files and results",
    "analyticsEvalsDescription": "Model evaluation results and performance benchmarks",
    "analyticsSearchDescription": "Search query analytics, cache hit rates, and cost tracking",
    "analyticsUtilizationDescription": "Provider utilization metrics and capacity planning",
    "analyticsComboHealthDescription": "Real-time health and performance of combo routing configurations",
    "analyticsCompressionDescription": "Context compression analytics and token savings",
    "costsBudgetDescription": "Budget limits and spending alerts per API key and provider",
    "costsPricingDescription": "Custom pricing configuration for token cost calculations",
    "logsProxyDescription": "Upstream proxy request logs and traffic inspection",
    "logsConsoleDescription": "Application console output and debug logs",
    "logsActivityDescription": "Audit trail of user actions and system events",
    "auditMcpDescription": "MCP tool invocation audit trail and compliance records",
    "auditA2a": "Audit A2A",
    "auditA2aDescription": "Jejak audit pelaksanaan tugas A2A, peralihan negeri dan rekod permohonan kemahiran",
    "settingsGeneralDescription": "Storage, database, and general instance configuration",
    "settingsAppearanceDescription": "Theme, branding, and visual customization",
    "settingsAiDescription": "AI behaviors, thinking budgets, vision, and memory settings",
    "settingsSecurityDescription": "Authentication, authorization, and access control settings",
    "featureFlags": "Bendera Ciri",
    "featureFlagsDescription": "Keupayaan sistem kawalan dan ciri eksperimen",
    "featureFlagsActive": "{count} aktif",
    "featureFlagsInactive": "{count} tidak aktif",
    "featureFlagsOverrides": "{count} DB menimpa",
    "featureFlagsSearch": "Cari bendera...",
    "featureFlagsCategoryAll": "Semua",
    "featureFlagsCategorySecurity": "Keselamatan",
    "featureFlagsCategoryNetwork": "Rangkaian",
    "featureFlagsCategoryPolicies": "dasar",
    "featureFlagsCategoryRuntime": "Masa jalan",
    "featureFlagsCategoryCli": "CLI",
    "featureFlagsCategoryHealth": "Kesihatan",
    "featureFlagsSourceDb": "DB",
    "featureFlagsSourceEnv": "ENV",
    "featureFlagsSourceDefault": "DEF",
    "featureFlagsReset": "Tetapkan semula",
    "featureFlagsResetAll": "Tetapkan Semula Semua Penggantian",
    "featureFlagsResetAllConfirm": "Adakah anda pasti mahu menetapkan semula semua penggantian bendera ciri? Ini akan mengembalikan semua bendera kepada ENV atau nilai lalainya.",
    "featureFlagsRestartRequired": "Mulakan semula diperlukan untuk memohon",
    "featureFlagsNoResults": "Tiada bendera yang sepadan dengan carian anda",
    "featureFlagsSaved": "Bendera dikemas kini",
    "featureFlagsError": "Gagal mengemas kini bendera",
    "settingsRoutingDescription": "Routing rules, model aliases, combo defaults, and degradation settings",
    "settingsResilienceDescription": "Circuit breaker, retry, and fallback configuration",
    "settingsAdvancedDescription": "Advanced payload rules, request limits, and proxy API settings",
    "mitmProxyDescription": "Configure MITM proxy settings for traffic inspection and debugging",
    "oneProxyDescription": "Configure 1Proxy settings for advanced proxy chaining"
  },
  "home": {
    "quickStart": "Mula Pantas",
    "quickStartDesc": "Bangun dan berlari dalam 4 langkah. Sambungkan pembekal, model laluan, pantau segala-galanya.",
    "fullDocs": "Dokumen Penuh",
    "step1Title": "1. Cipta kunci API",
    "step1Desc": "Pergi ke <endpoint>Endpoint</endpoint> -> Kunci Berdaftar. Hasilkan satu kunci bagi setiap persekitaran.",
    "step2Title": "2. Sambungkan pembekal",
    "step2Desc": "Tambahkan akaun dalam <providers>Providers</providers>. Menyokong OAuth, Kunci API dan peringkat percuma.",
    "step3Title": "3. Arahkan pelanggan anda",
    "step3Desc": "Tetapkan URL asas kepada {url} dalam klien IDE atau API anda.",
    "step4Title": "4. Pantau & optimumkan",
    "step4Desc": "Jejaki token, kos dan ralat dalam <logs>Log Permintaan</logs> dan <analytics>Analytics</analytics>.",
    "providersOverview": "Gambaran Keseluruhan Penyedia",
    "configuredOf": "{configured} dikonfigurasikan daripada {total} pembekal yang tersedia",
    "noModelsAvailable": "Tiada model tersedia untuk pembekal ini.",
    "noProvidersConfigured": "Tiada pembekal dikonfigurasikan lagi",
    "addProvider": "Tambah pembekal",
    "configureFirst": "Konfigurasikan sambungan dahulu dalam {providers}",
    "configureProvider": "Konfigurasikan Pembekal",
    "modelAvailable": "{count} model tersedia",
    "modelsAvailable": "{count} model tersedia",
    "connectionsActive": "{count} sambungan aktif",
    "connectionsActivePlural": "{count} sambungan aktif",
    "copyModelName": "Salin nama model",
    "documentation": "Dokumentasi",
    "healthMonitor": "Pemantau Kesihatan",
    "reportIssue": "Laporkan isu",
    "activeError": "{active} aktif · {errors} ralat",
    "oauthLabel": "OAuth",
    "apiKeyLabel": "Kunci API",
    "requestsShort": "{count} permintaan",
    "providerModelsTitle": "{provider} - Model",
    "copiedModel": "Disalin: {model}",
    "aliasLabel": "alias",
    "updateNow": "Kemas kini Sekarang",
    "updating": "Mengemas kini...",
    "updateAvailableDesc": "Versi baharu tersedia. Klik untuk mengemas kini.",
    "updateStarted": "Kemas kini bermula...",
    "reloadingPageAutomatically": "Memuat semula halaman secara automatik...",
    "providerTopology": "Topologi Pembekal"
  },
  "analytics": {
    "title": "Analitis",
    "usageAnalyticsTitle": "__MISSING__:Usage Analytics",
    "diversityScoreTitle": "Kepelbagaian Pembekal",
    "diversityScoreDesc": "__MISSING__:Provider concentration snapshot for the recent traffic window.",
    "diversityShannonEntropy": "__MISSING__:Shannon entropy",
    "diversityWindow": "__MISSING__:Window: {count} reqs · Last {mins} mins",
    "diversityHealthy": "__MISSING__:Healthy Distribution",
    "diversityRiskHigh": "__MISSING__:High Vendor Lock-in Risk",
    "diversityRiskModerate": "__MISSING__:Moderate Distribution",
    "diversityScoreLabel": "__MISSING__:score",
    "diversityHigherExplanation": "__MISSING__:Higher values mean traffic is spread across multiple providers.",
    "diversityNoData": "__MISSING__:No recent usage data available.",
    "chartRequests": "__MISSING__:Requests",
    "chartInput": "__MISSING__:Input",
    "chartOutput": "__MISSING__:Output",
    "chartTotal": "__MISSING__:Total",
    "chartCost": "__MISSING__:Cost",
    "chartShare": "__MISSING__:Share",
    "chartServiceTier": "__MISSING__:Service Tier",
    "chartServiceTierSplit": "__MISSING__:Fast / Standard cost split",
    "chartCostPct": "__MISSING__:{pct}% of cost",
    "chartUsageDetail": "__MISSING__:Usage Detail",
    "chartCacheRead": "__MISSING__:Cache read",
    "chartCostByProvider": "__MISSING__:Cost by Provider",
    "chartNoCostData": "__MISSING__:No cost data",
    "chartModelUsageOverTime": "__MISSING__:Model Usage Over Time",
    "chartNoData": "__MISSING__:No data",
    "chartWeekly": "__MISSING__:Weekly",
    "chartModelBreakdown": "__MISSING__:Model Breakdown",
    "chartModel": "__MISSING__:Model",
    "chartProvider": "__MISSING__:Provider",
    "chartProviderBreakdown": "__MISSING__:Provider Breakdown",
    "filterAllKeys": "__MISSING__:All Keys",
    "filterSearchKeys": "__MISSING__:Search keys…",
    "filterNoKeysMatch": "__MISSING__:No keys match",
    "filterOneKey": "__MISSING__:1 key",
    "filterMultipleKeys": "__MISSING__:{count} keys",
    "rangeToday": "__MISSING__:Today",
    "rangeYesterday": "__MISSING__:Yesterday",
    "rangeLast3Days": "__MISSING__:Last 3 days",
    "rangeThisWeek": "__MISSING__:This week",
    "rangeLast14Days": "__MISSING__:Last 14 days",
    "rangeThisMonth": "__MISSING__:This month",
    "rangeQuickSelect": "__MISSING__:Quick Select",
    "rangeStart": "__MISSING__:Start",
    "rangeEnd": "__MISSING__:End",
    "rangeCancel": "__MISSING__:Cancel",
    "rangeApply": "__MISSING__:Apply",
    "rangeErrorInvalid": "__MISSING__:Start must be before end",
    "period1D": "__MISSING__:1D",
    "period7D": "__MISSING__:7D",
    "period30D": "__MISSING__:30D",
    "period90D": "__MISSING__:90D",
    "periodYTD": "__MISSING__:YTD",
    "periodAll": "__MISSING__:All",
    "totalTokens": "__MISSING__:Total Tokens",
    "inputTokens": "__MISSING__:Input Tokens",
    "outputTokens": "__MISSING__:Output Tokens",
    "estCost": "__MISSING__:Est. Cost",
    "infraTitle": "__MISSING__:Infrastructure",
    "infraAccounts": "__MISSING__:Accounts",
    "infraProviders": "__MISSING__:Providers",
    "infraApiKeys": "__MISSING__:API Keys",
    "infraModels": "__MISSING__:Models",
    "perfTitle": "__MISSING__:Performance",
    "perfAvgTokens": "__MISSING__:Avg Tokens/Req",
    "perfCostReq": "__MISSING__:Cost/Req",
    "perfIoRatio": "__MISSING__:I/O Ratio",
    "perfFastReq": "__MISSING__:Fast Requests",
    "highlightsTitle": "__MISSING__:Highlights",
    "highlightsTopModel": "__MISSING__:Top Model",
    "highlightsTopProvider": "__MISSING__:Top Provider",
    "highlightsBusiestDay": "__MISSING__:Busiest Day",
    "highlightsDiversity": "__MISSING__:Diversity",
    "highlightsFallbackRate": "__MISSING__:Fallback Rate",
    "customRange": "__MISSING__:Custom",
    "overviewDescription": "Pantau corak penggunaan API anda, penggunaan token, kos dan aliran aktiviti merentas semua pembekal dan model.",
    "evalsDescription": "Jalankan suite penilaian untuk menguji dan mengesahkan titik akhir LLM anda. Bandingkan kualiti model, mengesan regresi dan kependaman penanda aras.",
    "overview": "Gambaran keseluruhan",
    "evals": "Evals",
    "utilization": "Pemanfaatan",
    "utilizationDescription": "Tren penggunaan kuota pembekal dan penjejakan had kadar",
    "modelStatus": "Status Model",
    "modelStatusCooldown": "Cooldown",
    "modelStatusUnavailable": "Tidak tersedia",
    "modelStatusError": "ralat",
    "comboHealth": "Kesihatan Combo",
    "comboHealthDescription": "Kuota peringkat combo, pengagihan penggunaan dan metrik prestasi",
    "compressionAnalyticsTitle": "Compression Analytics",
    "compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats.",
    "autoRoutingTotalAutoRequests": "Jumlah Permintaan Auto",
    "autoRoutingAvgSelectionScore": "Purata Skor Pemilihan",
    "autoRoutingExplorationRate": "Kadar Penerokaan",
    "autoRoutingLkgpHitRate": "Kadar Hit LKGP",
    "autoRoutingRequestsByVariant": "Permintaan mengikut Varian",
    "autoRoutingTopRoutedProviders": "Pembekal Laluan Teratas",
    "comboHealthWorstQuotaLeft": "Baki kuota paling teruk",
    "comboHealthUsageSkew": "Penggunaan condong",
    "comboHealthSuccessRate": "Kadar kejayaan",
    "comboHealthQuotaHealth": "Kesihatan kuota",
    "comboHealthRequests": "Permintaan",
    "comboHealthTokens": "Token",
    "comboHealthAvgLatency": "Purata kependaman",
    "comboHealthTotalRequests": "Jumlah permintaan",
    "comboHealthExecutionTargets": "Sasaran pelaksanaan",
    "comboHealthSuccess": "Kejayaan",
    "comboHealthLatency": "Latensi",
    "comboHealthQuota": "Kuota",
    "comboHealthTitle": "Kesihatan kombo",
    "comboHealthUnableToLoad": "Tidak dapat memuatkan kesihatan kombo",
    "comboHealthGettingStarted": "Bermula",
    "compressionAnalyticsTotalRequests": "Jumlah Permintaan",
    "compressionAnalyticsTokensSaved": "Token Disimpan",
    "compressionAnalyticsAvgSavings": "Purata Simpanan",
    "compressionAnalyticsAvgDuration": "Purata Tempoh",
    "compressionAnalyticsReceipts": "resit",
    "compressionAnalyticsFallbacks": "Fallbacks",
    "compressionAnalyticsPromptTokens": "Token segera",
    "compressionAnalyticsCompletionTokens": "Token penyiapan",
    "compressionAnalyticsTotalTokens": "Jumlah token",
    "compressionAnalyticsCacheTokens": "Token cache",
    "compressionAnalyticsNoDataYet": "Tiada data mampatan lagi",
    "searchAnalyticsTotalSearches": "Jumlah Carian",
    "searchAnalyticsCacheHitRate": "Kadar Hit Cache",
    "searchAnalyticsTotalCost": "Jumlah Kos",
    "searchAnalyticsAvgResponse": "Purata Respons",
    "searchAnalyticsNoSearchesYet": "Tiada carian lagi",
    "providerUtilizationTitle": "Penggunaan pembekal",
    "providerUtilizationFailedToLoad": "Gagal memuatkan data penggunaan",
    "providerUtilizationNoData": "Tiada data penggunaan tersedia",
    "providerUtilizationGettingStarted": "Bermula",
    "providerUtilizationLatestSnapshot": "Gambar kuota terkini",
    "providerUtilizationRemainingCapacity": "Baki kapasiti"
  },
  "apiManager": {
    "title": "Kunci API",
    "createKey": "Cipta Kunci API",
    "key": "kunci",
    "revokeKey": "Batalkan Kunci",
    "revokeConfirm": "Adakah anda pasti mahu membatalkan kunci API ini?",
    "noKeys": "Tiada kunci API lagi",
    "noKeysDesc": "Cipta kunci API pertama anda untuk mengesahkan permintaan ke titik akhir anda",
    "keyLabel": "Label Kunci",
    "permissions": "kebenaran",
    "expiresAt": "tamat tempoh",
    "never": "tidak pernah",
    "revoke": "Batalkan",
    "showKey": "Tunjukkan Kunci",
    "hideKey": "Sembunyikan Kunci",
    "copyKey": "Salin Kunci API",
    "allModels": "Semua model",
    "selectedModels": "Model Terpilih",
    "readOnly": "Baca Sahaja",
    "fullAccess": "Akses Penuh",
    "keyManagement": "Pengurusan Kunci API",
    "keyManagementDesc": "Buat dan urus kunci API untuk mengesahkan permintaan ke titik akhir anda",
    "totalKeys": "Jumlah Kunci",
    "restricted": "Terhad",
    "totalRequests": "Jumlah Permintaan",
    "modelsAvailable": "Model Tersedia",
    "registeredKeys": "Kunci Berdaftar",
    "keysRegistered": "{count} kunci didaftarkan",
    "keyRegistered": "{count} kunci didaftarkan",
    "keysSecurityNote": "Setiap kunci mengasingkan penjejakan penggunaan dan boleh dibatalkan secara bebas. Kunci ditutup selepas penciptaan untuk keselamatan.",
    "createFirstKey": "Cipta Kunci Pertama Anda",
    "name": "Nama",
    "usage": "Penggunaan",
    "created": "Dicipta",
    "actions": "Tindakan",
    "reqs": "reqs",
    "neverUsed": "Tidak pernah digunakan",
    "deleteConfirm": "Padamkan kunci API ini?",
    "usageTips": "Petua Penggunaan",
    "tipAuth": "Gunakan kunci API dalam pengepala Kebenaran sebagai Pembawa YOUR_KEY",
    "tipSecure": "Kunci hanya ditunjukkan sekali semasa penciptaan — simpannya dengan selamat",
    "tipSeparate": "Buat kunci berasingan untuk pelanggan atau persekitaran yang berbeza",
    "tipRestrict": "Hadkan kunci kepada model tertentu untuk keselamatan dan kawalan kos yang lebih baik",
    "keyName": "Nama Kunci",
    "keyNamePlaceholder": "cth., Kunci Pengeluaran, Kunci Pembangunan",
    "keyNameDesc": "Pilih nama deskriptif untuk mengenal pasti tujuan kunci ini",
    "managementAccessDesc": "Benarkan kunci API ini mengurus konfigurasi OmniRoute.",
    "selfServiceVisibility": "Keterlihatan layan diri",
    "selfServiceVisibilityDesc": "Kawal perkara yang boleh dilihat oleh kunci ini tentang penggunaannya sendiri dan kuota upstream kongsi.",
    "ownUsageVisibility": "Kos dan penggunaan token sendiri",
    "ownUsageVisibilityDesc": "Benarkan kunci ini memanggil endpoint statusnya untuk melihat penggunaan USD, peratus bajet dan jumlah tokennya sendiri.",
    "sharedAccountQuotaVisibility": "Kuota akaun kongsi",
    "sharedAccountQuotaVisibilityDesc": "Benarkan kunci ini melihat kuota akaun upstream kongsi apabila satu sambungan eksplisit dikonfigurasi.",
    "keyCreated": "Kunci API Dicipta",
    "keyCreatedSuccess": "Kunci berjaya dibuat!",
    "keyCreatedNote": "Salin dan simpan kunci ini sekarang — ia tidak akan ditunjukkan lagi.",
    "done": "Selesai",
    "savePermissions": "Simpan Kebenaran",
    "endpointRestrictions": "__MISSING__:Allowed Endpoints",
    "allEndpointsAllowed": "__MISSING__:This key can access all API endpoints.",
    "endpointsRestricted": "__MISSING__:Restricted to {count} endpoint{count, plural, one {} other {s}}.",
    "autoResolve": "Auto-Resolve",
    "autoResolveDesc": "Auto-resolve ambiguous model names to native provider for this API key.",
    "keyActive": "Key Active",
    "keyActiveDesc": "Enable or disable this API key. Disabled keys are immediately rejected with 403.",
    "accessSchedule": "Access Schedule",
    "accessScheduleDesc": "Restrict access to specific hours and days of the week.",
    "scheduleFrom": "From",
    "scheduleUntil": "Until",
    "scheduleDays": "Days",
    "scheduleTimezone": "Timezone",
    "scheduleTimezoneHint": "Use IANA timezone names, e.g. America/New_York, Europe/Berlin",
    "scheduleActive": "Schedule",
    "disabled": "Disabled",
    "daySun": "Sun",
    "dayMon": "Mon",
    "dayTue": "Tue",
    "dayWed": "Wed",
    "dayThu": "Thu",
    "dayFri": "Fri",
    "daySat": "Sat",
    "allowAll": "Benarkan Semua",
    "restrict": "Sekat",
    "allowAllInfo": "Kunci ini boleh mengakses semua model yang tersedia.",
    "restrictInfo": "Kunci ini boleh mengakses {selected} daripada {total} model.",
    "selected": "{count} dipilih",
    "all": "Semua",
    "clear": "Jelas",
    "searchModels": "Cari model mengikut nama atau pembekal...",
    "noModelsFound": "Tiada model ditemui",
    "keyNameRequired": "Nama kunci diperlukan",
    "keyNameTooLong": "Nama kunci mestilah {max} aksara atau kurang",
    "keyNameInvalid": "Nama kunci hanya boleh mengandungi huruf, nombor, ruang, sempang dan garis bawah",
    "invalidKeyName": "Nama kunci tidak sah",
    "failedCreateKey": "Gagal mencipta kunci",
    "failedCreateKeyRetry": "Gagal mencipta kunci. Sila cuba lagi.",
    "invalidKeyId": "ID kunci tidak sah",
    "failedDeleteKey": "Gagal memadamkan kunci",
    "failedDeleteKeyRetry": "Gagal memadamkan kunci. Sila cuba lagi.",
    "invalidModelsSelection": "Pemilihan model tidak sah",
    "cannotSelectMoreThanModels": "Tidak boleh memilih lebih daripada {max} model",
    "failedUpdatePermissions": "Gagal mengemas kini kebenaran",
    "failedUpdatePermissionsRetry": "Gagal mengemas kini kebenaran. Sila cuba lagi.",
    "unknownProvider": "tidak diketahui",
    "copyMaskedKey": "Salin kunci bertopeng",
    "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "lastUsedOn": "Terakhir: {date}",
    "editPermissions": "Edit kebenaran",
    "deleteKey": "Padam kunci",
    "regenerateKey": "Menjana semula kunci",
    "regenerateConfirm": "Adakah anda pasti mahu menjana semula kunci API ini? Kunci lama akan terbatal serta-merta.",
    "failedRegenerateKey": "Gagal menjana semula kunci API",
    "failedRegenerateKeyRetry": "Gagal menjana semula kunci API. Sila cuba lagi.",
    "model": "{count} model",
    "models": "{count} model",
    "permissionsTitle": "Kebenaran: {name}",
    "allowAllDesc": "Kunci ini boleh mengakses semua model yang tersedia.",
    "restrictDesc": "Kunci ini boleh mengakses {selectedCount} daripada {totalModels} model.",
    "selectedCount": "{count} dipilih",
    "maxActiveSessions": "Sesi Aktif Maks",
    "apiManagerCustomRateLimits": "Had Kadar Tersuai",
    "apiManagerCustomRateLimitsDesc": "Gantikan had lalai global. Biarkan kosong untuk menggunakan lalai.",
    "apiManagerRateLimitRequestsPlaceholder": "Permintaan",
    "apiManagerRateLimitReqPer": "permintaan /",
    "apiManagerRateLimitSecondsPlaceholder": "Detik",
    "apiManagerRemoveLimitTitle": "Alih keluar had",
    "apiManagerTimezonePlaceholder": "Amerika/Sao_Paulo",
    "noLogPayloadPrivacy": "Privasi Muatan Tanpa Log",
    "bannedStatus": "Status Dilarang",
    "managementApiAccess": "Akses API Pengurusan",
    "expirationDate": "Tarikh Luput",
    "managementAccess": "Akses Pengurusan",
    "allowedConnections": "Sambungan Dibenarkan",
    "searchPlaceholder": "__MISSING__:Search by name or token...",
    "activeOnly": "__MISSING__:Active only",
    "filterStatus": "__MISSING__:STATUS",
    "filterType": "__MISSING__:TYPE",
    "filterAll": "__MISSING__:All",
    "filterStatusActive": "__MISSING__:Active",
    "filterStatusDisabled": "__MISSING__:Disabled",
    "filterStatusBanned": "__MISSING__:Banned",
    "filterStatusExpired": "__MISSING__:Expired",
    "filterTypeStandard": "__MISSING__:Standard",
    "filterTypeManage": "__MISSING__:Manage",
    "filterTypeRestricted": "__MISSING__:Restricted",
    "shownOf": "__MISSING__:{shown} of {total} shown",
    "emptyFilterTitle": "__MISSING__:No keys match your filters",
    "emptyFilterClear": "__MISSING__:Clear filters",
    "endpointRestrictions": "Allowed Endpoints",
    "allEndpointsAllowed": "This key can access all API endpoints.",
    "endpointsRestricted": "Restricted to {count} endpoint{count, plural, one {} other {s}}."
  },
  "auditLog": {
    "title": "Log Audit",
    "searchPlaceholder": "Tindakan carian...",
    "action": "Tindakan",
    "actor": "pelakon",
    "target": "Sasaran",
    "ipAddress": "Alamat IP",
    "timestamp": "Cap masa",
    "noEntries": "Tiada entri audit ditemui",
    "filterByAction": "Tapis mengikut tindakan...",
    "filterByActor": "Tapis mengikut pelakon...",
    "filterEntriesAria": "Tapis entri log audit",
    "filterByActionTypeAria": "Tapis mengikut jenis tindakan",
    "filterByActorAria": "Tapis mengikut pelakon",
    "refreshAuditLogAria": "Muat semula log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "notAvailable": "—",
    "description": "Tindakan pentadbiran dan acara keselamatan",
    "showing": "Menunjukkan entri {count} (mengimbangi {offset})",
    "previous": "Sebelumnya"
  },
  "media": {
    "title": "Ruang Media",
    "subtitle": "Jana imej, video dan muzik",
    "model": "Model",
    "prompt": "Prompt",
    "generate": "Jana",
    "generating": "Generating...",
    "loadingModels": "Loading available models...",
    "noModels": "No models available. Configure providers with media capabilities first.",
    "error": "Generation Failed",
    "result": "Result",
    "imageDescription": "Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.",
    "videoDescription": "Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.",
    "musicDescription": "Compose music using Stable Audio Open or MusicGen via ComfyUI.",
    "kinds": {
      "embedding": "__MISSING__:Embedding",
      "image": "__MISSING__:Image",
      "imageToText": "__MISSING__:Image to Text",
      "tts": "__MISSING__:Text to Speech",
      "stt": "__MISSING__:Speech to Text",
      "webSearch": "__MISSING__:Web Search",
      "webFetch": "__MISSING__:Web Fetch",
      "video": "__MISSING__:Video",
      "music": "__MISSING__:Music"
    },
    "noProviders": "__MISSING__:No providers configured for this kind yet.",
    "addConnection": "__MISSING__:Add Connection",
    "backToProviders": "__MISSING__:Back to Providers",
    "connections": "__MISSING__:{count} Connections",
    "noConnections": "__MISSING__:No connections yet — add one from the provider page.",
    "loading": "__MISSING__:Loading..."
  },
  "search": {
    "searchQuery": "Search Query",
    "searchResults": "Search Results",
    "cachedResult": "Cached",
    "searchCost": "Cost",
    "searchTools": "Search Tools",
    "searchToolsDesc": "Advanced search testing with provider comparison",
    "compareProviders": "Compare Providers",
    "rerankResults": "Rerank Results",
    "searchHistory": "Search History",
    "urlOverlap": "URL Overlap",
    "noSearchProviders": "No search providers configured. Add providers in Settings.",
    "noRerankModels": "No rerank model available",
    "webSearch": "Web Search",
    "provider": "Provider",
    "searchType": "Search Type",
    "maxResults": "Max Results",
    "filters": "Filters",
    "country": "Country",
    "language": "Language",
    "timeRange": "Time Range",
    "includeDomains": "Include Domains",
    "excludeDomains": "Exclude Domains",
    "safeSearch": "Safe Search",
    "safeSearchOff": "Off",
    "safeSearchModerate": "Moderate",
    "safeSearchStrict": "Strict",
    "queryPlaceholder": "Enter search query...",
    "providerAuto": "auto (cheapest)",
    "searchTypeWeb": "web",
    "searchTypeNews": "news",
    "optionAny": "any",
    "timeRangeDay": "Past day",
    "timeRangeWeek": "Past week",
    "timeRangeMonth": "Past month",
    "timeRangeYear": "Past year",
    "domainPlaceholder": "example.com",
    "requestTimedOut": "Request timed out ({seconds}s)",
    "networkError": "Network error",
    "formatted": "Formatted",
    "rawJson": "JSON",
    "cacheMiss": "cache miss",
    "cacheHit": "cache hit",
    "latency": "Latency",
    "cost": "Cost",
    "results": "Results",
    "rerank": "Rerank",
    "rerankModel": "Rerank Model",
    "positionDelta": "Position Change",
    "emptyState": "Send a search query to see results",
    "copy": "salin",
    "resetToDefault": "Tetapkan semula kepada lalai",
    "tabSearch": "Search",
    "tabScrape": "Scrape",
    "tabCompare": "Compare",
    "modalitiesGuide": "Modalities guide",
    "searchConceptTitle": "Search",
    "searchConceptDesc": "Search = fetches a list of web results (title, URL, snippet, relevance score)",
    "scrapeConceptTitle": "Scrape",
    "scrapeConceptDesc": "Scrape = extracts the full content of a URL (markdown, text or HTML)",
    "compareConceptTitle": "Compare",
    "compareConceptDesc": "Compare = runs the same query across N providers side-by-side to compare latency, cost and result overlap",
    "rerankConceptTitle": "Rerank",
    "rerankConceptDesc": "Rerank = reorders results via LLM to improve relevance based on the query",
    "autoConceptTitle": "Auto (cheapest)",
    "autoConceptDesc": "Auto (cheapest) = automatically picks the cheapest available provider with configured credentials",
    "providerCatalogTitle": "Provider Catalog",
    "kindSearch": "Search",
    "kindFetch": "Fetch/Scrape",
    "statusConfigured": "Configured",
    "statusMissing": "No credential",
    "statusRateLimited": "Rate limited",
    "configureProvider": "Configure in Providers",
    "loadingProviders": "Loading providers…",
    "failedToLoadProviders": "Failed to load providers",
    "costPerQuery": "Cost/query",
    "freeQuota": "Free quota/mo",
    "scrapeUrl": "URL to scrape",
    "scrapeUrlPlaceholder": "https://example.com",
    "scrapeExtract": "Extract",
    "scrapeExtracting": "Extracting…",
    "scrapeFullPage": "Full page",
    "scrapeFormat": "Format",
    "formatMarkdown": "Markdown",
    "formatHtml": "HTML",
    "formatText": "Text",
    "scrapePreview": "Preview",
    "scrapeRaw": "Raw",
    "scrapeContentTruncated": "(truncated, view raw)",
    "scrapeMetadata": "Metadata",
    "scrapeProvider": "Provider",
    "scrapeSize": "Size",
    "compareRun": "Compare",
    "compareRunning": "Comparing…",
    "autoProvider": "Auto (cheapest)",
    "configuredStatus": "Configured",
    "rateLimitedStatus": "Rate limited",
    "noCredential": "No credential",
    "searchTypeLabel": "Type",
    "rerankModelLabel": "Rerank model",
    "noneOption": "None",
    "size": "Size"
  },
  "cliTools": {
    "title": "Alat CLI",
    "noActiveProviders": "Tiada pembekal aktif",
    "noActiveProvidersDesc": "Sila tambah dan sambungkan pembekal terlebih dahulu untuk mengkonfigurasi alatan CLI.",
    "mapModels": "Model Peta",
    "testConnection": "Sambungan Ujian",
    "connectionStatus": "Status Sambungan",
    "configureEndpoint": "Konfigurasikan Titik Akhir",
    "instructions": "Arahan",
    "modelMapping": "Pemetaan Model",
    "baseUrl": "URL asas",
    "apiKey": "Kunci API",
    "configured": "Dikonfigurasikan",
    "notConfigured": "Tidak dikonfigurasikan",
    "notInstalled": "Tidak dipasang",
    "custom": "Adat",
    "unknown": "Tidak diketahui",
    "lastSavedAt": "Terakhir disimpan: {date}",
    "never": "tidak pernah",
    "justNow": "tadi",
    "minutesAgoShort": "{count}m yang lalu",
    "hoursAgoShort": "{count}j lalu",
    "daysAgoShort": "{count}h yang lalu",
    "monthsAgoShort": "{count}bln lalu",
    "yearsAgoShort": "{count}y yang lalu",
    "runtimeCheckFailed": "Semakan masa jalan gagal",
    "yourApiKeyPlaceholder": "kunci-api anda",
    "modelPlaceholder": "pembekal/model-id",
    "configurationSaved": "Konfigurasi berjaya disimpan.",
    "failedToSave": "Gagal menyimpan konfigurasi.",
    "noApiKeysCreateOne": "Tiada kunci API - Buat satu dalam halaman Kekunci",
    "defaultOmnirouteKey": "sk_omniroute (lalai)",
    "selectModel": "Pilih Model",
    "selectModelForAlias": "Pilih model untuk {alias}",
    "selectModelForTool": "Pilih Model untuk {tool}",
    "select": "Pilih",
    "clear": "Jelas",
    "comingSoon": "Akan datang",
    "checkingRuntime": "Menyemak status masa jalan...",
    "guideOnlyIntegration": "Penyepaduan panduan sahaja (tiada masa jalan tempatan diperlukan)",
    "cliRuntimeDetected": "Masa jalan CLI dikesan dan sedia",
    "cliFoundNotRunnable": "CLI ditemui tetapi tidak boleh dijalankan{reason}",
    "cliRuntimeNotDetected": "Masa jalan CLI tidak dikesan",
    "binary": "binari",
    "configPath": "Laluan konfigurasi",
    "configPathShort": "Konfigurasi",
    "failedCheckRuntimeStatus": "Gagal menyemak status masa jalan.",
    "copy": "salin",
    "copied": "disalin",
    "copyConfig": "Salin Konfigurasi",
    "saveConfig": "Simpan Konfigurasi",
    "selectionSaved": "Pilihan disimpan",
    "guide": "Panduan",
    "detected": "Dikesan",
    "notReady": "Tidak bersedia",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "startMitm": "Mulakan MITM",
    "stopMitm": "Hentikan MITM",
    "mitmStarted": "MITM bermula dengan jayanya!",
    "mitmStopped": "MITM berjaya berhenti!",
    "failedStart": "Gagal memulakan MITM",
    "failedStop": "Gagal menghentikan MITM",
    "saveMappings": "Simpan Pemetaan",
    "mappingsSaved": "Pemetaan disimpan!",
    "failedSaveMappings": "Gagal menyimpan pemetaan",
    "howItWorks": "Cara ia berfungsi:",
    "antigravityHowWorksDesc": "Antigraviti menghantar permintaan ke titik akhir Google. MITM memintas dan mengubah hala mereka ke OmniRoute.",
    "antigravityStep1": "1. Mulakan MITM untuk menghalakan permintaan melalui OmniRoute.",
    "antigravityStep2Prefix": "2. Tambah",
    "antigravityStep2Suffix": "ke fail hos anda sebagai 127.0.0.1.",
    "antigravityStep3": "3. Buka Antigraviti dan permintaan akan diproksikan.",
    "mitmHowWorksDesc": "{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.",
    "mitmStep1": "1. Start MITM to route requests through OmniRoute.",
    "mitmStep2Prefix": "2. Add",
    "mitmStep2Suffix": "to your hosts file as 127.0.0.1.",
    "mitmStep3": "3. Open {toolName} and requests will be proxied.",
    "sudoPasswordRequiredTitle": "Kata Laluan Sudo Diperlukan",
    "sudoPasswordHint": "Kata laluan pentadbir diperlukan untuk mengubah suai fail hos dan tetapan proksi sistem.",
    "enterSudoPassword": "Masukkan kata laluan sudo",
    "sudoPasswordRequiredError": "Kata laluan sudo diperlukan.",
    "cancel": "Batal",
    "confirm": "sahkan",
    "settingsApplied": "Tetapan berjaya digunakan!",
    "failedApplySettings": "Gagal menggunakan tetapan",
    "settingsReset": "Tetapan berjaya ditetapkan semula!",
    "failedResetSettings": "Gagal menetapkan semula tetapan",
    "backupRestored": "Sandaran dipulihkan!",
    "failedRestore": "Gagal dipulihkan",
    "checkingCli": "Menyemak {tool} CLI...",
    "cliNotRunnable": "{tool} CLI dipasang tetapi tidak boleh dijalankan",
    "cliNotInstalled": "{tool} CLI tidak dipasang",
    "cliNotDetected": "{tool} CLI tidak dikesan",
    "cliDetectedReady": "{tool} CLI dikesan dan sedia",
    "cliFoundFailedHealthcheck": "{tool} CLI ditemui tetapi gagal pemeriksaan kesihatan masa jalan{reason}.",
    "installCliPrompt": "Sila pasang {tool} CLI untuk menggunakan ciri ini.",
    "installCodexPrompt": "Sila pasang Codex CLI untuk menggunakan ciri autoguna.",
    "hide": "Sembunyi",
    "howToInstall": "Cara Memasang",
    "installationGuide": "Panduan Pemasangan",
    "platforms": "macOS / Linux / Windows:",
    "afterInstallationRun": "Selepas pemasangan, jalankan",
    "toVerify": "untuk mengesahkan.",
    "current": "semasa",
    "baseUrlPlaceholder": "https://.../v1",
    "resetToDefault": "Tetapkan semula kepada lalai",
    "providerModelPlaceholder": "pembekal/model-id",
    "apply": "Mohon",
    "reset": "Tetapkan semula",
    "manualConfig": "Konfigurasi Manual",
    "backups": "Sandaran",
    "configBackups": "Konfigurasi Sandaran",
    "noBackupsYet": "Tiada sandaran lagi. Sandaran dibuat secara automatik sebelum setiap Guna atau Tetapkan Semula.",
    "restore": "Pulihkan",
    "backupRestoredReloading": "Sandaran dipulihkan! Memuat semula status...",
    "failedRestoreBackup": "Gagal memulihkan sandaran",
    "applied": "Digunakan!",
    "failed": "gagal",
    "resetDone": "Tetapkan semula!",
    "omnirouteConfiguredOpenAiCompatible": "OmniRoute dikonfigurasikan sebagai pembekal serasi OpenAI",
    "provider": "Pembekal",
    "model": "Model",
    "providers": "Pembekal",
    "auth": "Pengesahan",
    "noApiKeysAvailable": "Tiada kunci API tersedia",
    "usingDefaultOmniroute": "Menggunakan lalai: sk_omniroute",
    "updateConfig": "Kemas kini Konfigurasi",
    "applyConfig": "Gunakan Konfigurasi",
    "noBackupsAvailable": "Tiada sandaran tersedia.",
    "profileSaved": "Profil \"{name}\" disimpan!",
    "failedSaveProfile": "Gagal menyimpan profil",
    "profileActivated": "Profil diaktifkan!",
    "failedActivateProfile": "Gagal mengaktifkan profil",
    "profiles": "Profil",
    "savedProfiles": "Profil Disimpan",
    "noProfilesYet": "Tiada profil disimpan lagi. Simpan konfigurasi semasa sebagai profil di bawah.",
    "activate": "Aktifkan",
    "deleteProfile": "Padam profil",
    "profileNamePlaceholder": "Nama profil (cth. Akaun Peribadi)",
    "saveCurrent": "Simpan Semasa",
    "codexAuthNotePrefix": "Penggunaan Codex",
    "codexAuthNoteMiddle": "dengan",
    "codexAuthNoteSuffix": "Klik \"Guna\" untuk konfigurasi automatik.",
    "claudeManualConfiguration": "Claude CLI - Konfigurasi Manual",
    "codexManualConfiguration": "Codex CLI - Konfigurasi Manual",
    "droidManualConfiguration": "Droid Kilang - Konfigurasi Manual",
    "openClawManualConfiguration": "Cakar Terbuka - Konfigurasi Manual",
    "clineManualConfiguration": "Konfigurasi Manual Cline",
    "kiloManualConfiguration": "Konfigurasi Manual Kod Kilo",
    "whenToUseLabel": "Bila nak guna",
    "openToolDocs": "Buka dokumen alat",
    "toolUseCases": {
      "claude": "Gunakan apabila anda mahukan aliran kerja perancangan yang kukuh dan refactor berbilang fail panjang dengan Kod Claude.",
      "codex": "Gunakan apabila pasukan anda diseragamkan pada aliran OpenAI Codex CLI dan pengesahan berasaskan profil.",
      "droid": "Gunakan apabila anda memerlukan ejen terminal ringan yang menumpukan pada pengekodan pantas dan gelung pelaksanaan perintah.",
      "openclaw": "Gunakan apabila anda mahukan ejen pengekodan gaya Open Claw tetapi dihalakan melalui dasar OmniRoute.",
      "cline": "Gunakan apabila anda mengkonfigurasi ejen pengekodan dalam editor dan mahukan persediaan berpandu dengan model OmniRoute.",
      "kilo": "Gunakan apabila aliran kerja anda bergantung pada arahan Kilo Code dan pengeditan berulang yang pantas.",
      "cursor": "Gunakan semasa pengekodan dalam Kursor dan anda memerlukan model serasi OpenAI tersuai melalui OmniRoute.",
      "continue": "Gunakan semasa menjalankan Teruskan dalam IDE dan anda memerlukan konfigurasi pembekal berasaskan JSON mudah alih.",
      "opencode": "Gunakan apabila anda lebih suka ejen terminal-native run dan automasi skrip melalui OpenCode.",
      "kiro": "Gunakan apabila menyepadukan Kiro dan mengawal penghalaan model secara berpusat daripada OmniRoute.",
      "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute.",
      "antigravity": "Gunakan apabila trafik Antigraviti/Kiro mesti dipintas melalui MITM dan dihalakan ke OmniRoute.",
      "copilot": "Gunakan apabila anda mahu Copilot gaya sembang UX sambil menguatkuasakan kekunci OmniRoute dan peraturan penghalaan.",
      "amp": "Use when you want Amp CLI routed through OmniRoute with stable shorthand aliases and OpenAI-compatible setup.",
      "qwen": "Use when you want Qwen Code CLI with OmniRoute-managed provider settings and multi-provider model access.",
      "hermes": "Gunakan apabila anda memerlukan pembantu AI asli terminal yang ringan untuk tugasan pantas.",
      "hermes-agent": "__MISSING__:Use when you need Hermes Agent (by Nousresearch) with default, delegation, vision and auxiliary models routed through OmniRoute.",
      "custom": "Gunakan untuk pelaksanaan alat tersuai atau konfigurasi serasi OpenAI generik."
    },
    "toolDescriptions": {
      "antigravity": "IDE Antigraviti Google dengan MITM",
      "claude": "Kod Claude Anthropic CLI",
      "codex": "OpenAI Codex CLI",
      "droid": "Pembantu AI Droid Kilang",
      "openclaw": "Buka Pembantu AI Claw",
      "cline": "Pembantu Pengekodan AI Cline CLI",
      "kilo": "Kilo Code AI Assistant CLI",
      "cursor": "Editor Kod AI Kursor",
      "continue": "Teruskan AI Assistant",
      "opencode": "OpenCode AI coding agent (Terminal)",
      "kiro": "Amazon Kiro — AI-powered IDE",
      "windsurf": "Windsurf AI Code Editor",
      "copilot": "GitHub Copilot AI Assistant",
      "qwen": "Alibaba Qwen Code CLI",
      "amp": "Sourcegraph Amp coding assistant CLI",
      "hermes": "Pembantu Terminal AI Hermes",
      "hermes-agent": "__MISSING__:Hermes Agent (by Nousresearch) - Advanced terminal AI with multi-model support (delegation, vision, compression, etc.)",
      "custom": "Generik penjana konfigurasi CLI atau SDK serasi OpenAI"
    },
    "guides": {
      "cursor": {
        "notes": {
          "0": "Memerlukan akaun Cursor Pro untuk menggunakan ciri ini.",
          "1": "Laluan kursor meminta melalui pelayannya sendiri, jadi titik akhir setempat tidak disokong. Sila dayakan Cloud Endpoint dalam Tetapan."
        },
        "steps": {
          "1": {
            "title": "Buka Tetapan",
            "desc": "Pergi ke Tetapan -> Model"
          },
          "2": {
            "title": "Dayakan OpenAI API",
            "desc": "Dayakan pilihan \"kunci API OpenAI\"."
          },
          "3": {
            "title": "URL asas"
          },
          "4": {
            "title": "Kunci API"
          },
          "5": {
            "title": "Tambah Model Tersuai",
            "desc": "Klik \"Lihat Semua Model\" -> \"Tambah Model Tersuai\""
          },
          "6": {
            "title": "Pilih Model"
          }
        }
      },
      "continue": {
        "steps": {
          "1": {
            "title": "Buka Konfigurasi",
            "desc": "Buka fail konfigurasi Teruskan"
          },
          "2": {
            "title": "Kunci API"
          },
          "3": {
            "title": "Pilih Model"
          },
          "4": {
            "title": "Tambah Konfigurasi Model",
            "desc": "Tambahkan konfigurasi berikut pada tatasusunan model anda:"
          }
        },
        "notes": {
          "0": "Teruskan menggunakan fail konfigurasi JSON."
        }
      },
      "opencode": {
        "steps": {
          "1": {
            "title": "Install OpenCode",
            "desc": "Install via npm: npm install -g opencode-ai"
          },
          "2": {
            "title": "API Key"
          },
          "3": {
            "title": "Set Base URL",
            "desc": "opencode config set baseUrl {baseUrl}"
          },
          "4": {
            "title": "Select Model"
          },
          "5": {
            "title": "Use Thinking Variant",
            "desc": "For thinking models, run with --variant high/low/max (example command below)."
          }
        },
        "notes": {
          "0": "OpenCode memerlukan konfigurasi kunci API.",
          "1": "Tetapkan URL asas kepada titik akhir OmniRoute anda."
        }
      },
      "kiro": {
        "steps": {
          "1": {
            "title": "Open Kiro Settings",
            "desc": "Go to Settings → AI Provider"
          },
          "2": {
            "title": "Base URL",
            "desc": "Paste your OmniRoute endpoint URL"
          },
          "3": {
            "title": "API Key"
          },
          "4": {
            "title": "Select Model"
          }
        },
        "notes": {
          "0": "Kiro memerlukan akaun Amazon."
        }
      },
      "windsurf": {
        "steps": {
          "1": {
            "title": "Open AI Settings",
            "desc": "Click the AI Settings icon in Windsurf or go to Settings"
          },
          "2": {
            "title": "Add Custom Provider",
            "desc": "Select \"Add custom provider\" (OpenAI-compatible)"
          },
          "3": {
            "title": "Base URL",
            "desc": "http://127.0.0.1:20128/v1"
          },
          "4": {
            "title": "API Key",
            "desc": "Select your OmniRoute API key"
          },
          "5": {
            "title": "Select Model",
            "desc": "Choose a model from the dropdown"
          }
        }
      }
    },
    "autoConfiguredTab": "Auto Configured Tab",
    "toolCategoriesDesc": "Tool Categories Desc",
    "allToolsTab": "All Tools Tab",
    "guidedClientsTab": "Guided Clients Tab",
    "mitmClientsTab": "Mitm Clients Tab",
    "customCliTab": "CLI tersuai",
    "toolCategories": "Tool Categories",
    "visibleToolsCount": "{count} alatan tersedia",
    "customCliBuilderTitle": "Pembina CLI serasi OpenAI",
    "customCliBuilderDescription": "Hasilkan env vars dan coretan JSON untuk mana-mana CLI atau SDK yang menerima URL asas, kunci API dan ID model yang serasi dengan OpenAI.",
    "customCliNoModels": "Sambungkan sekurang-kurangnya satu pembekal untuk mengisi pemilih model.",
    "customCliNameLabel": "nama CLI",
    "customCliNamePlaceholder": "cth. CLI Pasukan Saya",
    "customCliDefaultModelLabel": "Model lalai",
    "customCliDefaultModelHelp": "Gunakan sebarang ID model atau kombo OmniRoute. Kebanyakan CLI serasi OpenAI hanya memerlukan URL asas /v1 serta rentetan model.",
    "customCliKeyHelper": "Untuk pemasangan tempatan OmniRoute boleh menggunakan sk_omniroute. Dalam mod awan, pilih salah satu kunci API pengurusan anda.",
    "customCliAliasMappingsLabel": "Alias pemetaan",
    "customCliAliasMappingsHelp": "Alias pembantu pilihan untuk skrip pembungkus atau fail konfigurasi yang mahukan nama trengkas yang stabil.",
    "customCliAddAlias": "Tambah alias",
    "customCliNoMappings": "Belum ada pemetaan alias. Tambahkan satu jika pembungkus atau skrip pasukan anda menggunakan nama pendek yang stabil.",
    "customCliAliasPlaceholder": "cth. semakan",
    "customCliTargetModelLabel": "Model sasaran",
    "customCliEndpointHintLabel": "Bagaimana untuk wayar titik akhir",
    "customCliEndpointHint": "Halakan mana-mana klien yang serasi dengan OpenAI ke URL asas OmniRoute /v1. Titik tamat pelengkapan sembang mentah ialah {endpoint}. Gunakan blok JSON apabila alat itu mahukan objek pembekal, atau skrip env apabila ia membaca pembolehubah OPENAI_*.",
    "customCliEnvBlockTitle": "Env / coretan shell",
    "customCliJsonBlockTitle": "Blok JSON pembekal",
    "copilotConfigGenerator": "Penjana Konfigurasi Copilot GitHub",
    "copilotApiKey": "Kunci API",
    "copilotFilterModelsPlaceholder": "Model penapis...",
    "copilotMaxInputTokens": "Token Input Maks",
    "copilotMaxOutputTokens": "Token Output Maks",
    "copilotToolCalling": "Alat Panggilan",
    "copilotPasteInto": "Tampalkan ke dalam: ",
    "wireApiChatCompletions": "Selesai Sembang (/sembang/penyelesaian)",
    "wireApiResponses": "API Respons (/respons)"
  },
  "combos": {
    "title": "Kombo",
    "description": "Cipta gabungan model dengan penghalaan berwajaran dan sokongan sandaran",
    "autoCatalogTitle": "Katalog penghalaan automatik",
    "autoCatalogTemplateCount": "{count} templat",
    "autoCatalogDescription": "Gabungan auto/* terbina dalam diselesaikan secara dinamik daripada pembekal yang disambungkan. Gunakan mana-mana ID ini sebagai medan model — tiada persediaan diperlukan.",
    "autoCatalogExpand": "Kembangkan katalog penghalaan automatik",
    "autoCatalogCollapse": "Runtuhkan katalog penghalaan automatik",
    "createCombo": "Buat Combo",
    "editCombo": "Edit Kombo",
    "deleteCombo": "Padamkan Kombo",
    "noModels": "Tiada model",
    "noModelsYet": "Tiada model ditambah lagi",
    "addModel": "Tambah Model",
    "addModelToCombo": "Tambahkan Model pada Combo",
    "routingStrategy": "Strategi Penghalaan",
    "maxRetries": "Max Cuba Semula",
    "timeout": "Tamat masa (ms)",
    "healthcheck": "Pemeriksaan kesihatan",
    "priority": "Keutamaan",
    "fallback": "Fallback",
    "roundRobin": "Round Robin",
    "random": "rawak",
    "leastLatency": "Kependaman Terkecil",
    "comboName": "Nama Kombo",
    "comboNamePlaceholder": "kombo saya",
    "deleteConfirm": "Padamkan kombo ini?",
    "noCombosYet": "Tiada kombo lagi",
    "comboCreated": "Kombo berjaya dibuat",
    "comboUpdated": "Kombo berjaya dikemas kini",
    "comboDeleted": "Kombo dipadamkan",
    "failedCreate": "Gagal membuat kombo",
    "failedUpdate": "Gagal mengemas kini kombo",
    "errorCreating": "Ralat membuat kombo",
    "errorUpdating": "Ralat mengemas kini kombo",
    "errorDeleting": "Ralat memadam kombo",
    "testFailed": "Permintaan ujian gagal",
    "failedToggle": "Gagal menukar kombo",
    "testResults": "Keputusan Ujian — {name}",
    "resolvedBy": "diselesaikan oleh:",
    "more": "+{count} lagi",
    "reqs": "reqs",
    "success": "kejayaan",
    "proxyConfigured": "Proksi dikonfigurasikan",
    "copyComboName": "Salin nama kombo",
    "enableCombo": "Dayakan kombo",
    "disableCombo": "Lumpuhkan kombo",
    "testCombo": "Kombo ujian",
    "duplicate": "Pendua",
    "proxyConfig": "Konfigurasi proksi",
    "nameRequired": "Nama diperlukan",
    "nameInvalid": "Hanya huruf, nombor, -, _, / dan . dibenarkan",
    "nameHint": "Huruf, nombor, -, _, / dan . dibenarkan",
    "priorityDesc": "Saling berurutan: cuba model 1 dahulu, kemudian 2, dsb.",
    "weightedDesc": "Mengagihkan trafik mengikut peratusan berat dengan sandaran",
    "roundRobinDesc": "Pengedaran pekeliling: setiap permintaan pergi ke model seterusnya secara bergilir",
    "contextRelay": "Context Relay",
    "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate",
    "randomDesc": "Pemilihan rawak seragam, kemudian sandarkan kepada model yang tinggal",
    "leastUsedDesc": "Memilih model dengan permintaan paling sedikit, mengimbangi beban dari semasa ke semasa",
    "costOptimizedDesc": "Laluan ke model termurah dahulu berdasarkan harga",
    "resetAware": "Set Semula-Sedar RR",
    "resetAwareDesc": "Baki baki kuota dengan tetapan semula 5j dan mingguan, kemudian round-robin markah yang serupa",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling",
    "models": "model",
    "autoBalance": "Imbangan automatik",
    "advancedSettings": "Tetapan Lanjutan",
    "retryDelay": "Cuba Semula Kelewatan (ms)",
    "concurrencyPerModel": "Concurrency / Model",
    "queueTimeout": "Waktu Beratur (ms)",
    "contextRelayHandoffThreshold": "Handoff Threshold",
    "contextRelayHandoffThresholdHelp": "When quota usage reaches this threshold, OmniRoute generates a structured handoff summary before the active account is exhausted.",
    "contextRelayMaxMessages": "Max Messages For Summary",
    "contextRelayMaxMessagesHelp": "Limits how much recent history is condensed into the relay summary.",
    "contextRelaySummaryModel": "Summary Model",
    "contextRelaySummaryModelHelp": "Optional override model used only for generating the handoff summary. Leave empty to reuse the active combo model.",
    "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex account rotation. Pair it with multiple accounts of the same provider for the best continuity.",
    "advancedHint": "Biarkan kosong untuk menggunakan lalai global. Ini mengatasi tetapan setiap pembekal.",
    "failoverBeforeRetry": "Failover Sebelum Cuba Semula",
    "maxSetRetries": "Percubaan Semula Set Maks",
    "setRetryDelayMs": "Tetapkan Kelewatan Cuba Semula (ms)",
    "moveUp": "Bergerak ke atas",
    "moveDown": "Bergerak ke bawah",
    "removeModel": "Alih keluar",
    "saving": "Menyimpan...",
    "weighted": "Ditimbang",
    "leastUsed": "Paling Kurang Digunakan",
    "costOpt": "Kos-Opt",
    "strategyGuideTitle": "How to use this strategy",
    "strategyGuideWhen": "When to use",
    "strategyGuideAvoid": "Avoid when",
    "strategyGuideExample": "Example",
    "strategyGuide": {
      "priority": {
        "when": "You have one preferred model and only want fallback on failure.",
        "avoid": "You need request distribution across models.",
        "example": "Primary coding model with cheaper backup for outages."
      },
      "weighted": {
        "when": "You need controlled traffic split across models.",
        "avoid": "You cannot maintain accurate weights over time.",
        "example": "80% stable model + 20% canary model rollout."
      },
      "round-robin": {
        "when": "You want predictable and even distribution.",
        "avoid": "Models differ too much in latency or cost.",
        "example": "Same model on multiple accounts to spread throughput."
      },
      "random": {
        "when": "You want simple distribution with minimal setup.",
        "avoid": "You need strict traffic guarantees.",
        "example": "Quick prototyping with equivalent models."
      },
      "least-used": {
        "when": "You want adaptive balancing based on live demand.",
        "avoid": "Traffic is too low to benefit from usage balancing.",
        "example": "Mixed workloads where one model often gets overloaded."
      },
      "cost-optimized": {
        "when": "Cost reduction is your top priority.",
        "avoid": "Pricing data is missing or outdated.",
        "example": "Background or batch jobs where lower cost is preferred."
      },
      "reset-aware": {
        "when": "Anda membuat laluan merentasi berbilang akaun dengan telemetri kuota dan tetingkap tetapan semula yang berbeza.",
        "avoid": "Telemetri kuota tidak tersedia untuk kebanyakan akaun.",
        "example": "Lebih suka penetapan semula akaun mingguan 60% esok berbanding penetapan semula akaun 80% kemudian."
      },
      "strict-random": {
        "when": "Use when you want perfectly even spread — each model used once before repeating.",
        "avoid": "Avoid when models have different quality or latency and order matters.",
        "example": "Example: Multiple accounts of the same model to distribute usage evenly."
      },
      "p2c": {
        "when": "Use when you want low-latency selection using Power-of-Two-Choices algorithm.",
        "avoid": "Avoid for small combos with 2 or fewer models — no benefit over round-robin.",
        "example": "Example: High-throughput inference across 4+ equivalent model endpoints."
      },
      "context-relay": {
        "when": "Use when long sessions must survive account rotation without losing the working context.",
        "avoid": "Avoid when account switching is rare or when you do not want extra summarization requests.",
        "example": "Example: Codex sessions that rotate across multiple accounts near quota exhaustion."
      },
      "fill-first": {
        "when": "Gunakan apabila anda ingin menghabiskan sepenuhnya kuota satu pembekal sebelum beralih ke yang seterusnya.",
        "avoid": "Elakkan apabila anda memerlukan pengimbangan beban peringkat permintaan merentas penyedia.",
        "example": "Contoh: Gunakan semua $200 kredit Deepgram sebelum kembali ke Groq."
      },
      "auto": {
        "when": "Gunakan apabila anda memerlukan penghalaan pemarkahan berbilang faktor berdasarkan kos, kependaman dan kualiti.",
        "avoid": "Elakkan apabila anda memerlukan pesanan keutamaan yang ketat atau kegigihan sejarah.",
        "example": "Contoh: Imbangan permintaan merentas model dengan kekuatan yang berbeza."
      },
      "lkgp": {
        "when": "Gunakan apabila anda ingin membuat laluan berdasarkan kadar kejayaan dan prestasi sejarah.",
        "avoid": "Elakkan apabila data sejarah terhad atau tidak boleh dipercayai.",
        "example": "Contoh: Laluan ke model dengan rekod prestasi yang baik pada tugasan tertentu."
      },
      "context-optimized": {
        "when": "Gunakan apabila anda perlu mengoptimumkan penggunaan tetingkap konteks merentas model.",
        "avoid": "Elakkan apabila model mempunyai panjang konteks yang sama atau tugasan adalah mudah.",
        "example": "Contoh: Edarkan perbualan panjang merentas model dengan tetingkap konteks yang lebih besar."
      }
    },
    "advancedHelp": {
      "maxRetries": "How many retries are attempted before failing a request.",
      "retryDelay": "Initial wait between retries. Higher values reduce burst pressure.",
      "timeout": "Maximum request duration before aborting.",
      "healthcheck": "Skips unhealthy models/providers from routing decisions.",
      "concurrencyPerModel": "Max simultaneous requests allowed per model in round-robin.",
      "queueTimeout": "How long a request can wait in queue before timing out.",
      "failoverBeforeRetry": "Apabila didayakan, sebarang ralat huluan mencetuskan kegagalan serta-merta ke sasaran kombo seterusnya, melangkau semua percubaan semula dan URL sandaran.",
      "maxSetRetries": "Bilangan kali untuk mencuba semula sasaran penuh yang ditetapkan apabila setiap sasaran gagal. 0 = tiada percubaan semula peringkat set.",
      "setRetryDelayMs": "Kelewatan antara percubaan percubaan semula peringkat set, memberikan masa untuk menyelesaikan masalah sementara."
    },
    "templatesTitle": "Quick templates",
    "templatesDescription": "Apply a starting profile, then adjust models and config.",
    "templateApply": "Apply template",
    "templateHighAvailability": "High availability",
    "templateHighAvailabilityDesc": "Priority routing with health checks and safe retries.",
    "templateCostSaver": "Cost saver",
    "templateCostSaverDesc": "Cost-optimized routing for budget-first workloads.",
    "templateBalanced": "Balanced load",
    "templateBalancedDesc": "Least-used routing to spread demand over time.",
    "usageGuideHide": "Hide",
    "usageGuideDontShowAgain": "Don't show again",
    "usageGuideShow": "Show guide",
    "quickTestTitle": "Combo ready to validate",
    "quickTestDescription": "Run a test now to confirm fallback and latency behavior.",
    "testNow": "Test now",
    "pricingCoverage": "Pricing coverage",
    "pricingCoverageHint": "Cost-optimized works best when all combo models have pricing.",
    "pricingAvailable": "Pricing available",
    "pricingMissing": "No pricing",
    "pricingAvailableShort": "priced",
    "pricingMissingShort": "no-price",
    "warningRoundRobinSingleModel": "Round-robin is most useful with at least 2 models.",
    "warningCostOptimizedPartialPricing": "Only {priced} of {total} models have pricing. Routing may be partially cost-aware.",
    "warningCostOptimizedNoPricing": "No pricing data found for this combo. Cost-optimized may route unexpectedly.",
    "filterAll": "All",
    "filterIntelligent": "Intelligent",
    "filterDeterministic": "Deterministic",
    "filterEmptyTitle": "No combos match this strategy filter.",
    "filterEmptyIntelligentDescription": "Create an auto or LKGP combo to populate the intelligent routing dashboard.",
    "filterEmptyDeterministicDescription": "Only auto and LKGP combos exist right now. Switch back to All or create a deterministic combo.",
    "readinessTitle": "Bersedia untuk menyimpan?",
    "readinessDescription": "Semak senarai semak sebelum membuat atau mengemas kini kombo ini.",
    "readinessCheckName": "Nama kombo adalah sah",
    "readinessCheckModels": "Sekurang-kurangnya satu model dipilih",
    "readinessCheckWeights": "Jumlah wajaran ialah 100%",
    "readinessCheckWeightsOptional": "Peraturan berat tidak diperlukan",
    "readinessCheckPricing": "Data harga tersedia",
    "readinessCheckPricingOptional": "Peraturan harga tidak diperlukan",
    "saveBlockedTitle": "Simpan disekat sehingga item berikut diperbaiki:",
    "saveBlockName": "Tentukan nama kombo.",
    "saveBlockModels": "Tambah sekurang-kurangnya satu model.",
    "saveBlockWeighted": "Tetapkan berat kepada 100% (semasa: {total}%).",
    "saveBlockPricing": "Tambahkan harga untuk sekurang-kurangnya satu model atau pilih strategi lain.",
    "recommendationsLabel": "Recommended setup",
    "applyRecommendations": "Apply recommendations",
    "recommendationsUpdated": "Recommendations updated for {strategy}.",
    "recommendationsApplied": "Recommendations applied to this combo.",
    "intelligentPanelTitle": "Intelligent Routing Dashboard",
    "intelligentPanelDesc": "Real-time scoring and health status for this auto-routing combo.",
    "configOnlyStatus": "__MISSING__:Configuration View",
    "configOnlyHint": "__MISSING__:This panel shows routing inputs only. Live breaker state is available on the Health page.",
    "routingInputs": "__MISSING__:Routing Inputs",
    "routingInputsHint": "__MISSING__:Mode pack and weighting stay here; breaker runtime state stays on the Health page.",
    "emailVisibilityHint": "__MISSING__:Account emails here follow the global privacy toggle.",
    "emailVisibilityTooltip": "__MISSING__:Use the eye icon to reveal or hide account emails globally across combos, providers and quota screens.",
    "manualModel": "__MISSING__:Manual model",
    "manualModelInvalid": "__MISSING__:Enter a model as provider/model.",
    "manualModelUnknownProvider": "__MISSING__:Unknown provider prefix.",
    "builderDynamicAccountShort": "__MISSING__:Dynamic account",
    "builderNeedValidName": "__MISSING__:Define a valid combo name before continuing.",
    "statusOverview": "Status Overview",
    "normalOperation": "Normal Operation",
    "allProvidersHealthy": "Providers are reporting healthy routing conditions.",
    "incidentMode": "Incident Mode",
    "highCircuitBreakerRate": "High circuit breaker trip rate detected.",
    "activeModePack": "Active Mode Pack",
    "modePackUpdated": "Mode pack updated to {pack}.",
    "modePackHint": "Switch presets to bias the routing engine without rebuilding the combo.",
    "providerScores": "Provider Scores",
    "allProvidersEvaluated": "No candidate pool configured. All active providers are evaluated at runtime.",
    "excludedProviders": "Excluded Providers",
    "excludedProvidersHint": "Providers with an OPEN circuit breaker are temporarily excluded from routing.",
    "noExcludedProviders": "No providers are currently excluded.",
    "cooldownMinutes": "Cooldown: {minutes}m",
    "builderIntelligentTitle": "Intelligent Routing Configuration",
    "builderIntelligentDesc": "Configure the multi-factor scoring engine for this auto-routing combo.",
    "candidatePoolLabel": "Candidate Pool",
    "candidatePoolHint": "Select which providers this engine should evaluate. Leave empty to use all active providers.",
    "candidatePoolEmpty": "No active providers available yet.",
    "candidatePoolAllProviders": "All providers",
    "modePackLabel": "Mode Pack",
    "routerStrategyLabel": "Router Strategy",
    "strategyRules": "Rules (6-Factor Scoring)",
    "explorationRateLabel": "Exploration Rate",
    "explorationRateHint": "{percent}% of requests can explore non-optimal providers.",
    "budgetCapLabel": "Budget Cap (USD / request)",
    "budgetCapPlaceholder": "No limit",
    "advancedWeightsTitle": "Advanced: Scoring Weights",
    "weightQuota": "Quota",
    "weightHealth": "Health",
    "weightCostInv": "Cost",
    "weightLatencyInv": "Latency",
    "weightTaskFit": "Task Fit",
    "weightStability": "Stability",
    "weightTierPriority": "Tier",
    "reviewIntelligentTitle": "Intelligent Routing Config",
    "strategyRecommendations": {
      "priority": {
        "title": "Fail-safe baseline",
        "description": "Use one primary model and keep fallback chain short and reliable.",
        "tip1": "Put your most reliable model first.",
        "tip2": "Keep 1-2 backup models with similar quality.",
        "tip3": "Use safe retries to absorb transient provider failures."
      },
      "weighted": {
        "title": "Controlled traffic split",
        "description": "Great for canary rollouts and gradual migration between models.",
        "tip1": "Start with conservative split like 90/10.",
        "tip2": "Keep the total at 100% and auto-balance after changes.",
        "tip3": "Monitor success and latency before increasing canary weight."
      },
      "round-robin": {
        "title": "Predictable load sharing",
        "description": "Best when models are equivalent and you need smooth distribution.",
        "tip1": "Use at least 2 models.",
        "tip2": "Set concurrency limits to avoid burst overload.",
        "tip3": "Use queue timeout to fail fast under saturation."
      },
      "random": {
        "title": "Quick spread with low setup",
        "description": "Use when you need simple distribution without strict guarantees.",
        "tip1": "Use models with similar latency profiles.",
        "tip2": "Keep retries enabled to absorb random misses.",
        "tip3": "Prefer this for experimentation, not strict SLAs."
      },
      "least-used": {
        "title": "Adaptive balancing",
        "description": "Routes to less-used models to reduce hotspots over time.",
        "tip1": "Works better under continuous traffic.",
        "tip2": "Combine with health checks for safer balancing.",
        "tip3": "Track per-model usage to validate distribution gains."
      },
      "cost-optimized": {
        "title": "Budget-first routing",
        "description": "Routes to lower-cost models when pricing metadata is available.",
        "tip1": "Ensure pricing coverage for all selected models.",
        "tip2": "Keep a quality fallback for hard prompts.",
        "tip3": "Use for batch/background jobs where cost is the main KPI."
      },
      "reset-aware": {
        "title": "Tetapkan semula putaran akaun sedar",
        "description": "Mengimbangi baki kuota pembekal terhadap masa penetapan semula.",
        "tip1": "Gunakan langkah akaun eksplisit atau penghalaan teg akaun untuk pembekal dengan telemetri kuota.",
        "tip2": "Sesi talaan vs berat mingguan apabila keletihan jangka pendek lebih berisiko.",
        "tip3": "Pastikan jalur seri kecil supaya akaun yang setara masih berputar secara adil."
      },
      "strict-random": {
        "title": "Shuffle deck distribution",
        "description": "Each model is used exactly once per cycle before reshuffling.",
        "tip1": "Use at least 2 models for meaningful distribution.",
        "tip2": "Works best with equivalent-performance models.",
        "tip3": "Ideal for load balancing across multiple API accounts."
      },
      "fill-first": {
        "description": "Habiskan kuota pembekal ekzos secara berurutan sebelum jatuh semula.",
        "tip1": "Gunakan untuk penghalaan berasaskan kuota dengan rantaian sandaran yang jelas.",
        "tip2": "Tetapkan kuota dengan tepat untuk mengelakkan sandaran pramatang.",
        "tip3": "Berfungsi paling baik dengan penyedia yang menawarkan peringkat percuma atau baldi kredit.",
        "title": "Keletihan Kuota"
      },
      "auto": {
        "description": "Laluan berdasarkan pemarkahan masa nyata untuk kos, kependaman, kualiti dan kesihatan.",
        "tip1": "Biarkan enjin mengimbangi pelbagai faktor secara automatik.",
        "tip2": "Pantau faktor yang mendorong keputusan penghalaan dalam log.",
        "tip3": "Gunakan untuk beban kerja yang kompleks di mana tiada faktor tunggal mendominasi.",
        "title": "Pengoptimuman Pelbagai Faktor"
      },
      "lkgp": {
        "description": "Laluan berdasarkan prestasi sejarah dan corak kejayaan.",
        "tip1": "Memerlukan sejarah permintaan yang mencukupi untuk ramalan yang tepat.",
        "tip2": "Baik untuk beban kerja dengan corak prestasi model yang konsisten.",
        "tip3": "Pantau ketepatan ramalan dan laraskan berat mengikut keperluan.",
        "title": "Penghalaan Berasaskan Sejarah"
      },
      "context-optimized": {
        "description": "Optimumkan penghalaan berdasarkan penggunaan tetingkap konteks dan kecekapan token.",
        "tip1": "Halakan perbualan panjang ke model dengan tetingkap konteks yang lebih besar.",
        "tip2": "Pantau penggunaan konteks untuk mengelakkan pembaziran token.",
        "tip3": "Terbaik untuk AI perbualan yang memerlukan pengekalan konteks yang meluas.",
        "title": "Pengoptimuman Konteks"
      },
      "context-relay": {
        "description": "Terbaik apabila penggiliran akaun dijangka dan akaun seterusnya mesti mewarisi ringkasan tugasan yang dipermudahkan.",
        "tip1": "Gunakan dengan pembekal memutar akaun untuk keluarga model yang sama.",
        "tip2": "Tetapkan ambang lepas tangan di bawah potongan kuota keras untuk masa penjanaan ringkasan.",
        "tip3": "Hanya tetapkan model ringkasan khusus jika yang utama terlalu mahal atau tidak stabil.",
        "title": "Keutamaan Kesinambungan Sesi"
      },
      "p2c": {
        "description": "Laluan ke pembekal dengan beban semasa paling rendah berdasarkan metrik masa nyata.",
        "tip1": "Pantau metrik kesihatan pembekal untuk penilaian beban yang tepat.",
        "tip2": "Berfungsi paling baik dengan kumpulan penyedia homogen.",
        "tip3": "Laraskan kepekaan untuk mengelakkan ayunan semasa pancang lalu lintas.",
        "title": "Kuasa Dua Pilihan"
      }
    },
    "templateFreeStack": "Free Stack ($0)",
    "templateFreeStackDesc": "Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding.",
    "auto": "Auto Combo",
    "autoDesc": "Self-healing smart routing pool (Performance optimized)",
    "lkgp": "LKGP Mode",
    "lkgpDesc": "Last Known Good Provider (Predictable resilience)",
    "wizardGuideTitle": "Getting Started with Combos",
    "wizardGuideDesc": "Create model combos to route AI traffic intelligently",
    "wizardGuideHint": "or click + Create Combo above",
    "createFirstCombo": "Create Your First Combo",
    "wizardStep1Title": "Name Your Combo",
    "wizardStep1Desc": "Give your combo a unique name to identify it in routing rules",
    "wizardStep2Title": "Add Models",
    "wizardStep2Desc": "Select AI models and arrange their fallback priority order",
    "wizardStep3Title": "Choose Strategy",
    "wizardStep3Desc": "Pick how requests are distributed across your models - 13 strategies available",
    "wizardStep4Title": "Review & Save",
    "wizardStep4Desc": "Review your configuration and activate the combo",
    "emailVisibilityStateOn": "On",
    "emailVisibilityStateOff": "Off",
    "reorderHandle": "Drag to reorder",
    "failedReorder": "Failed to reorder models",
    "builderFlowTitle": "Combo Builder Flow",
    "builderStage": {
      "basics": {
        "label": "Basics",
        "description": "Name and starting template"
      },
      "steps": {
        "label": "Steps",
        "description": "Provider, model, and account selection"
      },
      "strategy": {
        "label": "Strategy",
        "description": "Routing behavior and advanced settings"
      },
      "intelligent": {
        "label": "Smart Routing",
        "description": "Auto-routing candidate pool, presets, and scoring"
      },
      "review": {
        "label": "Review",
        "description": "Final validation before saving"
      }
    },
    "builderStageVisited": "Stage completed",
    "builderStageCurrent": "Current stage",
    "builderStagePending": "Pending",
    "builderStageLocked": "Locked — complete previous stage first",
    "builderTitle": "Build a Combo",
    "builderBrowseCatalog": "Browse catalog",
    "builderProvider": "Provider",
    "builderLoadingProviders": "Loading providers...",
    "builderSelectProvider": "Select provider",
    "builderModel": "Model",
    "builderSelectModel": "Select model",
    "builderProviderFirst": "Pick provider first",
    "builderAccount": "Account",
    "builderPreview": "Preview",
    "builderAddStep": "Add step",
    "builderDuplicateExact": "Langkah pembekal/model/akaun yang tepat ini sudah ada dalam kombo.",
    "builderComboRef": "Combo Ref",
    "builderAddComboRef": "Add combo reference",
    "builderComboRefStep": "Add combo reference",
    "builderPinnedAccount": "Pinned Account",
    "builderLegacyEntry": "Legacy entry",
    "reviewName": "Name",
    "reviewStrategy": "Strategy",
    "reviewSteps": "Steps",
    "reviewAccounts": "Accounts",
    "reviewProviders": "Providers",
    "reviewComboRefs": "Combo References",
    "reviewAdvanced": "Advanced Settings",
    "reviewAgentFlags": "Agent Flags",
    "reviewSequence": "Model Sequence",
    "reviewNoSteps": "No steps configured",
    "builderStagesDescription": "Lengkapkan setiap peringkat untuk menentukan gabungan, membina langkah, memilih strategi penghalaan dan menyemak hasil.",
    "builderStepsDescription": "Bina setiap langkah kombo mengikut urutan: pembekal, model, kemudian akaun. Ini membolehkan penggunaan semula pembekal dan model yang sama merentas akaun yang berbeza.",
    "selectProvider": "Pilih Pembekal",
    "selectProviderPlaceholder": "Pilih pembekal",
    "selectModel": "Pilih Model",
    "selectModelPlaceholder": "Pilih pembekal dahulu",
    "selectAccount": "Pilih Akaun",
    "selectComboToReference": "Pilih kombo untuk rujukan",
    "comboReference": "Rujukan Kombo",
    "addComboReference": "Tambah Rujukan Kombo",
    "addStepBeforeContinue": "Sila tambah sekurang-kurangnya satu langkah sebelum meneruskan ke peringkat seterusnya.",
    "previewNextStep": "Pratonton langkah seterusnya",
    "autoSelectAccount": "Pilih akaun secara automatik semasa masa jalan",
    "modePackBalanced": "Seimbang",
    "modePackBudget": "Bajet",
    "modePackPerformance": "Prestasi",
    "modePackCustom": "Adat",
    "browseLegacyCatalog": "Semak imbas katalog kombo lama",
    "agentFeaturesTitle": "Ciri-ciri Ejen",
    "agentFeaturesDescription": "Dayakan ciri lanjutan untuk ejen yang menggunakan kombo ini",
    "agentFeaturesSystemMessageOverride": "Gantikan mesej sistem",
    "agentFeaturesSystemMessagePlaceholder": "Anda seorang pembantu pakar...",
    "agentFeaturesSystemMessageHint": "Pembatalan mesej sistem untuk ejen",
    "agentFeaturesToolFilterRegex": "/regex-pattern/",
    "agentFeaturesToolFilterHint": "Regex penapis alat untuk ejen",
    "agentFeaturesContextCacheHint": "Dayakan cache dalam konteks untuk alat ejen",
    "agentFeaturesContextCacheProtection": "Lindungi cache daripada mutasi alat ejen",
    "agentFeaturesContextLength": "Panjang konteks",
    "agentFeaturesContextLengthPlaceholder": "cth. 128000",
    "agentFeaturesContextLengthHint": "Mentakrifkan tetingkap konteks untuk kombo ini dalam /v1/models.",
    "agentFeaturesContextLengthErrorInteger": "Panjang konteks mestilah integer yang sah",
    "agentFeaturesContextLengthErrorRange": "Panjang konteks mestilah antara 1000 dan 2000000",
    "compressionOverride": "Override Mampatan",
    "modePack": "Pek Mod"
  },
  "costs": {
    "title": "Kos",
    "pageDescription": "Jejaki perbelanjaan, analisa arah aliran dan urus belanjawan AI anda merentas semua penyedia",
    "overview": "Gambaran keseluruhan",
    "budget": "Bajet",
    "totalCost": "Jumlah Kos",
    "breakdown": "Pecahan Kos",
    "noData": "Tiada data kos",
    "byModel": "Mengikut Model",
    "byProvider": "Oleh Pembekal",
    "range7d": "7 Hari",
    "range30d": "30 Hari",
    "range90d": "90 Hari",
    "rangeAll": "Sepanjang Masa",
    "spend30d": "Spend30D",
    "activeModels": "Active Models",
    "selectedWindow": "Selected Window",
    "activeProviders": "Active Providers",
    "overviewTitle": "Overview Title",
    "spend7d": "Spend7D",
    "avgCostPerRequest": "Avg Cost Per Request",
    "noCostDataDescription": "No Cost Data Description",
    "spendToday": "Spend Today",
    "overviewLoadFailed": "Overview Load Failed",
    "overviewDescription": "Overview Description",
    "providerShare": "Provider Share",
    "topProviders": "Top Providers",
    "costTrend": "Cost Trend",
    "noCostDataTitle": "No Cost Data Title",
    "topModels": "Top Models",
    "requestsInWindow": "Requests In Window",
    "tokenUsage": "Penggunaan Token",
    "totalTokens": "Jumlah Token",
    "inputTokens": "Token Input",
    "outputTokens": "Token Keluaran",
    "inputOutputRatio": "Nisbah Input/Output",
    "tokens": "token",
    "routingEfficiency": "Kecekapan Laluan",
    "fallbackCount": "Permintaan Saling Balik",
    "fallbackRate": "Kadar Fallback",
    "modelCoverage": "Liputan Model",
    "modelCoverageDesc": "% permintaan dengan model eksplisit",
    "outOfRequests": "daripada {total} permintaan",
    "costByApiKey": "Kos mengikut Kunci API",
    "costByAccount": "Kos mengikut Akaun",
    "apiKeyName": "Kunci API",
    "account": "Akaun",
    "requests": "Permintaan",
    "cost": "kos",
    "dayStreak": "coretan hari",
    "weeklyUsagePattern": "Corak Penggunaan Mingguan",
    "activityHeatmap": "Aktiviti (365 hari)",
    "less": "Kurang",
    "more": "Lagi",
    "monthlyForecast": "Ramalan Bulanan",
    "forecastBasis": "Berdasarkan {days} hari yang lalu",
    "avgDailyCost": "Purata kos harian",
    "daysRemaining": "{days} hari lagi",
    "periodComparison": "Perbandingan Tempoh",
    "previousPeriod": "Separuh sebelumnya",
    "currentPeriod": "Separuh Semasa",
    "exportCSV": "Eksport sebagai CSV",
    "exportJSON": "Eksport sebagai JSON",
    "legacyFreeLabel": "__MISSING__:Legacy / Free",
    "costExplorerTitle": "Penjelajah Kos",
    "costExplorerDescription": "Terokai perbelanjaan mengikut penyedia, model, kunci API, akaun atau tahap perkhidmatan.",
    "groupProvider": "Penyedia",
    "groupModel": "Jenis model",
    "groupApiKey": "Kunci API",
    "groupAccount": "Akaun",
    "groupServiceTier": "Tahap perkhidmatan",
    "serviceTierFast": "__MISSING__:Fast",
    "serviceTierFlex": "__MISSING__:Flex",
    "serviceTierStandard": "__MISSING__:Standard",
    "serviceTierBreakdownTitle": "__MISSING__:Service Tier",
    "serviceTierBreakdownSubtitle": "__MISSING__:Fast / Flex / Standard split",
    "serviceTierUsageSaved": "__MISSING__:usage saved",
    "serviceTierCostSaved": "__MISSING__:saved",
    "serviceTierCostShareSuffix": "__MISSING__:of cost",
    "dimension": "Dimensi",
    "share": "Bahagian",
    "legacyOrFree": "Legasi / percuma",
    "filterRows": "Tapis baris…",
    "filterCostExplorerRows": "Tapis baris Penjelajah Kos",
    "noMatchingCostRows": "Tiada baris kos yang sepadan",
    "noMatchingCostRowsDescription": "Laraskan teks carian, pengelompokan atau tetingkap masa yang dipilih.",
    "showingCostRows": "Memaparkan {shown} daripada {total} baris yang sepadan.",
    "showingTopCostRows": "Memaparkan {shown} daripada {total} baris yang sepadan (50 teratas)."
  },
  "endpoint": {
    "title": "Titik Akhir API",
    "available": "Titik Akhir Tersedia",
    "cloudProxy": "Proksi Awan",
    "disableConfirm": "Adakah anda pasti mahu melumpuhkan proksi awan?",
    "baseUrl": "URL asas",
    "apiKeyLabel": "Kunci API",
    "registeredKeys": "Kunci Berdaftar",
    "chatCompletions": "Selesai Sembang",
    "responses": "Jawapan",
    "listModels": "Senaraikan Model",
    "usingCloudProxy": "Menggunakan Proksi Awan",
    "usingLocalServer": "Menggunakan Pelayan Tempatan",
    "machineId": "ID Mesin: {id}...",
    "disableCloud": "Lumpuhkan Cloud",
    "enableCloud": "Dayakan Cloud",
    "modelsAcrossEndpoints": "{models} model merentas {endpoints} titik akhir",
    "loadingModels": "Loading available models...",
    "chatDesc": "Sembang penstriman & bukan penstriman dengan semua pembekal",
    "embeddings": "Embeddings",
    "embeddingsDesc": "Pembenaman teks untuk carian & saluran paip RAG",
    "imageGeneration": "Penjanaan Imej",
    "imageDesc": "Hasilkan imej daripada gesaan teks",
    "rerank": "Kedudukan semula",
    "rerankDesc": "Susun semula dokumen mengikut kaitan dengan pertanyaan",
    "audioTranscription": "Transkripsi Audio",
    "audioTranscriptionDesc": "Transkripsikan fail audio kepada teks (Bisikan)",
    "textToSpeech": "Teks kepada Ucapan",
    "textToSpeechDesc": "Tukar teks kepada pertuturan yang berbunyi semula jadi",
    "musicGeneration": "Music Generation",
    "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)",
    "moderations": "Kesederhanaan",
    "moderationsDesc": "Penyederhanaan kandungan dan klasifikasi keselamatan",
    "responsesDesc": "OpenAI Responses API for Codex and advanced agentic workflows",
    "listModelsDesc": "List all available models across all connected providers",
    "settingsApiDesc": "Read and modify OmniRoute configuration via API",
    "settingsApi": "Settings API",
    "categoryCore": "API Teras",
    "categoryMedia": "Media & Multi-Modal",
    "categorySearch": "Search & Discovery",
    "categoryUtility": "Utiliti & Pengurusan",
    "webSearch": "Web Search",
    "webSearchDesc": "Unified web search across multiple providers with automatic failover and caching",
    "searchProvider": "Search Provider",
    "searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.",
    "enableCloudTitle": "Dayakan Cloud Proxy",
    "whatYouGet": "Apa yang anda akan dapat",
    "cloudBenefitAccess": "Akses API anda dari mana-mana sahaja di dunia",
    "cloudBenefitShare": "Kongsi titik akhir dengan pasukan anda dengan mudah",
    "cloudBenefitPorts": "Tidak perlu membuka port atau mengkonfigurasi tembok api",
    "cloudBenefitEdge": "Rangkaian kelebihan global yang pantas",
    "cloudSessionNote": "Cloud akan mengekalkan sesi pengesahan anda selama 1 hari. Jika tidak digunakan, ia akan dipadam secara automatik.",
    "cloudUnstableNote": "Cloud tidak stabil pada masa ini dengan Claude Code OAuth dalam beberapa kes.",
    "cloudConnected": "Proksi Awan disambungkan!",
    "connectingToCloud": "Menyambung ke awan...",
    "verifyingConnection": "Mengesahkan sambungan...",
    "connecting": "Menyambung...",
    "verifying": "Mengesahkan...",
    "connected": "Bersambung!",
    "disableCloudTitle": "Lumpuhkan Proksi Awan",
    "disableWarning": "Semua sesi pengesahan akan dipadamkan daripada awan.",
    "syncingData": "Menyegerakkan data terkini...",
    "disablingCloud": "Melumpuhkan awan...",
    "syncing": "Menyegerakkan...",
    "disabling": "Melumpuhkan...",
    "cloudConnectedVerified": "Cloud Proxy disambungkan dan disahkan!",
    "connectedVerificationPending": "Bersambung — pengesahan belum selesai",
    "connectedVerificationPendingWithError": "Disambungkan — pengesahan belum selesai: {error}",
    "cloudDisabledSuccess": "Cloud berjaya dilumpuhkan",
    "syncedSuccess": "Berjaya disegerakkan",
    "failedDisable": "Gagal melumpuhkan awan",
    "failedEnable": "Gagal mendayakan awan",
    "cloudRequestTimeout": "Tamat masa permintaan awan",
    "cloudRequestFailed": "Permintaan awan gagal",
    "cloudWorkerUnreachable": "Tidak dapat menghubungi pekerja awan. Pastikan perkhidmatan awan sedang berjalan (npm run dev in /cloud).",
    "connectionFailed": "Sambungan gagal",
    "syncFailed": "Gagal menyegerakkan data awan",
    "cloudflaredTitle": "Cloudflare Quick Tunnel",
    "cloudflaredDescription": "Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.",
    "cloudflaredUrlNotice": "Creates a temporary Cloudflare Quick Tunnel. URLs change after restart.",
    "cloudflaredEnable": "Enable Tunnel",
    "cloudflaredInstallAndEnable": "Install & Enable",
    "cloudflaredDisable": "Stop Tunnel",
    "cloudflaredRunning": "Running",
    "cloudflaredStarting": "Starting",
    "cloudflaredStoppedState": "Stopped",
    "cloudflaredNotInstalled": "Not installed",
    "cloudflaredUnsupported": "Unsupported",
    "cloudflaredError": "Error",
    "cloudflaredStarted": "Cloudflare tunnel started",
    "cloudflaredStopped": "Cloudflare tunnel stopped",
    "cloudflaredRequestFailed": "Failed to update Cloudflare tunnel",
    "cloudflaredTemporaryNote": "Quick Tunnel URLs are temporary and will change after restart.",
    "cloudflaredUnsupportedNote": "This platform is not supported for managed installation.",
    "cloudflaredIdleNote": "Create a temporary Cloudflare Quick Tunnel for this endpoint.",
    "cloudflaredLastError": "Last error: {error}",
    "providerModelsTitle": "{provider} — Model",
    "noModelsForProvider": "Tiada model tersedia untuk pembekal ini.",
    "chat": "Sembang",
    "embedding": "Membenamkan",
    "image": "Imej",
    "custom": "adat",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "sectionTitle": "Integration Surface",
    "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints",
    "tabApis": "OpenAI-compatible APIs",
    "tabProtocols": "Protocols",
    "tabsAria": "Endpoint sections",
    "protocolsTitle": "Protocols",
    "protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.",
    "mcpCardTitle": "MCP Server",
    "mcpCardDescription": "Model Context Protocol over stdio",
    "a2aCardTitle": "A2A Server",
    "a2aCardDescription": "Agent2Agent JSON-RPC endpoint",
    "protocolToolsLabel": "Tools",
    "protocolTasksLabel": "Tasks",
    "protocolActiveStreamsLabel": "Aliran aktif",
    "protocolLastActivity": "Aktiviti terakhir",
    "quickStart": "Mula Pantas",
    "openMcpDashboard": "Buka pengurusan MCP",
    "openA2aDashboard": "Buka pengurusan A2A",
    "mcpQuickStartTitle": "MCP Quick Start",
    "mcpQuickStartStep1": "Jalankan pelayan MCP melalui `omniroute --mcp`.",
    "mcpQuickStartStep2": "Konfigurasikan klien MCP anda untuk menyambung melalui pengangkutan stdio.",
    "mcpQuickStartStep3": "Panggil alatan seperti `omniroute_get_health` dan `omniroute_list_combos`.",
    "a2aQuickStartTitle": "A2A Mula Pantas",
    "a2aQuickStartStep1": "Temui kad ejen di `/.well-known/agent.json`.",
    "a2aQuickStartStep2": "Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.",
    "a2aQuickStartStep3": "Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`.",
    "completionsLegacy": "Completions (Legacy)",
    "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format",
    "messagesApi": "Mesej",
    "messagesApiDesc": "Format API Native Anthropic Messages untuk pembekal yang serasi dengan Claude",
    "imageEdits": "Suntingan Imej",
    "imageEditsDesc": "Edit dan ubah suai imej sedia ada dengan AI (inpainting, outpainting, variasi)",
    "batchApi": "API Kelompok",
    "batchApiDesc": "Proses kumpulan besar permintaan secara tidak segerak (serasi OpenAI)",
    "filesApi": "API Fail",
    "filesApiDesc": "Muat naik dan urus fail untuk pemprosesan kelompok",
    "videoGeneration": "Video Generation",
    "videoDesc": "Generate videos using AI models like ComfyUI and Stable Video Diffusion.",
    "tailscaleRequestFailed": "Failed to load Tailscale status",
    "tailscaleEnableFailed": "Failed to enable Tailscale Funnel",
    "tailscaleWaitingForLogin": "Complete the Tailscale login in the opened browser tab. OmniRoute will retry automatically.",
    "tailscaleLoginTimedOut": "Timed out waiting for Tailscale login",
    "tailscaleWaitingForFunnel": "Enable Funnel for this device in the opened browser tab. OmniRoute will keep polling.",
    "tailscaleFunnelTimedOut": "Timed out waiting for Tailscale Funnel to be enabled",
    "tailscaleStarted": "Tailscale Funnel enabled",
    "tailscaleDisableFailed": "Failed to disable Tailscale Funnel",
    "tailscaleStopped": "Tailscale Funnel disabled",
    "tailscaleInstallFailed": "Failed to install Tailscale",
    "tailscaleInstallProgress": "Working...",
    "tailscaleInstalled": "Tailscale installed successfully",
    "tailscaleRunning": "Running",
    "tailscaleNeedsLogin": "Needs Login",
    "tailscaleStoppedState": "Stopped",
    "tailscaleNotInstalled": "Not installed",
    "tailscaleUnsupported": "Unsupported",
    "tailscaleError": "Error",
    "tailscaleDisable": "Stop Funnel",
    "tailscaleInstallAndEnable": "Install & Enable",
    "tailscaleLoginAndEnable": "Login & Enable",
    "tailscaleEnable": "Enable Funnel",
    "tailscaleUrlNotice": "Uses your Tailscale .ts.net address. Login and Funnel approval may be required on first use.",
    "tailscaleTitle": "Tailscale Funnel",
    "tailscaleNeedsLoginHint": "Authenticate this machine with Tailscale, then enable Funnel.",
    "tailscaleBinaryPath": "Binary: {path}",
    "tailscaleLastError": "Last error: {error}",
    "tailscaleInstallTitle": "Install Tailscale",
    "tailscaleInstallIntro": "Installs Tailscale on this machine and prepares OmniRoute to enable Funnel.",
    "tailscaleInstallPasswordHint": "On macOS and Linux, sudo may be required for the package install and daemon start.",
    "tailscaleSudoPlaceholder": "Optional sudo password",
    "tailscaleInstalling": "Installing",
    "tailscaleSudoLabel": "Kata Laluan Sudo (diperlukan pada macOS/Linux)",
    "ngrokTitle": "Terowong ngrok",
    "ngrokRunning": "Berlari",
    "ngrokStarting": "Bermula",
    "ngrokStoppedState": "Berhenti",
    "ngrokNeedsAuth": "Memerlukan Auth",
    "ngrokNotInstalled": "Tidak dipasang",
    "ngrokUnsupported": "Tidak disokong",
    "ngrokError": "ralat",
    "ngrokEnable": "Dayakan Terowong",
    "ngrokDisable": "Berhenti Terowong",
    "ngrokUrlNotice": "Mencipta terowong ngrok awam.",
    "ngrokAuthTokenLabel": "Authtoken (Diperlukan jika NGROK_AUTHTOKEN tidak ditetapkan)",
    "ngrokAuthTokenPlaceholder": "Masukkan ngrok authtoken anda",
    "ngrokLastError": "Ralat terakhir: {error}",
    "ngrokStarted": "terowong ngrok bermula",
    "ngrokStopped": "terowong ngrok berhenti",
    "ngrokRequestFailed": "Gagal mengemas kini terowong ngrok",
    "tokenSaverSubtitle": "Kurangkan belanja token pada setiap permintaan.",
    "tokenSaverToolOutput": "Keluaran alat",
    "tokenSaverLlmOutput": "Keluaran LLM",
    "tokenSaverInputCompression": "Mampatan input",
    "apiEndpointsCatalogUnavailable": "Katalog API tidak tersedia",
    "apiEndpointsSearchPlaceholder": "Cari titik akhir...",
    "apiEndpointsRequiresAuth": "Memerlukan pengesahan",
    "apiEndpointsNoMatch": "Tiada titik akhir yang sepadan dengan penapis anda",
    "localServer": "Pelayan Tempatan",
    "cloudOmniroute": "Cloud OmniRoute",
    "copyUrl": "Salin URL",
    "badgeLoopbackTooltip": "__MISSING__:This endpoint is only accessible locally (loopback only)",
    "badgeAlwaysProtectedTooltip": "__MISSING__:This endpoint is always protected and requires authorization",
    "badgeInternalTooltip": "__MISSING__:This is an internal system endpoint",
    "tierAll": "__MISSING__:All",
    "tierAuth": "__MISSING__:Authenticated",
    "tierLoopback": "__MISSING__:Loopback",
    "tierAlwaysProtected": "__MISSING__:Always Protected",
    "tierPublic": "__MISSING__:Public",
    "hideInternal": "__MISSING__:Hide Internal",
    "showInternal": "__MISSING__:Show Internal"
  },
  "endpoints": {
    "tabProxy": "Endpoint Proxy",
    "tabApiEndpoints": "API Endpoints",
    "apiEndpointsTitle": "API Endpoints",
    "apiEndpointsDescription": "Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.",
    "comingSoon": "Coming Soon",
    "plannedFeatures": "Planned Features",
    "featureRestApi": "REST API endpoint catalog with interactive documentation",
    "featureWebhooks": "Webhook configuration and event subscriptions",
    "featureSwagger": "OpenAPI / Swagger spec auto-generation",
    "featureAuth": "API key and OAuth scope management per endpoint"
  },
  "mcpDashboard": {
    "loading": "Loading MCP dashboard...",
    "activate": "aktifkan",
    "deactivate": "deactivate",
    "confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?",
    "switchComboFailed": "Failed to switch combo state.",
    "switchComboSuccess": "Combo \"{combo}\" updated.",
    "confirmApplyProfile": "Apply resilience profile \"{profile}\"?",
    "applyProfileFailed": "Failed to apply resilience profile.",
    "applyProfileSuccess": "Profile \"{profile}\" applied.",
    "confirmResetBreakers": "Reset all circuit breakers?",
    "resetBreakersFailed": "Failed to reset circuit breakers.",
    "resetBreakersSuccess": "Circuit breakers reset.",
    "processStatus": "Process status",
    "online": "Online",
    "offline": "Offline",
    "disableLabel": "__MISSING__:Disable {label}",
    "enableLabel": "__MISSING__:Enable {label}",
    "transportMode": "__MISSING__:Transport Mode",
    "transportStdioDesc": "__MISSING__:Local — IDE spawns process via omniroute --mcp",
    "transportSseDesc": "__MISSING__:Remote — Server-Sent Events over HTTP",
    "transportStreamableHttpDesc": "__MISSING__:Remote — Modern bidirectional HTTP",
    "copy": "__MISSING__:Copy",
    "mcpDashboardCopyUrl": "Salin URL",
    "mcpDisabledTitle": "__MISSING__:MCP is disabled",
    "mcpDisabledDesc": "__MISSING__:Enable MCP above to configure transport mode and view server telemetry.",
    "mcpIntro": "__MISSING__:Model Context Protocol — {tools} tools across {scopes} scopes, {transports} transports (stdio / SSE / Streamable HTTP).",
    "mcpStep1": "__MISSING__:Run via {code}",
    "mcpStep2": "__MISSING__:Configure your MCP client to connect over stdio transport.",
    "mcpStep3": "__MISSING__:Invoke tools like {code1} and {code2}.",
    "pid": "PID",
    "sessionUptime": "Session uptime",
    "lastHeartbeat": "Last heartbeat",
    "activity24h": "Activity (24h)",
    "totalCalls": "Total calls",
    "successRate": "Success rate",
    "avgLatency": "Avg latency",
    "topTools": "Top tools",
    "noToolCalls24h": "No tool calls in the last 24 hours.",
    "runtimeDetails": "Runtime details",
    "transport": "Transport",
    "scopesEnforced": "Scopes enforced",
    "yes": "yes",
    "no": "no",
    "lastCall": "Last call",
    "heartbeatPath": "Heartbeat path",
    "operationalControls": "Operational controls",
    "switchCombo": "Switch combo",
    "inactive": "inactive",
    "active": "active",
    "activateCombo": "Activate combo",
    "deactivateCombo": "Deactivate combo",
    "applyResilienceProfile": "Apply resilience profile",
    "profileAggressive": "aggressive",
    "profileBalanced": "balanced",
    "profileConservative": "conservative",
    "applyProfile": "Apply profile",
    "resetCircuitBreakers": "Reset circuit breakers",
    "resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.",
    "resetAllBreakers": "Reset all breakers",
    "toolsAndScopes": "Tools and scopes",
    "tableTool": "Tool",
    "tableScopes": "Scopes",
    "tablePhase": "Phase",
    "tableAudit": "Audit",
    "auditLog": "Audit log",
    "auditSummary": "Calls: {total} | page {page} of {totalPages}",
    "allTools": "All tools",
    "allResults": "All results",
    "success": "Success",
    "failure": "Failure",
    "apiKeyIdPlaceholder": "apiKeyId",
    "loadingAuditEntries": "Loading audit entries...",
    "noAuditEntriesForFilters": "No audit entries found for current filters.",
    "tableTimestamp": "Timestamp",
    "tableDuration": "Duration",
    "tableResult": "Result",
    "tableApiKey": "API key",
    "failed": "failed",
    "previous": "Previous",
    "next": "Next",
    "apiKeyId": "Api Key Id",
    "offset": "Offset",
    "limit": "Limit",
    "tool": "Tool"
  },
  "a2aDashboard": {
    "loading": "Loading A2A dashboard...",
    "confirmCancelTask": "Cancel task {taskId}?",
    "cancelTaskFailed": "Failed to cancel task.",
    "cancelTaskSuccess": "Task {taskId} cancelled.",
    "smokeSendFailed": "message/send smoke test failed.",
    "smokeSendSuccessWithTask": "message/send ok (task {taskId}).",
    "smokeSendSuccess": "message/send ok.",
    "smokeStreamFailed": "message/stream smoke test failed.",
    "smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).",
    "smokeStreamNoTaskId": "message/stream finished without task id.",
    "health": "Health",
    "ok": "ok",
    "totalTasks": "Total tasks",
    "activeStreams": "Aliran aktif",
    "lastTask": "Last task",
    "taskStateOverview": "Task state overview",
    "state": {
      "submitted": "submitted",
      "working": "working",
      "completed": "completed",
      "failed": "failed",
      "cancelled": "cancelled"
    },
    "agentCard": "Agent card",
    "agentCardPath": "__MISSING__:/.well-known/agent.json",
    "version": "Version",
    "url": "URL",
    "capabilities": "Capabilities",
    "agentCardNotAvailable": "Agent card not available.",
    "quickValidation": "Quick validation",
    "quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.",
    "runMessageSend": "Run message/send",
    "runMessageStream": "Run message/stream",
    "taskManagement": "Task management",
    "taskSummary": "{total} tasks | page {page} of {totalPages}",
    "allStates": "all",
    "allSkills": "all skills",
    "loadingTasks": "Loading tasks...",
    "noTasksForFilters": "No tasks found for current filters.",
    "tableTask": "Task",
    "tableSkill": "Skill",
    "tableState": "State",
    "tableUpdated": "Updated",
    "tableActions": "Actions",
    "view": "View",
    "cancel": "Cancel",
    "previous": "Previous",
    "next": "Next",
    "taskDetail": "Task detail",
    "close": "Close",
    "metadata": "Metadata",
    "events": "Events",
    "artifacts": "Artifacts",
    "tablePhase": "Table Phase",
    "offset": "Offset",
    "limit": "Limit",
    "skill": "Skill",
    "rpcEndpoint": "POS /a2a",
    "rpcMethodSend": "mesej/hantar",
    "rpcMethodStream": "mesej/strim",
    "rpcMethodGet": "tugasan/dapat",
    "rpcMethodCancel": "tugasan/batal",
    "serviceLabel": "A2A",
    "online": "__MISSING__:Online",
    "offline": "__MISSING__:Offline",
    "disableLabel": "__MISSING__:Disable {label}",
    "enableLabel": "__MISSING__:Enable {label}",
    "a2aDisabledTitle": "__MISSING__:A2A is disabled",
    "a2aDisabledDesc": "__MISSING__:Enable A2A above to view task telemetry, agent details, and validation tools.",
    "a2aIntro": "__MISSING__:Agent2Agent JSON-RPC 2.0 endpoint — send tasks, stream responses, cancel in-flight jobs.",
    "a2aStep1": "__MISSING__:Discover the agent card at {code}.",
    "a2aStep2": "__MISSING__:Send JSON-RPC to {code1} using {code2} or {code3}.",
    "a2aStep3": "__MISSING__:Track and cancel tasks with {code1} and {code2}."
  },
  "memory": {
    "title": "Memory Management",
    "description": "View and manage stored memory entries",
    "memories": "Memories",
    "totalEntries": "Total Entries",
    "tokensUsed": "Tokens Used",
    "hitRate": "Hit Rate",
    "loading": "Loading memories...",
    "noMemories": "No memories found",
    "search": "Search memories...",
    "allTypes": "All Types",
    "export": "Export",
    "import": "Import",
    "addMemory": "Add Memory",
    "type": "Type",
    "key": "Key",
    "content": "Content",
    "created": "Created",
    "actions": "Actions",
    "delete": "Delete",
    "factual": "Factual",
    "episodic": "Episodic",
    "procedural": "Procedural",
    "semantic": "Semantic",
    "a": "A",
    "pipelineOk": "Saluran paip OK ({latencyMs}ms)",
    "pipelineError": "Ralat saluran paip",
    "healthUnknown": "Kesihatan tidak diketahui",
    "checkingHealth": "Menyemak…",
    "checkHealth": "Periksa kesihatan",
    "pageInfo": "Halaman {page} daripada {totalPages} ({total} jumlah)",
    "previous": "Sebelumnya",
    "next": "Seterusnya",
    "cancel": "Batal",
    "save": "Jimat",
    "keyPlaceholder": "cth. pengguna.keutamaan.tema",
    "contentPlaceholder": "Nilai atau kandungan JSON untuk diingati"
  },
  "skills": {
    "title": "Skills",
    "description": "Manage and monitor AI skills",
    "skillsTab": "Skills",
    "executionsTab": "Executions",
    "sandboxTab": "Sandbox",
    "loading": "Loading skills...",
    "noSkills": "No skills found",
    "noExecutions": "No executions found",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "version": "Version",
    "tableDescription": "Description",
    "skill": "Skill",
    "status": "Status",
    "duration": "Duration",
    "time": "Time",
    "sandboxConfig": "Sandbox Configuration",
    "cpuLimit": "CPU Limit",
    "cpuLimitDesc": "Maximum execution time per skill",
    "memoryLimit": "Memory Limit",
    "memoryLimitDesc": "Maximum memory allocation",
    "timeout": "Timeout",
    "timeoutDesc": "Maximum wait time for response",
    "networkAccess": "Network Access",
    "networkAccessDesc": "Allow outbound network requests",
    "mode": "Mode",
    "q": "Q",
    "filterSkillsPlaceholder": "Tapis kemahiran mengikut nama, perihalan atau tag",
    "allModes": "Semua mod",
    "totalSkills": "__MISSING__:Total Skills",
    "enabledSkills": "__MISSING__:Enabled",
    "totalExecutions": "__MISSING__:Executions",
    "successRate": "__MISSING__:Success Rate",
    "marketplaceTab": "__MISSING__:Marketplace",
    "applyFilters": "__MISSING__:Apply filters",
    "popularDefaultsLabel": "__MISSING__:Popular by default for selected provider:",
    "onMode": "__MISSING__:ON",
    "offMode": "__MISSING__:OFF",
    "autoMode": "__MISSING__:AUTO",
    "installSkillButton": "__MISSING__:Install Skill",
    "installSkillModalTitle": "__MISSING__:Install Skill",
    "installJsonPlaceholder": "__MISSING__:Paste skill manifest JSON here...",
    "installing": "__MISSING__:Installing...",
    "installSuccess": "__MISSING__:Skill installed ({id})",
    "installError": "__MISSING__:Install failed",
    "invalidJson": "__MISSING__:Invalid JSON",
    "searchMarketplacePlaceholder": "__MISSING__:Search skills...",
    "searchMarketplace": "__MISSING__:Search Marketplace",
    "marketplaceEmpty": "__MISSING__:No skills found in marketplace",
    "marketplaceError": "__MISSING__:Search failed",
    "installingFromMarketplace": "__MISSING__:Installing from marketplace...",
    "popularSkills": "__MISSING__:Popular Skills",
    "skillsMarketplace": "Pasaran Kemahiran",
    "searching": "__MISSING__:Searching...",
    "pageInfo": "__MISSING__:Page {page} of {totalPages} ({total} total)",
    "previous": "__MISSING__:Previous",
    "next": "__MISSING__:Next",
    "activeProvider": "__MISSING__:Active provider:",
    "changeInSettings": "__MISSING__:Change this in Settings → Memory & Skills.",
    "installs": "__MISSING__:installs",
    "marketplaceSkillsMpHint": "__MISSING__:Configure your SkillsMP API key in Settings to browse the marketplace.",
    "marketplaceSkillsShHint": "__MISSING__:Search the skills.sh open directory to discover and install agent skills.",
    "installSkillModalDesc": "__MISSING__:Paste a skill manifest JSON or upload a .json file.",
    "uploadJson": "__MISSING__:Upload JSON",
    "cancel": "__MISSING__:Cancel",
    "installSkill": "Pasang Kemahiran"
  },
  "health": {
    "title": "Kesihatan Sistem",
    "description": "Pemantauan masa nyata bagi tika OmniRoute anda",
    "healthy": "Sihat",
    "degraded": "Dihina",
    "down": "Bawah",
    "uptime": "Masa aktif",
    "memory": "Ingatan",
    "memoryRss": "Memori (RSS)",
    "heap": "Timbunan",
    "cpu": "CPU",
    "database": "Pangkalan data",
    "version": "Versi",
    "lastCheck": "Semakan Terakhir",
    "providerHealth": "Kesihatan Pembekal",
    "systemMetrics": "Metrik Sistem",
    "tokenHealth": "Kesihatan Token",
    "refreshAll": "Muat semula Semua",
    "checkNow": "Semak Sekarang",
    "loadingHealth": "Memuatkan data kesihatan...",
    "failedToLoad": "Gagal memuatkan data kesihatan: {error}",
    "retry": "Cuba semula",
    "allOperational": "Semua sistem beroperasi",
    "issuesDetected": "Isu sistem dikesan",
    "updatedAt": "Dikemas kini {time}",
    "latency": "Latensi",
    "latencyP50": "p50",
    "latencyP95": "p95",
    "latencyP99": "p99",
    "millisecondsShort": "{value}ms",
    "notAvailable": "—",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Tiada data lagi",
    "promptCache": "Cache Prompt",
    "entries": "entri",
    "hitRate": "Kadar Hit",
    "hitsMisses": "Hit / Rindu",
    "signatureCache": "Cache Tandatangan",
    "signatureDefaults": "Lalai",
    "signatureTool": "alat",
    "signatureFamily": "Keluarga",
    "signatureSession": "Sesi",
    "recovering": "Pulih",
    "noCBData": "Tiada data pemutus litar tersedia. Buat beberapa permintaan dahulu.",
    "providerHealthStatusAria": "Status kesihatan pembekal",
    "issuesLabel": "Isu Dikesan",
    "operational": "Beroperasi",
    "providers": "Pembekal",
    "configuredProvidersLabel": "Dikonfigurasikan dalam papan pemuka",
    "configuredProvidersHint": "Pembekal dengan bukti kelayakan disimpan dalam /papan pemuka/penyedia, tanpa mengira keadaan masa jalan.",
    "activeProviders": "{count} active",
    "activeProvidersHint": "Penyedia yang dikonfigurasikan pada masa ini didayakan untuk permintaan penghalaan.",
    "monitoredProviders": "{count} monitored",
    "monitoredProvidersHint": "Pembekal kini dijejaki oleh pemantau kesihatan pemutus litar.",
    "healthyCount": "{count} sihat",
    "nodeVersion": "Nod {version}",
    "failures": "{count} kegagalan",
    "failuresPlural": "{count} kegagalan",
    "lastFailure": "Terakhir",
    "rateLimitStatus": "Status Had Kadar",
    "activeLimiters": "{count} pengehad aktif",
    "activeLimitersPlural": "{count} pengehad aktif",
    "queued": "Beratur",
    "queuedCount": "{count} beratur",
    "running": "berlari",
    "runningCount": "{count} berjalan",
    "ok": "OK",
    "activeLockouts": "Sekatan Aktif",
    "resetConfirm": "Tetapkan semula semua pemutus litar kepada keadaan sihat? Ini akan mengosongkan semua kiraan kegagalan dan memulihkan semua pembekal kepada status operasi.",
    "resetAllTitle": "Tetapkan semula semua pemutus litar kepada keadaan sihat",
    "resetting": "Menetapkan semula...",
    "resetAll": "Tetapkan Semula Semua",
    "until": "Sehingga {time}",
    "limitExhausted": "Exhausted",
    "learnedFromHeaders": "Learned from headers",
    "remainingOfLimit": "{remaining}/{limit} remaining",
    "throttleStatus": "Throttle: {value}",
    "lastHeaderUpdate": "Header update: {age}",
    "databaseHealth": "Kesihatan Pangkalan Data",
    "stickyBoundSessions": "Sesi terikat melekit",
    "sessionsByApiKey": "Sesi mengikut kunci API",
    "noActiveSessionsTracked": "Tiada sesi aktif lagi dikesan.",
    "noSessionQuotaMonitorsActive": "Tiada pemantau kuota sesi aktif.",
    "gracefulDegradationStatus": "Status Kemerosotan Anggun",
    "additionalModels": "+{count} lagi model",
    "providerHealthMatrixTitle": "__MISSING__:Provider Health Matrix",
    "providerHealthMatrixDescription": "__MISSING__:Provider × account × model states from breakers, cooldowns, lockouts and logs.",
    "healthMatrixRange": "__MISSING__:Health matrix range",
    "providerFilter": "__MISSING__:Provider filter",
    "onlyIssues": "__MISSING__:Only issues",
    "refresh": "__MISSING__:Refresh",
    "accounts": "__MISSING__:Accounts",
    "models": "__MISSING__:Models",
    "issues": "__MISSING__:Issues",
    "loadingProviderHealthMatrix": "__MISSING__:Loading provider health matrix...",
    "failedProviderHealthMatrix": "__MISSING__:Failed to load Provider Health Matrix: {error}",
    "noProvidersMatchedFilters": "__MISSING__:No providers matched the current filters.",
    "modelPillSummary": "__MISSING__:{requests} req · {successRate} success · {latency} avg",
    "modelLockoutSummary": "__MISSING__:{reason} · {duration} left",
    "locked": "__MISSING__:locked",
    "inferred": "__MISSING__:inferred",
    "inactive": "__MISSING__:Inactive",
    "noConnectionId": "__MISSING__:no connection id",
    "accountModelSummary": "__MISSING__:{connectionId} · {count} models",
    "cooldown": "__MISSING__:cooldown",
    "durationRemaining": "__MISSING__:{duration} remaining",
    "noSyncedModelsOrTraffic": "__MISSING__:No synced models or recent traffic yet.",
    "providerRowSummary": "__MISSING__:{active}/{total} active accounts · {requests} req · {successRate} success · {latency} avg",
    "cooldownCount": "__MISSING__:{count} cooldown",
    "lockoutCount": "__MISSING__:{count} lockouts",
    "issueCount": "__MISSING__:{count} issues",
    "score": "__MISSING__:Score",
    "lastRequest": "__MISSING__:Last request",
    "lastError": "__MISSING__:Last error"
  },
  "telemetry": {
    "title": "Sistem Telemetri",
    "description": "Permintaan bergulir, masa jalan, sesi dan isyarat memori daripada proses OmniRoute ini.",
    "uptime": "Masa aktif",
    "totalRequests": "Jumlah Permintaan",
    "avgLatency": "Purata Latensi",
    "errorRate": "Kadar Ralat",
    "activeConnections": "Sambungan Aktif",
    "memoryUsage": "Penggunaan Memori",
    "latencyTrend": "Aliran kependaman",
    "throughputTrend": "Trend throughput",
    "memoryTrend": "Trend ingatan",
    "refresh": "Segarkan semula",
    "updatedAt": "Dikemas kini {time}",
    "loadFailed": "Gagal memuatkan telemetri.",
    "partialData": "Telemetri tersedia sebahagiannya: {error}"
  },
  "mitm": {
    "title": "Proksi MITM",
    "description": "Proksi telus untuk memintas dan menghala permintaan pelanggan.",
    "enable": "Dayakan Proksi MITM",
    "enableDesc": "Mulakan atau hentikan proses pemintasan setempat dan penggantian DNS.",
    "status": "Status",
    "running": "Berlari",
    "stopped": "Berhenti",
    "start": "Mulakan",
    "stop": "Berhenti",
    "refresh": "Segarkan semula",
    "port": "Pelabuhan Proksi",
    "apiKey": "Kunci API Penghala",
    "apiKeyPlaceholder": "Pilihan; kembali kepada kunci tempatan",
    "sudoPassword": "Kata Laluan Sudo",
    "cachedPassword": "Dicache untuk proses ini",
    "saveSettings": "Simpan Tetapan",
    "settingsSaved": "Tetapan MITM disimpan.",
    "startedSuccess": "Proksi MITM bermula.",
    "stoppedSuccess": "Proksi MITM berhenti.",
    "saveFailed": "Gagal mengemas kini tetapan MITM.",
    "loadFailed": "Gagal memuatkan tetapan MITM.",
    "invalidPort": "Pemintasan MITM telus pada masa ini memerlukan port 443.",
    "certificate": "Sijil CA",
    "certificateReady": "Sijil tersedia untuk pemasangan kepercayaan pelanggan.",
    "certificateMissing": "Sijil belum dijana lagi.",
    "available": "Tersedia",
    "missing": "hilang",
    "downloadCert": "Muat turun Sijil CA",
    "regenerateCert": "Sijil Menjana Semula",
    "regenerateConfirm": "Ini akan membatalkan kepercayaan pelanggan sedia ada. teruskan?",
    "regenerateSuccess": "Sijil MITM dijana semula.",
    "regenerateFailed": "Gagal menjana semula sijil MITM.",
    "targetRoutes": "Laluan Sasaran",
    "interceptedRequests": "Permintaan Dipintas",
    "activeConnections": "Sambungan Aktif",
    "dnsConfigured": "DNS Dikonfigurasikan",
    "pid": "PID",
    "lastIntercept": "Pemintas Terakhir",
    "target": "Sasaran",
    "host": "hos",
    "localPort": "Pelabuhan Tempatan",
    "endpoints": "Titik akhir",
    "enabled": "Didayakan",
    "configured": "Dikonfigurasikan",
    "yes": "ya",
    "no": "Tidak",
    "noTargets": "Tiada laluan sasaran dikonfigurasikan."
  },
  "limits": {
    "title": "Had & Kuota",
    "rateLimit": "Had Kadar",
    "remaining": "yang tinggal",
    "requestsPerMinute": "Permintaan/min",
    "tokensPerMinute": "Token/min",
    "dailyLimit": "Had Harian"
  },
  "logs": {
    "title": "Log",
    "requestLogs": "Permintaan Log",
    "proxyLogs": "Log Proksi",
    "auditLog": "Log Audit",
    "console": "Konsol",
    "auditLogDesc": "Tindakan pentadbiran dan acara keselamatan",
    "loading": "Memuatkan...",
    "refresh": "Segarkan semula",
    "filterByAction": "Tapis mengikut tindakan...",
    "filterByActor": "Tapis mengikut pelakon...",
    "filterEntriesAria": "Tapis entri log audit",
    "filterByActionTypeAria": "Tapis mengikut jenis tindakan",
    "filterByActorAria": "Tapis mengikut pelakon",
    "refreshAuditLogAria": "Muat semula log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "showing": "Menunjukkan entri {count} (mengimbangi {offset})",
    "search": "Cari",
    "timestamp": "Cap masa",
    "action": "Tindakan",
    "actor": "pelakon",
    "target": "Sasaran",
    "details": "Butiran",
    "ipAddress": "Alamat IP",
    "notAvailable": "—",
    "noEntries": "Tiada entri log audit ditemui",
    "previous": "Sebelumnya",
    "next": "Seterusnya",
    "providerWarningTitle": "Provider Warning Title",
    "viewDetails": "View Details",
    "eventMetadata": "Event Metadata",
    "eventPayload": "Event Payload",
    "requestId": "Request Id",
    "providerWarningDesc": "Provider Warning Desc",
    "a": "A",
    "offset": "Offset",
    "limit": "Limit",
    "status": "Status",
    "resourceType": "Resource Type",
    "totalEntries": "Total Entries",
    "tab": "Tab",
    "auditModalSubtitle": "Audit Modal Subtitle",
    "close": "Close",
    "runningRequests": "Active Requests",
    "runningRequestsDesc": "Real-time view of currently running upstream requests",
    "clearAll": "Kosongkan Semua",
    "confirmClearActiveRequests": "Kosongkan semua permintaan aktif?",
    "model": "Model",
    "provider": "Provider",
    "account": "Account",
    "elapsed": "Elapsed",
    "activeStage": "__MISSING__:Stage",
    "activeStageUnknown": "__MISSING__:Not sent to upstream yet",
    "activeStageRegistered": "__MISSING__:Registered",
    "activeStagePayloadPrepared": "__MISSING__:Payload prepared",
    "activeStageWaitingAccountSlot": "__MISSING__:Waiting for account slot",
    "activeStageWaitingRateLimit": "__MISSING__:Waiting for rate limiter",
    "activeStageRateLimitSlotAcquired": "__MISSING__:Rate limit slot acquired",
    "activeStageSendingToProvider": "__MISSING__:Sending to upstream",
    "activeStageProviderResponseStarted": "__MISSING__:Upstream response started",
    "count": "Count",
    "payloads": "Payloads",
    "viewPayloads": "View",
    "activeCount": "{count} active",
    "clientPayload": "Client Request Payload",
    "upstreamPayload": "Upstream Provider Payload",
    "upstreamNotSentYet": "Not sent to upstream yet",
    "runningRequestDetailMeta": "Account: {account} — Elapsed: {elapsed}",
    "export": "Export",
    "exporting": "Exporting...",
    "exportFailed": "Export failed",
    "timeRange": "Time Range",
    "lastNHours": "Last {hours}",
    "defaultRange": "default",
    "consoleViewer": {
      "fetchFailed": "Failed to fetch logs",
      "copyFailed": "Failed to copy log entry",
      "copyLogEntry": "Copy log entry"
    }
  },
  "onboarding": {
    "welcome": "Selamat datang",
    "security": "Keselamatan",
    "test": "Ujian",
    "ready": "sedia!",
    "setPassword": "Tetapkan Kata Laluan",
    "addProvider": "Tambahkan pembekal pertama anda",
    "getStarted": "Mulakan",
    "skip": "Langkau",
    "skipWizard": "Langkau wizard sepenuhnya",
    "skipPassword": "Langkau persediaan kata laluan",
    "skipAndContinue": "Langkau & Teruskan",
    "passwordLabel": "Kata laluan",
    "confirmPassword": "Sahkan Kata Laluan",
    "enterPassword": "Masukkan kata laluan",
    "confirmPasswordPlaceholder": "Sahkan kata laluan",
    "passwordsMismatch": "Kata laluan tidak sepadan",
    "setupComplete": "Persediaan Selesai!",
    "goToDashboard": "Pergi ke Papan Pemuka →",
    "welcomeDesc": "OmniRoute ialah proksi API AI tempatan anda. Ia mengarahkan permintaan kepada berbilang penyedia AI dengan pengimbangan beban, failover dan penjejakan penggunaan.",
    "multiProvider": "Pelbagai Pembekal",
    "usageTracking": "Penjejakan Penggunaan",
    "securityDesc": "Tetapkan kata laluan untuk melindungi papan pemuka anda atau langkau buat masa ini.",
    "providerDesc": "Sambungkan pembekal AI pertama anda. Anda boleh menambah lagi kemudian.",
    "apiKeyRequired": "Kunci API (diperlukan)",
    "customUrlOptional": "URL tersuai (pilihan)",
    "testDesc": "Mari sahkan sambungan pembekal anda berfungsi.",
    "runTest": "Jalankan Ujian Sambungan",
    "testingConnection": "Menguji sambungan...",
    "connectionSuccessful": "Sambungan berjaya! Pembekal anda sudah bersedia.",
    "noProviderFound": "Tiada pembekal ditemui. Anda boleh menambah satu daripada papan pemuka kemudian.",
    "testFailed": "Ujian gagal, tetapi anda boleh mengkonfigurasi ini kemudian.",
    "couldNotTest": "Tidak dapat menguji sekarang. Anda boleh menguji dari papan pemuka.",
    "doneDesc": "Anda sudah bersedia! Contoh OmniRoute anda dikonfigurasikan dan bersedia untuk memproksi permintaan AI.",
    "yourEndpoint": "Titik akhir anda:",
    "continue": "teruskan",
    "retry": "Cuba semula",
    "failedSetPassword": "Gagal menetapkan kata laluan. Cuba lagi.",
    "failedAddProvider": "Gagal menambah pembekal. Cuba lagi.",
    "connectionError": "Ralat sambungan. Sila cuba lagi.",
    "provider": "Pembekal",
    "apiKeyHelp": "Kunci API ialah kata laluan untuk perkhidmatan AI. Dapatkan satu daripada tapak web pembekal anda (cth., platform.openai.com, console.anthropic.com).",
    "tier": {
      "subtitle": "OmniRoute menyusun penyedia kepada tiga peringkat supaya penghalaan lebih mengutamakan laluan yang paling boleh dipercayai dan kos terendah.",
      "tier1": {
        "label": "Pelanggan premium",
        "description": "CLI kelas pertama dengan aliran auth asli dan model penaakulan."
      },
      "tier2": {
        "label": "Dioptimumkan kos",
        "description": "Penyedia yang murah dan berkemampuan tinggi digunakan untuk trafik harian."
      },
      "tier3": {
        "label": "Fallback & kepakaran",
        "description": "Titik akhir yang dihoskan tempatan atau khusus digunakan sebagai sandaran."
      },
      "configure": "Konfigurasikan pembekal"
    },
    "tierFlowDiagramAlt": "Gambar rajah sandar 3 peringkat OmniRoute",
    "apiKeyMgmt": "Mgmt Kunci API"
  },
  "providers": {
    "title": "Pembekal",
    "allProviders": "Semua Penyedia",
    "audioProviders": "Pembekal Audio",
    "showFreeOnly": "Percuma sahaja",
    "addProvider": "Tambah Pembekal",
    "addFirstProvider": "Tambahkan pembekal pertama anda",
    "addFirstProviderDesc": "Sambungkan pembekal AI untuk memulakan penghalaan permintaan melalui OmniRoute. Anda boleh menggunakan pembekal percuma, kunci API atau akaun OAuth.",
    "learnMore": "Ketahui lebih lanjut",
    "editProvider": "Edit Pembekal",
    "deleteProvider": "Padamkan Pembekal",
    "noProviders": "Tiada pembekal dikonfigurasikan",
    "modelAvailability": "Ketersediaan Model",
    "accounts": "Akaun",
    "newAccount": "Akaun Baru",
    "deleteConfirm": "Adakah anda pasti mahu memadamkan pembekal ini?",
    "testing": "Menguji...",
    "testConnection": "Sambungan Ujian",
    "testSuccess": "Sambungan berjaya",
    "testFailed": "Sambungan gagal",
    "available": "Tersedia",
    "cooldown": "Cooldown",
    "unavailable": "Tidak tersedia",
    "unknown": "Tidak diketahui",
    "oauthLabel": "OAuth",
    "compatibleLabel": "serasi",
    "chat": "Sembang",
    "responses": "Jawapan",
    "messages": "Mesej",
    "oauthProviders": "Pembekal OAuth",
    "freeProviders": "Pembekal Percuma",
    "apiKeyProviders": "Pembekal Kunci API",
    "compatibleProviders": "Pembekal Serasi Kunci API",
    "testAll": "Uji Semua",
    "testAllOAuth": "Uji semua sambungan OAuth",
    "testAllFree": "Uji semua sambungan Percuma",
    "testAllApiKey": "Uji semua sambungan Kunci API",
    "testAllCompatible": "Uji semua sambungan yang Serasi",
    "connected": "{count} Disambungkan",
    "errorCount": "{count} Ralat ({code})",
    "errorCountNoCode": "{count} Ralat",
    "warningCount": "{count} Amaran",
    "noConnections": "Tiada sambungan",
    "expiredBadge": "Expired",
    "expiringSoonBadge": "Expiring Soon",
    "freeTier": "Peringkat Percuma",
    "freeTierAvailable": "Peringkat percuma tersedia",
    "hasFreeTooltip": "__MISSING__:Free tier available",
    "noAuthLabel": "__MISSING__:No Auth",
    "noAuthProviders": "__MISSING__:No Auth Providers",
    "upstreamProxyLabel": "__MISSING__:Upstream Proxy",
    "freeAggregated": "__MISSING__:All providers with free tier (also shown in their native category)",
    "deprecated": "Ditamatkan",
    "deprecatedProvider": "Pembekal ini telah ditamatkan",
    "riskNotice": {
      "title": "__MISSING__:Before continuing",
      "tooltip": "__MISSING__:Provider with usage caveats — click for details",
      "oauth": "__MISSING__:This provider uses your official product session/OAuth, which is not authorized for proxy/router use.\n\nWe don't recommend intensive autonomous agent usage (OpenCloud-style, long multi-step flows, large batches) — the upstream may react by restricting or banning the account.\n\nUse at your own risk.",
      "webCookie": "__MISSING__:This provider authenticates through your web session cookies. The upstream service may invalidate the session at any time, requiring you to log in again. Not recommended for long unattended operations.\n\nUse at your own risk.",
      "deprecated": "__MISSING__:This provider was discontinued by its upstream and may stop working without notice. Existing connections may continue working until the upstream fully removes access. Consider alternatives.",
      "dontShowAgain": "__MISSING__:Don't show this again for this provider",
      "understand": "__MISSING__:I understand, continue",
      "cancel": "__MISSING__:Cancel"
    },
    "disabled": "Dilumpuhkan",
    "enableProvider": "Dayakan pembekal",
    "disableProvider": "Lumpuhkan pembekal",
    "testResults": "Keputusan Ujian",
    "noCompatibleYet": "Tiada pembekal yang serasi ditambah lagi",
    "compatibleHint": "Gunakan butang di atas untuk menambah titik akhir serasi OpenAI atau Anthropic",
    "addOpenAICompatible": "Tambah OpenAI Compatible",
    "addAnthropicCompatible": "Tambah Anthropic Compatible",
    "addNewProvider": "Tambah Penyedia Baharu",
    "backToProviders": "Kembali ke Penyedia",
    "configureNewProvider": "Konfigurasikan pembekal AI baharu untuk digunakan dengan aplikasi anda.",
    "providerLabel": "Pembekal",
    "selectProvider": "Pilih pembekal",
    "selectedProvider": "Pembekal terpilih",
    "authMethod": "Kaedah Pengesahan",
    "apiKeyLabel": "Kunci API",
    "apiKeyRequired": "Kunci API diperlukan",
    "selectProviderRequired": "Sila pilih pembekal",
    "enterApiKey": "Masukkan kunci API anda",
    "apiKeySecure": "Kunci API anda akan disulitkan dan disimpan dengan selamat.",
    "oauth2Connect": "Berhubung dengan OAuth2",
    "oauth2Label": "OAuth2",
    "oauth2Desc": "Sambungkan akaun anda menggunakan pengesahan OAuth2.",
    "displayName": "Nama Paparan",
    "displayNamePlaceholder": "cth., API Pengeluaran, Persekitaran Dev",
    "displayNameHint": "Pilihan. Nama yang mesra untuk mengenal pasti konfigurasi ini.",
    "active": "Aktif",
    "activeDescription": "Dayakan pembekal ini untuk digunakan dalam aplikasi anda",
    "cancel": "Batal",
    "createProvider": "Buat Pembekal",
    "failedCreate": "Gagal membuat pembekal",
    "errorOccurred": "Ralat berlaku. Sila cuba lagi.",
    "modelStatus": "Status Model",
    "showConfiguredOnly": "Configured only",
    "allModelsOperational": "Semua model beroperasi",
    "modelsWithIssues": "{count} model dengan isu",
    "allModelsNormal": "Semua model bertindak balas secara normal.",
    "cooldownCleared": "Cooldown dikosongkan untuk {model}",
    "failedClearCooldown": "Gagal mengosongkan cooldown",
    "loadingAvailability": "Memuatkan ketersediaan model...",
    "clearCooldown": "Jelas",
    "clearing": "Membersihkan...",
    "until": "Sehingga {time}",
    "providerTestFailed": "Ujian pembekal gagal",
    "providerTestTimeout": "Provider test timed out — too many connections to test at once",
    "modeTest": "{mode} Ujian",
    "passedCount": "{count} lulus",
    "failedCount": "{count} gagal",
    "testedCount": "{count} diuji",
    "millisecondsAbbr": "{value}ms",
    "okShort": "OK",
    "errorShort": "RALAT",
    "noActiveConnectionsInGroup": "Tiada sambungan aktif ditemui untuk kumpulan ini.",
    "allTestsPassed": "Semua ujian {total} lulus",
    "testSummary": "{passed}/{total} lulus, {failed} gagal",
    "nameLabel": "Nama",
    "prefixLabel": "Awalan",
    "baseUrlLabel": "URL asas",
    "apiTypeLabel": "Jenis API",
    "prefixHint": "Diperlukan. Awalan unik untuk nama model.",
    "nameHint": "Diperlukan. Label mesra untuk nod ini.",
    "baseUrlHint": "Diperlukan.  URL asas API pembekal.",
    "anthropicPrefixPlaceholder": "ac-prod",
    "openaiPrefixPlaceholder": "oc-prod",
    "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1",
    "openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "validateConnection": "Sahkan Sambungan",
    "validating": "Mengesahkan...",
    "connectionValid": "Sambungan adalah sah!",
    "connectionFailed": "Sambungan gagal. Semak URL dan kunci.",
    "testKeyLabel": "Uji Kunci API",
    "testKeyPlaceholder": "sk-... (untuk pengesahan sahaja)",
    "providerNotFound": "Pembekal tidak ditemui",
    "deleteConnectionConfirm": "Padamkan sambungan ini?",
    "batchDeleteSelected": "Delete Selected ({count})",
    "batchDeleteConfirm": "Delete {count} connection(s)? This action cannot be undone.",
    "batchDeleteSuccess": "Deleted {count} connection(s)",
    "batchActivateSelected": "__MISSING__:Activate",
    "batchDeactivateSelected": "__MISSING__:Deactivate",
    "batchRetestSelected": "__MISSING__:Retest",
    "batchActivateSuccess": "__MISSING__:Activated {count} connection(s)",
    "batchDeactivateSuccess": "__MISSING__:Deactivated {count} connection(s)",
    "failedSetAlias": "Gagal menetapkan alias",
    "failedSaveConnection": "Gagal menyimpan sambungan",
    "failedSaveConnectionRetry": "Gagal menyimpan sambungan. Sila cuba lagi.",
    "failedRetestConnection": "Gagal menguji semula sambungan",
    "deleteCompatibleNodeConfirm": "Padamkan {type} nod yang serasi ini?",
    "anthropicCompatibleDetails": "Butiran Serasi Anthropic",
    "openaiCompatibleDetails": "Butiran Serasi OpenAI",
    "messagesApi": "API Messages",
    "responsesApi": "API Respons",
    "embeddings": "Embeddings",
    "audioTranscriptions": "Audio Transcriptions",
    "audioSpeech": "Audio Speech",
    "imagesGenerations": "Images Generations",
    "chatCompletions": "Selesai Sembang",
    "importingModels": "Mengimport...",
    "importFromModels": "Import daripada /models",
    "modelsImported": "{count} models imported",
    "allModelsAlreadyImported": "Semua model sudah diimport",
    "noNewModelsToImport": "Tiada model baru untuk diimport — semua model sudah ada dalam registri atau senarai model tersuai",
    "skippingExistingModels": "Melangkau {count} model sedia ada",
    "autoSync": "Auto-Segerak",
    "autoSyncTooltip": "Muat semula senarai model secara automatik setiap 24j (boleh dikonfigurasikan melalui MODEL_SYNC_INTERVAL_HOURS)",
    "autoSyncEnabled": "Autosegerak didayakan — model akan dimuat semula secara berkala",
    "autoSyncDisabled": "Autosegerak dilumpuhkan",
    "autoSyncToggleFailed": "Gagal untuk menogol autosegerak",
    "clearAllModels": "Kosongkan Semua Model",
    "clearAllModelsConfirm": "Adakah anda pasti mahu mengalih keluar semua model untuk pembekal ini? Ini tidak boleh dibuat asal.",
    "clearAllModelsSuccess": "Semua model dibersihkan",
    "clearAllModelsFailed": "Gagal mengosongkan model",
    "addConnectionToImport": "Tambahkan sambungan untuk mendayakan pengimportan.",
    "noModelsConfigured": "Tiada model yang dikonfigurasikan",
    "connectionCount": "{count} sambungan",
    "fetchingModels": "Mengambil model yang tersedia...",
    "failedFetchModels": "Gagal mengambil model",
    "noModelsFound": "Tiada model ditemui",
    "importFailed": "Import gagal",
    "noNewModelsAdded": "Tiada model baharu ditambahkan.",
    "adding": "Menambah...",
    "close": "Close",
    "importingModelsTitle": "Mengimport Model",
    "copyModel": "Salin model",
    "filterModels": "Tapis model…",
    "modelsActive": "aktif",
    "showModel": "Tunjukkan model",
    "hideModel": "Sembunyikan model",
    "removeModel": "Alih keluar model",
    "rateLimitProtected": "Dilindungi",
    "rateLimitUnprotected": "Tidak dilindungi",
    "enableRateLimitProtection": "Klik untuk mendayakan perlindungan had kadar",
    "disableRateLimitProtection": "Klik untuk melumpuhkan perlindungan had kadar",
    "productionKey": "Kunci Pengeluaran",
    "enterNewApiKey": "Masukkan kunci API baharu",
    "codexApplyModalTitle": "Mohon kepada Local Codex",
    "codexApplyTargetLabel": "Laluan sasaran",
    "codexApplyBackupLabel": "Sandaran",
    "codexApplyWarning": "Ini akan menggantikan auth.json sedia ada. teruskan?",
    "codexApplyConfirmCheckbox": "Saya mengesahkan saya mahu menggantikan auth.json sedia ada",
    "codexApply": "Mohon",
    "bulkTabSingle": "Bujang",
    "bulkTabBulkAdd": "Tambah Pukal",
    "bulkAddFormatHint": "Satu kunci setiap baris. Format: nama|apiKey atau hanya apiKey (dinamakan secara automatik mengikut indeks).",
    "bulkValidateKeys": "Sahkan setiap kunci sebelum menyimpan (lebih perlahan)",
    "bulkAddAllKeys": "Tambah Semua Kekunci",
    "bulkAddedCount": "{count, plural, one {# key added} other {# keys added}}",
    "bulkFailedCount": "{count, plural, one {# failed} other {# failed}}",
    "optional": "Pilihan",
    "anthropicCompatibleName": "Serasi Anthropic",
    "openaiCompatibleName": "Serasi OpenAI",
    "failedImportModels": "Gagal mengimport model",
    "noModelsReturnedFromEndpoint": "Tiada model dikembalikan dari titik akhir /models.",
    "importingModelsProgress": "Mengimport {current} daripada {total} model...",
    "foundModelsStartingImport": "Menemui model {count}. Memulakan import...",
    "importingModelById": "Mengimport {modelId}...",
    "importSuccessCount": "Berjaya mengimport {count, plural, one {# model} other {# models}}!",
    "noNewModelsAddedExisting": "Tiada model baharu ditambahkan (semua sudah wujud).",
    "importDoneCount": "✓ Selesai! {count, plural, one {# model imported.} other {# models imported.}}",
    "unexpectedErrorOccurred": "Ralat yang tidak dijangka berlaku",
    "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}",
    "messagesPath": "mesej",
    "responsesPath": "maklum balas",
    "chatCompletionsPath": "sembang/penyelesaian",
    "add": "Tambah",
    "edit": "Sunting",
    "delete": "Padam",
    "anthropic": "Antropik",
    "openai": "OpenAI",
    "singleConnectionPerCompatible": "Hanya satu sambungan dibenarkan bagi setiap nod yang serasi. Tambahkan nod lain jika anda memerlukan lebih banyak sambungan.",
    "connections": "Sambungan",
    "providerProxyTitleConfigured": "Proksi pembekal: {host}",
    "configured": "dikonfigurasikan",
    "providerProxyConfigureHint": "Konfigurasikan proksi untuk semua sambungan pembekal ini",
    "providerProxy": "Proksi Pembekal",
    "repairEnv": "Repair env",
    "repairEnvWorking": "Repairing...",
    "repairEnvHint": "Restore missing OAuth defaults into .env without overwriting existing values.",
    "repairEnvSuccess": "OAuth defaults restored",
    "repairEnvFailed": "Failed to repair .env",
    "noConnectionsYet": "Tiada sambungan lagi",
    "addFirstConnectionHint": "Tambahkan sambungan pertama anda untuk bermula",
    "addConnection": "Tambah Sambungan",
    "availableModels": "Model Tersedia",
    "builtInModels": "Built-in models",
    "builtInModelsHint": "Registry models for this provider. Use the pencil to set compatibility options.",
    "pageAutoRefresh": "Halaman akan dimuat semula secara automatik...",
    "statusDisabled": "kurang upaya",
    "statusConnected": "bersambung",
    "statusRuntimeIssue": "isu runtime",
    "statusAuthFailed": "pengesahan gagal",
    "statusRateLimited": "kadar terhad",
    "statusNetworkIssue": "isu rangkaian",
    "statusTestUnsupported": "ujian tidak disokong",
    "statusUnavailable": "tidak tersedia",
    "statusFailed": "gagal",
    "statusError": "kesilapan",
    "oauthAccount": "Akaun OAuth",
    "errorTypeRuntime": "Masa jalan tempatan",
    "errorTypeUpstreamAuth": "Pengesahan huluan",
    "errorTypeMissingCredential": "Tiada bukti kelayakan",
    "errorTypeRefreshFailed": "Muat semula gagal",
    "errorTypeTokenExpired": "Token tamat tempoh",
    "errorTypeRateLimited": "Kadar terhad",
    "errorTypeUpstreamUnavailable": "Hulu tidak tersedia",
    "errorTypeNetworkError": "Ralat rangkaian",
    "errorTypeTestUnsupported": "Ujian tidak disokong",
    "errorTypeUpstreamError": "Ralat huluan",
    "proxySourceGlobal": "Global",
    "proxySourceProvider": "Pembekal",
    "proxySourceKey": "kunci",
    "proxyConfiguredBySource": "Proksi ({source}): {host}",
    "autoPriority": "Auto: {priority}",
    "proxy": "proksi",
    "retestAuthentication": "Uji semula pengesahan",
    "retest": "Uji semula",
    "disableConnection": "Lumpuhkan sambungan",
    "enableConnection": "Dayakan sambungan",
    "reauthenticateConnection": "Sahkan semula sambungan ini",
    "proxyConfig": "Konfigurasi proksi",
    "aliasExistsAlert": "Alias \"{alias}\" sudah wujud. Sila gunakan model lain atau edit alias sedia ada.",
    "openRouterAnyModelHint": "OpenRouter menyokong mana-mana model. Tambah model dan buat alias untuk akses pantas.",
    "modelIdFromOpenRouter": "ID Model (dari OpenRouter)",
    "openRouterModelPlaceholder": "antropik/claude-3-opus",
    "customModels": "Model Tersuai",
    "customModelsHint": "Tambahkan ID model yang tiada dalam senarai lalai. Ini akan tersedia untuk penghalaan.",
    "normalizeToolCallIdLabel": "Normalize tool call IDs to 9 characters (e.g. Mistral)",
    "preserveDeveloperRoleLabel": "Keep OpenAI Responses developer role (do not map to system)",
    "compatAdjustmentsTitle": "Compatibility",
    "compatButtonLabel": "Compatibility",
    "compatToolIdShort": "Tool ID 9",
    "compatDeveloperShort": "Developer role",
    "compatDoNotPreserveDeveloper": "Do not preserve developer role",
    "compatBadgeNoPreserve": "No preserve",
    "compatProtocolLabel": "Client request protocol",
    "compatProtocolHint": "These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).",
    "compatProtocolOpenAI": "OpenAI Chat Completions",
    "compatProtocolOpenAIResponses": "OpenAI Responses API",
    "compatProtocolClaude": "Anthropic Messages",
    "compatUpstreamHeadersLabel": "Extra upstream headers",
    "compatUpstreamHeadersHint": "High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.",
    "compatUpstreamHeaderName": "Header name",
    "compatUpstreamHeaderValue": "Value",
    "compatUpstreamAddRow": "Add header",
    "compatUpstreamRemoveRow": "Remove row",
    "compatBadgeUpstreamHeaders": "Headers",
    "perModelQuotaLabel": "Per Model Quota Label",
    "perModelQuotaDescription": "Per Model Quota Description",
    "perModelQuotaToggle": "Togol Kuota Per-Model",
    "modelId": "ID model",
    "customModelPlaceholder": "cth. gpt-4.5-turbo",
    "loading": "Memuatkan...",
    "removeCustomModel": "Alih keluar model tersuai",
    "noCustomModels": "Tiada model tersuai ditambahkan lagi.",
    "allSuggestedAliasesExist": "Semua alias yang dicadangkan sudah wujud. Sila pilih model lain atau alih keluar alias bercanggah.",
    "failedSaveCustomModel": "Gagal menyimpan model tersuai",
    "modelAddedSuccess": "Model {modelId} berjaya ditambahkan",
    "failedAddModelTryAgain": "Gagal menambah model. Sila cuba lagi.",
    "failedSaveImportedModel": "Gagal menyimpan model yang diimport ke pangkalan data tersuai",
    "failedImportModelsTryAgain": "Gagal mengimport model. Sila cuba lagi.",
    "failedRemoveModelFromDatabase": "Gagal mengalih keluar model daripada pangkalan data",
    "modelRemovedSuccess": "Model berjaya dialih keluar",
    "failedDeleteModelTryAgain": "Gagal memadamkan model. Sila cuba lagi.",
    "compatibleModelsDescription": "Tambah {type}-model yang serasi secara manual atau importnya dari titik akhir /models.",
    "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229",
    "openaiCompatibleModelPlaceholder": "gpt-4o",
    "apiKeyValidationFailed": "Pengesahan kunci API gagal. Sila semak kunci anda dan cuba lagi.",
    "addProviderApiKeyTitle": "Tambahkan {provider} Kunci API",
    "checking": "Menyemak...",
    "check": "Semak",
    "valid": "sah",
    "invalid": "Tidak sah",
    "creating": "Mencipta...",
    "validationChecksAnthropicCompatible": "Pengesahan menyemak {provider} dengan mengesahkan kunci API.",
    "validationChecksOpenAiCompatible": "Semakan pengesahan {provider} melalui /models pada URL asas anda.",
    "priorityLabel": "Keutamaan",
    "saving": "Menyimpan...",
    "save": "Jimat",
    "editConnection": "Edit Sambungan",
    "accountName": "Nama akaun",
    "email": "E-mel",
    "healthCheckMinutes": "Pemeriksaan Kesihatan (min)",
    "healthCheckHint": "Selang penyegaran token proaktif. 0 = kurang upaya.",
    "selectAllModels": "Select all",
    "deselectAllModels": "Deselect all",
    "modelsActiveCount": "{active}/{total} active",
    "noModelsMatch": "No models match \"{filter}\"",
    "groupLabel": "Environment",
    "groupPlaceholder": "e.g. eKaizen, Personal",
    "failedTestConnection": "Gagal menguji sambungan",
    "failed": "gagal",
    "leaveBlankKeepCurrentApiKey": "Biarkan kosong untuk mengekalkan kunci API semasa.",
    "editCompatibleTitle": "Edit {type} Serasi",
    "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.",
    "apiKeyForCheck": "Kunci API (untuk Semakan)",
    "compatibleProdPlaceholder": "{type} Serasi (Prod)",
    "tokenRefreshed": "Token refreshed successfully",
    "tokenRefreshFailed": "Token refresh failed",
    "applyCodexAuthLocal": "Apply auth",
    "exportCodexAuthFile": "Export auth",
    "applyClaudeAuthLocal": "Gunakan pengesahan",
    "exportClaudeAuthFile": "Eksport pengesahan",
    "importClaudeAuth": "Import pengesahan",
    "claudeApplyModalTitle": "Mohon kepada Kod Claude Tempatan",
    "claudeApplyTargetLabel": "Laluan sasaran",
    "claudeApplyBackupLabel": "Sandaran",
    "claudeApplyMcpHint": "Keadaan MCP OAuth sedia ada akan dikekalkan.",
    "claudeApplyWarning": "Ini akan menggantikan bahagian claudeAiOauth sedia ada. teruskan?",
    "claudeApplyConfirmCheckbox": "Saya mengesahkan saya mahu menggantikan bahagian claudeAiOauth sedia ada",
    "claudeApply": "Mohon",
    "claudeAuthAppliedLocal": "Pengesahan Claude digunakan secara tempatan",
    "claudeAuthApplyFailed": "Gagal menggunakan pengesahan Claude secara setempat",
    "claudeAuthExported": "Fail pengesahan Claude dieksport",
    "claudeAuthExportFailed": "Gagal mengeksport fail pengesahan Claude",
    "claudeImportModalTitle": "Import Claude Auth",
    "claudeImportTabSingle": "Bujang",
    "claudeImportTabBulk": "Pukal",
    "claudeImportTabUpload": "Muat naik fail",
    "claudeImportTabPaste": "Tampal JSON",
    "claudeImportFileLabel": "Pilih .credentials.json",
    "claudeImportPasteLabel": "Tampalkan kandungan JSON",
    "claudeImportEmailLabel": "E-mel akaun",
    "claudeImportNameLabel": "Nama sambungan (pilihan)",
    "claudeImportOverwriteLabel": "Gantikan sambungan sedia ada jika akaun sudah wujud",
    "claudeImportSubmit": "Import",
    "claudeImportSuccess": "Sambungan Claude berjaya diimport",
    "claudeImportInvalidJson": "Tidak dapat menghuraikan fail sebagai JSON",
    "claudeImportInvalidShape": "Fail itu bukan .credentials.json yang sah",
    "claudeImportDuplicate": "Akaun sudah wujud — dayakan \"Ganti sedia ada\" untuk menulis ganti",
    "claudeImportIdentityUnverified": "Bootstrap tidak dapat mengesahkan akaun. Dayakan \"Ganti sedia ada\" atau sediakan e-mel.",
    "claudeImportFailed": "Gagal mengimport pengesahan Claude",
    "claudeImportBulkModeUpload": "Muat naik fail",
    "claudeImportBulkModePaste": "Tampalkan tatasusunan JSON",
    "claudeImportBulkModeZip": "Muat naik ZIP",
    "claudeImportBulkUploadHint": "Lepaskan atau ambil sehingga 50 fail .credentials.json (256KB setiap satu, jumlah 10MB).",
    "claudeImportBulkPasteHint": "Tampalkan tatasusunan objek: [{ json, name?, email? }, ...]",
    "claudeImportBulkZipHint": "ZIP yang mengandungi entri .json. Maksimum 50 entri, 10MB dibongkar.",
    "claudeImportBulkSubmit": "Import semua",
    "claudeImportBulkSuccess": "Sambungan {count} Claude yang diimport",
    "claudeImportBulkFailed": "Beberapa entri gagal diimport",
    "claudeImportBulkZipExtracting": "Mengeluarkan ZIP…",
    "claudeImportBulkZipError": "Gagal mengeluarkan ZIP",
    "applyGeminiAuthLocal": "Gunakan pengesahan",
    "exportGeminiAuthFile": "Eksport pengesahan",
    "importGeminiAuth": "Import pengesahan",
    "geminiApplyModalTitle": "Mohon kepada CLI Gemini Tempatan",
    "geminiApplyTargetLabel": "Laluan sasaran",
    "geminiApplyBackupLabel": "Sandaran",
    "geminiApplyAccountsHint": "Akaun aktif google_accounts.json akan dikemas kini agar sepadan dengan sambungan ini.",
    "geminiApplyWarning": "Ini akan menggantikan oauth_creds.json sedia ada dan mengemas kini google_accounts.json. teruskan?",
    "geminiApplyConfirmCheckbox": "Saya mengesahkan saya mahu menggantikan oauth_creds.json yang sedia ada",
    "geminiApply": "Mohon",
    "geminiAuthAppliedLocal": "Pengesahan Gemini digunakan secara tempatan",
    "geminiAuthApplyFailed": "Gagal menggunakan pengesahan Gemini secara tempatan",
    "geminiAuthExported": "Fail pengesahan Gemini dieksport",
    "geminiAuthExportFailed": "Gagal mengeksport fail pengesahan Gemini",
    "geminiImportModalTitle": "Import Gemini Auth",
    "geminiImportTabSingle": "Bujang",
    "geminiImportTabBulk": "Pukal",
    "geminiImportTabUpload": "Muat naik fail",
    "geminiImportTabPaste": "Tampal JSON",
    "geminiImportFileLabel": "Pilih oauth_creds.json",
    "geminiImportPasteLabel": "Tampalkan kandungan JSON",
    "geminiImportEmailLabel": "E-mel akaun",
    "geminiImportNameLabel": "Nama sambungan (pilihan)",
    "geminiImportOverwriteLabel": "Gantikan sambungan sedia ada jika akaun sudah wujud",
    "geminiImportSubmit": "Import",
    "geminiImportSuccess": "Sambungan Gemini berjaya diimport",
    "geminiImportInvalidJson": "Tidak dapat menghuraikan fail sebagai JSON",
    "geminiImportInvalidShape": "Fail itu bukan oauth_creds.json yang sah",
    "geminiImportDuplicate": "Akaun sudah wujud — dayakan \"Ganti sedia ada\" untuk menulis ganti",
    "geminiImportIdentityUnverified": "Tidak dapat mengesahkan identiti daripada id_token. Dayakan \"Ganti sedia ada\" atau sediakan e-mel.",
    "geminiImportFailed": "Gagal mengimport pengesahan Gemini",
    "geminiImportBulkModeUpload": "Muat naik fail",
    "geminiImportBulkModePaste": "Tampalkan tatasusunan JSON",
    "geminiImportBulkModeZip": "Muat naik ZIP",
    "geminiImportBulkUploadHint": "Lepaskan atau ambil sehingga 50 fail oauth_creds.json (256KB setiap satu, jumlah 10MB).",
    "geminiImportBulkPasteHint": "Tampalkan tatasusunan objek: [{ json, name?, email? }, ...]",
    "geminiImportBulkZipHint": "ZIP yang mengandungi entri oauth_creds.json. Maksimum 50 entri, 10MB dibongkar.",
    "geminiImportBulkSubmit": "Import semua",
    "geminiImportBulkSuccess": "Diimport {count} Sambungan Gemini",
    "geminiImportBulkFailed": "Beberapa entri gagal diimport",
    "geminiImportBulkZipExtracting": "Mengeluarkan ZIP…",
    "geminiImportBulkZipError": "Gagal mengeluarkan ZIP",
    "codexAuthAppliedLocal": "Codex auth.json applied locally",
    "codexAuthApplyFailed": "Failed to apply Codex auth.json locally",
    "codexAuthExported": "Codex auth.json exported",
    "codexAuthExportFailed": "Failed to export Codex auth.json",
    "importCodexAuth": "Import pengesahan",
    "codexImportModalTitle": "Import Codex Auth",
    "codexImportTabSingle": "Bujang",
    "codexImportTabBulk": "Pukal",
    "codexImportTabUpload": "Muat naik fail",
    "codexImportTabPaste": "Tampal JSON",
    "codexImportFileLabel": "Pilih auth.json",
    "codexImportFileHint": "Pilih fail auth.json yang dieksport daripada Codex atau daripada OmniRoute.",
    "codexImportPasteLabel": "Tampalkan kandungan JSON",
    "codexImportEmailLabel": "E-mel akaun",
    "codexImportEmailHint": "Auto dikesan daripada fail; edit jika perlu.",
    "codexImportNameLabel": "Nama sambungan (pilihan)",
    "codexImportOverwriteLabel": "Gantikan sambungan sedia ada jika akaun sudah wujud",
    "codexImportSubmit": "Import",
    "codexImportSuccess": "Sambungan Codex berjaya diimport",
    "codexImportInvalidJson": "Tidak dapat menghuraikan fail sebagai JSON",
    "codexImportInvalidShape": "Fail itu bukan Codex auth.json yang sah",
    "codexImportDuplicate": "Akaun sudah wujud — dayakan \"Ganti sedia ada\" untuk menulis ganti",
    "codexImportFailed": "Gagal mengimport pengesahan Codex",
    "codexImportDetectedEmail": "Dikesan: {email}",
    "codexImportNoEmailDetected": "Tiada e-mel dikesan dalam fail",
    "codexImportBulkModeUpload": "Muat naik fail",
    "codexImportBulkModePaste": "Tampal senarai",
    "codexImportBulkModeZip": "ZIP arkib",
    "codexImportBulkUploadHint": "Pilih berbilang fail .json atau seret dan lepas",
    "codexImportBulkPasteHint": "Tatasusunan JSON [ {...}, {...} ] atau berbilang JSON dipisahkan oleh --- pada barisnya sendiri",
    "codexImportBulkZipHint": "Muat naik .zip yang mengandungi fail auth.json (maks 50 fail, 10 MB)",
    "codexImportBulkSubmit": "Import akaun {count}",
    "codexImportBulkLimit": "Maks 50 fail setiap import",
    "codexImportBulkSuccess": "{count} diimport",
    "codexImportBulkFailed": "{count} gagal",
    "codexImportBulkZipExtracting": "Mengeluarkan ZIP…",
    "codexImportBulkZipError": "Gagal mengeluarkan ZIP",
    "advancedSettings": "Advanced Settings",
    "chatPathLabel": "Chat Endpoint Path",
    "chatPathPlaceholder": "/chat/completions",
    "chatPathHint": "Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)",
    "modelsPathLabel": "Models Endpoint Path",
    "modelsPathPlaceholder": "/models",
    "modelsPathHint": "Custom models path for validation (e.g. /v4/models)",
    "statusDeactivated": "Deactivated (Manual)",
    "statusBanned": "Banned / Sandbox Violation",
    "statusCreditsExhausted": "Insufficient Balance / Quota Exhausted",
    "showEmails": "Show all emails",
    "hideEmails": "Hide all emails",
    "a": "A",
    "accountConcurrencyCapHint": "Account Concurrency Cap Hint",
    "accountConcurrencyCapLabel": "Account Concurrency Cap Label",
    "accountIdHint": "Account Id Hint",
    "accountIdLabel": "Account Id Label",
    "accountIdPlaceholder": "Account Id Placeholder",
    "addAnotherApiKey": "Add another API key or paste multiple keys",
    "addCcCompatible": "Add Cc Compatible",
    "aggregatorsGateways": "Aggregators Gateways",
    "enterpriseCloud": "Perusahaan & Awan",
    "apiFormatLabel": "Api Format Label",
    "apiKeyOptionalHint": "Api Key Optional Hint",
    "apiKeyOptionalLabel": "Api Key Optional Label",
    "apiRegionChina": "Api Region China",
    "apiRegionHint": "Api Region Hint",
    "apiRegionInternational": "Api Region International",
    "apiRegionLabel": "Api Region Label",
    "apikey": "Apikey",
    "audio": "Audio",
    "audioProvidersHeading": "Audio Providers Heading",
    "cloudAgentProviders": "Pembekal Agen Awan",
    "audioShortLabel": "Audio Short Label",
    "azureOpenAiBaseUrlHint": "Azure Open Ai Base Url Hint",
    "bailianBaseUrlHint": "Bailian Base Url Hint",
    "claudeWebCookieHint": "Open claude.ai → DevTools → Application → Cookies → claude.ai, copy the 'sessionKey' value. Also need cf_clearance, __cf_bm, _cfuvid for Cloudflare.",
    "claudeWebCookiePlaceholder": "sessionKey=sk-ant-...",
    "blackboxWebCookieHint": "Blackbox Web Cookie Hint",
    "blackboxWebCookiePlaceholder": "Blackbox Web Cookie Placeholder",
    "t3ChatWebCookieHint": "Buka t3.chat → DevTools → Aplikasi → Storan Tempatan → https://t3.chat, salin 'convex-session-id'. Kemudian buka DevTools → Rangkaian, salin pengepala Kuki penuh daripada sebarang permintaan sembang. Tampalkan kedua-dua nilai dalam medan di bawah.",
    "t3ChatWebCookiePlaceholder": "cembung-session-id=abc123...",
    "blockClaudeExtraUsageDescription": "Block Claude Extra Usage Description",
    "blockClaudeExtraUsageLabel": "Block Claude Extra Usage Label",
    "bulkPasteAdded": "{count, plural, one {1 key added} other {# keys added}}",
    "bulkPasteDuplicatesIgnored": "{count, plural, one {1 duplicate skipped} other {# duplicates skipped}}",
    "bulkPasteHint": "Paste one API key per line. Empty lines are ignored and duplicate keys are skipped.",
    "ccCompatibleBaseUrlHint": "Cc Compatible Base Url Hint",
    "ccCompatibleBaseUrlPlaceholder": "Cc Compatible Base Url Placeholder",
    "ccCompatibleChatPathHint": "Cc Compatible Chat Path Hint",
    "ccCompatibleContext1mDescription": "Cc Compatible Context1M Description",
    "ccCompatibleContext1mLabel": "Cc Compatible Context1M Label",
    "ccCompatibleDetailsTitle": "Cc Compatible Details Title",
    "ccCompatibleLabel": "Cc Compatible Label",
    "ccCompatibleModelsDescription": "Cc Compatible Models Description",
    "ccCompatibleNameHint": "Cc Compatible Name Hint",
    "ccCompatibleNamePlaceholder": "Cc Compatible Name Placeholder",
    "ccCompatiblePrefixHint": "Cc Compatible Prefix Hint",
    "ccCompatiblePrefixPlaceholder": "Cc Compatible Prefix Placeholder",
    "ccCompatibleValidationHint": "Cc Compatible Validation Hint",
    "claudeExtraUsageShort": "Claude Extra Usage Short",
    "claudeExtraUsageToggleTitle": "Claude Extra Usage Toggle Title",
    "codex5hToggleTitle": "Codex5H Toggle Title",
    "codexFastServiceTierDescription": "Use the priority service tier for Codex requests when available.",
    "codexFastServiceTierLabel": "Codex fast service tier",
    "codexWeeklyToggleTitle": "Codex Weekly Toggle Title",
    "compatUpstreamHeaderNamePlaceholder": "Compat Upstream Header Name Placeholder",
    "compatUpstreamHeaderValuePlaceholder": "Compat Upstream Header Value Placeholder",
    "compatible": "Compatible",
    "configuredCount": "Configured Count",
    "consoleApiKeyOracleHint": "Console Api Key Oracle Hint",
    "consoleApiKeyOracleLabel": "Console Api Key Oracle Label",
    "consoleApiKeyOraclePlaceholder": "Console Api Key Oracle Placeholder",
    "cpaModeDisabledTitle": "Cpa Mode Disabled Title",
    "cpaModeEnabledTitle": "Cpa Mode Enabled Title",
    "customUserAgentHint": "Custom User Agent Hint",
    "customUserAgentLabel": "Custom User Agent Label",
    "databricksBaseUrlHint": "Databricks Base Url Hint",
    "defaultThinkingStrengthHint": "Used when a request does not specify reasoning effort.",
    "defaultThinkingStrengthLabel": "Default thinking strength",
    "deleteAllExtraApiKeys": "Delete all",
    "excludedModelsHint": "Excluded Models Hint",
    "excludedModelsLabel": "Excluded Models Label",
    "excludedModelsPlaceholder": "Excluded Models Placeholder",
    "expirationBannerExpired": "Expiration Banner Expired",
    "expirationBannerExpiredDesc": "Expiration Banner Expired Desc",
    "expirationBannerExpiringSoon": "Expiration Banner Expiring Soon",
    "expirationBannerExpiringSoonDesc": "Expiration Banner Expiring Soon Desc",
    "extraApiKeyMasked": "Key {index}: {prefix}••••{suffix}",
    "extraApiKeysHint": "Extra Api Keys Hint",
    "extraApiKeysLabel": "Extra Api Keys Label",
    "apiKeyHealthLabel": "API Key Health",
    "apiKeyStatusActive": "Active",
    "apiKeyStatusWarning": "Warning ({count} failures)",
    "apiKeyStatusInvalid": "Invalid",
    "primaryKey": "Primary Key",
    "apiKeyInvalidAlert": "{count} API key(s) marked as invalid due to authentication failures in connections: {connections}. They will be skipped in rotation. Click to review.",
    "apiKeyInvalidAlertTitle": "API Key Health Alert",
    "apiKeyWarningAlert": "{count} API key(s) in warning state due to elevated failure rate in connections: {connections}. Review to prevent rotation issues.",
    "apiKeyWarningAlertTitle": "API Key Warning",
    "googlePseInfo": "Google Pse Info",
    "geminiCliProjectIdHint": "ID Projek Awan Google anda. Diperlukan untuk akaun dengan pengecualian. Masukkan ID Projek GCP anda untuk digunakan dengan Gemini CLI.",
    "geminiCliProjectIdLabel": "ID Projek Awan Google",
    "geminiCliProjectIdPlaceholder": "my-gcp-project-id",
    "antigravityProjectIdHint": "Penggantian pilihan untuk permintaan Kod Awan Antigraviti. Biarkan kosong untuk menggunakan projek yang ditemui semasa Google OAuth.",
    "antigravityClientProfileLabel": "__MISSING__:Client profile",
    "antigravityClientProfileHint": "__MISSING__:Choose which Antigravity client identity OmniRoute presents to the API.",
    "antigravityClientProfileIde": "__MISSING__:IDE",
    "antigravityClientProfileHarness": "__MISSING__:Harness / CLI",
    "codexFastTierActiveChip": "__MISSING__:Codex Fast tier is active",
    "tierFast": "__MISSING__:Fast",
    "antigravityProjectIdLabel": "ID Projek Awan Google",
    "antigravityProjectIdPlaceholder": "my-gcp-project-id",
    "grokWebCookieHint": "Grok Web Cookie Hint",
    "grokWebCookiePlaceholder": "Grok Web Cookie Placeholder",
    "herokuBaseUrlHint": "Heroku Base Url Hint",
    "hideEmail": "Hide Email",
    "imageProviders": "Image Providers",
    "videoProviders": "Penjanaan Video",
    "embeddingRerankProviders": "Pembenaman & Kedudukan Semula",
    "imagesShortLabel": "Images Short Label",
    "llmProviders": "Llm Providers",
    "localProviderApiKeyOptionalHint": "Local Provider Api Key Optional Hint",
    "localProviderBaseUrlHint": "Local Provider Base Url Hint",
    "localProviders": "Local Providers",
    "maxConcurrentWholeNumberError": "Max Concurrent Whole Number Error",
    "museSparkWebCookieHint": "Muse Spark Web Cookie Hint",
    "museSparkWebCookiePlaceholder": "Muse Spark Web Cookie Placeholder",
    "oauth": "Oauth",
    "openCliTools": "Open Cli Tools",
    "openSettings": "Open Settings",
    "openaiResponsesStoreDescription": "Allow compatible Responses API requests to preserve stored response state.",
    "openaiResponsesStoreLabel": "OpenAI Responses store",
    "perplexitySearchSharedKeyInfo": "Perplexity Search Shared Key Info",
    "perplexityWebCookieHint": "Perplexity Web Cookie Hint",
    "perplexityWebCookiePlaceholder": "Perplexity Web Cookie Placeholder",
    "personalAccessTokenLabel": "Personal Access Token Label",
    "qoderPatHint": "Qoder Pat Hint",
    "qoderPatPlaceholder": "Qoder Pat Placeholder",
    "refreshOauthTokenTitle": "Refresh Oauth Token Title",
    "regionHint": "Region Hint",
    "regionLabel": "Region Label",
    "removeThisKey": "Remove This Key",
    "routingTagsHint": "Routing Tags Hint",
    "routingTagsLabel": "Routing Tags Label",
    "routingTagsPlaceholder": "Routing Tags Placeholder",
    "search": "Search",
    "searchEngineIdHint": "Search Engine Id Hint",
    "searchEngineIdLabel": "Search Engine Id Label",
    "searchEngineIdRequired": "Search Engine Id Required",
    "searchProvider": "Search Provider",
    "searchProviderDesc": "Search Provider Desc",
    "searchProviders": "Cari pembekal...",
    "searchProvidersHeading": "Search Providers Heading",
    "searxngBaseUrlHint": "Searxng Base Url Hint",
    "searxngInfo": "Searxng Info",
    "sessionCookieLabel": "Session Cookie Label",
    "showEmail": "Show Email",
    "snowflakeBaseUrlHint": "Snowflake Base Url Hint",
    "supportedEndpointAudio": "Supported Endpoint Audio",
    "supportedEndpointChat": "Supported Endpoint Chat",
    "supportedEndpointEmbeddings": "Supported Endpoint Embeddings",
    "supportedEndpointImages": "Supported Endpoint Images",
    "supportedEndpointsLabel": "Supported Endpoints Label",
    "tagGroupHint": "Tag Group Hint",
    "tagGroupLabel": "Tag Group Label",
    "tagGroupPlaceholder": "Tag Group Placeholder",
    "testModel": "Test Model",
    "testingModel": "Testing Model",
    "toggleOffShort": "Toggle Off Short",
    "toggleOnShort": "Toggle On Short",
    "tokenExpiredBadge": "Token Expired Badge",
    "tokenExpiredTitle": "Token Expired Title",
    "tokenExpiresSoonTitle": "Token Expires Soon Title",
    "tokenShort": "Token Short",
    "totalKeysRotating": "{count, plural, one {1 key rotating} other {# keys rotating}}",
    "unhideModel": "Unhide Model",
    "upstreamProxyProviders": "Upstream Proxy Providers",
    "validationModelIdHint": "Validation Model Id Hint",
    "validationModelIdLabel": "Validation Model Id Label",
    "validationModelIdPlaceholder": "Validation Model Id Placeholder",
    "vertexServiceAccountPlaceholder": "Paste your Service Account JSON ({\"type\":\"service_account\",\"project_id\":\"…\",\"client_email\":\"…\",\"private_key\":\"…\"}) or an OAuth access_token",
    "webCookieProviders": "Web Cookie Providers",
    "weeklyShort": "Weekly Short",
    "xiaomiMimoBaseUrlHint": "Xiaomi Mimo Base Url Hint",
    "zedImportButton": "Zed Import Button",
    "zedImportFailed": "Zed Import Failed",
    "zedImportHint": "Zed Import Hint",
    "zedImportNetworkError": "Zed Import Network Error",
    "zedImportNone": "Zed Import None",
    "zedImportSuccess": "Zed Import Success",
    "zedImporting": "Zed Importing",
    "freeTierProviders": "Pembekal Peringkat Percuma",
    "freeTierLabel": "Peringkat percuma tersedia",
    "freeTierProvidersDesc": "Penyedia dengan peringkat percuma — sesetengahnya memerlukan pendaftaran kunci API, yang lain tidak memerlukan bukti kelayakan langsung.",
    "providerSummaryAll": "Jumlah",
    "ideProviders": "Penyedia IDE",
    "ideProvidersDesc": "Editor dengan langganan AI terbina dalam. Gunakan halaman pembekal untuk mengimport bukti kelayakan terus daripada rantai kunci IDE.",
    "noIdeProviders": "Tiada pembekal IDE sepadan dengan penapis semasa.",
    "providerDetailFastTierTooltip": "Gunakan peringkat Codex Fast pada semua sambungan Codex secara lalai",
    "providerDetailFastDefaultLabel": "lalai cepat",
    "providerDetailBrowserManualConnect": "Sambungan penyemak imbas/manual",
    "providerDetailAuthUrl": "URL Pengesahan",
    "providerDetailCallbackUrl": "URL panggilan balik",
    "providerDetailValidClaudeCredentialsFile": "Fail kelayakan Claude yang sah",
    "providerDetailPathAutoDetectedAllOs": "Laluan dikesan secara automatik bagi setiap OS (Linux/Mac/Windows).",
    "providerDetailMyClaudeAccountPlaceholder": "Akaun Claude saya",
    "providerDetailPathAutoDetected": "Laluan dikesan secara automatik bagi setiap OS (Linux/Mac).",
    "webFetch": "__MISSING__:Web Fetch",
    "webFetchTooltip": "__MISSING__:Providers that extract content from web URLs (HTML → Markdown, scrape, screenshot)",
    "webFetchProvidersHeading": "__MISSING__:Web Fetch Providers",
    "compatibleProvidersDesc": "__MISSING__:OpenAI-compatible and Anthropic-compatible endpoints you host or configure. Point any OpenAI SDK to your own URL and route requests here.",
    "oauthProvidersDesc": "__MISSING__:Providers authenticated via OAuth — sign in once and OmniRoute handles token rotation automatically.",
    "webCookieProvidersDesc": "Pembekal ini menggunakan sesi web penyemak imbas, kuki atau token web dan bukannya kunci API. Buka pembekal untuk menambah kelayakan sesi yang diperlukan.",
    "apiKeyProvidersDesc": "__MISSING__:Standard API key providers. Add your key once and OmniRoute routes, retries, and rate-limits on your behalf.",
    "noAuthProvidersDesc": "__MISSING__:Open endpoints that require no credentials — ready to use immediately without any sign-up.",
    "upstreamProxyProvidersDesc": "__MISSING__:Route outbound traffic through an upstream proxy before it reaches the provider. Useful for corporate networks or traffic inspection.",
    "webFetchProvidersDesc": "__MISSING__:Providers that fetch and extract content from web URLs. Use them to ground prompts with live web data.",
    "aggregatorsGatewaysDesc": "__MISSING__:Multi-provider aggregators and AI gateways that expose a single unified API across dozens of underlying models.",
    "enterpriseCloudDesc": "__MISSING__:Enterprise-tier and cloud-hosted models with enhanced SLAs, compliance certifications, and dedicated capacity.",
    "cloudAgentProvidersDesc": "__MISSING__:Autonomous cloud agents that execute long-running tasks with plan approval and live status tracking.",
    "localProvidersDesc": "__MISSING__:Self-hosted models running on your own hardware. No data leaves your infrastructure.",
    "searchProvidersDesc": "__MISSING__:Web and document search providers. Attach them to LLM calls for Retrieval-Augmented Generation.",
    "audioProvidersDesc": "__MISSING__:Text-to-speech and speech-to-text providers for voice I/O and audio transcription pipelines.",
    "embeddingRerankProvidersDesc": "__MISSING__:Vector embedding and reranking providers for semantic search, RAG pipelines, and similarity scoring.",
    "imageProvidersDesc": "__MISSING__:Image generation and vision providers — create images from text or analyse existing ones.",
    "videoProvidersDesc": "__MISSING__:Video generation providers. Create short video clips from text prompts or images.",
    "onboardingWizard": "Wizard Penyertaan Penyedia",
    "onboardingWizardShort": "Wizard Penyertaan",
    "onboardingWizardDescription": "Sambungkan penyedia kunci API, serasi tersuai dan OAuth dengan pengesahan, kegigihan dan ujian sambungan segera.",
    "onboardingStepType": "taip",
    "onboardingStepProvider": "Pembekal",
    "onboardingStepCredentials": "Tauliah",
    "onboardingStepResult": "Hasilnya",
    "onboardingTypeApiKeyTitle": "Pembekal kunci API",
    "onboardingTypeApiKeyText": "Gunakan penyedia terbina dalam seperti OpenAI, Anthropic, Gemini, Groq, Azure dan banyak lagi.",
    "onboardingTypeCustomTitle": "Pembekal serasi tersuai",
    "onboardingTypeCustomText": "Buat titik akhir yang serasi OpenAI-, Anthropic- atau Claude Code dan tambahkan kuncinya.",
    "onboardingTypeOAuthTitle": "Pembekal OAuth",
    "onboardingTypeOAuthText": "Gunakan semula aliran import OAuth, kod peranti atau tempatan sedia ada untuk pembekal pengekodan.",
    "onboardingChooseOAuthProvider": "Pilih pembekal OAuth",
    "onboardingChooseApiKeyProvider": "Pilih pembekal kunci API",
    "onboardingChooseProviderDescription": "Pilih pembekal, kemudian wizard akan membimbing anda melalui bukti kelayakan dan ujian.",
    "onboardingChangeType": "Tukar jenis",
    "onboardingChangeProvider": "Tukar pembekal",
    "onboardingSearchProviders": "Penyedia carian…",
    "onboardingApiKeyOptional": "Kunci API pilihan",
    "onboardingProviderConnected": "Pembekal disambungkan",
    "onboardingProviderSavedWithWarnings": "Pembekal disimpan dengan amaran",
    "onboardingProviderFinished": "Penyertaan pembekal selesai",
    "onboardingYourProviderConnection": "Sambungan pembekal anda",
    "onboardingTestPassed": "Ujian lulus",
    "onboardingTestFailed": "Ujian gagal",
    "onboardingOpenProviderDetails": "Buka butiran pembekal",
    "onboardingTryInPlayground": "Cuba di taman permainan",
    "onboardingDefaultConnectionName": "{provider} Utama",
    "onboardingTestingConnection": "Menguji sambungan pembekal…",
    "onboardingValidatingCredentials": "Mengesahkan kelayakan…",
    "onboardingSavingConnection": "Menyimpan sambungan pembekal…",
    "onboardingProviderFailed": "Penyertaan penyedia gagal",
    "onboardingCreatingCompatibleProvider": "Mencipta pembekal yang serasi…",
    "onboardingSavingCompatibleConnection": "Menyimpan sambungan pembekal yang serasi…",
    "onboardingCustomProviderFallbackName": "Pembekal tersuai",
    "onboardingCustomProviderFailed": "Penyertaan pembekal tersuai gagal",
    "onboardingLoadingOAuthConnection": "Memuatkan sambungan OAuth…",
    "onboardingOAuthNoConnectionFound": "OAuth selesai, tetapi tiada sambungan pembekal ditemui.",
    "onboardingOAuthFailed": "OAuth onboarding gagal",
    "onboardingAddProvider": "Tambah {provider}",
    "onboardingConnectionName": "Nama sambungan",
    "onboardingApiKeyOptionalLabel": "Kunci API (pilihan)",
    "onboardingBaseUrlOverride": "Timpa URL asas",
    "onboardingBaseUrlOverrideHint": "Pilihan. Disimpan sebagai providerSpecificData.baseUrl.",
    "onboardingRegion": "Wilayah",
    "onboardingSearchCx": "Cari CX / Enjin id",
    "onboardingProviderSpecificIdPlaceholder": "ID khusus pembekal pilihan",
    "onboardingCustomUserAgent": "Ejen Pengguna Tersuai",
    "onboardingWorking": "Bekerja…",
    "onboardingValidateSaveTest": "Sahkan, simpan dan uji",
    "onboardingBack": "belakang",
    "onboardingCreateCustomCompatibleProvider": "Buat pembekal serasi tersuai",
    "onboardingCreateCustomCompatibleDescription": "Wizard mencipta nod pembekal dahulu, kemudian menyimpan dan menguji sambungan kunci APInya.",
    "onboardingProtocol": "Protokol",
    "onboardingOpenAiCompatible": "Serasi OpenAI",
    "onboardingAnthropicCompatible": "Serasi antropik",
    "onboardingClaudeCodeCompatible": "Claude Code-serasi",
    "onboardingProviderPrefix": "Awalan pembekal",
    "onboardingProviderPrefixHint": "Digunakan untuk menjana id pembekal terurus.",
    "onboardingChatPath": "Laluan sembang",
    "onboardingModelsPath": "Laluan model",
    "onboardingCreateSaveTest": "Buat, simpan dan uji",
    "onboardingConnectProvider": "Sambungkan {provider}",
    "onboardingOAuthFlowDescription": "OmniRoute akan membuka aliran OAuth sedia ada untuk pembekal ini. Selepas log masuk, wizard memuatkan semula sambungan yang disimpan dan menjalankan ujian sambungan yang sama seperti halaman pembekal.",
    "onboardingStartOAuthFlow": "Mulakan aliran OAuth",
    "passthroughModelsDescription": "{provider} menerima ID model asli pembekal. Import daripada /models atau tambahkan ID tersuai untuk penghalaan.",
    "bedrockModelsDescription": "Model Amazon Bedrock diliputi oleh rantau AWS. Import daripada /models atau tambah ID model Bedrock yang didayakan di rantau yang dipilih.",
    "bedrockModelPlaceholder": "antropik.claude-sonnet-4-6",
    "addProviderSessionCookieTitle": "Tambahkan {provider} kuki sesi",
    "addProviderWebTokenTitle": "Tambahkan {provider} token web",
    "addProviderConnectionTitle": "Tambahkan sambungan {provider}",
    "webTokenCredentialLabel": "Token sesi web",
    "webNoAuthCredentialLabel": "Tiada kelayakan diperlukan",
    "webCookieCredentialHint": "Kuki yang diperlukan: {credential}. Tampalkan nilai pengepala Kuki daripada sesi web {provider} anda yang dilog masuk sendiri. Jangan sertakan awalan Cookie:.",
    "webTokenCredentialHint": "Bukti kelayakan: {credential}. Tampalkan nilai token daripada sesi web {provider} anda yang dilog masuk atau eksport DevTools HAR jika pembekal menyokongnya.",
    "webCookieEditHint": "Biarkan kosong untuk mengekalkan kuki sesi semasa. Kuki yang diperlukan: {credential}.",
    "webTokenEditHint": "Biarkan kosong untuk mengekalkan token sesi web semasa. Bukti kelayakan: {credential}.",
    "webSessionGuideTitle": "Bagaimana untuk mendapatkan kelayakan sesi",
    "webSessionGuideIntro": "{provider} menggunakan sesi web penyemak imbas dan bukannya kunci API.",
    "webCookieRequiredCredential": "Kuki yang diperlukan: {credential}",
    "webTokenRequiredCredential": "Token yang diperlukan: {credential}",
    "webSessionGuideStep1": "Log masuk ke {provider} dalam penyemak imbas anda.",
    "webSessionGuideStep2": "Buka alat pembangun penyemak imbas dan periksa permintaan yang dibuat oleh apl web.",
    "webSessionGuideStep3": "Salin bukti kelayakan yang diperlukan daripada domain penyedia sendiri. Untuk kuki, salin hanya nilai pengepala Kuki dan tinggalkan Kuki:.",
    "webSessionGuideStep4": "Tampalkannya di sini dan semak sambungannya. Jika ia berhenti berfungsi, log masuk semula dan gantikannya dengan nilai baharu.",
    "webSessionSecurityHint": "Anggap ini seperti kata laluan: ia boleh mengakses akaun web anda yang dilog masuk sehingga ia tamat tempoh atau dibatalkan.",
    "webNoAuthGuideTitle": "Tiada kelayakan diperlukan",
    "webNoAuthGuideBody": "{provider} tidak memerlukan kunci API atau kuki. Simpan sambungan untuk menggunakan titik akhir web percumanya.",
    "webSessionCredentialValidationFailed": "Pengesahan kelayakan sesi gagal. Log masuk sekali lagi, salin bukti kelayakan baharu dan cuba lagi.",
    "checkCookie": "Semak kuki",
    "checkWebToken": "Semak token"
  },
  "settings": {
    "title": "tetapan",
    "general": "Umum",
    "security": "Keselamatan",
    "appearance": "Penampilan",
    "routing": "Penghalaan",
    "cache": "Cache",
    "resilience": "Ketahanan",
    "routingSettingsIntro": "Mengawal cara permintaan anda dihalakan, diubah dan dihantar kepada pembekal AI.",
    "routingOpDropParagraphContainsLabel": "__MISSING__:Drop paragraph (contains)",
    "routingOpDropParagraphStartsWithLabel": "__MISSING__:Drop paragraph (starts with)",
    "routingOpReplaceTextLabel": "__MISSING__:Replace text",
    "routingOpReplaceRegexLabel": "__MISSING__:Replace regex",
    "routingOpDropBlockContainsLabel": "__MISSING__:Drop block (contains)",
    "routingOpPrependSystemBlockLabel": "__MISSING__:Prepend system block",
    "routingOpAppendSystemBlockLabel": "__MISSING__:Append system block",
    "routingOpInjectBillingHeaderLabel": "__MISSING__:Inject billing header",
    "routingOpObfuscateWordsLabel": "__MISSING__:Obfuscate words (ZWJ)",
    "routingOpDropParagraphContainsDesc": "__MISSING__:Removes any paragraph (text block split on blank lines) inside the system prompt whose text contains ANY of the listed substrings. Use to strip third-party client fingerprints like 'github.com/anomalyco/opencode' or 'docs.openwebui.com' that Anthropic's classifier flags.",
    "routingOpDropParagraphStartsWithDesc": "__MISSING__:Removes any paragraph that STARTS WITH one of the listed prefixes. Use for identity lines like 'You are OpenCode' or 'You are Open WebUI' that announce the calling client.",
    "routingOpReplaceTextDesc": "__MISSING__:Replaces a literal substring with another literal substring. Use for known trigger phrases — e.g. rewrite 'Here is some useful information about the environment you are running in:' to 'Environment context you are running in:' (an empirically-validated trigger phrase).",
    "routingOpReplaceRegexDesc": "__MISSING__:Replaces text matching a regular expression. Use when you need patterns (character classes, optional whitespace, anchors) instead of literal substrings. A malformed pattern is caught at runtime when the op runs.",
    "routingOpDropBlockContainsDesc": "__MISSING__:Removes ENTIRE system blocks (not just paragraphs) whose text contains any of the listed substrings. Use when a whole block is fingerprint-bearing and you want it gone — e.g. an injected MCP-server description.",
    "routingOpPrependSystemBlockDesc": "__MISSING__:Inserts a new text block at the FRONT of the system array. Use to add the SDK identity 'You are a Claude agent, built on Anthropic's Claude Agent SDK.' that Anthropic's classifier expects.",
    "routingOpAppendSystemBlockDesc": "__MISSING__:Inserts a new text block at the END of the system array. Use for cosmetic additions that don't need to be at position [0].",
    "routingOpInjectBillingHeaderDesc": "__MISSING__:Prepends the special 'x-anthropic-billing-header: cc_version=...; cc_entrypoint=...; cch=...;' text block that Anthropic's classifier validates. Required for CC bridge relay endpoints; for the native claude provider OmniRoute already injects its own billing line so this op is usually redundant there.",
    "routingOpObfuscateWordsDesc": "__MISSING__:Inserts a Zero-Width-Joiner character after the first letter of each listed word, so 'opencode' becomes 'o‍pencode'. Reads identical to humans but bypasses classifier word matches. Targets system blocks, user/assistant messages, and tool descriptions.",
    "routingNeedlesHint": "__MISSING__:List of substrings. A paragraph matches if it contains ANY one of them. Add one per line via 'Add entry'.",
    "routingPrefixesHint": "__MISSING__:List of strings. A paragraph matches if it starts with any one of them (leading whitespace is trimmed before matching).",
    "routingCaseSensitiveHint": "__MISSING__:When ON, 'OpenCode' and 'opencode' are different strings. When OFF (default), the comparison ignores case.",
    "routingMatchLiteralHint": "__MISSING__:Exact literal substring to find. No regex syntax — special chars like . * ? are treated as themselves.",
    "routingReplacementTextHint": "__MISSING__:Replacement string. Leave blank to delete the match. The output preserves surrounding text.",
    "routingAllOccurrencesHint": "__MISSING__:When ON (default), every instance is replaced. When OFF, only the first match is replaced.",
    "routingPatternHint": "__MISSING__:JavaScript regex source. Don't wrap in slashes — just 'foo(.*)bar'. Server rejects patterns that fail to compile.",
    "routingRegexFlagsHint": "__MISSING__:JavaScript regex flags (g = all matches, i = case-insensitive, s = dot matches newline, m = multiline). Default 'g'.",
    "routingBlockTextHint": "__MISSING__:Full text of the new system block. Use a literal string; the system block stores text only.",
    "routingIdempotencyKeyHint": "__MISSING__:Optional. If set, the op skips when a block whose text starts with this key is already present. Prevents double-prepend on retries.",
    "routingBillingEntrypointHint": "__MISSING__:Value injected as 'cc_entrypoint='. Anthropic accepts 'sdk-cli' (Agent SDK), 'cli' (Claude Code CLI), or other documented values.",
    "routingBillingVersionFormatHint": "__MISSING__:How the 3-char build hash after cc_version= is computed. 'ex-machina' = sha256 of CCH_SALT+chars-from-first-user-msg+version (per-message). 'omniroute-daystamp' = sha256 of YYYY-MM-DD+version (stable per-day).",
    "routingBillingCchAlgoHint": "__MISSING__:How the 5-char cch= token is computed. 'sha256-first-user' = sha256 of first user message text. 'xxhash64-body' = body-level signing fills it later. 'static-zero' = literal '00000' placeholder.",
    "routingObfuscateWordsHint": "__MISSING__:Lowercase words to obfuscate. ZWJ insertion is applied case-insensitively, so 'opencode' also matches 'OpenCode' and 'OPENCODE'.",
    "routingObfuscateTargetsHint": "__MISSING__:Which body regions to scan for the words: system blocks, user/assistant messages, and/or tool descriptions.",
    "routingObfuscateTargetsLabel": "__MISSING__:Targets",
    "routingSummarizeDropParagraphContains": "__MISSING__:drop paragraphs containing: {items}",
    "routingSummarizeDropParagraphStartsWith": "__MISSING__:drop paragraphs starting with: {items}",
    "routingSummarizeReplaceText": "__MISSING__:replace \"{match}\" → \"{replacement}\"",
    "routingSummarizeReplaceRegex": "__MISSING__:regex /{pattern}/{flags} → \"{replacement}\"",
    "routingSummarizeDropBlockContains": "__MISSING__:drop blocks containing: {items}",
    "routingSummarizePrependSystemBlock": "__MISSING__:prepend block: \"{text}\"",
    "routingSummarizeAppendSystemBlock": "__MISSING__:append block: \"{text}\"",
    "routingSummarizeInjectBillingHeader": "__MISSING__:inject billing header (entrypoint={entrypoint}, version={versionFormat}, cch={cchAlgo})",
    "routingSummarizeObfuscateWords": "__MISSING__:obfuscate {count} word(s) via ZWJ in {targets}",
    "routingDefaultAutoVariantLKGP": "__MISSING__:Last Known Good Provider",
    "routingDefaultAutoVariantLKGPDesc": "__MISSING__:Last Known Good Provider",
    "routingDefaultAutoVariantCoding": "__MISSING__:Quality-first for code",
    "routingDefaultAutoVariantCodingDesc": "__MISSING__:Quality-first for code",
    "routingDefaultAutoVariantFast": "__MISSING__:Low-latency routing",
    "routingDefaultAutoVariantFastDesc": "__MISSING__:Low-latency routing",
    "routingDefaultAutoVariantCheap": "__MISSING__:Cost-optimized",
    "routingDefaultAutoVariantCheapDesc": "__MISSING__:Cost-optimized",
    "routingDefaultAutoVariantOffline": "__MISSING__:High availability",
    "routingDefaultAutoVariantOfflineDesc": "__MISSING__:High availability",
    "routingDefaultAutoVariantSmart": "__MISSING__:Best discovery (10% explore)",
    "routingDefaultAutoVariantSmartDesc": "__MISSING__:Best discovery (10% explore)",
    "routingOpSummaryCount": "__MISSING__:{count, plural, =0 {no ops} one {# op} other {# ops}}",
    "routingOpEnabled": "__MISSING__:enabled",
    "routingOpDisabled": "__MISSING__:disabled",
    "routingOpStatusSeparator": "__MISSING__: · ",
    "resilienceSettingsIntro": "Cuba semula automatik, cooldown dan sandaran apabila penyedia gagal.",
    "aiSettingsIntro": "Tetapan khusus AI untuk belanjawan pemikiran, tingkah laku model dan pemampatan.",
    "systemPrompt": "Gesaan Sistem",
    "thinkingBudget": "Belanjawan Berfikir",
    "proxy": "proksi",
    "httpProxy": "HTTP Proxy",
    "1proxy": "1proxy",
    "proxySubTabsAria": "Proxy sections",
    "requestBodyLimitTitle": "Request Body Limit",
    "requestBodyLimitDescription": "Maximum API payload size accepted before a request body is parsed. Dedicated upload routes keep at least their built-in 100 MB limit.",
    "requestBodyLimitInputLabel": "Request body limit in MB",
    "requestBodyLimitEmptyError": "Enter a limit in MB",
    "requestBodyLimitWholeNumberError": "Use a whole number",
    "requestBodyLimitMinimumError": "Minimum is {min} MB",
    "requestBodyLimitMaximumError": "Maximum is {max} MB",
    "requestBodyLimitLoadFailed": "Failed to load request limit settings",
    "requestBodyLimitSaveSuccess": "Request body limit saved",
    "requestBodyLimitSaveFailed": "Failed to save request body limit",
    "requestBodyLimitSaving": "Saving...",
    "requestBodyLimitSave": "Save",
    "requestBodyLimitCurrent": "Current: {value}",
    "mitmProxy": "Proksi MITM",
    "pricing": "penentuan harga",
    "storage": "Penyimpanan",
    "policies": "dasar",
    "ipFilter": "Penapis IP",
    "comboDefaults": "Kombo Lalai",
    "fallbackChains": "Rantai Fallback",
    "changePassword": "Tukar Kata Laluan",
    "enablePassword": "Dayakan Kata Laluan",
    "darkMode": "Mod Gelap",
    "lightMode": "Mod Cahaya",
    "memoryTitle": "Memory",
    "memoryDesc": "Persistent cross-session conversational memory",
    "memoryEnabled": "Enable Memory",
    "memoryEnabledDesc": "When enabled, OmniRoute will inject relevant past context.",
    "maxTokens": "Max Tokens",
    "retentionDays": "Retention",
    "recent": "Recent",
    "recentDesc": "Chronological window",
    "semantic": "Semantic",
    "semanticDesc": "Vector search",
    "hybrid": "Hybrid",
    "hybridDesc": "Recent + Semantic",
    "skillsTitle": "Skills",
    "skillsDesc": "Tools for models",
    "skillsEnabled": "Enable Skills",
    "skillsEnabledDesc": "Allows agents to trigger functions.",
    "skillsComingSoon": "Skills marketplace coming soon.",
    "memorySkillsTitle": "Memory & Skills",
    "memorySkillsDesc": "Persistent context & capabilities",
    "modelsDevTitle": "Model Database",
    "modelsDevDesc": "Auto-sync pricing, capabilities & specs from models.dev",
    "modelsDevEnabled": "Enable models.dev Sync",
    "modelsDevEnabledDesc": "Fetch model pricing, capabilities, and specs from the open-source models.dev database",
    "modelsDevInterval": "Sync Interval",
    "syncNow": "Sync Now",
    "syncing": "Syncing...",
    "lastSync": "Last sync",
    "never": "Never",
    "justNow": "tadi",
    "modelsDevStats": "Sync Statistics",
    "modelsDevStatsDesc": "Current models.dev data coverage",
    "providers": "Pembekal",
    "modelsWithPricing": "Models with Pricing",
    "capabilities": "Capabilities",
    "lastSyncCount": "Last Sync Count",
    "lastSyncFull": "Last full sync",
    "modelsDevInfo": "How It Works",
    "modelsDevInfoDesc": "models.dev is an open-source database of AI model specifications maintained by the SST/OpenCode team. It provides pricing, capabilities, context limits, and modalities for 4,000+ models across 100+ providers.",
    "modelsDevInfoResolution": "Pricing resolution order (highest priority first):",
    "modelsDevInfoOrder": "User Override → models.dev → LiteLLM → Hardcoded Default",
    "systemTheme": "Tema Sistem",
    "debugToggle": "Enable Debug Mode",
    "sidebarVisibilityToggle": "Show Sidebar Items",
    "enableCache": "Dayakan Cache",
    "cacheTTL": "Cache TTL",
    "maxCacheSize": "Saiz Cache Maks",
    "clearCache": "Kosongkan Cache",
    "cacheCleared": "Cache cleared successfully",
    "clearCacheFailed": "Failed to clear cache",
    "cacheHits": "Cache Hits",
    "cacheMisses": "Cache Rindu",
    "hitRate": "Kadar Hit",
    "cacheEntries": "Entri Cache",
    "cacheSettings": "Cache Settings",
    "semanticCache": "Semantic Cache",
    "maxEntries": "Max Entries",
    "ttlMinutes": "TTL (minutes)",
    "promptCache": "Cache Prompt",
    "strategy": "Strategy",
    "preserveClientCache": "Preserve Client Cache",
    "enabled": "Enabled",
    "loading": "Loading...",
    "saving": "Menyimpan...",
    "save": "Save",
    "circuitBreaker": "Pemutus Litar",
    "retryPolicy": "Dasar Cuba semula",
    "maxRetries": "Max Cuba Semula",
    "retryDelay": "Cuba Semula Kelewatan",
    "timeoutMs": "Tamat masa (ms)",
    "enableSystemPrompt": "Dayakan Sistem Prompt",
    "systemPromptText": "Teks Gesaan Sistem",
    "autoDisableBannedAccounts": "Auto-Disable Banned Accounts",
    "autoDisableDescription": "Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 'verify your account'). This removes them from the combo rotation.",
    "autoDisableThreshold": "Ban Threshold",
    "autoDisableThresholdDesc": "Consecutive ban signals required before permanent deactivation.",
    "resilienceStructureTitle": "Resilience Structure",
    "resilienceStructureDesc": "Halaman ini hanya mengkonfigurasi tingkah laku. Keadaan pemutus langsung ditunjukkan pada halaman Kesihatan. Percubaan semula khusus kombo dan kawalan slot round-robin kekal pada tetapan kombo.",
    "enableThinking": "Dayakan Berfikir",
    "maxThinkingTokens": "Token Pemikiran Maks",
    "enableProxy": "Dayakan Proksi",
    "proxyUrl": "URL proksi",
    "pricingRates": "Format Kadar Harga",
    "currentPricing": "Gambaran Keseluruhan Harga Semasa",
    "loadingPricing": "Memuatkan data harga...",
    "noPricing": "Tiada data harga tersedia",
    "input": "Input",
    "output": "Keluaran",
    "cached": "Dicache",
    "reasoning": "Penaakulan",
    "cacheCreation": "Penciptaan Cache",
    "customPricing": "Harga Tersuai",
    "databaseSize": "Saiz Pangkalan Data",
    "backupDb": "Pangkalan Data Sandaran",
    "restoreDb": "Pulihkan Pangkalan Data",
    "exportData": "Eksport Data",
    "importData": "Import Data",
    "clearData": "Kosongkan Semua Data",
    "clearDataConfirm": "Ini akan memadamkan semua data secara kekal. Adakah anda pasti?",
    "enableRequestLogs": "Dayakan Log Permintaan",
    "logRetention": "Pengekalan Log",
    "ipWhitelist": "Senarai Putih IP",
    "ipBlacklist": "Senarai Hitam IP",
    "addIP": "Tambah IP",
    "savedSuccessfully": "Tetapan berjaya disimpan",
    "ai": "AI",
    "advanced": "Maju",
    "localMode": "Mod Setempat — Semua data yang disimpan pada mesin anda",
    "settingsSectionsAria": "Bahagian tetapan",
    "switchThemes": "Beralih antara tema terang dan gelap",
    "themeSelectionAria": "Pemilihan tema",
    "themeLight": "Cahaya",
    "themeDark": "Gelap",
    "themeSystem": "Sistem",
    "endpointTunnelVisibility": "Keterlihatan terowong titik akhir",
    "endpointTunnelVisibilityDesc": "Sembunyikan kawalan terowong dari halaman Endpoint tanpa mengubah keadaan terowong.",
    "showCloudflareTunnel": "Terowong Pantas Cloudflare",
    "showCloudflareTunnelDesc": "Tunjukkan kawalan Cloudflare Quick Tunnel pada halaman Endpoint.",
    "showTailscaleFunnel": "Corong Skala Ekor",
    "showTailscaleFunnelDesc": "Tunjukkan kawalan Corong Skala Ekor pada halaman Endpoint.",
    "showNgrokTunnel": "Terowong ngrok",
    "showNgrokTunnelDesc": "Tunjukkan kawalan Terowong ngrok pada halaman Endpoint.",
    "sidebarVisibility": "Hide sidebar items",
    "sidebarVisibilityDesc": "Hide any sidebar navigation entry to reduce visual clutter.",
    "sidebarVisibilityHint": "Any sidebar section is hidden automatically when a...",
    "hideHealthLogs": "Sembunyikan Log Pemeriksaan Kesihatan",
    "hideHealthLogsDesc": "Apabila HIDUP, sekat mesej [HealthCheck] dalam konsol pelayan",
    "themeAccent": "Warna tema",
    "themeAccentDesc": "Pilih warna pratetap atau cipta tema anda sendiri dengan satu warna",
    "themeCreate": "Cipta tema",
    "themeCustom": "Tema tersuai",
    "themeBlue": "Biru",
    "themeRed": "Merah",
    "themeGreen": "Hijau",
    "themeViolet": "Ungu",
    "themeOrange": "Oren",
    "themeCyan": "Sian",
    "whitelabeling": "Branding",
    "whitelabelingDesc": "Customize the application name and logo",
    "appName": "Application Name",
    "appNameDesc": "Display name shown in sidebar and browser tab",
    "customLogo": "Custom Logo URL",
    "customLogoDesc": "URL to your custom logo image",
    "uploadLogo": "Upload Logo",
    "resetLogo": "Reset to Default",
    "logoPreview": "Preview",
    "customFavicon": "Browser Favicon",
    "customFaviconDesc": "URL to your custom favicon (shown in browser tab)",
    "uploadFavicon": "Upload Favicon",
    "resetFavicon": "Reset Favicon",
    "faviconPreview": "Favicon Preview",
    "flushCache": "Flush Cache",
    "flushing": "Membilas…",
    "size": "Saiz",
    "hits": "Hits",
    "evictions": "Pengusiran",
    "loadingCacheStats": "Memuatkan statistik cache…",
    "globalProxy": "Proksi Global",
    "globalProxyDesc": "Konfigurasikan proksi keluar global untuk semua panggilan API. Pembekal individu, kombo dan kunci boleh mengatasi perkara ini.",
    "noGlobalProxy": "Tiada proksi global dikonfigurasikan",
    "globalLabel": "Global",
    "configure": "Konfigurasikan",
    "globalSystemPrompt": "Gesaan Sistem Global",
    "saved": "Disimpan",
    "beforePromptLabel": "__MISSING__:Before Prompt",
    "beforePromptDesc": "__MISSING__:Injected before agent/provider system instructions",
    "beforePromptPlaceholder": "__MISSING__:Instructions inserted before agent/provider prompt...",
    "afterPromptLabel": "__MISSING__:After Prompt",
    "afterPromptDesc": "__MISSING__:Injected after agent/provider system instructions",
    "afterPromptPlaceholder": "__MISSING__:Instructions inserted after agent/provider prompt...",
    "chars": "{count} aksara",
    "thinkingBudgetTitle": "Belanjawan Berfikir",
    "thinkingBudgetDesc": "Kawal penggunaan token penaakulan AI merentas semua permintaan",
    "passthrough": "Laluan",
    "passthroughDesc": "Tiada perubahan — pelanggan mengawal belanjawan berfikir",
    "auto": "Auto",
    "autoDesc": "Keluarkan semua konfigurasi pemikiran — biarkan pembekal memutuskan",
    "custom": "Adat",
    "customDesc": "Tetapkan belanjawan token tetap untuk semua permintaan",
    "adaptive": "Adaptif",
    "adaptiveDesc": "Skala belanjawan berdasarkan kerumitan permintaan",
    "effortNone": "Tiada (0 token)",
    "effortLow": "Rendah (1K token)",
    "effortMedium": "Sederhana (10K token)",
    "effortHigh": "Tinggi (128K token)",
    "tokenBudget": "Belanjawan Token",
    "tokens": "token",
    "baseEffortLevel": "Tahap Usaha Asas",
    "adaptiveHint": "Skala mod penyesuaian dari tahap asas ini berdasarkan kiraan mesej, penggunaan alat dan panjang segera.",
    "requireLogin": "Memerlukan log masuk",
    "requireLoginDesc": "Apabila HIDUP, papan pemuka memerlukan kata laluan. Apabila MATI, akses tanpa log masuk.",
    "currentPassword": "Kata Laluan Semasa",
    "enterCurrentPassword": "Masukkan kata laluan semasa",
    "newPassword": "Kata Laluan Baharu",
    "enterNewPassword": "Masukkan kata laluan baharu",
    "confirmPassword": "Sahkan Kata Laluan Baharu",
    "confirmPasswordPlaceholder": "Sahkan kata laluan baharu",
    "passwordsNoMatch": "Kata laluan tidak sepadan",
    "passwordUpdated": "Kata laluan berjaya dikemas kini",
    "failedUpdatePassword": "Gagal mengemas kini kata laluan",
    "errorOccurred": "Ralat berlaku",
    "updatePassword": "Kemas kini Kata Laluan",
    "setPassword": "Tetapkan Kata Laluan",
    "apiEndpointProtection": "Perlindungan Titik Akhir API",
    "requireAuthModels": "Memerlukan kunci API untuk /models",
    "requireAuthModelsDesc": "Apabila HIDUP, titik akhir /v1/models mengembalikan 404 untuk permintaan yang tidak disahkan. Menghalang penemuan model oleh pengguna yang tidak dibenarkan.",
    "authModelHeading": "Model kebenaran aktif",
    "authModelClient": "Titik akhir API pelanggan (/v1/*, /chat/*, /responses/*, /codex/*, /message/*) memerlukan kunci API Pembawa.",
    "authModelManagement": "Titik akhir pengurusan (/papan pemuka, /api/*) memerlukan sesi papan pemuka atau bukti kelayakan pengurusan.",
    "authModelPublic": "Hanya laluan log masuk, kesihatan dan bootstrap adalah awam.",
    "bruteForceProtection": "Log masuk perlindungan kekerasan",
    "bruteForceProtectionDesc": "Pendikit dan kunci /api/auth/log masuk selepas kegagalan berulang dari IP yang sama.",
    "corsAllowedOrigins": "CORS dibenarkan asal usul",
    "corsAllowedOriginsDesc": "Senarai asal pelayar yang dipisahkan koma dibenarkan untuk memanggil pelayan ini. Senarai kosong = tiada akses CORS pelayar (pelayan-ke-pelayan masih berfungsi). Gunakan CORS_ALLOW_ALL=true env var sahaja untuk pembangunan.",
    "blockedProviders": "Penyedia yang disekat",
    "blockedProvidersDesc": "Sembunyikan pembekal tertentu daripada respons /v1/models. Penyedia yang disekat tidak akan muncul dalam penyenaraian model.",
    "providersBlocked": "{count} pembekal disekat daripada /models",
    "blockProviderTitle": "Sekat {provider}",
    "unblockProviderTitle": "Nyahsekat {provider}",
    "cliFingerprint": "CLI Fingerprint Matching",
    "cliFingerprintDesc": "Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.",
    "cliFingerprintEnabled": "{count} provider(s) with CLI fingerprint active",
    "enableFingerprintTitle": "Enable fingerprint for {provider}",
    "disableFingerprintTitle": "Disable fingerprint for {provider}",
    "systemTransforms": "Talian Transformasi Blok Sistem",
    "systemTransformsDesc": "Setiap pembekal mengarahkan saluran paip perubahan yang digunakan pada badan permintaan sebelum pemajuan. Menyokong sebarang ID pembekal.",
    "systemTransformsAddProvider": "Tambah pembekal",
    "systemTransformsAddProviderPlaceholder": "Pilih pembekal…",
    "systemTransformsAddProviderAllConfigured": "Semua pembekal sudah dikonfigurasikan",
    "systemTransformsRemoveProvider": "Alih keluar pembekal",
    "systemTransformsNoProviders": "Tiada pembekal dikonfigurasikan. Tambahkan pembekal untuk bermula.",
    "systemTransformsOpMoveUp": "Bergerak ke atas",
    "systemTransformsOpMoveDown": "Bergerak ke bawah",
    "systemTransformsOpDelete": "Padam op",
    "routingStrategy": "Strategi Penghalaan",
    "routingAdvancedGuideTitle": "Panduan laluan lanjutan",
    "routingAdvancedGuideHint1": "Gunakan Fill First untuk keutamaan yang boleh diramal, Round Robin untuk keadilan dan P2C untuk daya tahan latensi.",
    "routingAdvancedGuideHint2": "Jika pembekal berbeza dalam kualiti/kos, mulakan dengan Pilihan Kos untuk kerja latar belakang dan Paling Kurang Digunakan untuk pemakaian seimbang.",
    "fillFirst": "Isi dahulu",
    "fillFirstDesc": "Gunakan akaun dalam susunan keutamaan",
    "roundRobin": "Round Robin",
    "roundRobinDesc": "Kitaran melalui semua akaun",
    "p2c": "P2C",
    "p2cDesc": "Pilih 2 secara rawak, gunakan yang lebih sihat",
    "random": "rawak",
    "randomDesc": "Akaun rawak setiap permintaan",
    "leastUsed": "Paling Kurang Digunakan",
    "leastUsedDesc": "Pilih akaun yang paling kurang digunakan baru-baru ini",
    "costOpt": "Pilihan Kos",
    "costOptDesc": "Pilih akaun termurah yang tersedia",
    "resetAware": "Set Semula-Sedar RR",
    "resetAwareDesc": "Lebih suka akaun dengan baki kuota yang sihat dan penetapan semula yang lebih hampir",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling",
    "stickyLimit": "Had Melekit",
    "stickyLimitDesc": "Panggilan setiap akaun sebelum bertukar",
    "modelAliases": "Alias Model",
    "modelAliasesTitle": "Alias Model",
    "modelAliasesDesc": "Remap model names using exact matches or wildcard patterns.",
    "addCustomAlias": "Tambah Alias Tersuai",
    "deprecatedModelId": "ID model yang ditamatkan",
    "newModelId": "ID model baharu",
    "customAliases": "Alias Tersuai",
    "builtInAliases": "Alias Terbina Dalam",
    "backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
    "backgroundDegradationDesc": "Kesan tugas latar belakang secara automatik (tajuk, ringkasan) dan halakan ke model yang lebih murah",
    "enableDegradation": "Dayakan Degradasi Latar Belakang",
    "enableDegradationHint": "Apabila diaktifkan, tugas latar belakang seperti penjanaan tajuk dan ringkasan dihalakan ke model yang lebih murah secara automatik",
    "tasksDetected": "Tugas dikesan",
    "degradationMap": "Peta Degradasi Model",
    "premiumModel": "Model premium",
    "cheapModel": "Model murah",
    "detectionPatterns": "Corak Pengesanan",
    "newPattern": "cth. \"jana tajuk\"",
    "aliasPatternPlaceholder": "claude-sonnet-*",
    "aliasTargetPlaceholder": "claude-sonnet-4-20250514",
    "pattern": "Corak",
    "targetModel": "Model Sasaran",
    "add": "+ Tambah",
    "session": "Sesi",
    "sessionDetailsAria": "Butiran sesi",
    "status": "Status",
    "authenticated": "Disahkan",
    "guest": "tetamu",
    "loginTime": "Masa Log Masuk",
    "sessionAge": "Umur Sesi",
    "browser": "pelayar",
    "clearLocalData": "Kosongkan Data Tempatan",
    "logout": "Log keluar",
    "clearLocalDataConfirm": "Kosongkan semua data setempat? Ini akan menetapkan semula pilihan anda.",
    "unknown": "Tidak diketahui",
    "systemActor": "sistem",
    "ipAccessControl": "Kawalan Capaian IP",
    "ipAccessControlDesc": "Sekat atau benarkan alamat IP tertentu",
    "ipModeDisabled": "Dilumpuhkan",
    "ipModeBlacklist": "Senarai hitam",
    "ipModeWhitelist": "Senarai putih",
    "ipModeWhitelistPriority": "Keutamaan WL",
    "addIpAddress": "Tambah Alamat IP",
    "ipAddressPlaceholder": "192.168.1.0/24 atau 10.0.*.*",
    "block": "+ Sekat",
    "allow": "+ Benarkan",
    "blocked": "Disekat ({count})",
    "allowed": "Dibenarkan ({count})",
    "temporaryBans": "Larangan Sementara ({count})",
    "minLeft": "{min}m lagi",
    "auditLog": "Log Audit",
    "searchAuditLogs": "Cari log audit...",
    "failedLoadAuditLog": "Gagal memuatkan log audit",
    "noAuditEvents": "Tiada acara audit ditemui",
    "action": "Tindakan",
    "actor": "pelakon",
    "details": "Butiran",
    "time": "Masa",
    "fallbackChainsTitle": "Rantai Fallback",
    "fallbackChainsDesc": "Tentukan pesanan sandaran pembekal bagi setiap model",
    "addChain": "+ Tambah Rantaian",
    "modelName": "Nama Model",
    "modelNamePlaceholder": "claude-sonnet-4-20250514",
    "providersCommaSeparated": "Penyedia (dipisahkan koma, dalam susunan keutamaan)",
    "providersCommaSeparatedPlaceholder": "antropik, openai, gemini",
    "createChain": "Buat Rantaian",
    "noFallbackChains": "Tiada Rantai Fallback",
    "noFallbackChainsDesc": "Buat rantaian untuk menentukan pesanan sandaran pembekal untuk model.",
    "loadingFallbackChains": "Memuatkan rantaian sandaran...",
    "deleteChainConfirm": "Padamkan rantaian sandaran untuk \"{model}\"?",
    "chainCreated": "Rantaian dibuat untuk {model}",
    "chainDeleted": "Rantaian dipadamkan untuk {model}",
    "failedCreateChain": "Gagal membuat rantaian",
    "failedDeleteChain": "Gagal memadamkan rantai",
    "deleteChain": "Padamkan rantai",
    "fillModelAndProviders": "Sila isi nama model dan pembekal",
    "addAtLeastOneProvider": "Tambah sekurang-kurangnya satu pembekal",
    "comboDefaultsTitle": "Kombo Lalai",
    "comboDefaultsGuideTitle": "Bagaimana untuk menala lalai kombo",
    "comboDefaultsGuideHint1": "Pastikan percubaan semula rendah dalam aliran kependaman rendah; tambahkan tamat masa hanya untuk tugas generasi panjang.",
    "comboDefaultsGuideHint2": "Gunakan penggantian pembekal apabila satu pembekal memerlukan gelagat tamat masa/cuba semula yang berbeza daripada lalai global.",
    "globalComboConfig": "Konfigurasi kombo global",
    "defaultStrategy": "Strategi Lalai",
    "defaultStrategyDesc": "Digunakan pada kombo baharu tanpa strategi yang jelas",
    "comboStrategyAria": "Strategi kombo",
    "priority": "Keutamaan",
    "weighted": "Ditimbang",
    "contextRelay": "Context Relay",
    "contextRelayDesc": "Hands off context between providers with automatic summarization",
    "maxRetriesLabel": "Max Cuba Semula",
    "retryDelayLabel": "Cuba Semula Kelewatan (ms)",
    "timeoutLabel": "Tamat masa (ms)",
    "healthCheck": "Pemeriksaan Kesihatan",
    "healthCheckDesc": "Prasemak ketersediaan pembekal",
    "trackMetrics": "Metrik Jejak",
    "trackMetricsDesc": "Catatkan metrik permintaan setiap kombo",
    "providerOverrides": "Penggantian Pembekal",
    "providerOverridesDesc": "Gantikan tamat masa dan cuba semula setiap pembekal. Tetapan pembekal mengatasi lalai global.",
    "providerMaxRetriesAria": "{provider} percubaan semula maks",
    "providerTimeoutAria": "{provider} tamat masa ms",
    "removeProviderOverrideAria": "Alih keluar {provider} override",
    "newProviderNamePlaceholder": "cth. google, openai...",
    "newProviderNameAria": "Nama pembekal baharu",
    "retries": "mencuba semula",
    "ms": "ms",
    "saveComboDefaults": "Simpan Combo Lalai",
    "maxNestingDepth": "Kedalaman Bersarang Maks",
    "concurrencyPerModel": "Concurrency / Model",
    "queueTimeout": "Waktu Beratur (ms)",
    "contextRelayHandoffThreshold": "Handoff Threshold",
    "contextRelayMaxMessages": "Max Messages For Summary",
    "contextRelaySummaryModel": "Summary Model",
    "contextRelayProviderNote": "Context Relay currently generates handoffs for Codex accounts and uses these values as global defaults for new or unconfigured combos.",
    "providerProfiles": "Profil Pembekal",
    "providerProfilesDesc": "Tetapan daya tahan yang berasingan untuk pembekal OAuth (berasaskan sesi) dan Kunci API (bermeter). Pembekal OAuth mempunyai ambang yang lebih ketat disebabkan oleh had kadar yang lebih rendah.",
    "oauthProviders": "Pembekal OAuth",
    "apiKeyProviders": "Pembekal Kunci API",
    "transientCooldown": "Cooldown Sementara",
    "rateLimitCooldown": "Sejuk Had Kadar",
    "maxBackoffLevel": "Tahap Backoff Maks",
    "cbThreshold": "Ambang CB",
    "cbResetTime": "Masa Tetapan Semula CB",
    "rateLimiting": "Mengehadkan Kadar",
    "rateLimitingDesc": "Pembekal Kunci API dihadkan kadar secara automatik dengan lalai yang selamat. Had dipelajari daripada pengepala respons dan menyesuaikan diri dari semasa ke semasa.",
    "defaultSafetyNet": "Jaringan Keselamatan Lalai",
    "rpm": "RPM",
    "minGap": "Jurang Min",
    "maxConcurrent": "Serentak Maks",
    "activeLimiters": "Penghad Aktif",
    "noActiveLimiters": "Tiada pengehad kadar aktif lagi.",
    "reservoir": "takungan",
    "running": "Berlari",
    "queued": "Beratur",
    "circuitBreakers": "Pemutus Litar",
    "breakerStateClosed": "tertutup",
    "breakerStateOpen": "Buka",
    "breakerStateHalfOpen": "Separuh Terbuka",
    "tripped": "{count} tersandung",
    "healthy": "{count} sihat",
    "resetAll": "Tetapkan Semula Semua",
    "noCircuitBreakers": "Tiada pemutus litar aktif lagi. Ia dicipta secara automatik apabila permintaan mengalir melalui saluran paip kombo.",
    "failures": "{count} kegagalan",
    "policiesLocked": "Dasar & Pengecam Terkunci",
    "allOperational": "Semua sistem beroperasi — tiada penguncian atau pemutus tersandung",
    "loadingPolicies": "Memuatkan dasar...",
    "lockedIdentifiers": "Pengecam Terkunci",
    "unlockedIdentifier": "Dibuka kunci: {identifier}",
    "sinceDate": "sejak {date}",
    "forceUnlock": "Paksa Buka Kunci",
    "unlocking": "Membuka kunci...",
    "failedUnlock": "Gagal membuka kunci",
    "failedLoadWithStatus": "Gagal memuatkan: {status}",
    "failedLoadResilience": "Gagal memuatkan status daya tahan",
    "saveFailed": "Simpan gagal",
    "resetFailed": "Tetapan semula gagal",
    "loadingResilience": "Memuatkan status daya tahan...",
    "retry": "Cuba semula",
    "systemStorage": "Sistem & Storan",
    "allDataLocal": "Semua data disimpan secara setempat pada mesin anda",
    "databasePath": "Laluan Pangkalan Data",
    "exportDatabase": "Eksport Pangkalan Data",
    "exportAll": "Eksport Semua (.tar.gz)",
    "importDatabase": "Import Pangkalan Data",
    "confirmDbImport": "Sahkan Import Pangkalan Data",
    "confirmDbImportDesc": "Ini akan menggantikan semua data semasa dengan kandungan daripada {file}. Sandaran akan dibuat secara automatik sebelum import.",
    "yesImport": "Ya, Import",
    "lastBackup": "Sandaran Terakhir",
    "noBackupYet": "Tiada sandaran lagi",
    "backupNow": "Sandaran Sekarang",
    "backupRestore": "Sandaran & Pulihkan",
    "viewBackups": "Lihat Sandaran",
    "hide": "Sembunyi",
    "backupRetentionDesc": "Syot kilat pangkalan data dibuat secara automatik sebelum dipulihkan dan setiap 15 minit apabila data berubah. Pengekalan: 24 jam + 30 sandaran harian dengan putaran pintar.",
    "loadingBackups": "Memuatkan sandaran...",
    "noBackupsYet": "Tiada sandaran tersedia lagi. Sandaran akan dibuat secara automatik apabila data berubah.",
    "backupsAvailable": "{count} sandaran tersedia",
    "refresh": "Segarkan semula",
    "confirm": "Sahkan?",
    "yes": "ya",
    "no": "Tidak",
    "restore": "Pulihkan",
    "invalidFileType": "Jenis fail tidak sah. Hanya fail .sqlite diterima.",
    "exportFailed": "Eksport gagal",
    "exportFailedWithError": "Eksport gagal: {error}",
    "fullExportFailedWithError": "Eksport penuh gagal: {error}",
    "backupCreated": "Sandaran dibuat: {file}",
    "restoreSuccess": "Dipulihkan! {connections} sambungan, {nodes} nod, {combos} gabungan, {apiKeys} kunci API.",
    "importSuccess": "Pangkalan data diimport! {connections} sambungan, {nodes} nod, {combos} gabungan, {apiKeys} kunci API.",
    "minutesAgo": "{count}m yang lalu",
    "hoursAgo": "{count}j lalu",
    "daysAgo": "{count}h yang lalu",
    "backupReasonManual": "manual",
    "backupReasonPreRestore": "pra-pemulihan",
    "connectionsCount": "{count, plural, one {# connection} other {# connections}}",
    "noChangesSinceBackup": "Tiada perubahan sejak sandaran terakhir",
    "backupFailed": "Sandaran gagal",
    "restoreFailed": "Pemulihan gagal",
    "importFailed": "Import gagal",
    "errorDuringRestore": "Ralat berlaku semasa pemulihan",
    "errorDuringImport": "Ralat berlaku semasa import",
    "modelPricing": "Harga Model",
    "modelPricingDesc": "Konfigurasikan kadar kos setiap model • Semua kadar dalam token $/1J",
    "registry": "Pendaftaran",
    "priced": "Berharga",
    "searchProvidersModels": "Cari pembekal atau model...",
    "showAll": "Tunjukkan Semua",
    "noProvidersMatch": "Tiada pembekal yang sepadan dengan carian anda.",
    "howPricingWorks": "Cara Harga Berfungsi",
    "cacheWrite": "Tulis Cache",
    "unsaved": "belum disimpan",
    "resetDefaults": "Tetapkan Semula Lalai",
    "saveProvider": "Simpan Penyedia",
    "model": "Model",
    "models": "model",
    "moreProviders": "{count} lagi pembekal",
    "withPricing": "dengan penetapan harga dikonfigurasikan",
    "policiesCircuitBreakers": "Polisi & Pemutus Litar",
    "activeIssuesDetected": "Isu aktif dikesan",
    "off": "Mati",
    "resetPricingConfirm": "Tetapkan semula semua harga untuk {provider} kepada lalai?",
    "pricingDescInput": "Input: token dihantar kepada model",
    "pricingDescOutput": "Output: token dijana",
    "pricingDescCached": "Dicache: input yang digunakan semula (~50% daripada kadar input)",
    "pricingDescReasoning": "Penaakulan: token pemikiran (kembali kepada Output)",
    "pricingDescCacheWrite": "Cache Write: mencipta entri cache (kembali ke Input)",
    "pricingDescFormula": "Kos = (input × input_rate) + (output × output_rate) + (cached × cached_rate) setiap juta token.",
    "pricingSettingsTitle": "Tetapan Harga",
    "totalModels": "Jumlah Model",
    "active": "Aktif",
    "costCalculation": "Pengiraan Kos",
    "costCalculationDesc": "Kos dikira berdasarkan penggunaan token dan kadar harga yang dikonfigurasikan untuk setiap model.",
    "pricingFormat": "Format Harga",
    "pricingFormatDesc": "Semua kadar adalah dalam token $/1J (dolar per juta token).",
    "tokenTypes": "Jenis Token",
    "inputTokenDesc": "Token gesaan standard",
    "outputTokenDesc": "Token penyiapan/tindak balas",
    "cachedTokenDesc": "Token input dicache (biasanya 50% daripada kadar input)",
    "reasoningTokenDesc": "Token penaakulan/pemikiran khas (sandaran kepada kadar keluaran)",
    "cacheCreationTokenDesc": "Token yang digunakan untuk mencipta entri cache (sandar kepada kadar input)",
    "customPricingNote": "Anda boleh mengatasi harga lalai untuk model tertentu. Penggantian tersuai diutamakan berbanding harga yang dikesan secara automatik.",
    "editPricing": "Edit Harga",
    "viewFullDetails": "Lihat Butiran Penuh",
    "themeCoral": "Koral",
    "adaptiveVolumeRouting": "Adaptive Volume Routing",
    "adaptiveVolumeRoutingDesc": "Scale connections dynamically based on payload volume and throughput pressure.",
    "lkgpToggleTitle": "Last Known Good Provider (LKGP)",
    "lkgpToggleDesc": "When enabled, the router remembers which provider last served a successful response and tries it first on subsequent requests.",
    "clearLkgpCache": "Clear LKGP Cache",
    "lkgpCacheCleared": "LKGP cache cleared successfully",
    "lkgpCacheClearFailed": "Failed to clear LKGP cache",
    "days": "Days",
    "lkgp": "LKGP Mode",
    "lkgpDesc": "Last Known Good Provider (Predictable resilience)",
    "maintenance": "Maintenance",
    "purgeExpiredLogs": "Purge Expired Logs",
    "purgeLogsFailed": "Failed to purge logs",
    "contextOpt": "Context Optimized",
    "contextOptDesc": "Routes based on context window requirements and conversation length",
    "priorityDesc": "Sequential fallback - tries provider 1 first, then provider 2, and so on",
    "weightedDesc": "Distributes traffic by percentage weights across providers",
    "modelRoutingTitle": "Model Routing Rules",
    "modelRoutingDesc": "Automatically route models to specific combos using glob patterns",
    "addRule": "Add Rule",
    "routeToCombo": "Route to Combo",
    "selectCombo": "Select combo...",
    "priorityHint": "Higher = checked first. Use 10+ for specific patterns.",
    "patternHint": "Use * for any chars, ? for single char. Case-insensitive.",
    "noRoutingRules": "No routing rules configured. Requests use the global combo by default.",
    "routingRuleHint": "Add a rule like claude-opus* -> frontier-combo to automatically route requests.",
    "deleteRoutingRule": "Delete this model routing rule?",
    "exactMatchMode": "Exact Match",
    "wildcardPatternMode": "Wildcard Pattern",
    "exactMatchModeDesc": "Use exact aliases for deprecated or renamed model IDs.",
    "wildcardPatternModeDesc": "Use wildcard aliases with * and ? when a family of models should map to one target.",
    "noExactAliasesConfigured": "No exact-match aliases configured.",
    "wildcardRulesTitle": "Wildcard Rules",
    "noWildcardAliasesConfigured": "No wildcard aliases configured.",
    "overview": "Overview",
    "unknownError": "Unknown Error",
    "pricingSourceLiteLLM": "Pricing Source Lite Llm",
    "clearSyncedPricingConfirm": "Clear Synced Pricing Confirm",
    "clearSyncedPricingFailed": "Clear Synced Pricing Failed",
    "pricingSourceUser": "Pricing Source User",
    "pageDescription": "Page Description",
    "pricingSyncStatus": "Pricing Sync Status",
    "whitelist": "Whitelist",
    "syncDisabled": "Sync Disabled",
    "pricingLoadFailed": "Pricing Load Failed",
    "pricingSyncDescription": "Pricing Sync Description",
    "clearSyncedPricingSuccess": "Clear Synced Pricing Success",
    "clearSyncedPricingFailedWithReason": "Gagal mengosongkan harga: {reason}",
    "pricingSourceDefault": "Pricing Source Default",
    "pricingSyncSuccess": "Pricing Sync Success",
    "enableSyncError": "Enable Sync Error",
    "syncEnabled": "Sync Enabled",
    "blacklist": "Blacklist",
    "pricingSourceModelsDev": "Pricing Source Models Dev",
    "syncedModels": "Synced Models",
    "budget": "Budget",
    "pricingSyncTitle": "Pricing Sync Title",
    "pricingResetFailedWithReason": "Gagal menetapkan semula harga: {reason}",
    "tab": "Tab",
    "pricingSavedProvider": "Harga disimpan untuk {provider}",
    "pricingSyncFailed": "Pricing Sync Failed",
    "pricingSaveFailedWithReason": "Gagal menyimpan harga: {reason}",
    "pricingResetProvider": "Penetapan semula harga untuk {provider}",
    "nextSync": "Next Sync",
    "pricingSyncFailedWithReason": "Penyegerakan harga gagal: {reason}",
    "clearSyncedPricing": "Clear Synced Pricing",
    "compressionTitle": "Prompt Compression",
    "compressionDesc": "Reduce token usage by compressing prompts before sending to providers",
    "compressionMode": "Compression Mode",
    "compressionModeOff": "Off",
    "compressionModeOffDesc": "No compression applied",
    "compressionModeLite": "Lite",
    "compressionModeLiteDesc": "Whitespace and blank line reduction",
    "compressionModeStandard": "Standard (Caveman)",
    "compressionModeStandardDesc": "Rule-based compression with 30+ patterns, preserves code blocks and URLs",
    "compressionModeAggressive": "Aggressive",
    "compressionModeAggressiveDesc": "Summarization + tool result compression + progressive aging for maximum savings",
    "compressionModeUltra": "Ultra",
    "compressionModeUltraDesc": "Maximum compression with all techniques including semantic deduplication",
    "compressionAggressiveConfig": "Konfigurasi Enjin Agresif",
    "compressionAggressiveConfigDesc": "Perhalusi ringkasan, pemampatan alat dan ambang penuaan",
    "compressionUltraConfig": "Konfigurasi Enjin Ultra",
    "compressionUltraConfigDesc": "Perhalusi pemangkasan heuristik, sandaran SLM dan ambang setiap mesej",
    "compressionUltraRate": "Kekalkan Kadar",
    "compressionUltraMinScore": "Ambang Skor Minimum",
    "compressionUltraSlmFallback": "Berundur kepada Agresif",
    "compressionUltraModelPath": "Laluan Model SLM",
    "compressionSummarizerEnabled": "Dayakan Summarizer",
    "compressionMaxTokensPerMessage": "Token Maks Setiap Mesej",
    "compressionMinSavings": "Ambang Simpanan Min",
    "compressionAgingThresholds": "Ambang Penuaan",
    "compressionAgingThresholdsDesc": "Bilangan mesej terbaharu yang disimpan pada setiap peringkat penuaan (lebih tinggi = lebih dipelihara)",
    "compressionToolStrategies": "Strategi Hasil Alat",
    "compressionToolStrategiesDesc": "Togol strategi mampatan untuk jenis hasil alat yang berbeza",
    "compressionGeneral": "General Settings",
    "compressionAutoTrigger": "Auto-Trigger Threshold",
    "compressionCacheTTL": "Cache TTL",
    "compressionPreserveSystem": "Preserve System Prompt",
    "compressionCavemanConfig": "Caveman Engine Configuration",
    "compressionCavemanConfigDesc": "Fine-tune the rule-based compression engine",
    "compressionRoles": "Compress Message Roles",
    "compressionRoleUser": "User",
    "compressionRoleAssistant": "Assistant",
    "compressionRoleSystem": "System",
    "compressionMinLength": "Minimum Message Length",
    "compressionSkipRules": "Skip Compression Rules",
    "compressionSkipRulesDesc": "Click rules to skip them during compression",
    "compressionPreservePatterns": "Preserve Patterns",
    "compressionPreservePatternsDesc": "Regex patterns that are never compressed (one per line)",
    "compressionLogTitle": "Compression Log",
    "compressionLogEmpty": "No compressed requests yet. Compression stats will appear here when requests are processed with compression enabled.",
    "minutes": "minit",
    "compressionModeRtk": "RTK",
    "compressionModeRtkDesc": "Command-aware tool output filtering",
    "compressionModeStacked": "Stacked",
    "compressionModeStackedDesc": "RTK tool-output filtering followed by Caveman message compression",
    "qdrantTitle": "Qdrant (Vector memory)",
    "qdrantDesc": "Optional. Indexes semantic memories in an external vector database for faster retrieval.",
    "qdrantStatusActive": "Active",
    "qdrantStatusError": "Error",
    "qdrantStatusDisabled": "Disabled",
    "qdrantEnable": "Enable Qdrant",
    "qdrantEnableDesc": "When enabled, semantic/hybrid strategy can use Qdrant to retrieve memories.",
    "qdrantTesting": "Testing...",
    "qdrantTestConnection": "Test connection",
    "qdrantSaved": "Configuration saved",
    "qdrantSaveError": "Failed to save configuration",
    "qdrantHostHint": "Without port. Example: 127.0.0.1 or http://qdrant",
    "qdrantPort": "Port",
    "qdrantPortHint": "Qdrant default: 6333",
    "qdrantCollectionHint": "Where memory points will be stored.",
    "qdrantEmbeddingModel": "Embedding model",
    "qdrantHelpTitle": "Quick setup help",
    "qdrantHelpQuickTitle": "Quick setup (Qdrant + OpenRouter)",
    "qdrantHelpStep1": "1. Host: Qdrant IP/URL, Port: 6333, Collection: omniroute_memory.",
    "qdrantHelpStep2": "2. If using nvidia/llama-nemotron-embed-vl-1b-v2:free, use collection dimension 2048.",
    "qdrantHelpStep3": "3. Model field: openrouter/nvidia/llama-nemotron-embed-vl-1b-v2:free.",
    "qdrantHelpStep4": "4. Save, test connection, then test search.",
    "qdrantEmbeddingQuickSelect": "Quick select from discovered models...",
    "qdrantEmbeddingInputPlaceholder": "openai/text-embedding-3-small",
    "qdrantEmbeddingHint": "Format: provider/model. The provider credential must be configured.",
    "qdrantApiKeyPlaceholderKeep": "(leave empty to keep current key)",
    "qdrantApiKeyPlaceholderOptional": "(leave empty if not used)",
    "qdrantSaveHint": "Tip: edit host/port/collection/model and click Save. API key is optional.",
    "qdrantSearchTestTitle": "Search test",
    "qdrantSearchTestDesc": "Generates embedding and searches in Qdrant.",
    "qdrantSearchPlaceholder": "Example: user preferences, history, etc",
    "qdrantNoResults": "No results (or Qdrant is not configured).",
    "qdrantCleanupTitle": "Retention and cleanup",
    "qdrantCleanupDesc": "Removes expired and old points based on",
    "searching": "Searching...",
    "cleaning": "Cleaning...",
    "cleanNow": "Clean now",
    "optional": "Pilihan",
    "current": "semasa",
    "remove": "Alih keluar",
    "search": "Cari",
    "oneproxyTitle": "Pasaran Proksi Percuma 1proksi",
    "oneproxyTotalProxies": "Jumlah Proksi",
    "oneproxyAvgQuality": "Purata Kualiti",
    "resilienceScope": "Skop:",
    "resilienceTrigger": "Pencetus:",
    "resilienceEffect": "Kesan:",
    "resilienceRequestQueueTitle": "Request Queue & Rate",
    "resilienceAutoEnableApiKeyProviders": "Auto-enable for API-key providers",
    "resilienceRequestsPerMinute": "Requests per minute",
    "resilienceMinTimeBetweenRequests": "Minimum time between requests",
    "resilienceConcurrentRequests": "Concurrent requests",
    "resilienceMaxQueueWaitTime": "Masa menunggu giliran maksimum",
    "resilienceBaseCooldown": "Base cooldown",
    "resilienceUseUpstreamRetryHints": "Use upstream retry hints",
    "resilienceDefaultPerProvider": "Default (per provider)",
    "resilienceAlwaysOn": "Always on",
    "resilienceAlwaysOff": "Always off",
    "routingRemoveEntry": "Alih keluar masukan",
    "routingNeedlesSubstrings": "Jarum (substring untuk dipadankan)",
    "routingCaseSensitive": "Kes sensitif",
    "routingPrefixes": "Awalan",
    "routingMatch": "Perlawanan",
    "routingReplacement": "Penggantian",
    "routingReplaceAllOccurrences": "Gantikan semua kejadian",
    "routingPatternRegex": "Corak (regex)",
    "routingFlags": "Bendera",
    "routingNeedles": "Jarum",
    "routingBlockText": "Sekat teks",
    "routingIdempotencyKey": "Kunci mati pucuk",
    "routingEntrypoint": "Entrypoint",
    "routingVersionFormat": "Format versi",
    "routingCchAlgorithm": "Algoritma CCH",
    "routingWordsToObfuscate": "Perkataan untuk mengelirukan (ZWJ disisipkan selepas aksara pertama)",
    "logsSettingsTitle": "Tetapan Log",
    "detailedLogsLabel": "Log Terperinci Didayakan",
    "detailedLogsDesc": "Dayakan pengelogan permintaan/tindak balas terperinci",
    "callLogPipelineLabel": "Talian Paip Log Panggilan",
    "callLogPipelineDesc": "Dayakan saluran paip pemprosesan log panggilan",
    "maxDetailSizeLabel": "Saiz Butiran Maks (KB)",
    "maxDetailSizeDesc": "Saiz maksimum untuk entri log terperinci",
    "ringBufferSizeLabel": "Saiz Penampan Cincin",
    "ringBufferSizeDesc": "Saiz penimbal cincin untuk kayu balak",
    "semanticCacheEnabledLabel": "Cache Semantik Didayakan",
    "semanticCacheMaxSizeLabel": "Saiz Maks Cache Semantik",
    "semanticCacheMaxSizeDesc": "Bilangan maksimum entri cache semantik",
    "semanticCacheTTLLabel": "TTL Cache Semantik",
    "promptCacheEnabledLabel": "Cache Prompt Didayakan",
    "promptCacheEnabledDesc": "Dayakan caching segera",
    "promptCacheStrategyLabel": "Strategi Cache Prompt",
    "promptCacheStrategyDesc": "Strategi untuk caching segera",
    "alwaysPreserveClientCacheLabel": "Sentiasa Simpan Cache Pelanggan",
    "alwaysPreserveClientCacheDesc": "Dasar pemeliharaan cache pelanggan",
    "logRetentionPolicyTitle": "Dasar pengekalan log",
    "resilienceUseUpstream429HintsForBreaker": "Gunakan huluan 429 petunjuk (pemutus)",
    "appearanceLogoPreviewAlt": "Pratonton logo",
    "appearanceFaviconPreviewAlt": "Pratonton favicon",
    "oneproxyLastSync": "Penyegerakan Terakhir",
    "oneproxyAllProtocols": "Semua Protokol",
    "oneproxyCountryCodePlaceholder": "Kod negara (cth. AS)",
    "oneproxyMinQualityPlaceholder": "Kualiti min",
    "oneproxyLoadingProxies": "Memuatkan proksi...",
    "oneproxyLastSyncLabel": "Penyegerakan terakhir:",
    "oneproxyProxiesFetched": "Proksi diambil:",
    "oneproxyConsecutiveFailures": "Kegagalan berturut-turut:",
    "oneproxyErrorLabel": "Ralat:",
    "oneproxyNever": "tidak pernah",
    "oneproxySyncStatusTitle": "Status Penyegerakan",
    "oneproxySuccess": "Kejayaan",
    "oneproxyFailed": "gagal",
    "routingAntigravitySignatureTitle": "Mod Cache Tandatangan Antigraviti",
    "routingAntigravitySignatureDesc": "__MISSING__:Control whether OmniRoute reuses only stored Gemini thought signatures or accepts validated client-provided signatures in Antigravity-compatible tool-call flows.",
    "routingAntigravitySignatureEnabledLabel": "__MISSING__:Enabled",
    "routingAntigravitySignatureEnabledDesc": "__MISSING__:Current behavior. Ignore client-provided signatures and keep using the stored OmniRoute flow.",
    "routingAntigravitySignatureBypassLabel": "__MISSING__:Bypass",
    "routingAntigravitySignatureBypassDesc": "__MISSING__:Accept client-provided signatures after lightweight validation and fall back to the stored signature when invalid.",
    "routingAntigravitySignatureBypassStrictLabel": "__MISSING__:Bypass Strict",
    "routingAntigravitySignatureBypassStrictDesc": "__MISSING__:Require full protobuf validation before accepting a client-provided signature.",
    "routingHeaderFingerprintTitle": "Cap jari pengepala (setiap pembekal)",
    "routingServerRejectedSave": "⚠ Pelayan ditolak simpan:",
    "routingAddTransformOp": "Tambah op transformasi",
    "routingClientCacheControlTitle": "Kawalan Cache Pelanggan",
    "routingClientCacheControlDesc": "__MISSING__:Configure whether OmniRoute preserves client-provided cache_control markers",
    "routingClientCacheControlAutoDesc": "__MISSING__:For deterministic Claude-compatible flows, preserve client-provided cache_control as-is. If the request has no cache_control, OmniRoute does not inject any bridge-owned markers for CC-compatible third-party proxy compatibility.",
    "routingClientCacheControlAlwaysLabel": "__MISSING__:Always Preserve",
    "routingClientCacheControlAlwaysDesc": "__MISSING__:Always forward client-provided cache_control headers to upstream providers as-is.",
    "routingClientCacheControlNeverLabel": "__MISSING__:Never Preserve",
    "routingClientCacheControlNeverDesc": "__MISSING__:Always remove client cache_control headers and let OmniRoute manage caching where native provider flows support it.",
    "routingZeroConfigTitle": "Penghalaan Auto Konfigurasi Sifar",
    "routingZeroConfigDesc": "__MISSING__:Enable automatic provider selection using the auto/ prefix. When enabled, requests to auto, auto/coding, auto/fast, etc. will dynamically route across all connected providers.",
    "routingDefaultAutoVariant": "Varian Auto Lalai",
    "visionBridge": "Jambatan Penglihatan",
    "visionBridgeDesc": "__MISSING__:Run an automatic vision-to-text fallback before routing image requests to text-only models.",
    "visionBridgeEnabledLabel": "__MISSING__:Enabled",
    "visionBridgeEnabledDesc": "__MISSING__:Toggle the pre-call bridge that replaces image parts with extracted text.",
    "visionBridgeModel": "Model Jambatan",
    "visionBridgeModelPlaceholder": "openai/gpt-4o-mini",
    "visionBridgeModelHint": "__MISSING__:Any OmniRoute model ID that supports vision can be used here.",
    "visionBridgePrompt": "Jambatan Prompt",
    "visionBridgePromptPlaceholder": "Terangkan imej ini dengan ringkas.",
    "visionBridgePromptHint": "__MISSING__:Sent to the vision model before the extracted description is injected back into the original request.",
    "visionBridgeTimeoutMs": "Tamat masa (ms)",
    "visionBridgeMaxImagesPerRequest": "Imej Maks Setiap Permintaan",
    "resilienceMaxBackoffSteps": "Max backoff steps",
    "resilienceProviderBreakerTitle": "Circuit Breaker per Provider",
    "resilienceFailureThreshold": "Failure threshold",
    "resilienceResetTimeout": "Tetapkan semula tamat masa",
    "resilienceFailureThresholdLabel": "Ambang kegagalan",
    "resilienceResetTimeoutLabel": "Tetapkan semula tamat masa",
    "resilienceConnectionCooldownTitle": "Connection Cooldown",
    "resilienceUseUpstreamRetryHintsLabel": "Gunakan petunjuk percubaan semula huluan",
    "resilienceUseUpstream429BreakerLabel": "Gunakan huluan 429 petunjuk (pemutus)",
    "resilienceMaxBackoffStepsLabel": "Langkah mundur maksimum",
    "resilienceYes": "ya",
    "resilienceNo": "Tidak",
    "resilienceDefault": "Default",
    "storageDatabaseBackupRetention": "Pengekalan sandaran pangkalan data",
    "storagePurgeData": "Bersihkan Data",
    "retentionQuotaSnapshots": "Syot Kilat Kuota (hari)",
    "retentionMcpAudit": "Audit MCP (hari)",
    "retentionA2aEvents": "Acara A2A (hari)",
    "retentionCallLogs": "Log Panggilan (hari)",
    "retentionUsageHistory": "Sejarah Penggunaan (hari)",
    "retentionMemoryEntries": "Entri Memori (hari)",
    "storageAutoVacuumMode": "Mod Auto Vakum",
    "storageScheduledVacuum": "Vakum Berjadual",
    "storageVacuumHour": "Jam Vakum (0-23)",
    "storagePageSize": "Saiz Halaman (bait)",
    "storageDatabaseSize": "Saiz Pangkalan Data",
    "storagePageCount": "Kiraan Halaman",
    "storageFreelistCount": "Kiraan Senarai Bebas",
    "storageLastVacuum": "Vakum Terakhir",
    "storageLastOptimization": "Pengoptimuman Terakhir",
    "storageIntegrityCheck": "Semakan Integriti",
    "storageIntegrityOk": "✓ OK",
    "storageIntegrityError": "✗ Ralat",
    "storageUsageTokenBuffer": "Penampan Token Penggunaan",
    "compressionSettingsAutoTriggerMode": "Mod pencetus automatik",
    "compressionSettingsMcpDescriptionCompression": "Mampatan perihalan MCP",
    "compressionSettingsCavemanIntensity": "Keamatan manusia gua",
    "compressionSettingsCavemanOutputMode": "Mod keluaran manusia gua",
    "compressionSettingsOutputIntensity": "Keamatan output",
    "compressionSettingsAutoClarityBypass": "Pintasan kejelasan automatik",
    "resilienceWaitForCooldown": "Tunggu Cooldown",
    "resilienceEnableServerSideWait": "Dayakan menunggu sebelah pelayan",
    "resilienceMaximumRetries": "Percubaan semula maksimum",
    "resilienceMaximumWaitPerRetry": "Penantian maksimum setiap percubaan semula",
    "memorySkillsSkillsmpMarketplace": "SkillsMP Marketplace",
    "memorySkillsFailedToSave": "Gagal menyimpan",
    "memorySkillsApiKey": "Kunci API",
    "memorySkillsActiveSkillsProvider": "Pembekal Kemahiran Aktif",
    "cliproxyapiFallback": "CLIProxyAPI Fallback",
    "cliproxyapiEnableFallback": "Dayakan CLIProxyAPI Fallback",
    "cliproxyapiUrl": "URL CLIProxyAPI",
    "cliproxyapiStatus": "Status CLIProxyAPI",
    "cliproxyapiNotDetected": "Tidak dikesan",
    "payloadRulesTitle": "Peraturan Muatan",
    "payloadRulesDesc": "__MISSING__:Configure request payload mutations by model and protocol. Changes are persisted in settings and hot reloaded into the runtime immediately after save.",
    "payloadRuleDefaultTitle": "__MISSING__:default",
    "payloadRuleDefaultDesc": "__MISSING__:Applies params only when the target path is missing from the outgoing payload.",
    "payloadRuleOverrideTitle": "__MISSING__:override",
    "payloadRuleOverrideDesc": "__MISSING__:Forces values onto the payload, replacing anything already present at that path.",
    "payloadRuleFilterTitle": "__MISSING__:filter",
    "payloadRuleFilterDesc": "__MISSING__:Removes blocked params from the payload before the upstream request is sent.",
    "payloadRuleDefaultRawTitle": "__MISSING__:defaultRaw",
    "payloadRuleDefaultRawDesc": "__MISSING__:Like default, but string values are parsed as JSON first when possible. The legacy input alias default-raw is also accepted on save.",
    "payloadEditorTitle": "__MISSING__:Editor",
    "payloadEditorDesc": "__MISSING__:Use the runtime schema shape: default, override, filter, defaultRaw. The API also accepts the legacy input key default-raw.",
    "payloadEditorReady": "__MISSING__:Ready",
    "payloadResetInfo": "__MISSING__:Editor reset to the neutral template. Save to apply it.",
    "payloadSaveSuccess": "__MISSING__:Payload rules saved and hot reloaded.",
    "payloadJsonParseError": "__MISSING__:JSON parse error: {error}",
    "payloadMustBeObject": "__MISSING__:Payload rules must be a JSON object.",
    "payloadInvalidJson": "__MISSING__:Invalid JSON payload.",
    "payloadValidJsonRequired": "__MISSING__:Payload rules must be valid JSON before saving.",
    "savePayloadRules": "__MISSING__:Save Payload Rules",
    "requestLimitsTitle": "__MISSING__:Request Limits",
    "requestLimitsDesc": "__MISSING__:Configure global request limits and concurrency guards.",
    "maxRequestSizeLabel": "__MISSING__:Max Request Size (MB)",
    "maxRequestSizeDesc": "__MISSING__:Maximum allowed size for incoming API requests.",
    "maxResponseSizeLabel": "__MISSING__:Max Response Size (MB)",
    "maxResponseSizeDesc": "__MISSING__:Maximum allowed size for outgoing API responses.",
    "maxRequestTokensLabel": "__MISSING__:Max Request Tokens",
    "maxRequestTokensDesc": "__MISSING__:Maximum total tokens allowed in a single request.",
    "maxResponseTokensLabel": "__MISSING__:Max Response Tokens",
    "maxResponseTokensDesc": "__MISSING__:Maximum total tokens allowed in a single response.",
    "modelCooldownsTitle": "Model dalam cooldown",
    "modelCooldownsEmpty": "Tiada model dalam cooldown sekarang.",
    "codexFastTierTitle": "Peringkat Cepat Codex",
    "codexFastTierDesc": "Suntikan service_tier=keutamaan secara global untuk permintaan OpenAI Codex.",
    "codexFastTierHint": "Apabila didayakan, OmniRoute menambah service_tier=priority kepada permintaan Codex keluar untuk sambungan yang belum menentukan peringkat. Peringkat keutamaan memerlukan kunci API OpenAI Enterprise atau laluan ChatGPT-auth Codex; jenis kunci lain akan menerima ralat berkaitan peringkat daripada OpenAI. Tetapan per sambungan pada halaman penyedia Codex diutamakan.",
    "codexFastTierSaveError": "Gagal mengemas kini tetapan Codex Fast Tier",
    "codexFastTierTierLabel": "__MISSING__:Service tier",
    "codexFastTierTierPriority": "__MISSING__:Priority",
    "codexFastTierTierFlex": "__MISSING__:Flex",
    "codexFastTierTierDefault": "__MISSING__:Default",
    "codexFastTierModelsLabel": "__MISSING__:Fast-tier models",
    "codexFastTierModelsHint": "__MISSING__:Only checked models receive service_tier when Fast Tier is enabled.",
    "codexFastTierModelCheckbox": "__MISSING__:Enable Fast Tier for {model}",
    "claudeFastModeTitle": "Mod Pantas Claude",
    "claudeFastModeDesc": "Ikut serta permintaan Claude yang dipilih ke dalam Mod Pantas Anthropic (kelajuan:\"cepat\").",
    "claudeFastModeHint": "Anthropic tidak menyokong Mod Pantas secara rasmi untuk pelanggan gaya SDK. Apabila didayakan, OmniRoute memajukan pengepala X-CPA-Force-Fast-Mode supaya binaan CLIProxyAPI berpasangan boleh ikut serta memalsukan titik masuk. Hanya model Opus tersenarai dikawal oleh pemeriksaan pihak pelanggan Anthropic. Peringkat langganan, Pelan Maks dan baki kredit Mod Pantas masih dikuatkuasakan di sisi pelayan — Anthropic boleh mengembalikan_kredit_habis walaupun semasa togol dihidupkan.",
    "claudeFastModeModelsLabel": "Digunakan pada model ({count})",
    "claudeFastModeModelCheckbox": "Dayakan Mod Pantas untuk {model}",
    "claudeFastModeSaveError": "Gagal mengemas kini tetapan Mod Cepat Claude",
    "authz": {
      "title": "__MISSING__:Authz Inventory",
      "description": "__MISSING__:5-tier route classification with live bypass policy. Read shows the full taxonomy; mutations re-prompt for the management password.",
      "loading": "__MISSING__:Loading inventory…",
      "loadError": "__MISSING__:Failed to load authz inventory",
      "tier": {
        "LOCAL_ONLY": "__MISSING__:Local only",
        "ALWAYS_PROTECTED": "__MISSING__:Always protected",
        "MANAGEMENT": "__MISSING__:Management",
        "CLIENT_API": "__MISSING__:Client API",
        "PUBLIC": "__MISSING__:Public"
      },
      "bypass": {
        "section": "__MISSING__:Manage-scope bypass",
        "kill_switch": {
          "label": "__MISSING__:Bypass kill-switch",
          "desc": "__MISSING__:Master toggle. When off, no LOCAL_ONLY prefix is reachable from non-loopback regardless of the per-prefix list."
        },
        "prefix": {
          "label": "__MISSING__:Bypassable prefixes",
          "desc": "__MISSING__:LOCAL_ONLY prefixes that manage-scope API keys (or dashboard sessions) may reach from non-loopback hosts.",
          "add": "__MISSING__:Add prefix",
          "placeholder": "__MISSING__:/api/mcp/v2/",
          "empty": "__MISSING__:No prefixes configured. Bypass effectively off."
        },
        "cli_tools_runtime_note": "__MISSING__:Spawn-capable prefix. Compile-time deny; cannot be made bypassable. Shown read-only."
      },
      "password": {
        "prompt": {
          "label": "__MISSING__:Current password",
          "desc": "__MISSING__:Re-confirm to apply security-impacting changes."
        },
        "placeholder": "__MISSING__:Current management password",
        "cancel": "__MISSING__:Cancel",
        "submit": "__MISSING__:Apply"
      },
      "save": "__MISSING__:Save changes",
      "saved": "__MISSING__:Authz settings updated",
      "pending": "__MISSING__:Unsaved changes",
      "badge": {
        "bypassable": "__MISSING__:Bypassable via manage scope",
        "strict": "__MISSING__:Strict loopback",
        "auth_required": "__MISSING__:Auth required",
        "public": "__MISSING__:Public",
        "always_protected": "__MISSING__:Always protected",
        "spawn_capable": "__MISSING__:Spawn-capable"
      },
      "error": {
        "PASSWORD_REQUIRED": "__MISSING__:Current password required to apply these changes.",
        "PASSWORD_MISMATCH": "__MISSING__:Current password is incorrect.",
        "INSUFFICIENT_SCOPE": "__MISSING__:API key lacks the manage scope.",
        "BYPASS_PREFIX_NOT_ALLOWED": "__MISSING__:One or more prefixes target spawn-capable routes and cannot be bypassed.",
        "GENERIC": "__MISSING__:Failed to update authz settings."
      }
    },
    "resilienceBaseCooldownLabel": "Cooldown asas",
    "scopeLabel": "Skop",
    "triggerLabel": "Pencetus",
    "effectLabel": "Kesan",
    "statusEnabled": "Didayakan",
    "statusDisabled": "Dilumpuhkan",
    "resilienceRequestQueueScope": "Setiap baris gilir permintaan",
    "resilienceRequestQueueTrigger": "Sebelum hantar ke hulu",
    "resilienceRequestQueueEffect": "Baris gilir permintaan, hadkan serentak dan jarakkan panggilan",
    "resilienceRequestQueueDesc": "Lapisan ini hanya mengawal baris gilir dan pacing. Ia tidak menyimpan cooldown atau pemutus litar terbuka.",
    "resilienceAutoEnableApiKeyProvidersDesc": "Mendayakan perlindungan baris gilir secara lalai untuk sambungan kunci API aktif.",
    "resilienceMaxQueueWait": "Masa menunggu giliran maksimum",
    "resilienceConnectionCooldownScope": "Sambungan individu",
    "resilienceConnectionCooldownTrigger": "Apabila sambungan mengembalikan kegagalan huluan sementara",
    "resilienceConnectionCooldownEffect": "Melangkau sambungan itu buat sementara waktu dan meningkatkan mundur untuk kegagalan berulang",
    "resilienceConnectionCooldownDesc": "Cooldown asas meliputi kegagalan sambungan sementara. Apabila pembayang cuba semula huluan didayakan, tetingkap eksplisit pembekal mengatasi tempoh bertenang setempat.",
    "resilienceUseUpstreamRetryHintsDesc": "Menggunakan nilai cuba semula selepas/set semula daripada pembekal huluan apabila tersedia.",
    "resilienceUseUpstream429BreakerHints": "Gunakan petunjuk huluan 429 untuk bertenang pemutus",
    "resilienceUseUpstream429BreakerHintsShort": "Gunakan huluan 429 petunjuk",
    "resilienceUseUpstream429BreakerHintsDesc": "Gunakan isyarat Cuba Semula Selepas / habis kuota daripada 429 respons kepada tempoh bertenang pemutus litar. Lalai menggunakan dasar setiap pembekal: pembekal awan langsung dihidupkan secara lalai; Penyedia proksi terbalik, dihoskan sendiri dan disokong CLI dimatikan secara lalai. Bebas daripada \"Gunakan petua cuba semula huluan\".",
    "resilienceProviderBreakerScope": "Keseluruhan pembekal",
    "resilienceProviderBreakerTrigger": "Kegagalan pengangkutan/pelayan terakhir selepas sandaran sambungan habis",
    "resilienceProviderBreakerEffect": "Sekat penyedia itu buat sementara waktu sehingga masa penetapan semula tamat",
    "resilienceProviderBreakerDesc": "Keadaan pemutus langsung hanya muncul pada halaman Kesihatan. Had kadar 429 berskop sambungan kekal dalam Cooldown Sambungan dan jangan menghalang pemutus pembekal.",
    "resilienceResetTime": "Tetapkan semula masa",
    "resilienceWaitForCooldownTitle": "Tunggu Cooldown",
    "resilienceWaitForCooldownScope": "Permintaan pelanggan semasa",
    "resilienceWaitForCooldownTrigger": "Apabila semua sambungan calon sudah sejuk",
    "resilienceWaitForCooldownEffect": "Menunggu pada pelayan dan mencuba semula apabila tempoh bertenang pertama tamat tempoh",
    "resilienceWaitForCooldownDesc": "Ini hanya menjejaskan permintaan semasa. Ia tidak menyimpan sambungan atau keadaan pembekal.",
    "resilienceEnableServerWait": "Dayakan menunggu sebelah pelayan",
    "resilienceEnableServerWaitDesc": "Apabila didayakan, OmniRoute menunggu sehingga tempoh bertenang pertama tamat tempoh dan cuba semula secara automatik.",
    "resilienceMaxAttempts": "Percubaan maksimum",
    "resilienceMaxWaitPerAttempt": "Penantian maksimum setiap percubaan",
    "forcedFingerprintTitle": "Always enabled for {provider} — required for OAuth account safety; cannot be turned off.",
    "forcedFingerprintBadge": "Required",
    "codexSessionAffinityTitle": "Perkaitan sesi Codex",
    "codexSessionAffinityDesc": "Menyimpan satu perbualan Codex pada akaun yang sama selama beberapa saat ini. 0 melumpuhkannya.",
    "codexSessionAffinityTtl": "TTL perkaitan (saat)",
    "resetAwareQuotaCacheTitle": "Tetapkan semula cache kuota sedar",
    "resetAwareQuotaCacheDesc": "Cache telemetri kuota untuk pesanan sedar semula sahaja. Kuota prapenerbangan masih melindungi permintaan. 0/0 terus diambil secara langsung.",
    "resetAwareQuotaCacheTtl": "TTL segar (saat)",
    "resetAwareQuotaCacheMaxStale": "Maks basi (saat)",
    "qdrantCleanupSuccess": "OK: dialih keluar {count} mata (pengekalan: {days} hari)",
    "qdrantCleanupFailed": "Pembersihan gagal",
    "qdrantCleanupError": "Ralat: {error}",
    "vercelRelaySuccess": "__MISSING__:Vercel Relay deployed successfully",
    "vercelRelayButton": "__MISSING__:Deploy Vercel Relay",
    "vercelRelayModalTitle": "__MISSING__:Deploy Vercel Relay",
    "vercelRelayWarning": "__MISSING__:Warning: A Vercel deployment token is required. This token will only be used to create the serverless relay and will never be stored by OmniRoute.",
    "vercelRelayTokenLabel": "__MISSING__:Vercel Access Token",
    "vercelRelayProjectNameLabel": "__MISSING__:Vercel Project Name",
    "vercelRelayFreeTierNote": "__MISSING__:Relays are lightweight proxy endpoints deployed on Vercel's free tier to bypass local network/region limitations.",
    "vercelRelayDeploying": "__MISSING__:Deploying...",
    "vercelRelayDeploy": "__MISSING__:Deploy",
    "homePinProviderQuotaToHome": "Pin Information to Home Page",
    "homeProviderQuotaLimits": "Provider Quota Limits",
    "homeProviderQuotaLimitsDesc": "Pin the Provider Quota status container (with Refresh All button) to the top of the Home page.",
    "homeQuickStart": "Quick Start",
    "homeQuickStartDesc": "Show the Quick Start panel on the Home page.",
    "homeProviderTopology": "Provider Topology",
    "homeProviderTopologyDesc": "Show the Provider Topology on the Home page."
  },
  "contextRtk": {
    "title": "RTK Engine",
    "description": "Command-aware compression for tool output, terminal logs and build results.",
    "enabled": "Enabled",
    "intensity": "Intensity",
    "intensityMinimal": "Minimal",
    "intensityStandard": "Standard",
    "intensityAggressive": "Aggressive",
    "toolResults": "Tool results",
    "assistantMessages": "Assistant messages",
    "codeBlocks": "Code blocks",
    "filterCatalog": "Katalog Penapis",
    "filterCatalogDesc": "Penapis keluaran yang tersedia mengikut kategori",
    "guidedConfig": "Konfigurasi",
    "guidedConfigDesc": "Laraskan cara RTK menapis output terminal anda",
    "maxLines": "Max lines",
    "maxChars": "Max chars",
    "deduplicateThreshold": "Nyahduplikasi ambang",
    "customFilters": "Penapis tersuai",
    "detectedType": "Jenis yang dikesan",
    "confidence": "Keyakinan",
    "beforeAfter": "Sebelum / Selepas",
    "trustProjectFilters": "Penapis projek amanah",
    "rawOutputRetention": "Pengekalan output mentah",
    "rawOutputNever": "tidak pernah",
    "rawOutputFailures": "Kegagalan",
    "rawOutputAlways": "Sentiasa",
    "rawOutputMaxBytes": "Bait maksimum keluaran mentah",
    "filterTesting": "Filter Testing",
    "pasteOutput": "Paste tool output to test filtering...",
    "presetHigh": "Agresif",
    "presetLow": "Cahaya",
    "presetMaxChars": "Aksara output maksimum",
    "presetMaxLines": "Garis keluaran maksimum",
    "presetMedium": "Standard",
    "run": "Run",
    "result": "Result",
    "previewEmpty": "Run a sample to preview RTK output.",
    "detected": "Detected",
    "masterSwitchOffAlert": "__MISSING__:Token Saver master switch is OFF — these settings will not affect requests until you turn it on from the Endpoint page.",
    "tokensFiltered": "Tokens filtered",
    "filtersActive": "Filters active",
    "requests": "Requests",
    "avgSavings": "Avg savings",
    "simpleMode": "Mudah",
    "advancedMode": "Maju",
    "searchFilters": "Cari penapis...",
    "tooltipDedup": "Betapa agresifnya untuk mengalih keluar baris berulang.",
    "tooltipMaxChars": "Aksara maksimum bagi setiap blok output.",
    "tooltipMaxLines": "Baris maksimum untuk disimpan daripada output arahan. Lebihan dipotong."
  },
  "contextCombos": {
    "title": "Compression Combos",
    "description": "Define how engines are combined for different routing scenarios.",
    "createCombo": "Create Compression Combo",
    "editCombo": "Edit",
    "deleteCombo": "Delete",
    "deleteConfirm": "Delete this compression combo?",
    "pipeline": "Pipeline",
    "addStep": "Add Step",
    "removeStep": "Remove",
    "name": "Name",
    "descriptionField": "Description",
    "languagePacks": "Language Packs",
    "outputMode": "Output Mode",
    "assignToRouting": "Assign to Routing Combos",
    "noAssignments": "No routing combos available",
    "default": "Default",
    "setAsDefault": "Set as Default",
    "save": "Save",
    "cancel": "Cancel",
    "enabled": "Enabled"
  },
  "contextCaveman": {
    "title": "Caveman Engine",
    "description": "Rule-based message compression, language packs, analytics and output mode controls.",
    "advancedConfig": "Konfigurasi Lanjutan",
    "advancedConfigDesc": "Perhalusi tingkah laku mampatan",
    "aggressiveSettings": "Tetapan Agresif",
    "aggressiveSettingsDesc": "Pemampatan maksimum dengan potensi pertukaran kualiti",
    "requests": "Requests",
    "tokensSaved": "Tokens saved",
    "savingsPercent": "Savings %",
    "avgLatency": "Avg latency",
    "languagePacks": "Language Packs",
    "languagePacksDesc": "Enable compression rules for specific languages.",
    "labelAutoTrigger": "Automampat apabila konteks melebihi",
    "labelCompressionRate": "Kekuatan mampatan",
    "labelMaxTokens": "Token sasaran setiap mesej",
    "labelMinLength": "Panjang mesej minimum",
    "labelMinSavings": "Token minimum untuk disimpan",
    "enabled": "Enabled",
    "autoDetect": "Auto-detect language",
    "rulesCount": "{count} rules",
    "inputCompressionTitle": "__MISSING__:Input compression",
    "inputCompressionDesc": "__MISSING__:Rewrite chat history with shorter wording. Reduces input tokens by ~50%.",
    "analyticsTitle": "Compression Analytics",
    "noAnalytics": "No compression analytics yet.",
    "outputMode": "Mod Output",
    "outputModeDesc": "Instructs the LLM to respond in a terse, compact format.",
    "outputModeTitle": "Output Mode",
    "quickSettings": "Tetapan Pantas",
    "quickSettingsDesc": "Tetapan mampatan asas untuk bermula",
    "autoClarity": "Auto-Clarity Bypass",
    "bypassConditions": "Bypass conditions",
    "bypassConditionsList": "keselamatan, tidak boleh balik, penjelasan, peka perintah",
    "simpleMode": "Mudah",
    "advancedMode": "Maju",
    "tooltipAutoTrigger": "Mampat secara automatik apabila konteks melebihi saiz ini.",
    "tooltipCompressionRate": "0.0 = tiada, 1.0 = maksimum. 0.5 = seimbang.",
    "tooltipMaxTokens": "Kiraan token sasaran selepas pemampatan. Rendah = lebih agresif.",
    "tooltipMinLength": "Mesej yang lebih pendek daripada ini tidak dimampatkan. Rendah = lebih mampatan.",
    "tooltipMinSavings": "Hanya mampatkan jika ia menjimatkan sekurang-kurangnya token sebanyak ini.",
    "ultraSettings": "Tetapan Ultra",
    "ultraSettingsDesc": "Pemampatan semantik berkuasa SLM",
    "preview": {
      "lite": "Respond concise. Preserve technical terms, code, errors, URLs, and identifiers.",
      "full": "Respond terse and compact. Preserve all technical substance.",
      "ultra": "Respond ultra terse with common technical abbreviations. Preserve exact symbols."
    }
  },
  "translator": {
    "title": "Penterjemah",
    "metaTitle": "Taman Permainan Penterjemah | OmniRoute",
    "metaDescription": "Nyahpepijat, menguji dan memvisualisasikan terjemahan format API antara pembekal",
    "playgroundTitle": "Taman Permainan Penterjemah",
    "playground": "Taman permainan",
    "realtime": "Aktiviti Terjemahan Masa Nyata",
    "chatTester": "Penguji Sembang",
    "testBench": "Bangku Ujian",
    "liveMonitor": "Monitor Langsung",
    "modeDescriptionPlayground": "Tampal sebarang badan permintaan API dan lihat cara OmniRoute menterjemahkannya antara format pembekal (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)",
    "modeDescriptionChatTester": "Hantar permintaan sembang sebenar melalui OmniRoute dan periksa perjalanan pergi balik penuh: input, permintaan terjemahan, respons pembekal dan output terjemahan.",
    "modeDescriptionTestBench": "Jalankan senario yang dipratentukan dan bandingkan keserasian merentas pembekal dan model.",
    "modeDescriptionLiveMonitor": "Tonton acara terjemahan dalam masa nyata apabila permintaan mengalir melalui OmniRoute.",
    "modeDescriptionFallback": "Nyahpepijat, uji dan gambarkan cara OmniRoute menterjemah permintaan API antara pembekal.",
    "recentTranslations": "Terjemahan Terkini",
    "noTranslations": "Tiada terjemahan lagi",
    "source": "Sumber",
    "target": "Sasaran",
    "time": "Masa",
    "model": "Model",
    "status": "Status",
    "latency": "Latensi",
    "totalTranslations": "Jumlah Terjemahan",
    "successful": "Berjaya",
    "errors": "Kesilapan",
    "avgLatency": "Purata Latensi",
    "millisecondsShort": "{value}ms",
    "notAvailableSymbol": "—",
    "liveAutoRefreshing": "Langsung — Auto muat semula",
    "paused": "Dijeda",
    "eventsAppearHint": "Peristiwa terjemahan muncul di sini apabila permintaan mengalir melalui OmniRoute. Gunakan mana-mana kaedah ini untuk menjana acara:",
    "chatTesterTab": "Tab Penguji Sembang",
    "testBenchTab": "Tab Ujian Bangku",
    "externalApiCalls": "Panggilan API luaran",
    "ideCliIntegrations": "Penyepaduan IDE/CLI",
    "inMemoryNote": "Nota: Peristiwa disimpan dalam memori dan ditetapkan semula apabila pelayan dimulakan semula.",
    "ok": "OK",
    "errorShort": "ERR",
    "formatConverter": "Penukar Format",
    "formatConverterDescription": "Tampal atau taip badan permintaan JSON. Penterjemah akan mengesan format sumber secara automatik dan menukarnya kepada format sasaran. Gunakan ini untuk nyahpepijat cara OmniRoute menterjemah permintaan antara format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).",
    "translationPathHubSpoke": "{source} → OpenAI (perantaraan) → {target}",
    "translationPathDirect": "{source} → {target} (penterjemah langsung)",
    "translationPathPassthrough": "Format yang sama — tiada terjemahan diperlukan",
    "openaiIntermediatePanel": "OpenAI Intermediate",
    "autoFeaturesTitle": "Perkara yang dilakukan oleh OmniRoute secara automatik",
    "autoFeaturesCount": "8 ciri",
    "featureReasoningCache": "Cache Penaakulan",
    "featureReasoningCacheDesc": "Menyuntik semula kandungan reasoning_cache untuk model mod pemikiran (DeepSeek V4, Kimi K2, Qwen) apabila pelanggan meninggalkannya daripada sejarah perbualan.",
    "featureSchemaCoercion": "Paksaan Skema",
    "featureSchemaCoercionDesc": "Membetulkan skema alat yang rosak: menambah Properties tambahan yang hilang, membersihkan huraian panjang, menormalkan objek bersarang.",
    "featureRoleNormalization": "Normalisasi Peranan",
    "featureRoleNormalizationDesc": "Pembangun peta→sistem untuk sasaran bukan OpenAI. Sistem peta→pengguna untuk model yang tidak menyokong peranan sistem.",
    "featureToolCallIds": "Normalisasi ID Panggilan Alat",
    "featureToolCallIdsDesc": "Menjana ID alat_panggilan unik apabila tiada. Menormalkan kepada format 9-char untuk penyedia seperti Mistral.",
    "featureMissingToolResponse": "Suntikan Tindak Balas Alat",
    "featureMissingToolResponseDesc": "Menyuntik mesej tool_result kosong apabila pelanggan menghantar tool_calls tanpa respons yang sepadan.",
    "featureThinkingBudget": "Belanjawan Berfikir",
    "featureThinkingBudgetDesc": "Mengurus konfigurasi pemikiran secara automatik. Mengalih keluar parameter pemikiran apabila mesej terakhir bukan daripada pengguna.",
    "featureDirectPaths": "Laluan Terjemahan Terus",
    "featureDirectPathsDesc": "Beberapa pasangan format (Claude→Gemini) mempunyai penterjemah langsung yang memintas hab OpenAI, menghasilkan output yang lebih tepat.",
    "featureImageMapping": "Pemetaan Saiz Imej",
    "featureImageMappingDesc": "Menterjemah konvensyen dimensi imej antara format API (cth., tahap butiran OpenAI → Dimensi Gemini).",
    "input": "Input",
    "output": "Keluaran",
    "auto": "Auto",
    "swapFormats": "Tukar format",
    "translateAction": "Terjemah",
    "clear": "Jelas",
    "inputPlaceholder": "Tampalkan badan permintaan di sini atau pilih templat di bawah...",
    "exampleTemplates": "Contoh Templat",
    "exampleTemplatesHint": "— Klik untuk memuatkan",
    "templateLoadHint": "Templat memuatkan permintaan dalam format {format}. Tukar Format Sumber untuk memuatkan dalam format yang berbeza.",
    "compatibilityTester": "Penguji Keserasian",
    "compatibilityReport": "Laporan Keserasian",
    "testBenchDescription": "Jalankan senario yang dipratentukan (Sembang Mudah, Panggilan Alat, dll.) untuk mengesahkan keserasian terjemahan dan pembekal. Pilih format sumber dan pembekal sasaran, kemudian jalankan semua ujian untuk melihat peratusan keserasian. Gunakan ini untuk mencari ciri yang berfungsi merentas penyedia.",
    "targetProvider": "Pembekal Sasaran",
    "runAllTests": "Jalankan Semua Ujian",
    "runTest": "Jalankan Ujian",
    "reRun": "Jalankan semula",
    "running": "Berlari...",
    "passed": "lulus",
    "failed": "gagal",
    "passedIconLabel": "✅ Lulus",
    "chunks": "ketulan",
    "scenarioSimpleChat": "Sembang Mudah",
    "scenarioToolCalling": "Alat Panggilan",
    "scenarioMultiTurn": "Pelbagai pusingan",
    "scenarioThinking": "Berfikir",
    "scenarioSystemPrompt": "Gesaan Sistem",
    "scenarioStreaming": "Penstriman",
    "templateNames": {
      "simple-chat": "Sembang Mudah",
      "tool-calling": "Alat Panggilan",
      "multi-turn": "Pelbagai pusingan",
      "thinking": "Berfikir",
      "system-prompt": "Gesaan Sistem",
      "streaming": "Penstriman",
      "vision": "Penglihatan",
      "schema-coercion": "Paksaan Skema"
    },
    "templateDescriptions": {
      "simple-chat": "Mesej teks asas",
      "tool-calling": "Seruan fungsi/alat",
      "multi-turn": "Perbualan dengan sejarah",
      "thinking": "Memanjangkan pemikiran / penaakulan",
      "system-prompt": "Arahan sistem yang kompleks",
      "streaming": "Permintaan penstriman SSE",
      "vision": "Permintaan pelbagai mod dengan input imej",
      "schema-coercion": "Penguatkuasaan skema output berstruktur / JSON"
    },
    "templatePayloads": {
      "simpleChat": {
        "system": "Anda seorang pembantu yang membantu.",
        "userGreeting": "hello! Apa khabar hari ini?"
      },
      "toolCalling": {
        "userWeather": "Bagaimanakah cuaca di São Paulo?",
        "toolDescription": "Dapatkan cuaca semasa untuk lokasi",
        "cityNameDescription": "nama bandar"
      },
      "multiTurn": {
        "system": "Anda seorang pembantu pengekodan.",
        "userInitial": "Tulis fungsi untuk mengisih tatasusunan dalam Python.",
        "assistantExample": "Berikut ialah fungsi isihan mudah:\n\n```python\ndef sort_array(arr):\n    pulangan disusun(arr)\n```",
        "userFollowUp": "Sekarang buat ia disusun mengikut tertib menurun."
      },
      "thinking": {
        "question": "Apakah hasil tambah bagi 100 nombor perdana pertama?"
      },
      "systemPrompt": {
        "systemInstruction": "Anda seorang jurutera perisian kanan yang pakar dalam sistem teragih. Jawab soalan dengan ringkas menggunakan amalan terbaik industri. Sentiasa berikan contoh kod apabila berkaitan. Formatkan jawapan anda menggunakan penurunan nilai.",
        "question": "Bagaimanakah saya melaksanakan corak pemutus litar?"
      },
      "streaming": {
        "prompt": "Beritahu saya cerita pendek tentang robot yang belajar melukis."
      },
      "vision": {
        "system": "Anda ialah pembantu yang menerangkan imej dengan tepat.",
        "userPrompt": "Apakah yang ditunjukkan dalam imej ini?",
        "imageUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/PNG_transparency_demonstration_1.png/600px-PNG_transparency_demonstration_1.png"
      },
      "schemaCoercion": {
        "userPrompt": "Cari cuaca untuk Tokyo menggunakan unit metrik dan sertakan pecahan setiap jam.",
        "toolDescription": "Dapatkan cuaca untuk bandar dengan pilihan berstruktur.",
        "cityDescription": "Bandar untuk ditanya, mis. 'Tokyo' atau 'New York'."
      }
    },
    "openaiCompatibleLabel": "Serasi OpenAI",
    "anthropicCompatibleLabel": "Serasi Anthropic",
    "noTemplateForFormat": "Tiada templat untuk format ini",
    "translationFailed": "Terjemahan gagal: {error}",
    "pipelineDebugger": "Penyahpepijat Saluran Paip",
    "translationPipeline": "Saluran Paip Terjemahan",
    "pipelineVisualization": "Visualisasi saluran paip",
    "pipelineVisualizationHint": "Hantar mesej untuk melihat bagaimana permintaan anda mengalir melalui pengesanan → terjemahan → panggilan pembekal.",
    "chatTesterDescription": "Hantar mesej sebagai format pelanggan tertentu dan periksa setiap langkah saluran paip terjemahan.",
    "chatTesterFlow": "Permintaan Pelanggan → Pengesanan Format → OpenAI Intermediate → Format Pembekal → Respons",
    "clickStepToInspect": "Klik mana-mana langkah untuk memeriksa data pada peringkat itu.",
    "clientFormat": "Format Pelanggan",
    "provider": "Pembekal",
    "modelPlaceholder": "Pilih atau taip nama model...",
    "sendMessageToSeePipeline": "Hantar mesej untuk melihat saluran terjemahan",
    "chatMessageHintPrefix": "Mesej anda akan diformatkan sebagai a",
    "chatMessageHintSuffix": "permintaan, diterjemahkan melalui saluran paip, dan dihantar kepada pembekal yang dipilih.",
    "youWithFormat": "Anda ({format})",
    "assistant": "Penolong",
    "typeMessage": "Taip mesej...",
    "send": "Hantar",
    "clientRequest": "Permintaan Pelanggan",
    "clientRequestDescription": "Badan permintaan sebagai pelanggan anda akan menghantarnya",
    "formatDetected": "Format Dikesan",
    "formatDetectedDescription": "OmniRoute mengesan secara automatik format API daripada struktur permintaan",
    "openaiIntermediate": "OpenAI Intermediate",
    "openaiIntermediateDescription": "Semua format mula-mula dinormalkan kepada format OpenAI (jambatan universal)",
    "providerFormat": "Format Pembekal",
    "providerFormatDescription": "Format OpenAI diterjemahkan kepada format asal pembekal",
    "providerResponse": "Respon Pembekal",
    "providerResponseRawDescription": "Sambutan mentah daripada API pembekal",
    "providerResponseSseDescription": "Strim SSE mentah daripada API pembekal",
    "unexpectedError": "Ralat yang tidak dijangka berlaku",
    "error": "ralat",
    "errorMessage": "Ralat: {message}",
    "requestFailed": "Permintaan gagal",
    "noTextExtracted": "(Tiada teks diekstrak)",
    "liveMonitorMemoryNote": "Peristiwa disimpan dalam ingatan dan hilang semasa dimulakan semula.",
    "liveMonitorMemoryCapNote": "Maksimum 200 acara dikekalkan.",
    "eventSourcesLabel": "Sumber acara:",
    "eventSourceTranslatorPage": "• Halaman Penterjemah (Penguji Sembang, Bangku Ujian)",
    "eventSourceMainPipeline": "• Saluran paip permintaan utama (trafik CLI/IDE/API)",
    "liveMonitorDescriptionPrefix": "Menunjukkan peristiwa terjemahan semasa panggilan API mengalir melalui OmniRoute. Peristiwa datang daripada penimbal dalam memori (ditetapkan semula semasa dimulakan semula). guna",
    "liveMonitorDescriptionSuffix": ", atau panggilan API luaran untuk menjana acara.",
    "streamTransformer": "Transformer Strim",
    "modeDescriptionStreamTransformer": "Jalankan pelengkapan sembang strim SSE melalui pengubah Respons.",
    "streamTransformerTitle": "Transformer Strim Respons",
    "streamTransformerDescription": "Tampalkan strim SSE pelengkap sembang, jalankannya melalui pengubah Respons OmniRoute dan periksa respons yang dipancarkan.* peristiwa sebelum pendawaian pelanggan.",
    "loadTextSample": "Muatkan sampel teks",
    "loadToolSample": "Muatkan sampel panggilan alat",
    "transformToResponses": "Berubah kepada Respons",
    "rawChatSseInput": "Selesai sembang mentah SSE",
    "transformedResponsesSse": "API Respons Berubah SSE",
    "noResultsYet": "Tiada keputusan lagi",
    "transformedEvents": "Peristiwa yang berubah",
    "uniqueEventTypes": "Jenis acara yang unik",
    "inputLines": "Barisan input",
    "outputLines": "Barisan keluaran",
    "transformedEventTimeline": "Mengubah garis masa acara",
    "transformerTimelineHint": "Jalankan pengubah untuk memeriksa peristiwa respons.output_* yang dipancarkan mengikut urutan.",
    "eventType": "Jenis acara",
    "eventPreview": "Pratonton",
    "comboRouted": "Kombo dihalakan",
    "uniqueEndpoints": "Titik akhir yang unik",
    "routeDetails": "Butiran laluan",
    "comboBadge": "Kombo",
    "routeEndpointLabel": "Titik akhir",
    "routeConnectionLabel": "Sambungan",
    "scenarioVision": "Penglihatan (pemahaman imej)",
    "scenarioSchemaCoercion": "Paksaan skema (output berstruktur)",
    "techniques": "Teknik:"
  },
  "usage": {
    "title": "Penggunaan",
    "loggerTab": "Pembalak",
    "proxyTab": "proksi",
    "budgetManagement": "Pengurusan Belanjawan",
    "budgetSaved": "Had belanjawan disimpan",
    "budgetSaveFailed": "Gagal menyimpan belanjawan",
    "loadingBudgetData": "Memuatkan data belanjawan...",
    "noApiKeysTitle": "Tiada Kunci API",
    "noApiKeysDescription": "Tambahkan kunci API terlebih dahulu untuk menyediakan had belanjawan.",
    "apiKey": "Kunci API",
    "todaysSpend": "Perbelanjaan Hari Ini",
    "thisMonth": "Bulan ini",
    "setLimits": "Tetapkan Had",
    "dailyLimitUsd": "Had Harian (USD)",
    "monthlyLimitUsd": "Had Bulanan (USD)",
    "warningThresholdPercent": "Ambang Amaran (%)",
    "dailyLimitPlaceholder": "cth. 5.00",
    "monthlyLimitPlaceholder": "cth. 50.00",
    "warningThresholdPlaceholder": "80",
    "saveLimits": "Simpan Had",
    "budgetOk": "Belanjawan OK — {remaining} tinggal",
    "budgetExceeded": "Belanjawan melebihi — permintaan mungkin disekat",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Tiada data lagi",
    "latency": "Latensi",
    "latencyP50": "p50",
    "latencyP95": "p95",
    "latencyP99": "p99",
    "promptCache": "Cache Prompt",
    "systemHealth": "Kesihatan Sistem",
    "entries": "entri",
    "activeCount": "{count} aktif",
    "openCircuitBreakersDetected": "Pemutus litar terbuka dikesan",
    "hitRate": "Kadar Hit",
    "hitsMisses": "Hit / Rindu",
    "circuitBreakers": "Pemutus Litar",
    "lockedIPs": "IP berkunci",
    "lockoutsAutoRefreshHint": "Kunci had kadar setiap model • Muat semula automatik 10s",
    "lockedCount": "{count, plural, one {# locked} other {# locked}}",
    "timeLeft": "{time} tinggal",
    "howItWorks": "Bagaimana Ia Berfungsi",
    "howItWorksSubtitle": "Ketahui cara penilaian mengesahkan respons LLM anda",
    "define": "takrifkan",
    "defineStepDescription": "Buat kes ujian dengan gesaan input dan kriteria output yang dijangka menggunakan strategi seperti kandungan, regex atau padanan tepat.",
    "run": "Lari",
    "runStepDescription": "Laksanakan kes ujian terhadap titik akhir LLM anda melalui OmniRoute. Setiap kes dihantar sebagai permintaan API sebenar.",
    "evaluate": "nilaikan",
    "evaluateStepDescription": "Jawapan dibandingkan dengan kriteria yang dijangkakan. Lihat lulus/gagal untuk setiap kes dengan metrik kependaman dan maklum balas terperinci.",
    "evalsStrategyContainsLabel": "__MISSING__:Contains",
    "evalsStrategyExactLabel": "__MISSING__:Exact Match",
    "evalsStrategyRegexLabel": "__MISSING__:Regex",
    "evalsStrategyCustomLabel": "__MISSING__:Custom Logic",
    "evalsStrategyContainsDescription": "__MISSING__:Checks if the LLM output contains the expected substring.",
    "evalsStrategyExactDescription": "__MISSING__:Checks if the LLM output exactly matches the expected value.",
    "evalsStrategyRegexDescription": "__MISSING__:Validates the LLM output against a regular expression pattern.",
    "evalsStrategyCustomDescription": "__MISSING__:Custom evaluation logic (configured via JSON).",
    "historyColumnSuiteName": "__MISSING__:Suite Name",
    "historyColumnTarget": "__MISSING__:Target",
    "historyColumnPassRate": "__MISSING__:Pass Rate",
    "historyColumnAvgLatencyMs": "__MISSING__:Avg Latency",
    "historyColumnCreatedAt": "__MISSING__:Executed",
    "evalSuites": "Suite Penilaian",
    "evalSuitesHint": "Klik suite untuk melihat kes ujian, kemudian jalankan untuk menilai titik akhir LLM anda",
    "evalsLoading": "Memuatkan suite eval...",
    "noEvalSuitesFound": "Tiada Suite Eval Ditemui",
    "noEvalSuitesDescription": "Suite Eval boleh ditakrifkan melalui API atau dalam kod. Mereka menguji output model terhadap hasil yang dijangka menggunakan strategi seperti kandungan, regex, padanan tepat dan fungsi tersuai.",
    "columnCase": "Kes",
    "columnStatus": "Status",
    "columnLatency": "Latensi",
    "columnDetails": "Butiran",
    "columnModel": "Model",
    "columnStrategy": "Strategi",
    "columnExpected": "Dijangka",
    "statsSuites": "Suite",
    "statsTestCases": "Kes Ujian",
    "statsModels": "model",
    "statsCoverage": "Liputan",
    "statsStrategiesCount": "{count} strategi",
    "evaluationStrategies": "Strategi Penilaian",
    "modelsUnderTest": "Model Dalam Ujian",
    "searchSuitesPlaceholder": "Cari suite...",
    "passSuffix": "lulus",
    "casesCount": "{count, plural, one {# case} other {# cases}}",
    "runEval": "Lari Eval",
    "runAllSuites": "Jalankan Semua",
    "runAllRunning": "Berjalan semua...",
    "runAllProgress": "Berjalan {current}/{total}: {name}",
    "runAllFailedSuites": "{count, plural, one {# suite failed} other {# suites failed}}",
    "runAllCompleted": "Menjalankan {suites} suite — {passed} lulus, {failed} gagal",
    "runAllCompletedWithFailures": "Menjalankan {completed} suite; {failedSuites} gagal diselesaikan",
    "runningProgress": "Menjalankan {current}/{total}...",
    "passRate": "kadar lulus",
    "summaryBreakdown": "{passed} lulus · {failed} gagal · {total} jumlah",
    "passedIconLabel": "✅ Lulus",
    "failedIconLabel": "❌ Gagal",
    "resultPassed": "lulus",
    "resultFailed": "gagal",
    "expandResult": "Kembangkan butiran hasil",
    "collapseResult": "Runtuhkan butiran hasil",
    "detailsContains": "Mengandungi: \"{term}\"",
    "detailsRegex": "Regex: {pattern}",
    "detailsExpected": "Dijangka: \"{expected}\"",
    "expectedOutputLabel": "Output yang Dijangka",
    "noResultsYet": "Tiada keputusan lagi",
    "testCasesCount": "Kes Ujian ({count})",
    "noTestCasesDefined": "Tiada kes ujian ditentukan",
    "runEvalHint": "Klik \"Jalankan Eval\" untuk melaksanakan semua kes terhadap titik akhir LLM anda. Setiap ujian menghantar permintaan sebenar melalui OmniRoute.",
    "notifyNoTestCases": "Tiada kes ujian ditentukan untuk suite ini",
    "notifyAllCasesPassed": "Semua kes {total} lulus ✅",
    "notifySomeCasesFailed": "{passed}/{total} lulus, {failed} gagal",
    "notifyEvalRunFailed": "Larian Eval gagal",
    "notifyEvalTitle": "Eval: {name}",
    "modelEvals": "Penilaian Model",
    "evalsHeroDescription": "Uji dan sahkan titik akhir LLM anda dengan menjalankan suite penilaian yang telah ditetapkan. Setiap suite mengandungi kes ujian yang menghantar gesaan sebenar melalui OmniRoute dan membandingkan respons dengan kriteria yang dijangkakan — membantu anda mengesan regresi, membandingkan model dan memastikan kualiti respons merentas penyedia.",
    "qualityValidation": "Pengesahan Kualiti",
    "modelComparison": "Perbandingan Model",
    "regressionDetection": "Pengesanan Regresi",
    "latencyBenchmarks": "Penanda Aras Latensi",
    "modelLockouts": "Model Lockout",
    "noLockouts": "Tiada model dikunci pada masa ini",
    "activeSessions": "Sesi Aktif",
    "noSessions": "Tiada sesi aktif",
    "sessionsHint": "Sesi muncul semasa permintaan mengalir melalui proksi",
    "sessionsTrackedHint": "Dijejaki melalui cap jari permintaan • Muat semula automatik 5s",
    "session": "Sesi",
    "age": "Umur",
    "requests": "Permintaan",
    "connection": "Sambungan",
    "durationMillisecondsShort": "{value}ms",
    "durationSecondsShort": "{value}s",
    "durationMinutesShort": "{value}m",
    "durationHoursShort": "{value}j",
    "reasonSeparator": " - ",
    "notAvailableSymbol": "-",
    "providerLimits": "Had Pembekal",
    "noProviders": "Tiada Pembekal Disambungkan",
    "connectProvidersForQuota": "Sambung kepada pembekal dengan OAuth untuk menjejak had kuota dan penggunaan API anda.",
    "accountsCount": "{count, plural, one {# account} other {# accounts}}",
    "filteredFromCount": "(ditapis daripada {count})",
    "autoRefresh": "Muat semula automatik",
    "refreshAll": "Muat semula Semua",
    "loadingQuotas": "Memuatkan...",
    "account": "Akaun",
    "modelQuotas": "Kuota Model",
    "lastUsed": "Last Refreshed",
    "actions": "Tindakan",
    "refreshQuota": "Muat semula kuota",
    "today": "Hari ini",
    "tomorrow": "Esok",
    "dayTimeFormat": "{day}, {time}",
    "inDuration": "dalam {duration}",
    "notApplicable": "T/A",
    "rawPlanWithValue": "Pelan mentah: {plan}",
    "noPlanFromProvider": "Tiada pelan daripada pembekal",
    "noQuotaData": "Tiada data kuota",
    "cardExpand": "__MISSING__:Expand",
    "cardCollapse": "__MISSING__:Collapse",
    "moreQuotas": "__MISSING__:+{count} more",
    "ungrouped": "Ungrouped",
    "viewFlat": "Flat",
    "viewByEnvironment": "By Environment",
    "noQuotaDataAvailable": "Tiada data kuota tersedia",
    "noAccountsForTierFilter": "Tiada akaun ditemui untuk penapis peringkat",
    "tierAll": "Semua",
    "tierEnterprise": "Perusahaan",
    "tierTeam": "Pasukan",
    "tierBusiness": "Perniagaan",
    "tierUltra": "Ultra",
    "tierPro": "Pro",
    "tierPlus": "Tambahan pula",
    "tierFree": "Percuma",
    "tierLite": "__MISSING__:Lite",
    "tierUnknown": "Tidak diketahui",
    "statTotal": "__MISSING__:Total",
    "statCritical": "__MISSING__:Critical",
    "statAlert": "__MISSING__:Alert",
    "statHealthy": "__MISSING__:Healthy",
    "filterPurchaseTypeLabel": "__MISSING__:Type",
    "filterTierLabel": "__MISSING__:Tier",
    "purchaseAll": "__MISSING__:All",
    "purchaseOauthSub": "__MISSING__:Subscription",
    "purchaseOauthFree": "__MISSING__:OAuth Free",
    "purchaseApiKey": "__MISSING__:API Key",
    "creditsLabel": "__MISSING__:Credits",
    "creditBalanceHint": "__MISSING__:Remaining balance",
    "unlimitedLabel": "__MISSING__:Unlimited",
    "refreshing": "__MISSING__:Refreshing",
    "resetsIn": "__MISSING__:Resets in",
    "editCutoffs": "Edit potongan",
    "forceRefresh": "Muat semula sekarang",
    "suiteBuilderSaveFailed": "Failed to save suite",
    "clone": "Klon",
    "exportSuite": "Eksport",
    "importSuite": "Import",
    "suiteExported": "Suite dieksport",
    "suiteExportFailed": "Gagal mengeksport suite",
    "suiteImportReady": "Import suite dimuatkan untuk semakan",
    "suiteImportFailed": "Gagal mengimport suite",
    "suiteImportInvalid": "JSON suite eval tidak sah",
    "suiteBuilderCloneSuffix": "salinan",
    "suiteBuilderImportedSuite": "Suite Diimport",
    "scorecardTitle": "Scorecard",
    "evalApiKey": "API Key",
    "scorecardPassRate": "Pass Rate",
    "targetTypeModel": "Model",
    "actualOutputLabel": "Actual Output",
    "evalTargetHint": "Select a model or combo to evaluate.",
    "suiteBuilderDeleted": "Suite deleted successfully",
    "suiteBuilderCaseCardHint": "Define the input prompt and expected output criteria.",
    "nextResetUtc": "Next reset (UTC)",
    "scorecardHint": "Aggregated pass rates across all evaluation suites.",
    "suiteLatestRunsHint": "Most recent evaluation runs for this suite.",
    "saving": "Saving",
    "suiteBuilderCaseModelLabel": "Model (optional)",
    "evalControlsTitle": "Evaluation Controls",
    "suiteBuilderEditTitle": "Edit Eval Suite",
    "suiteBuilderCaseStrategyLabel": "Validation Strategy",
    "notifySelectDifferentCompareTarget": "Please select a different target for comparison",
    "recentRunsHint": "Showing the most recent evaluation runs. Click a run to see detailed results.",
    "evalCompareHint": "Optionally compare results against a second target.",
    "suiteBuilderCaseInvalid": "This case has validation errors. Please fix before saving.",
    "historyEmpty": "No evaluation history yet",
    "suiteBuilderUpdated": "Suite updated successfully",
    "resetInterval": "Reset Interval",
    "suiteBuilderCreateTitle": "Create Eval Suite",
    "activePeriodSpend": "Active Period Spend",
    "evalApiKeyHint": "Select which API key to use for evaluation requests.",
    "evalCompareOptional": "Compare (optional)",
    "suiteBuilderDeleteFailed": "Failed to delete suite",
    "suiteBuilderCaseSystemPromptPlaceholder": "Optional system instructions...",
    "scorecardCases": "Cases",
    "runCompletedWithScore": "Evaluation completed — {score}% pass rate",
    "suiteBuilderCustomBadge": "Custom",
    "targetSuiteDefaults": "Suite defaults",
    "suiteBuilderDeleteConfirm": "Are you sure you want to delete this suite? This action cannot be undone.",
    "suiteBuilderNameLabel": "Suite Name",
    "scorecardSuites": "Suites",
    "evalCompareTarget": "Compare Target",
    "suiteBuilderCaseModelPlaceholder": "e.g. gpt-4o-mini",
    "evalControlsHint": "Configure your evaluation target and API key, then run suites to validate model quality.",
    "recentRunsTitle": "Recent Runs",
    "suiteBuilderCaseSystemPromptLabel": "System Prompt",
    "suiteBuilderCaseExpectedPlaceholder": "e.g. def fibonacci",
    "suiteBuilderCaseExpectedPlaceholderContains": "cth. def fibonacci",
    "suiteBuilderCaseExpectedPlaceholderExact": "Tampalkan jawapan yang dijangkakan dengan tepat",
    "suiteBuilderCaseExpectedPlaceholderRegex": "cth. ^\\\\s*\\\\{.*\\\\}\\\\s*$",
    "suiteBuilderCaseExpectedHintRegex": "Gunakan ungkapan biasa JavaScript tanpa membalut garis miring.",
    "suiteBuilderNamePlaceholder": "e.g. Coding Quality Suite",
    "suiteBuilderAddCase": "Add Case",
    "cancel": "Cancel",
    "evalTarget": "Target",
    "suiteBuilderCaseNameLabel": "Case Name",
    "weeklyLimitUsd": "Weekly Limit (USD)",
    "suiteBuilderCaseUserPromptPlaceholder": "e.g. Write a fibonacci function in Python",
    "suiteBuilderNameRequired": "Suite name is required",
    "suiteBuilderCaseUserPromptLabel": "User Prompt",
    "daily": "Daily",
    "resultErrorLabel": "Error",
    "suiteBuilderBuiltInBadge": "Built-in",
    "suiteBuilderCaseCardTitle": "Test Case",
    "suiteBuilderDuplicateCase": "Pendua",
    "weeklyLimitPlaceholder": "e.g. 50.00",
    "suiteBuilderCaseTagsHint": "Comma-separated tags for organizing test cases.",
    "notifyEvalRunFailedWithReason": "Evaluation failed: {reason}",
    "weekly": "Weekly",
    "runEvalRunning": "Running evaluation...",
    "delete": "Delete",
    "resetTimeUtc": "Reset Time (UTC)",
    "evalApiKeyAuto": "Auto (use default)",
    "suiteBuilderDescriptionPlaceholder": "Optional description of what this suite tests...",
    "targetComparisonTitle": "Target Comparison",
    "save": "Save",
    "suiteBuilderCreated": "Suite created successfully",
    "suiteLatestRuns": "Latest Runs",
    "suiteBuilderCaseExpectedLabel": "Expected Value",
    "historyLatency": "Latency",
    "suiteBuilderCaseTagsPlaceholder": "e.g. coding, python",
    "targetTypeCombo": "Combo",
    "scorecardPassed": "Passed",
    "suiteBuilderCaseTagsLabel": "Tags",
    "suiteBuilderNewSuite": "New Suite",
    "notifyEvalLoadFailed": "Failed to load evaluation data",
    "notConfigured": "Not Configured",
    "suiteBuilderCaseNamePlaceholder": "e.g. Python fibonacci test",
    "intervalLabel": "Interval",
    "suiteBuilderCreateAction": "Create Suite",
    "suiteBuilderCasesHint": "Each case sends a prompt and validates the response.",
    "suiteBuilderUpdatedAt": "Updated",
    "errorBadge": "Error",
    "suiteBuilderCasesTitle": "Test Cases",
    "edit": "Edit",
    "monthly": "Monthly",
    "suiteBuilderCasesRequired": "At least one test case is required",
    "weeklyLimitSummary": "Weekly budget limit summary",
    "suiteBuilderDescriptionLabel": "Description",
    "targetComparisonHint": "Side-by-side comparison of evaluation results between targets.",
    "compareCompletedWithScore": "Comparison completed — {score}% pass rate",
    "staleQuotaTooltip": "Last refresh failed — showing cached data",
    "quotaThresholdLabel": "Min pergi",
    "quotaCutoffsColumnHelp": "Hentikan permintaan apabila baki kuota jatuh kepada peratusan ini atau lebih rendah.",
    "quotaCutoffsButtonDefault": "Lalai",
    "quotaCutoffsButtonHelp": "Edit baki kuota minimum untuk akaun ini.",
    "quotaCutoffsButtonDisabled": "Tiada tetingkap kuota tersedia untuk akaun ini lagi.",
    "quotaCutoffsTitle": "Potongan kuota untuk {name} ({provider})",
    "quotaCutoffsExplainer": "Gantikan peratusan kuota minimum yang tinggal di mana akaun ini berhenti dipilih untuk setiap tetingkap kuota. Biarkan kosong untuk mewarisi lalai pembekal.",
    "quotaCutoffsDefaultHint": "Baki min lalai: {default}%",
    "quotaCutoffsResetAll": "Tetapkan semula semua",
    "quotaCutoffsNoWindows": "Tiada tetingkap kuota tersedia untuk akaun ini lagi.",
    "quotaThresholdInvalid": "Masukkan nombor bulat dari 0 hingga 100.",
    "budgetKpiToday": "Hari ini",
    "budgetKpiThisMonth": "bulan ini",
    "budgetKpiProjEom": "Projek EOM",
    "budgetKpiBlocked": "Disekat",
    "budgetKpiAtRisk": "Berisiko",
    "budgetKpiActiveKeys": "Kekunci aktif",
    "budgetSearchKeysPlaceholder": "Kekunci carian...",
    "budgetSortPctUsed": "Isih: % Digunakan ↓",
    "budgetSortTodayDollar": "Isih: Hari ini $ ↓",
    "budgetSortMonthDollar": "Isih: Bulan $ ↓",
    "budgetSortNameAZ": "Isih: Nama (A–Z)",
    "budgetColDailyLim": "Lim harian",
    "budgetColMonthlyLim": "Lim bulanan",
    "budgetColUsedPct": "% terpakai",
    "budgetLoading": "Memuatkan…",
    "budgetNoKeysMatch": "Tiada kunci sepadan dengan penapis",
    "budgetLinearExtrapolation": "ekstrapolasi linear",
    "budgetThisMonthSoFar": "Bulan ini setakat ini",
    "budgetProjectedEndOfMonth": "Unjuran akhir bulan",
    "budgetByProvider": "oleh pembekal",
    "budgetDailyDollar": "$ harian",
    "budgetWeeklyDollar": "Mingguan $",
    "budgetMonthlyDollar": "$ bulanan",
    "budgetWarnAtPct": "Amaran pada %",
    "quotaAlerts": "Makluman kuota",
    "quotaTableRefreshing": "⟳ Menyegarkan...",
    "noSpendLast30Days": "Tiada perbelanjaan dalam 30 hari yang lalu",
    "updatedShort": "__MISSING__:Updated",
    "lastRefreshed": "__MISSING__:Last refreshed",
    "providerQuota": "__MISSING__:Provider Quota",
    "providerQuotaHomeHint": "__MISSING__:Live status across connected accounts"
  },
  "modals": {
    "waitingAuth": "Menunggu Keizinan",
    "verificationUrl": "URL pengesahan",
    "yourCode": "Kod Anda",
    "remoteAccess": "Akses jauh:",
    "connectedSuccess": "Berjaya Bersambung!",
    "connectionFailed": "Sambungan Gagal",
    "chooseAuthMethod": "Pilih kaedah pengesahan anda:",
    "awsBuilderId": "ID Pembina AWS",
    "awsIamIdentity": "Pusat Identiti AWS IAM",
    "googleAccount": "Akaun Google",
    "githubAccount": "Akaun GitHub",
    "importToken": "Import Token",
    "pasteToken": "Tampalkan token muat semula daripada Kiro IDE.",
    "awsRegion": "Wilayah AWS",
    "autoDetecting": "Token pengesan automatik...",
    "readingFromCache": "Membaca daripada cache AWS SSO",
    "readingFromCursor": "Membaca daripada pangkalan data Cursor IDE",
    "initializing": "Memulakan...",
    "pricingConfig": "Konfigurasi Harga",
    "loadingPricing": "Memuatkan data harga...",
    "pricingRatesFormat": "Format Kadar Harga",
    "noPricingData": "Tiada data harga tersedia",
    "noModelsFound": "Tiada model ditemui"
  },
  "loggers": {
    "allProviders": "Semua Penyedia",
    "allModels": "Semua Model",
    "allAccounts": "Semua Akaun",
    "allApiKeys": "Semua Kunci API",
    "allTypes": "Semua Jenis",
    "allLevels": "Semua Peringkat",
    "modelAZ": "Model A-Z",
    "modelZA": "Model Z-A",
    "loadingLogs": "Memuatkan log...",
    "loadingProxyLogs": "Memuatkan log proksi...",
    "noLogEntries": "Tiada entri log ditemui",
    "noPayloadData": "Tiada data muatan tersedia untuk entri log ini.",
    "proxyEvent": "Acara Proksi",
    "proxy": "proksi",
    "level": "Tahap",
    "directNative": "Langsung (asli)",
    "combo": "Kombo",
    "inputTokens": "saya:",
    "outputTokens": "O:"
  },
  "stats": {
    "usageOverview": "Gambaran Keseluruhan Penggunaan",
    "outputTokens": "Token Keluaran",
    "totalCost": "Jumlah Kos",
    "usageByModel": "Penggunaan mengikut Model",
    "usageByAccount": "Penggunaan mengikut Akaun",
    "failedToLoad": "Gagal memuatkan statistik penggunaan.",
    "tokenHealth": "Kesihatan Token",
    "totalOAuth": "Jumlah OAuth",
    "healthy": "Sihat",
    "warning": "Amaran",
    "errored": "Ralat",
    "lastCheck": "Semakan terakhir",
    "noData": "Tiada data",
    "share": "Kongsi",
    "unableToLoad": "Tidak dapat memuatkan metrik sistem",
    "product": "produk",
    "resources": "Sumber",
    "company": "Syarikat"
  },
  "auth": {
    "welcome": "Selamat datang",
    "signIn": "Log masuk",
    "enterPassword": "Masukkan kata laluan anda untuk meneruskan",
    "password": "Kata laluan",
    "unifiedProxy": "Proksi API AI Bersatu",
    "unifiedAiApiProxy": "Proksi API AI Bersatu",
    "unifiedAiApiProxyDesc": "Halakan permintaan kepada berbilang pembekal AI melalui satu titik akhir. Pengimbangan beban, failover dan penjejakan penggunaan terbina dalam.",
    "passwordNotEnabled": "Perlindungan kata laluan tidak didayakan",
    "loading": "Memuatkan...",
    "invalidPassword": "Kata laluan tidak sah",
    "errorOccurredRetry": "Ralat berlaku. Sila cuba lagi.",
    "configureInstance": "Mari kita konfigurasikan tika OmniRoute anda",
    "runOnboardingWizard": "Jalankan wizard onboarding untuk menyediakan kata laluan anda dan sambungkan pembekal AI pertama anda.",
    "startOnboarding": "Mulakan Onboarding",
    "secureYourInstance": "Lindungi Instance Anda",
    "setPasswordDescription": "Tetapkan kata laluan untuk melindungi papan pemuka anda dan selamatkan titik akhir API anda daripada akses tanpa kebenaran.",
    "configurePassword": "Konfigurasi Kata Laluan",
    "continue": "teruskan",
    "windowWillClose": "Tetingkap ini akan ditutup secara automatik...",
    "closeTabNow": "Anda boleh menutup tab ini sekarang.",
    "copyUrlManual": "Sila salin URL dari bar alamat dan tampalkannya dalam aplikasi.",
    "accessDeniedDescription": "Anda tidak mempunyai kebenaran untuk mengakses sumber ini. Semak kunci API anda atau hubungi pentadbir.",
    "goToDashboard": "Pergi ke Papan Pemuka",
    "featureMultiProviderTitle": "Pelbagai Pembekal",
    "featureMultiProviderDesc": "OpenAI, Anthropic, Google dan banyak lagi",
    "featureLoadBalancingTitle": "Pengimbangan Beban",
    "featureLoadBalancingDesc": "Sebarkan permintaan secara bijak",
    "featureUsageTrackingTitle": "Penjejakan Penggunaan",
    "featureUsageTrackingDesc": "Pantau kos dan token",
    "resetPassword": "Tetapkan Semula Kata Laluan",
    "resetDescription": "Pilih kaedah untuk memulihkan akses kepada papan pemuka anda",
    "stopServer": "Hentikan pelayan OmniRoute",
    "processing": "Memproses...",
    "pleaseWait": "Sila tunggu sementara kami melengkapkan kebenaran.",
    "authSuccess": "Keizinan Berjaya!",
    "copyUrl": "Salin URL Ini",
    "accessDenied": "Akses Ditolak",
    "methodCliTitle": "Kaedah 1: Tetapkan Semula CLI",
    "methodCliDescription": "Jalankan arahan berikut pada pelayan tempat OmniRoute sedang berjalan:",
    "methodCliHint": "Ini akan menggesa anda untuk menetapkan kata laluan baharu. Pelayan mesti dihentikan dahulu.",
    "methodManualTitle": "Kaedah 2: Tetapan Semula Manual",
    "methodManualDescription": "Padamkan kata laluan daripada pangkalan data dan tetapkan yang baharu pada permulaan:",
    "setPasswordInYour": "Tetapkan kata laluan baharu dalam anda",
    "fileLabelSuffix": "fail:",
    "newPasswordPlaceholder": "kata laluan_baru_anda",
    "deleteSettingsFile": "Padam",
    "orRemovePasswordHashField": "atau alih keluar medan passwordHash",
    "restartServerWithNewPassword": "Mulakan semula pelayan - ia akan menggunakan kata laluan baharu",
    "backToLogin": "Kembali ke Log Masuk",
    "forgotPassword": "Lupa kata laluan?",
    "defaultPasswordHint": "Default password: CHANGEME (unless INITIAL_PASSWORD was set)",
    "Authorization": "Keizinan",
    "Content-Disposition": "Kandungan-Pelupusan",
    "waitingForAuthorization": "Menunggu kebenaran...",
    "waitingForGoogleAuthorization": "Menunggu kebenaran Google...",
    "waitingForOpenAIAuthorization": "Menunggu kebenaran OpenAI...",
    "waitingForAntigravityAuthorization": "Menunggu kebenaran Antigraviti...",
    "waitingForQoderAuthorization": "Menunggu kebenaran Qoder...",
    "exchangingCodeForTokens": "Bertukar kod untuk token...",
    "nodeIncompatibleTitle": "Incompatible Node.js Version",
    "nodeIncompatibleDesc": "You are running Node.js {version}, which is outside OmniRoute's supported secure runtime policy. Use a patched Node.js 20.x or 22.x LTS release.",
    "nodeIncompatibleFixLabel": "Fix: install a patched Node.js 22 LTS release",
    "nodeIncompatibleHint": "OmniRoute requires Node.js 20.20.2+ (20.x LTS), 22.22.2+ (22.x LTS) or 24.0.0+ (24.x LTS). Node 24 LTS is recommended."
  },
  "landing": {
    "brandName": "OmniRoute",
    "navigateHome": "Navigasi ke rumah",
    "toggleMenu": "Togol menu",
    "featuresLink": "Ciri-ciri",
    "docsLink": "Dokumen",
    "github": "GitHub",
    "versionLive": "v1.0 kini disiarkan",
    "oneEndpoint": "Satu Titik Akhir untuk",
    "allProviders": "Semua Pembekal AI",
    "heroDescription": "Proksi titik akhir AI dengan papan pemuka web - Port JavaScript CLIProxyAPI. Berfungsi dengan lancar dengan Claude Code, OpenAI Codex, Cline, RooCode dan alatan CLI yang lain.",
    "getStarted": "Mulakan",
    "viewOnGithub": "Lihat di GitHub",
    "powerfulFeatures": "Ciri Berkuasa",
    "featuresSubtitle": "Semua yang anda perlukan untuk mengurus infrastruktur AI anda di satu tempat, dibina mengikut skala.",
    "featureUnifiedEndpointTitle": "Titik Akhir Bersatu",
    "featureUnifiedEndpointDesc": "Akses semua pembekal melalui URL API standard tunggal.",
    "featureEasySetupTitle": "Persediaan Mudah",
    "featureEasySetupDesc": "Bangun dan jalankan dalam beberapa minit dengan arahan npx.",
    "featureModelFallbackTitle": "Model Fallback",
    "featureModelFallbackDesc": "Tukar pembekal secara automatik pada kegagalan atau kependaman tinggi.",
    "featureUsageTrackingTitle": "Penjejakan Penggunaan",
    "featureUsageTrackingDesc": "Analisis terperinci dan pemantauan kos merentas semua model.",
    "featureOAuthApiKeysTitle": "OAuth & Kunci API",
    "featureOAuthApiKeysDesc": "Urus bukti kelayakan dengan selamat dalam satu peti besi.",
    "featureCloudSyncTitle": "Penyegerakan Awan",
    "featureCloudSyncDesc": "Segerakkan konfigurasi anda merentas peranti dengan serta-merta.",
    "featureCliSupportTitle": "Sokongan CLI",
    "featureCliSupportDesc": "Berfungsi dengan Claude Code, Codex, Cline, Cursor dan banyak lagi.",
    "featureDashboardTitle": "Papan pemuka",
    "featureDashboardDesc": "Papan pemuka visual untuk analisis trafik masa nyata.",
    "howItWorks": "Cara OmniRoute Berfungsi",
    "howItWorksDescription": "Data mengalir dengan lancar daripada aplikasi anda melalui lapisan penghalaan pintar kami kepada penyedia terbaik untuk tugas itu.",
    "howItWorksStep1Title": "1. CLI & SDK",
    "howItWorksStep1Description": "Permintaan anda bermula daripada alatan kegemaran anda atau SDK bersatu kami. Hanya tukar URL asas.",
    "howItWorksStep2Title": "2. Hab OmniRoute",
    "howItWorksStep2Description": "Enjin kami menganalisis gesaan, memeriksa kesihatan pembekal dan laluan untuk kependaman atau kos terendah.",
    "howItWorksStep3Title": "3. Pembekal AI",
    "howItWorksStep3Description": "Permintaan dipenuhi oleh OpenAI, Anthropic, Gemini atau yang lain serta-merta.",
    "getStartedIn30Seconds": "Bermula dalam 30 Saat",
    "getStartedDescription": "Pasang OmniRoute, konfigurasikan pembekal anda melalui papan pemuka web dan mulakan penghalaan permintaan AI.",
    "installOmniRoute": "Pasang OmniRoute",
    "installStepDescription": "Jalankan arahan npx untuk memulakan pelayan dengan serta-merta",
    "openDashboard": "Buka Papan Pemuka",
    "openDashboardStepDescription": "Konfigurasikan pembekal dan kunci API melalui antara muka web",
    "routeRequests": "Permintaan Laluan",
    "routeRequestsStepDescription": "Halakan alatan CLI anda ke {endpoint}",
    "terminal": "terminal",
    "copy": "salin",
    "copied": "✓ Disalin",
    "startingOmniRoute": "Memulakan OmniRoute...",
    "serverRunningOnLabel": "Pelayan berjalan",
    "dashboardLabel": "Papan pemuka",
    "readyToRoute": "Sedia untuk laluan! ✓",
    "configureProvidersNote": "📝 Konfigurasikan penyedia dalam papan pemuka atau gunakan pembolehubah persekitaran",
    "dataLocation": "Lokasi Data:",
    "dataLocationMacLinux": " macOS/Linux:",
    "dataLocationWindows": " Windows:",
    "product": "produk",
    "dashboardLink": "Papan pemuka",
    "changelog": "Changelog",
    "resources": "Sumber",
    "documentation": "Dokumentasi",
    "npm": "NPM",
    "legal": "sah",
    "mitLicense": "Lesen MIT",
    "footerTagline": "Titik akhir bersatu untuk penjanaan AI. Sambung, halakan dan urus pembekal AI anda dengan mudah.",
    "copyright": "© {year} OmniRoute. Semua hak terpelihara.",
    "flowToolClaudeCode": "Kod Claude",
    "flowToolOpenAICodex": "OpenAI Codex",
    "flowToolCline": "Cline",
    "flowToolCursor": "Kursor",
    "flowProviderOpenAI": "OpenAI",
    "flowProviderAnthropic": "Antropik",
    "flowProviderGemini": "Gemini",
    "flowProviderGithubCopilot": "GitHub Copilot",
    "interactiveDiagram": "Gambar rajah interaktif kelihatan pada desktop",
    "ctaTitle": "Bersedia untuk Memudahkan Infrastruktur AI Anda?",
    "ctaDescription": "Sertai pembangun yang memperkemas penyepaduan AI mereka dengan OmniRoute. Sumber terbuka dan percuma untuk bermula.",
    "startFree": "Mula Percuma",
    "readDocumentation": "Baca Dokumentasi"
  },
  "docs": {
    "title": "Dokumentasi",
    "quickStart": "Mula Pantas",
    "deploymentGuides": "Panduan Penerapan",
    "features": "Ciri-ciri",
    "supportedProviders": "Pembekal yang Disokong",
    "supportedProvidersToc": "Pembekal",
    "commonUseCases": "Kes Penggunaan Biasa",
    "clientCompatibility": "Keserasian Pelanggan",
    "protocolsToc": "Protocols",
    "apiReference": "Rujukan API",
    "managementApiReference": "Management API Reference",
    "managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.",
    "method": "Kaedah",
    "path": "Laluan",
    "notes": "Nota",
    "modelPrefixes": "Awalan Model",
    "prefix": "Awalan",
    "troubleshooting": "Menyelesaikan masalah",
    "supportsChat": "Menyokong kedua-dua titik akhir sembang dan respons.",
    "oauthAutoRefresh": "Sambungan OAuth dengan muat semula token automatik.",
    "fullStreaming": "Sokongan penstriman penuh untuk semua model.",
    "docsLabel": "Dokumen",
    "docsHeroDescription": "Gerbang AI untuk LLM berbilang pembekal. Satu titik akhir untuk OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor dan 20+ lagi pembekal.",
    "openDashboard": "Buka Papan Pemuka",
    "endpointPage": "Halaman Akhir",
    "github": "GitHub",
    "reportIssue": "Laporan Isu",
    "onThisPage": "Pada halaman ini",
    "documentationVersion": "Dokumentasi - v{version}",
    "quickStartStep1Title": "1. Pasang dan jalankan",
    "quickStartStep1Prefix": "Lari",
    "quickStartStep1Middle": "atau klon daripada GitHub dan jalankan",
    "quickStartStep2Title": "2. Cipta kunci API",
    "quickStartStep2Text": "Pergi ke Titik Akhir -> Kunci Berdaftar. Hasilkan satu kunci bagi setiap persekitaran.",
    "quickStartStep3Title": "3. Sambungkan pembekal",
    "quickStartStep3Text": "Tambahkan akaun pembekal melalui log masuk OAuth, kunci API atau sambung automatik peringkat percuma.",
    "quickStartStep4Title": "4. Tetapkan URL asas pelanggan",
    "quickStartStep4Prefix": "Halakan klien IDE atau API anda",
    "quickStartStep4Suffix": "Gunakan awalan pembekal, sebagai contoh",
    "deploySetupTitle": "Panduan Persediaan",
    "deploySetupText": "Pemasangan langkah demi langkah, konfigurasi persekitaran dan panduan jalan pertama untuk OmniRoute.",
    "deployElectronTitle": "Desktop Elektron",
    "deployElectronText": "Jalankan OmniRoute sebagai aplikasi desktop asli pada Windows, macOS dan Linux.",
    "deployDockerTitle": "Docker",
    "deployDockerText": "Penyerahan kontena dengan Docker Compose; sedia untuk timbunan pengeluaran dan Kubernetes.",
    "deployVmTitle": "Mesin Maya",
    "deployVmText": "Hos sendiri pada mana-mana VM Linux. Termasuk unit systemd, putaran log dan alatan sandaran.",
    "deployFlyTitle": "Fly.io",
    "deployFlyText": "Gunakan ke Fly.io edge runtime dengan satu fly.toml dan satu arahan penggunaan.",
    "deployPwaTitle": "PWA",
    "deployPwaText": "Pasang OmniRoute sebagai Apl Web Progresif pada penyemak imbas Android, iOS dan desktop.",
    "deployTermuxTitle": "Termux (Android)",
    "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser.",
    "featureRoutingTitle": "Penghalaan Berbilang Penyedia",
    "featureRoutingText": "Halakan permintaan kepada 30+ pembekal AI melalui satu titik akhir serasi OpenAI. Menyokong sembang, respons, audio dan API imej.",
    "featureCombosTitle": "Kombo dan Pengimbangan",
    "featureCombosText": "Cipta gabungan model dengan rantaian mundur dan strategi pengimbangan: round-robin, keutamaan, rawak, paling kurang digunakan dan dioptimumkan kos.",
    "featureUsageTitle": "Penjejakan Penggunaan dan Kos",
    "featureUsageText": "Pengiraan token masa nyata, pengiraan kos setiap pembekal/model, dan pecahan penggunaan terperinci mengikut kunci dan akaun API.",
    "featureAnalyticsTitle": "Papan Pemuka Analitis",
    "featureAnalyticsText": "Analitis visual dengan carta untuk permintaan, token, ralat, kependaman, kos dan populariti model dari semasa ke semasa.",
    "featureHealthTitle": "Pemantauan Kesihatan",
    "featureHealthText": "Pemeriksaan kesihatan secara langsung, status pembekal, keadaan pemutus litar dan pengesanan had kadar automatik dengan pengunduran eksponen.",
    "featureCliTitle": "Alat CLI",
    "featureCliText": "Urus konfigurasi IDE, eksport/import sandaran, temui profil codex dan konfigurasikan tetapan daripada papan pemuka.",
    "featureSecurityTitle": "Keselamatan dan Dasar",
    "featureSecurityText": "Pengesahan kunci API, penapisan IP, pengawal suntikan segera, dasar domain, pengurusan sesi dan pengelogan audit.",
    "featureCloudSyncTitle": "Penyegerakan Awan",
    "featureCloudSyncText": "Segerakkan konfigurasi anda ke Cloudflare Workers untuk akses jauh dengan kelayakan yang disulitkan dan failover automatik.",
    "providersAcrossConnectionTypes": "{count} pembekal merentas tiga jenis sambungan.",
    "manageProviders": "Uruskan Pembekal",
    "providersCount": "{count} pembekal",
    "providerTypeFree": "Peringkat Percuma",
    "providerTypeOAuth": "OAuth",
    "providerTypeApiKey": "Kunci API",
    "useCaseSingleEndpointTitle": "Titik akhir tunggal untuk banyak pembekal",
    "useCaseSingleEndpointText": "Halakan pelanggan ke satu URL asas dan laluan mengikut awalan model (contohnya: gh/, cc/, kr/, openai/).",
    "useCaseFallbackTitle": "Fallback dan penukaran model dengan kombo",
    "useCaseFallbackText": "Cipta model kombo dalam Papan Pemuka dan pastikan konfigurasi pelanggan stabil sementara pembekal berputar secara dalaman.",
    "useCaseUsageVisibilityTitle": "Keterlihatan penggunaan, kos dan nyahpepijat",
    "useCaseUsageVisibilityText": "Jejaki token dan kos mengikut pembekal, akaun dan kunci API dalam tab Penggunaan dan Analitis.",
    "clientCherryStudioTitle": "Studio Ceri",
    "baseUrlLabel": "URL asas",
    "chatEndpointLabel": "Titik akhir sembang",
    "modelRecommendationLabel": "Cadangan model: awalan eksplisit",
    "clientCodexTitle": "Model Copilot Codex / GitHub",
    "clientCodexBullet1": "Gunakan ID model dengan",
    "clientCodexBullet2": "Laluan automatik model keluarga Codex ke",
    "clientCodexBullet3": "Model bukan Codex diteruskan",
    "clientCursorTitle": "IDE kursor",
    "clientCursorBullet1": "guna",
    "clientCursorBullet1Suffix": "awalan untuk model Kursor.",
    "clientCursorBullet2": "Sambungan OAuth - log masuk dari halaman Penyedia.",
    "clientClaudeTitle": "Kod Claude / Antigraviti",
    "clientClaudeBullet1Prefix": "guna",
    "clientClaudeBullet1Middle": "(Claude) atau",
    "clientClaudeBullet1Suffix": "(Antigraviti) awalan.",
    "clientWindsurfTitle": "Luncur Angin",
    "clientWindsurfBullet1": "Gunakan OmniRoute sebagai URL asas yang serasi dengan OpenAI dan simpan awalan penyedia yang jelas untuk penghalaan yang menentukan.",
    "clientWindsurfBullet2": "Halakan model kepada `/v1/chat/completions` untuk trafik umum dan kekalkan `/v1/respons` untuk aliran gaya Codex.",
    "clientWindsurfBullet3": "Gunakan Papan Pemuka -> Alat CLI untuk panduan konfigurasi Windsurf sedia dibuat.",
    "clientClineTitle": "Cline",
    "clientClineBullet1": "Cline berfungsi paling baik dengan awalan pembekal/model yang jelas supaya penghala tidak perlu meneka bahagian belakang.",
    "clientClineBullet2": "Gunakan `/v1/chat/completions` untuk model umum dan gunakan semula URL asas OmniRoute yang sama merentas akaun yang berbeza.",
    "clientClineBullet3": "Gunakan papan pemuka Penyedia untuk mengesahkan kekunci OAuth/API sebelum menyahpepijat isu masa jalanan Cline.",
    "clientKimiTitle": "Pengekodan Kimi",
    "clientKimiBullet1": "Gunakan OmniRoute sebagai URL asas yang stabil sambil memutarkan akaun atau gabungan penyedia di bawahnya.",
    "clientKimiBullet2": "Lebih suka model awalan dalam aliran pengekodan supaya sandaran dan jejak audit kekal eksplisit.",
    "clientKimiBullet3": "Gunakan `/v1/responses` apabila anda mahukan penghalaan gaya Respons asli untuk pelanggan yang menggunakan alat.",
    "protocolsTitle": "Protocols: MCP & A2A",
    "protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.",
    "protocolMcpTitle": "MCP (Model Context Protocol)",
    "protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.",
    "protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.",
    "protocolMcpStep2": "Point your MCP client to stdio transport.",
    "protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.",
    "protocolA2aTitle": "A2A (Agent2Agent)",
    "protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.",
    "protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.",
    "protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.",
    "protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.",
    "protocolTroubleshootingTitle": "Protocol Troubleshooting",
    "protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.",
    "protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.",
    "protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.",
    "endpointChatNote": "Titik akhir sembang serasi OpenAI (lalai).",
    "endpointResponsesNote": "Titik akhir API Respons (Codex, o-siri).",
    "endpointModelsNote": "Katalog model untuk semua pembekal yang disambungkan.",
    "endpointAudioNote": "Transkripsi audio (Deepgram, AssemblyAI).",
    "endpointSpeechNote": "Penjanaan teks ke pertuturan (ElevenLabs, OpenAI TTS).",
    "endpointEmbeddingsNote": "Penjanaan pembenaman teks (OpenAI, Cohere, Voyage).",
    "endpointImagesNote": "Penjanaan imej (NanoBanana).",
    "endpointRewriteChatNote": "Tulis semula pembantu untuk pelanggan tanpa /v1.",
    "endpointRewriteResponsesNote": "Tulis semula pembantu untuk Respons tanpa /v1.",
    "endpointRewriteModelsNote": "Tulis semula pembantu untuk penemuan model tanpa /v1.",
    "mgmtProxiesListNote": "List saved proxy registry items (supports pagination).",
    "mgmtProxiesCreateNote": "Create a reusable proxy item in the registry.",
    "mgmtProxiesHealthNote": "Get 24h/rolling health metrics per saved proxy from proxy logs.",
    "mgmtProxiesBulkAssignNote": "Assign or clear one proxy across many scope IDs in one request.",
    "mgmtAssignmentsListNote": "List proxy assignments by scope, scope_id, or proxy_id.",
    "mgmtAssignmentsUpdateNote": "Assign or clear proxy for global/provider/account/combo scope.",
    "mgmtLegacyMigrationNote": "Import legacy proxyConfig maps into registry assignments.",
    "modelPrefixesDescriptionStart": "Gunakan awalan pembekal sebelum nama model untuk menghala ke pembekal tertentu. Contoh:",
    "modelPrefixesDescriptionEnd": "laluan ke GitHub Copilot.",
    "provider": "Pembekal",
    "type": "taip",
    "troubleshootingModelRouting": "Jika pelanggan gagal dengan penghalaan model, gunakan pembekal/model eksplisit (contohnya: gh/gpt-5.1-codex).",
    "troubleshootingAmbiguousModels": "Jika anda menerima ralat model yang tidak jelas, pilih awalan pembekal dan bukannya ID model kosong.",
    "troubleshootingCodexFamily": "Untuk model keluarga Codex GitHub, kekalkan model sebagai gh/codex-model; penghala memilih /membalas secara automatik.",
    "troubleshootingTestConnection": "Gunakan Papan Pemuka > Pembekal > Uji Sambungan sebelum menguji daripada IDE atau pelanggan luaran.",
    "troubleshootingCircuitBreaker": "Jika pembekal menunjukkan pemutus litar terbuka, tunggu masa bertenang atau semak halaman Kesihatan untuk mendapatkan butiran.",
    "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal.",
    "endpointCompletionsNote": "Titik tamat pelengkap warisan untuk penjanaan teks.",
    "endpointModerationsNote": "Penyederhanaan kandungan dan klasifikasi keselamatan.",
    "endpointRerankNote": "Pendudukan semula dokumen untuk penjanaan dipertingkatkan semula (Cohere, Jina).",
    "endpointSearchNote": "Carian web dengan 5 pembekal (Serper, Brave, Exa, Tavily, Perplexity).",
    "endpointSearchAnalyticsNote": "Analitis dan metrik untuk permintaan carian.",
    "endpointVideoNote": "Penjanaan video (ComfyUI, aliran kerja SD WebUI).",
    "endpointMusicNote": "Penjanaan muzik melalui aliran kerja ComfyUI.",
    "endpointMessagesNote": "Titik akhir mesej asli antroppik.",
    "endpointCountTokensNote": "Kira token untuk muatan mesej yang diberikan.",
    "endpointFilesNote": "Muat naik fail untuk input multimodal.",
    "endpointBatchesNote": "Pemprosesan kelompok untuk permintaan API pukal.",
    "endpointWsNote": "Titik akhir WebSocket untuk penstriman masa nyata.",
    "mgmtProvidersListNote": "Senaraikan semua sambungan pembekal berdaftar.",
    "mgmtProvidersCreateNote": "Buat sambungan pembekal baharu.",
    "mgmtProvidersUpdateNote": "Kemas kini sambungan pembekal sedia ada.",
    "mgmtProvidersDeleteNote": "Padamkan sambungan pembekal.",
    "mgmtProvidersTestNote": "Uji ketersambungan dan pengesahan untuk pembekal.",
    "mgmtProvidersModelsNote": "Senaraikan model yang tersedia untuk pembekal tertentu.",
    "mgmtSettingsGetNote": "Dapatkan semula tetapan aplikasi semasa.",
    "mgmtSettingsUpdateNote": "Kemas kini tetapan aplikasi.",
    "mgmtPayloadRulesGetNote": "Dapatkan peraturan transformasi muatan.",
    "mgmtPayloadRulesUpdateNote": "Kemas kini peraturan transformasi muatan.",
    "mcpToolsTitle": "Alat MCP",
    "mcpToolsDescription": "OmniRoute mendedahkan alat {count} melalui Protokol Konteks Model untuk orkestrasi ejen.",
    "mcpToolsCount": "{count} alatan",
    "mcpToolsToc": "Alat MCP",
    "mcpToolsRoutingTitle": "Penghalaan & Penemuan",
    "mcpToolsRoutingDesc": "Pemeriksaan kesihatan, pengurusan kombo, pemantauan kuota, pelaporan kos dan akses katalog model.",
    "mcpToolsOperationsTitle": "Operasi & Strategi",
    "mcpToolsOperationsDesc": "Simulasi laluan, pengawal belanjawan, penukaran strategi, profil daya tahan dan metrik penyedia.",
    "mcpToolsCacheTitle": "Pengurusan Cache",
    "mcpToolsCacheDesc": "Lihat statistik cache dan siram cache semantik atau tandatangan.",
    "mcpToolsCompressionTitle": "Enjin Mampatan",
    "mcpToolsCompressionDesc": "Konfigurasikan pemampatan RTK/Brotli, tukar enjin dan periksa analitik mampatan dengan kombo.",
    "mcpToolsOneProxyTitle": "1Proksi / Terowong",
    "mcpToolsOneProxyDesc": "Urus proksi keluar, putar IP kediaman dan periksa kesihatan proksi.",
    "mcpToolsMemoryTitle": "Ingatan",
    "mcpToolsMemoryDesc": "Cari, tambah dan kosongkan entri memori perbualan berterusan.",
    "mcpToolsSkillsTitle": "Kemahiran",
    "mcpToolsSkillsDesc": "Senaraikan, dayakan, laksana dan pantau pelaksanaan kemahiran tersuai.",
    "featureAutoComboTitle": "Auto-Kombo",
    "featureAutoComboText": "Buat gabungan yang dioptimumkan secara automatik berdasarkan pembekal yang disambungkan, corak penggunaan dan keupayaan model anda.",
    "featureSearchTitle": "Carian Web",
    "featureSearchText": "Carian web bersepadu dengan 5 pembekal (Serper, Brave, Exa, Tavily, Perplexity) termasuk analitik dan penjejakan kos.",
    "featureMemoryTitle": "Sistem Memori",
    "featureMemoryText": "Memori perbualan yang berterusan dengan pengekstrakan, suntikan, perolehan semula dan ringkasan merentas sesi.",
    "featureSkillsTitle": "Kerangka Kemahiran",
    "featureSkillsText": "Sistem kemahiran boleh diperluaskan dengan kemahiran terbina dalam dan tersuai, pelaksanaan kotak pasir, pemintasan permintaan dan suntikan konteks.",
    "featureAcpTitle": "Komunikasi Agen",
    "featureAcpText": "Pendaftaran Protokol Komunikasi Ejen (ACP) untuk mengurus aliran kerja ejen-ke-ejen dan orkestrasi alat.",
    "protocolAcpTitle": "ACP (Komunikasi Agen)",
    "protocolAcpDesc": "Daftar dan urus ejen melalui pendaftaran ACP untuk komunikasi antara ejen dan perkongsian alat.",
    "protocolAcpStep1": "Navigasi ke Papan Pemuka → Ejen untuk melihat ejen ACP berdaftar.",
    "protocolAcpStep2": "Daftar ejen baharu dengan keupayaan dan konfigurasi titik akhir.",
    "protocolAcpStep3": "Gunakan Alat CLI untuk mengkonfigurasi saluran komunikasi ejen."
  },
  "legal": {
    "privacyPolicy": "Dasar Privasi",
    "termsOfService": "Syarat Perkhidmatan",
    "providerConfigurations": "Konfigurasi pembekal",
    "apiKeys": "kunci API",
    "usageLogs": "Log penggunaan",
    "applicationSettings": "Tetapan aplikasi",
    "viewExportAnalytics": "Lihat dan eksport analitis penggunaan",
    "clearHistory": "Kosongkan sejarah penggunaan pada bila-bila masa",
    "configureRetention": "Konfigurasikan dasar pengekalan log",
    "backupRestore": "Sandarkan dan pulihkan pangkalan data anda",
    "privacyMetadataTitle": "Dasar Privasi | OmniRoute",
    "privacyMetadataDescription": "Dasar privasi untuk penghala proksi API OmniRoute AI.",
    "termsMetadataTitle": "Syarat Perkhidmatan | OmniRoute",
    "termsMetadataDescription": "Syarat perkhidmatan untuk penghala proksi API OmniRoute AI.",
    "backToHome": "Balik rumah",
    "lastUpdated": "Kemas kini terakhir: {date}",
    "policyLastUpdatedDate": "13 Februari 2026",
    "listSeparator": "-",
    "questionsVisit": "Soalan? Lawati kami",
    "githubRepository": "repositori GitHub",
    "privacySection1Title": "1. Seni Bina Tempatan-Pertama",
    "privacySection1Text": "OmniRoute direka sebagai aplikasi tempatan pertama. Semua pemprosesan dan penyimpanan data berlaku sepenuhnya pada mesin anda. Tiada pelayan berpusat yang mengumpul maklumat anda.",
    "privacySection2Title": "2. Data Kami Simpan",
    "privacyDataStoredIn": "Data berikut disimpan secara setempat dalam",
    "privacyDataProviderConfigurationsDesc": "URL sambungan, jenis pembekal dan tetapan keutamaan",
    "privacyDataApiKeysDesc": "disulitkan dan disimpan secara tempatan untuk pengesahan dengan pembekal AI",
    "privacyDataUsageLogsDesc": "kiraan permintaan, penggunaan token, nama model, cap masa dan masa tindak balas",
    "privacyDataApplicationSettingsDesc": "keutamaan tema, strategi penghalaan dan konfigurasi kombo",
    "privacySection3Title": "3. Tiada Telemetri",
    "privacySection3Text": "OmniRoute tidak mengumpul laporan telemetri, analitik atau ranap sistem. Tiada data dihantar kepada kami atau mana-mana pihak ketiga. Corak penggunaan, panggilan API dan konfigurasi anda kekal peribadi sepenuhnya.",
    "privacySection4Title": "4. Pembekal AI Pihak Ketiga",
    "privacySection4Text": "Apabila anda membuat panggilan API melalui OmniRoute, permintaan anda dimajukan kepada penyedia AI yang telah anda konfigurasikan (contohnya: OpenAI, Anthropic, Google). Pembekal ini mempunyai dasar privasi mereka sendiri yang mengawal cara mereka mengendalikan data anda. Sila semak semula:",
    "privacyOpenAiPolicy": "Dasar Privasi OpenAI",
    "privacyAnthropicPolicy": "Dasar Privasi Anthropic",
    "privacyGooglePolicy": "Dasar Privasi Google",
    "privacySection5Title": "5. Penyegerakan Awan (Pilihan)",
    "privacySection5Text": "Jika anda mendayakan ciri penyegerakan awan pilihan, konfigurasi pembekal dan kunci API mungkin dihantar ke titik akhir awan yang dikonfigurasikan. Ciri ini dilumpuhkan secara lalai dan memerlukan ikut serta secara eksplisit.",
    "privacySection6Title": "6. Pembalakan",
    "privacyLoggingIntro": "Log permintaan boleh dikonfigurasikan melalui tetapan papan pemuka. Anda boleh:",
    "privacySection7Title": "7. Hak Anda",
    "privacySection7TextStart": "Memandangkan semua data disimpan secara setempat, anda mempunyai kawalan penuh. Anda boleh memadam data anda pada bila-bila masa dengan mengalih keluar",
    "privacySection7TextEnd": "direktori atau menggunakan ciri sandaran pangkalan data dan memulihkan dalam papan pemuka.",
    "termsSection1Title": "1. Gambaran keseluruhan",
    "termsSection1Text": "OmniRoute ialah penghala proksi API AI tempatan pertama yang beroperasi sepenuhnya pada mesin anda. Ia mengarahkan permintaan kepada berbilang penyedia AI dengan pengimbangan beban, failover dan penjejakan penggunaan.",
    "termsSection2Title": "2. Tanggungjawab Pengguna",
    "termsResponsibilityApiKeys": "Anda bertanggungjawab sepenuhnya untuk mengurus kunci API dan bukti kelayakan anda sendiri untuk pembekal AI pihak ketiga (OpenAI, Anthropic, Google, dll.).",
    "termsResponsibilityCompliance": "Anda mesti mematuhi syarat perkhidmatan setiap pembekal AI yang APInya anda akses melalui OmniRoute.",
    "termsResponsibilitySecurity": "Anda bertanggungjawab untuk keselamatan pemasangan OmniRoute setempat anda, termasuk menetapkan kata laluan dan menyekat akses rangkaian.",
    "termsSection3Title": "3. Bagaimana Ia Berfungsi",
    "termsSection3Text": "OmniRoute bertindak sebagai proksi perantara. Panggilan API yang dihantar ke OmniRoute diterjemahkan dan dimajukan kepada pembekal AI yang dikonfigurasikan anda. OmniRoute tidak mengubah suai kandungan permintaan atau respons anda melebihi terjemahan protokol yang diperlukan.",
    "termsSection4Title": "4. Pengendalian Data",
    "termsDataStoredLocally": "Semua data disimpan secara setempat pada mesin anda dalam pangkalan data SQLite.",
    "termsNoTransmission": "OmniRoute tidak menghantar sebarang data ke pelayan luaran melainkan anda mendayakan ciri penyegerakan awan secara eksplisit.",
    "termsDataLocationText": "Log penggunaan, kunci API dan konfigurasi disimpan dalam",
    "termsSection5Title": "5. Penafian",
    "termsSection5Text": "OmniRoute disediakan \"seadanya\" tanpa sebarang jenis waranti. Kami tidak bertanggungjawab untuk sebarang kos yang ditanggung melalui penggunaan API, gangguan perkhidmatan atau kehilangan data. Sentiasa kekalkan sandaran konfigurasi anda.",
    "termsSection6Title": "6. Sumber Terbuka",
    "termsSection6Text": "OmniRoute ialah perisian sumber terbuka. Anda bebas untuk memeriksa, mengubah suai dan mengedarkannya di bawah syarat lesennya."
  },
  "agents": {
    "title": "CLI Agents",
    "description": "Discover installed CLI agents on your system. Add custom agents for auto-detection.",
    "refresh": "Refresh",
    "installed": "Installed",
    "notFound": "Not Found",
    "builtIn": "Built-in",
    "custom": "Custom",
    "remove": "Remove",
    "addCustomAgent": "Add Custom Agent",
    "addCustomAgentDesc": "Register any CLI tool for detection. It will be scanned automatically on refresh.",
    "agentName": "Agent Name",
    "binaryName": "Binary Name",
    "versionCommand": "Version Command",
    "spawnArgs": "Spawn Args",
    "addAgent": "Add Agent",
    "scanning": "Scanning system for CLI agents...",
    "opencodeIntegration": "OpenCode Integration",
    "opencodeDetected": "opencode {version} detected",
    "opencodeDesc": "Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.",
    "downloadConfig": "Download {file}",
    "downloaded": "Downloaded!",
    "setupGuideTitle": "Setup guide",
    "openCliTools": "Open CLI Tools",
    "setupGuideDetectCliTitle": "Detect installed CLIs",
    "setupGuideDetectCliDesc": "Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.",
    "setupGuideCustomAgentTitle": "Register custom binary",
    "setupGuideCustomAgentDesc": "Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.",
    "setupGuideCommandMissingTitle": "Fix 'command not found'",
    "setupGuideCommandMissingDesc": "Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh.",
    "cliToolsRedirectTitle": "Cli Tools Redirect Title",
    "cliToolsRedirectDesc": "Cli Tools Redirect Desc",
    "spawnArgsPlaceholder": "Spawn Args Placeholder",
    "binaryNamePlaceholder": "Binary Name Placeholder",
    "versionCommandPlaceholder": "Version Command Placeholder",
    "architectureTitle": "Architecture Title",
    "flowLocalBinary": "Flow Local Binary",
    "flowOmniRoute": "Flow Omni Route",
    "agentNamePlaceholder": "Agent Name Placeholder",
    "architectureDescription": "Architecture Description",
    "flowExecute": "Flow Execute",
    "flowSpawn": "Flow Spawn",
    "cliToolsRedirectCta": "Cli Tools Redirect Cta",
    "comparisonTitle": "Alat CLI vs Sasaran Ejen — Apakah Perbezaannya?",
    "comparisonCliToolsLabel": "Halaman Alat CLI",
    "comparisonCliToolsTitle": "IDE anda menghantar permintaan melalui OmniRoute",
    "comparisonCliToolsDesc": "Konfigurasikan Kod Claude, Codex, Kursor dan IDE lain untuk menggunakan OmniRoute sebagai URL asas API mereka. OmniRoute bertindak sebagai proksi, menghalakan permintaan kepada pembekal yang dikonfigurasikan anda.",
    "comparisonAgentsLabel": "Halaman ini (Sasaran Agen)",
    "comparisonAgentsTitle": "OmniRoute menghantar permintaan ke dalam alatan CLI tempatan",
    "comparisonAgentsDesc": "OmniRoute boleh melahirkan perduaan CLI tempatan (claude, codex, angsa) sebagai hujung belakang pelaksanaan. Alat CLI memproses permintaan menggunakan pengesahannya sendiri dan mengembalikan hasilnya.",
    "comparisonSummary": "Ringkasnya: Alat CLI = anda mengkonfigurasi alat untuk menunjuk ke OmniRoute. Sasaran Agen = OmniRoute menggunakan alatan sebagai titik akhirnya.",
    "agentUseCaseHint": "Boleh digunakan sebagai sasaran pelaksanaan melalui protokol ACP",
    "flowDiagramClient": "Apl Pelanggan",
    "flowDiagramClientDesc": "SDK, API atau perkhidmatan huluan",
    "flowDiagramOmniRoute": "OmniRoute",
    "flowDiagramOmniRouteDesc": "Menerima permintaan dan memilih sasaran",
    "flowDiagramSpawn": "Proses Bertelur",
    "flowDiagramSpawnDesc": "Melancarkan perduaan CLI melalui stdio",
    "flowDiagramCli": "Ejen CLI",
    "flowDiagramCliDesc": "Proses dengan pengesahan/model sendiri",
    "fingerprintSettingsHint": "Padanan Cap Jari CLI (permintaan menyamar sebagai alat CLI khusus) boleh dikonfigurasikan dalam",
    "settingsRoutingLink": "Tetapan/Penghalaan",
    "openSettings": "tetapan",
    "copyRawUrlTitle": "Salin URL mentah ke papan keratan",
    "copied": "disalin!",
    "copyUrl": "Salin URL",
    "startHere": "Mula Di Sini",
    "badgeNew": "baru",
    "viewOnGithub": "Lihat di GitHub",
    "howToUse": "Cara menggunakan",
    "browseAllSkillsOnGithub": "Semak imbas semua kemahiran di GitHub",
    "apiSkills": "Kemahiran API",
    "cliSkills": "Kemahiran CLI",
    "apiSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via REST / HTTP",
    "cliSkillsSubtitle": "__MISSING__:{count} skills — control OmniRoute via the omniroute terminal binary",
    "howToUseStep1": "__MISSING__:Click <bold>{copyUrl}</bold> on the skill you want your agent to know about.",
    "howToUseStep2": "__MISSING__:In your AI agent (Claude, Cursor, Cline…), say:",
    "howToUseStep2Code": "__MISSING__:Use the skill at [pasted-url]",
    "howToUseStep3": "__MISSING__:The agent fetches the SKILL.md and learns OmniRoute's API or CLI — no manual docs needed."
  },
  "cloudAgents": {
    "title": "Agen Awan",
    "description": "Urus ejen pengekodan autonomi (Jules, Devin, Codex Cloud)",
    "loading": "Memuatkan tugas...",
    "aboutTitle": "Mengenai Agen Awan",
    "aboutDescription": "Ejen awan ialah pembantu pengekodan AI jauh yang boleh melaksanakan tugas secara autonomi. Mereka berfungsi secara berbeza daripada ejen CLI tempatan - anda berinteraksi dengan mereka melalui API OmniRoute.",
    "howItWorksTitle": "Cara ia berfungsi:",
    "howItWorksDesc": "Buat tugas → Ejen menganalisis dan mencadangkan rancangan → Anda meluluskan → Ejen melaksanakan → Keputusan dikembalikan",
    "newTaskTitle": "Buat Tugasan Baharu",
    "newTaskDescription": "Mulakan tugas baharu dengan ejen awan",
    "selectAgent": "Pilih Ejen",
    "taskDescription": "Penerangan Tugas",
    "taskDescriptionPlaceholder": "Terangkan perkara yang anda mahu ejen lakukan...",
    "startTask": "Mulakan Tugasan",
    "tasks": "Tugasan",
    "taskDetail": "Butiran Tugas",
    "noTasks": "Tiada tugas lagi. Buat satu untuk bermula.",
    "noTasksTitle": "__MISSING__:No tasks yet",
    "noTasksDesc": "__MISSING__:Create your first task to get started.",
    "tasksTab": "__MISSING__:Tasks",
    "agentsTab": "__MISSING__:Agents",
    "settingsTab": "__MISSING__:Settings",
    "agentsEnabled": "__MISSING__:Enabled",
    "agentsDisabled": "__MISSING__:Disabled",
    "filterAllProviders": "__MISSING__:All Providers",
    "filterAll": "__MISSING__:All",
    "autoRefreshing": "__MISSING__:Auto-refreshing",
    "viewPR": "__MISSING__:View Pull Request",
    "connected": "__MISSING__:Connected",
    "notConnected": "__MISSING__:Not connected",
    "configure": "__MISSING__:Configure",
    "settingsTitle": "__MISSING__:Cloud Agent Settings",
    "settingsDesc": "__MISSING__:Configure local preferences for cloud agents.",
    "settingEnableAgents": "__MISSING__:Enable cloud agents",
    "settingEnableAgentsDesc": "__MISSING__:Allow OmniRoute to orchestrate autonomous coding agents.",
    "settingAutoPR": "__MISSING__:Auto-create PR",
    "settingAutoPRDesc": "__MISSING__:When a task is completed, automatically create a Pull Request with the changes.",
    "settingRequireApproval": "__MISSING__:Require plan approval",
    "settingRequireApprovalDesc": "__MISSING__:Always wait for manual approval before an agent executes a proposed plan.",
    "untitledTask": "Tugas Tanpa Tajuk",
    "created": "Dicipta",
    "conversation": "Perbualan",
    "result": "Hasilnya",
    "error": "ralat",
    "planReady": "Pelan Sedia untuk Kelulusan",
    "approvePlan": "Luluskan Pelan",
    "rejectPlan": "Tolak & Batal",
    "sendMessagePlaceholder": "Hantar mesej kepada ejen...",
    "cancel": "Batal",
    "delete": "Padam",
    "selectTaskPrompt": "Pilih tugas untuk melihat butiran",
    "statusPending": "Belum selesai",
    "statusRunning": "Berlari",
    "statusWaitingApproval": "Menunggu Kelulusan",
    "statusCompleted": "Selesai",
    "statusFailed": "gagal",
    "statusCancelled": "Dibatalkan",
    "repositoryName": "Nama repositori",
    "repositoryUrl": "URL repositori",
    "branch": "Cawangan"
  },
  "templateNames": {
    "simple-chat": "Sembang Mudah",
    "streaming": "Penstriman",
    "system-prompt": "Gesaan Sistem",
    "thinking": "Berfikir",
    "tool-calling": "Alat Panggilan",
    "multi-turn": "Pelbagai pusingan",
    "vision": "Penglihatan",
    "schema-coercion": "Paksaan Skema"
  },
  "templateDescriptions": {
    "simple-chat": "Templat sembang asas dengan mesej sistem",
    "streaming": "Templat untuk respons penstriman",
    "system-prompt": "Templat dengan gesaan sistem tersuai",
    "thinking": "Templat dengan bajet penaakulan/pemikiran",
    "tool-calling": "Templat untuk panggilan alat/fungsi",
    "multi-turn": "Templat untuk perbualan berbilang pusingan",
    "vision": "Templat multimodal dengan input imej",
    "schema-coercion": "Penguatkuasaan skema output berstruktur / JSON"
  },
  "templatePayloads": {
    "simpleChat": {
      "system": "Anda seorang pembantu AI yang membantu.",
      "userGreeting": "hello! Bagaimana saya boleh membantu anda hari ini?"
    },
    "streaming": {
      "prompt": "Tulis cerita tentang"
    },
    "systemPrompt": {
      "question": "Apakah erti kehidupan?",
      "systemInstruction": "Berikan jawapan yang bernas dan berfalsafah."
    },
    "thinking": {
      "question": "Terangkan pengkomputeran kuantum"
    },
    "toolCalling": {
      "cityNameDescription": "Nama bandar untuk mendapatkan cuaca",
      "toolDescription": "Dapatkan cuaca semasa untuk lokasi",
      "userWeather": "Bagaimanakah cuaca di Tokyo?"
    },
    "multiTurn": {
      "system": "Anda seorang pembantu yang membantu.",
      "assistantExample": "Saya berbesar hati untuk membantu anda dengan itu.",
      "userInitial": "Saya perlukan bantuan",
      "userFollowUp": "Bolehkah anda menghuraikan perkara itu?"
    }
  },
  "cache": {
    "title": "Cache Management",
    "description": "Monitor and manage semantic response cache, hit rates, and token savings.",
    "refresh": "Refresh",
    "clearAll": "Clear All",
    "memoryEntries": "Memory Entries",
    "memoryEntriesSub": "In-memory LRU",
    "dbEntries": "DB Entries",
    "dbEntriesSub": "Persisted (SQLite)",
    "cacheHits": "Cache Hits",
    "cacheHitsSub": "of {total} total",
    "tokensSaved": "Tokens Saved",
    "tokensSavedSub": "Estimated from hits",
    "hitRate": "Hit Rate",
    "performance": "Cache Performance",
    "autoRefresh": "Auto-refreshes every {seconds}s",
    "hits": "Hits",
    "misses": "Misses",
    "total": "Total",
    "behavior": "Cache Behavior",
    "behaviorDeterministic": "Only non-streaming requests with temperature=0 are cached.",
    "behaviorBypass": "Bypass with header {header}.",
    "behaviorTwoTier": "Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).",
    "behaviorTtl": "Default TTL: 30 minutes. Configure via {envVar}.",
    "idempotency": "Idempotency Layer",
    "activeDedupKeys": "Active Dedup Keys",
    "dedupWindow": "Dedup Window",
    "clearSuccess": "Cache cleared. {count} expired entries removed.",
    "clearError": "Failed to clear cache.",
    "unavailable": "Cache unavailable",
    "unavailableDesc": "Could not fetch cache statistics. Make sure the server is running.",
    "loadingCacheAria": "__MISSING__:Loading cache",
    "promptCache": "Prompt Cache (Provider-Side)",
    "semanticCache": "Semantic Cache",
    "promptCacheSectionDesc": "Shows provider-side prompt caching activity from usage history so you can see where cache control is active and how much input reuse you are getting.",
    "promptTrendDesc": "Hourly request volume, cache coverage, and cache read volume across the last 24 hours.",
    "cachedRequests": "Cached Requests",
    "cachedRequests24h": "Cached Requests (24h)",
    "cacheHitRate": "Cache Hit Rate",
    "cacheRate": "Cache Rate",
    "cacheRateDesc": "of total requests",
    "cachedTokens": "Cached Tokens",
    "cacheCreationTokens": "Cache Creation Tokens",
    "cacheMetrics": "Prompt Cache Metrics",
    "withCacheControl": "With Cache Control",
    "cachedTokensRead": "Cached Tokens (Read)",
    "cacheCreationWrite": "Cache Creation (Write)",
    "cacheReuseRatio": "Cache Reuse Ratio",
    "cacheReuseRatioDesc": "Cached tokens / Total input tokens",
    "estCostSaved": "Est. Cost Saved",
    "lastUpdated": "Last updated",
    "hoursTracked": "hours tracked",
    "busiestHour": "Busiest Hour",
    "peakCacheRate": "Peak Cache Rate",
    "trendHour": "Hour",
    "activityVolume": "Activity",
    "requestsShort": "reqs",
    "inputShort": "In",
    "cachedShort": "Cached",
    "writeShort": "Write",
    "resetting": "Resetting...",
    "resetMetrics": "Reset Metrics",
    "byProvider": "Breakdown by Provider",
    "providerCacheRateDesc": "Each provider exposes total input tokens, cache read tokens, and cache write tokens so you can verify the reuse ratio against raw totals.",
    "provider": "Provider",
    "requests": "Requests",
    "inputTokens": "Input Tokens",
    "cachedTokensCol": "Cached",
    "cacheCreation": "Creation",
    "trend24h": "Cache Trend (24h)",
    "peakCached": "Peak cached",
    "cached": "Cached",
    "overview": "Overview",
    "tableProvider": "__MISSING__:Provider",
    "tableModel": "__MISSING__:Model",
    "performanceTitle": "__MISSING__:Performance",
    "semanticCacheSectionDesc": "OmniRoute's own deterministic response cache. When enabled, repeated non-streaming temperature=0 requests can be served locally without hitting the upstream provider.",
    "semanticCacheDisabledDesc": "Semantic cache is disabled. OmniRoute will skip local response reuse until you turn it back on in Settings.",
    "semanticEntriesDesc": "Persisted semantic cache records currently stored in SQLite. Provider-side prompt cache activity is not listed here.",
    "searchEntries": "Search entries...",
    "search": "Search",
    "loading": "Loading...",
    "entriesLoadError": "Failed to load semantic cache entries.",
    "noEntries": "No cache entries found",
    "noPromptCacheData": "No provider-side prompt cache activity has been recorded yet.",
    "noTrendData": "No prompt cache activity has been recorded over the last 24 hours.",
    "signature": "Signature",
    "model": "Model",
    "created": "Created",
    "expires": "Expires",
    "actions": "Actions",
    "deduplicatedRequests": "Deduplicated Requests",
    "savedCalls": "Saved API Calls",
    "totalProcessed": "Total Requests Processed",
    "disabled": "Disabled",
    "totalRequests": "Total Requests",
    "reasoningCache": "Main Semula Penaakulan",
    "reasoningCacheDesc": "Mengekalkan pemikiran model untuk aliran panggilan alat berbilang pusingan",
    "reasoningEntries": "Penyertaan Aktif",
    "reasoningReplayRate": "Kadar Main Semula",
    "reasoningReplays": "Jumlah Tayangan Ulang",
    "reasoningCharsCached": "Aksara Dicache",
    "reasoningMisses": "Cache Rindu",
    "reasoningByProvider": "Oleh Pembekal",
    "reasoningByModel": "Mengikut Model",
    "reasoningRecentEntries": "Entri Terkini",
    "reasoningToolCallId": "ID Panggilan Alat",
    "reasoningChars": "Watak",
    "reasoningAge": "Umur",
    "reasoningView": "Lihat",
    "reasoningDetail": "Kandungan Penaakulan",
    "reasoningBehavior": "Tingkah laku",
    "reasoningBehaviorCapture": "Menangkap reasoning_content daripada penstriman respons",
    "reasoningBehaviorReplay": "Menyuntik semula pada giliran seterusnya apabila pelanggan meninggalkannya",
    "reasoningBehaviorFallback": "Diutamakan ingatan dengan sandaran SQLite untuk pemulihan ranap sistem",
    "reasoningBehaviorTtl": "TTL: 2 jam | Kemasukan maksimum: 2,000 (memori)",
    "reasoningBehaviorModels": "Disokong: DeepSeek, Kimi, Qwen-Thinking, GLM",
    "reasoningClearAll": "Kosongkan Cache Penaakulan",
    "reasoningClearSuccess": "Mengosongkan {count} entri cache alasan",
    "reasoningClearError": "Gagal mengosongkan cache penaakulan",
    "reasoningNoData": "Tiada entri penaakulan dicache lagi. Entri muncul apabila model berfikir menggunakan panggilan alat.",
    "cachePerformanceRetry": "Cuba semula",
    "cachePerformanceHitRate": "Kadar Hit",
    "cachePerformanceAvgLatency": "Purata Latensi (ms)",
    "cachePerformanceP95Latency": "p95 Latensi (ms)",
    "retry": "Cuba semula",
    "reasoningAvgChars": "Purata Aksara",
    "tableShare": "__MISSING__:Share",
    "justNow": "__MISSING__:just now",
    "minutesAgo": "__MISSING__:{minutes}m ago",
    "hoursAgo": "__MISSING__:{hours}h ago",
    "daysAgo": "__MISSING__:{days}d ago",
    "entries": "Entries"
  },
  "proxyConfigModal": {
    "levelGlobal": "Global",
    "levelProvider": "Pembekal",
    "levelCombo": "Kombo",
    "levelKey": "kunci",
    "levelDirect": "Langsung (tiada proksi)",
    "titleGlobal": "Konfigurasi Proksi Global",
    "titleLevel": "{level} Proksi — {label}",
    "loading": "Memuatkan konfigurasi proksi...",
    "inheritingFrom": "Mewarisi daripada",
    "source": "Sumber",
    "savedProxy": "Proksi Disimpan",
    "custom": "Adat",
    "selectSavedProxyPlaceholder": "Pilih proksi yang disimpan...",
    "proxyType": "Jenis Proksi",
    "host": "hos",
    "hostPlaceholder": "1.2.3.4 atau proxy.example.com",
    "port": "Pelabuhan",
    "authOptional": "Pengesahan (pilihan)",
    "username": "Nama pengguna",
    "usernamePlaceholder": "Nama pengguna",
    "password": "Kata laluan",
    "passwordPlaceholder": "Kata laluan",
    "connected": "Bersambung",
    "ip": "IP:",
    "connectionFailed": "Sambungan gagal",
    "testConnection": "Uji sambungan",
    "clear": "Jelas",
    "cancel": "Batal",
    "save": "Jimat",
    "errorSelectSavedProxy": "Sila pilih proksi yang disimpan dahulu.",
    "errorSelectProxyFirst": "Sila pilih proksi dahulu.",
    "errorProxyNotFound": "Proksi yang dipilih tidak ditemui.",
    "errorClearSavedProxy": "Gagal mengosongkan proksi yang disimpan",
    "errorSaveProxy": "Gagal menyimpan konfigurasi proksi",
    "errorClearProxy": "Gagal mengosongkan konfigurasi proksi",
    "errorSocks5Hidden": "SOCKS5 dikonfigurasikan tetapi tersembunyi kerana NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false."
  },
  "oauthModal": {
    "title": "Sambungkan {providerName}",
    "waiting": "Menunggu kebenaran",
    "completeAuthInPopup": "Lengkapkan kebenaran dalam pop timbul.",
    "popupClosedHint": "Jika pop timbul ditutup tanpa mengubah hala semula (cth. Qoder), dialog ini akan bertukar secara automatik kepada mod kemasukan URL manual.",
    "popupBlocked": "Pop timbul disekat? Masukkan URL secara manual",
    "deviceCodeVisitUrl": "Lawati URL di bawah dan masukkan kod:",
    "deviceCodeVerificationUrl": "URL pengesahan",
    "deviceCodeYourCode": "Kod anda",
    "deviceCodeWaiting": "Menunggu kebenaran...",
    "googleOAuthWarning": "Akses jauh + Google OAuth: Bukti kelayakan lalai hanya menerima ubah hala ke <code>localhost</code>. Selepas memberi kebenaran, penyemak imbas anda akan cuba membuka <code>localhost</code> — salin URL penuh itu dan tampalkannya di bawah. Untuk penggunaan jauh sepenuhnya tanpa langkah manual ini, <a>konfigurasikan bukti kelayakan OAuth anda sendiri</a>.",
    "remoteAccessInfo": "Akses jauh: Memandangkan anda mengakses OmniRoute dari jauh, selepas kebenaran anda akan melihat halaman ralat (localhost tidak ditemui). Ini adalah perkara biasa — hanya salin URL penuh daripada bar alamat penyemak imbas anda dan tampalkannya di bawah.",
    "step1OpenUrl": "Langkah 1: Buka URL ini dalam penyemak imbas anda",
    "copy": "salin",
    "step2PasteCallback": "Langkah 2: Tampal URL panggil balik atau kod kebenaran di sini",
    "step2Hint": "Selepas kebenaran, tampal URL panggilan balik penuh. Untuk Claude Code dan Cline, anda juga boleh menampal kod pengesahan secara terus, mis. <code>code#state</code>.",
    "connect": "Sambung",
    "cancel": "Batal",
    "success": "Sambungan berjaya!",
    "successMessage": "Akaun {providerName} anda telah disambungkan.",
    "done": "Selesai",
    "error": "Sambungan gagal",
    "tryAgain": "Cuba lagi"
  },
  "cursorAuthModal": {
    "title": "Sambungkan IDE Kursor",
    "autoDetecting": "Token pengesan automatik...",
    "readingFromCursor": "Membaca daripada Cursor IDE atau cursor-agent",
    "tokensAutoDetected": "Token berjaya dikesan secara automatik daripada Cursor IDE!",
    "cursorNotDetected": "IDE kursor tidak dikesan. Sila tampal token anda secara manual.",
    "accessToken": "Token Akses",
    "required": "*",
    "accessTokenPlaceholder": "Token akses akan diisi secara automatik...",
    "machineId": "ID mesin",
    "optional": "(pilihan)",
    "machineIdPlaceholder": "ID mesin akan diisi secara automatik...",
    "importing": "Mengimport...",
    "importToken": "Import Token",
    "cancel": "Batal",
    "errorAutoDetect": "Tidak dapat mengesan token secara automatik",
    "errorAutoDetectFailed": "Autokesan token gagal",
    "errorEnterToken": "Sila masukkan token akses",
    "errorImportFailed": "Import gagal"
  },
  "pricingModal": {
    "title": "Konfigurasi Harga",
    "loading": "Memuatkan data harga...",
    "pricingRatesFormat": "Format Kadar Harga",
    "ratesDescription": "Semua kadar adalah dalam <strong>dolar per juta token</strong> ($/1M token). Contoh: Kadar input 2.50 bermakna $2.50 setiap 1,000,000 token input.",
    "model": "Model",
    "input": "Input",
    "output": "Keluaran",
    "cached": "Dicache",
    "reasoning": "Penaakulan",
    "cacheCreation": "Penciptaan Cache",
    "noPricingData": "Tiada data harga tersedia",
    "resetToDefaults": "Tetapkan semula kepada lalai",
    "cancel": "Batal",
    "saving": "Menyimpan...",
    "saveChanges": "Simpan perubahan",
    "resetConfirm": "Tetapkan semula semua harga kepada lalai? Ini tidak boleh dibuat asal.",
    "errorSaveFailed": "Gagal menyimpan harga",
    "errorResetFailed": "Gagal menetapkan semula harga"
  },
  "proxyRegistry": {
    "title": "Title",
    "description": "Description",
    "importLegacy": "Import Legacy",
    "bulkAssign": "Bulk Assign",
    "addProxy": "Add Proxy",
    "loading": "Loading",
    "noProxies": "No Proxies",
    "tableName": "Table Name",
    "tableEndpoint": "Table Endpoint",
    "tableStatus": "Table Status",
    "tableHealth": "Table Health",
    "tableUsage": "Table Usage",
    "tableActions": "Table Actions",
    "test": "Test",
    "edit": "Edit",
    "delete": "Delete",
    "modalCreateTitle": "Modal Create Title",
    "modalEditTitle": "Modal Edit Title",
    "labelName": "Label Name",
    "labelType": "taip",
    "labelHost": "hos",
    "labelPort": "Pelabuhan",
    "labelUsername": "Nama pengguna",
    "labelPassword": "Kata laluan",
    "labelRegion": "Wilayah",
    "labelStatus": "Status",
    "labelNotes": "Nota",
    "usernamePlaceholderEdit": "Biarkan kosong untuk mengekalkan nama pengguna semasa",
    "passwordPlaceholderEdit": "Biarkan kosong untuk mengekalkan kata laluan semasa",
    "statusActive": "Aktif",
    "statusInactive": "Tidak aktif",
    "cancel": "Batal",
    "save": "Jimat",
    "bulkModalTitle": "Tugasan Proksi Pukal",
    "bulkLabelScope": "Skop",
    "bulkLabelProxy": "proksi",
    "bulkClearAssignment": "(Kosongkan tugasan)",
    "bulkLabelScopeIds": "ID Skop (dipisahkan koma atau baris baharu)",
    "bulkScopeIdsPlaceholder": "provider-openai,provider-anthropic",
    "bulkApply": "Mohon",
    "labelScope": "__MISSING__:Scope",
    "labelProxy": "__MISSING__:Proxy",
    "scopeGlobal": "__MISSING__:global",
    "scopeProvider": "__MISSING__:provider",
    "scopeAccount": "__MISSING__:account",
    "scopeCombo": "__MISSING__:combo",
    "bulkImportErrorMissingName": "Tiada NAME",
    "bulkImportErrorMissingHost": "Tiada HOST",
    "bulkImportErrorInvalidPort": "PORT tidak sah (mestilah 1-65535)",
    "bulkImportErrorInvalidType": "JENIS tidak sah (gunakan http, https atau socks5)",
    "bulkImportErrorInvalidStatus": "STATUS tidak sah (gunakan aktif atau tidak aktif)",
    "errorLoadFailed": "Error Load Failed",
    "errorNameHostRequired": "Error Name Host Required",
    "errorSaveFailed": "Error Save Failed",
    "errorDeleteFailed": "Error Delete Failed",
    "errorForceDeleteConfirm": "Error Force Delete Confirm",
    "errorMigrateFailed": "Error Migrate Failed",
    "errorBulkFailed": "Error Bulk Failed",
    "success": "✓",
    "failure": "✗",
    "failed": "Failed",
    "successRate": "{rate}% kejayaan",
    "avgLatency": "{latency}ms purata",
    "assignmentsCount": "{count} tugasan",
    "noData": "No Data",
    "testSuccess": "✓ {ip}",
    "testLatency": "{latency}ms",
    "testFailure": "✗ {error}",
    "bulkImport": "Import Pukal",
    "bulkImportTitle": "Proksi Import Pukal",
    "bulkImportDescription": "Tampal profil proksi menggunakan format sempadan paip. Satu proksi setiap baris. Proksi sedia ada (hos + port yang sama) akan dikemas kini.",
    "bulkImportParse": "Menghuraikan",
    "bulkImportImport": "Import {count} Proksi",
    "bulkImportImporting": "Mengimport...",
    "bulkImportParsed": "{count} proksi dihuraikan",
    "bulkImportSkipped": "{count} baris dilangkau",
    "bulkImportParseErrors": "{count} ralat",
    "bulkImportNoValidEntries": "Tiada entri yang sah ditemui. Semak format dan cuba lagi.",
    "bulkImportSuccess": "Import selesai: {created} dibuat, {updated} dikemas kini, {failed} gagal",
    "bulkImportErrorLine": "Baris {line}: {reason}",
    "bulkImportMaxExceeded": "Maksimum 100 proksi setiap import",
    "bulkImportPreview": "Pratonton",
    "clearAssignment": "(tugasan yang jelas)",
    "bulkProxyAssignment": "Tugasan Proksi Pukal"
  },
  "playground": {
    "title": "Title",
    "description": "Description",
    "endpoint": "Endpoint",
    "provider": "Provider",
    "model": "Model",
    "accountKey": "Account Key",
    "autoAccounts": "Auto ({count} akaun)",
    "noAccounts": "No Accounts",
    "send": "Send",
    "cancel": "Cancel",
    "audioFile": "Audio File",
    "attachImages": "Attach Images",
    "multipartFormData": "Multipart Form Data",
    "upToImages": "Up To Images",
    "selectAudioFile": "Select Audio File",
    "clearAll": "Clear All",
    "request": "Request",
    "response": "Response",
    "transcription": "Transcription",
    "copy": "Copy",
    "resetToDefault": "Reset To Default",
    "downloadAudio": "Download Audio",
    "copyText": "Copy Text",
    "transcriptionHint": "Transcription Hint",
    "imagesGenerated": "Imej {count} dihasilkan",
    "generatedImage": "Imej yang dihasilkan {index}",
    "save": "Save",
    "endpointOptions": {
      "chat": "Chat",
      "responses": "Responses",
      "images": "Images",
      "embeddings": "Embeddings",
      "speech": "Speech",
      "transcription": "Transcription",
      "video": "Video",
      "music": "Music",
      "rerank": "Rerank",
      "search": "Search"
    },
    "conversationalChat": "Sembang Perbualan",
    "clearChat": "Kosongkan sembang",
    "typeMessagePlaceholder": "Taip mesej... (Shift+Enter untuk baris baharu)",
    "tabChat": "Chat",
    "tabCompare": "Compare",
    "tabApi": "API",
    "tabBuild": "Build",
    "configPane": "Config",
    "systemPrompt": "System prompt",
    "systemPromptPlaceholder": "You are a helpful assistant.",
    "modelPlaceholder": "e.g. openai/gpt-4o",
    "endpointLabel": "Endpoint",
    "parametersLabel": "Parameters",
    "collapseConfig": "Collapse config pane",
    "expandConfig": "Expand config pane",
    "temperature": "Temperature",
    "maxTokens": "Max tokens",
    "topP": "Top-p",
    "presencePenalty": "Presence penalty",
    "frequencyPenalty": "Frequency penalty",
    "seedPlaceholder": "Random (leave empty)",
    "presetsLabel": "Presets",
    "loadPreset": "Load preset",
    "savePreset": "Save preset",
    "noPresets": "No presets",
    "presetNamePlaceholder": "Preset name",
    "savingPreset": "Saving…",
    "nameRequired": "Name is required",
    "failedToSavePreset": "Failed to save preset",
    "improvePrompt": "Improve prompt",
    "improvingPrompt": "Improving…",
    "improvePromptTitle": "Improve your prompt with AI",
    "setModelFirst": "Set a model first",
    "improveQuotaWarning": "This will consume quota from the model configured in Config.",
    "improveConfirm": "Improve",
    "exportCode": "Export code",
    "exportCodeTitle": "Export Code",
    "noStateToExport": "No playground state available to export.",
    "copyCode": "Copy",
    "copiedCode": "Copied!",
    "addModel": "+ Add model",
    "runAll": "Run all",
    "cancelAll": "Cancel all",
    "maxColumnsReached": "Maximum {max} columns",
    "modelPlaceholderCompare": "Model (Cmd+K)…",
    "ttft": "TTFT",
    "tps": "TPS",
    "metricsDisclaimer": "client-side estimate",
    "tokensLabel": "Tokens",
    "costLabel": "Cost",
    "costEstimated": "(estimated)",
    "toolsLabel": "Tools",
    "addTool": "Add tool",
    "toolNamePlaceholder": "Function name",
    "toolDescPlaceholder": "Description (optional)",
    "toolParamsInvalid": "Parameters must be valid JSON",
    "structuredOutputLabel": "Structured Output",
    "enableJsonMode": "Enable JSON mode",
    "disableJsonMode": "Disable JSON mode",
    "invalidJson": "Invalid JSON",
    "running": "Running…",
    "runLabel": "Run",
    "enterToolResult": "Enter tool result…"
  },
  "miniPlayground": {
    "endpoint": "__MISSING__:Endpoint",
    "apiKey": "__MISSING__:API Key",
    "model": "__MISSING__:Model",
    "voice": "__MISSING__:Voice",
    "speed": "__MISSING__:Speed",
    "input": "__MISSING__:Input",
    "url": "__MISSING__:URL",
    "format": "__MISSING__:Format",
    "depth": "__MISSING__:Depth",
    "copyCurl": "__MISSING__:Copy cURL",
    "copied": "__MISSING__:Copied!",
    "run": "__MISSING__:Run",
    "running": "__MISSING__:Running...",
    "response": "__MISSING__:Response",
    "tunnel": "__MISSING__:Tunnel",
    "send": "__MISSING__:Send",
    "selectKey": "__MISSING__:Select key",
    "testLabel": "__MISSING__:Test",
    "expandTest": "__MISSING__:Expand test",
    "collapseTest": "__MISSING__:Collapse test",
    "revealKey": "__MISSING__:Reveal key",
    "hideKey": "__MISSING__:Hide key",
    "download": "__MISSING__:Download",
    "play": "__MISSING__:Play",
    "query": "__MISSING__:Query",
    "numResults": "__MISSING__:Max results",
    "prompt": "__MISSING__:Prompt",
    "size": "__MISSING__:Size",
    "duration": "__MISSING__:Duration",
    "question": "__MISSING__:Question",
    "audioFile": "__MISSING__:Audio file",
    "noKeysFound": "__MISSING__:No API keys found. Add one in the Keys section.",
    "exampleLabel": "__MISSING__:Example",
    "latency": "__MISSING__:{ms}ms",
    "statsLine": "__MISSING__:{ms}ms · {tokensIn} in / {tokensOut} out tokens"
  },
  "requestLogger": {
    "recording": "Recording",
    "paused": "Paused",
    "pipelineLogsOn": "Pipeline logs on",
    "pipelineLogsOff": "Pipeline logs off",
    "updatingPipelineLogs": "Updating pipeline logs...",
    "updatePipelineFailed": "Failed to update pipeline logging",
    "capturePipeline": "Capture pipeline payloads for new requests",
    "searchPlaceholder": "Search models, providers, accounts, API keys, combos...",
    "allProviders": "All providers",
    "allModels": "All models",
    "allAccounts": "All accounts",
    "allApiKeys": "All API keys",
    "total": "Total",
    "ok": "Success",
    "err": "Error",
    "combo": "Combo",
    "keys": "Keys",
    "shown": "Shown",
    "sortNewest": "Newest",
    "sortOldest": "Oldest",
    "sortTokensDesc": "Tokens ↓",
    "sortTokensAsc": "Tokens ↑",
    "sortDurationDesc": "Duration ↓",
    "sortDurationAsc": "Duration ↑",
    "sortStatusDesc": "Status ↓",
    "sortStatusAsc": "Status ↑",
    "sortModelAsc": "Model A-Z",
    "sortModelDesc": "Model Z-A",
    "sortLogs": "Sort logs",
    "refresh": "Refresh",
    "columnsLabel": "Columns",
    "cacheSem": "SEM",
    "cacheUp": "UP",
    "semantic": "Semantic",
    "upstream": "Upstream",
    "semanticCacheHit": "Semantic cache hit (served by OmniRoute)",
    "upstreamResponse": "Upstream provider response",
    "noApiKey": "No API key",
    "requestedRoutedTitle": "Requested {requested}, routed as {routed}",
    "statusFilters": {
      "all": "All",
      "error": "Errors",
      "success": "Success",
      "combo": "Combo"
    },
    "columns": {
      "status": "Status",
      "cacheSource": "Cache Source",
      "model": "Model",
      "requested": "Requested",
      "provider": "Provider",
      "protocol": "Request Protocol",
      "account": "Account",
      "apiKey": "API Key",
      "combo": "Combo",
      "tokens": "Tokens",
      "compressed": "Mampatan",
      "tps": "TPS",
      "duration": "Duration",
      "time": "Time"
    },
    "loadingLogs": "Loading logs...",
    "noLogs": "No logs yet. Make some API calls to see them here.",
    "noMatchingLogs": "No logs matching current filters.",
    "callLogsInfo": "Call logs are also saved as JSON files to {dataDir} and rotated based on {retentionDays} and {maxEntries}."
  },
  "proxyLogger": {
    "filterAll": "All",
    "filterErrors": "Errors",
    "filterSuccess": "Success",
    "filterTimeout": "Timeout",
    "colStatus": "Status",
    "colProxy": "Proxy",
    "colTls": "TLS",
    "colType": "Type",
    "colLevel": "Level",
    "colProvider": "Provider",
    "colTarget": "Target",
    "colLatency": "Latency",
    "colClientIp": "Client IP",
    "colTime": "Time",
    "recording": "Recording",
    "paused": "Paused",
    "searchPlaceholder": "Search host, provider, target, IP...",
    "allTypes": "All Types",
    "allLevels": "All Levels",
    "allProviders": "All Providers",
    "total": "total",
    "ok": "OK",
    "err": "ERR",
    "timeoutShort": "TMO",
    "direct": "direct",
    "newest": "Newest",
    "oldest": "Oldest",
    "latencyDesc": "Latency ↓",
    "latencyAsc": "Latency ↑",
    "refresh": "Refresh",
    "columns": "Columns",
    "loadingProxyLogs": "Loading proxy logs...",
    "noProxyLogs": "No proxy logs yet. Configure proxies and make API calls to see them here.",
    "noMatchingLogs": "No logs match the current filters.",
    "tlsFingerprint": "Chrome 124 TLS Fingerprint"
  },
  "endpointOptions": {
    "speech": "Speech",
    "search": "Search",
    "images": "Images",
    "chat": "Chat",
    "music": "Music",
    "responses": "Responses",
    "rerank": "Rerank",
    "video": "Video",
    "embeddings": "Embeddings",
    "transcription": "Transcription"
  },
  "toolDescriptions": {
    "cline": "Cline",
    "openclaw": "Openclaw",
    "droid": "Droid",
    "codex": "Codex",
    "claude": "Claude",
    "kilo": "Kilo"
  },
  "runtime": {
    "title": "Runtime",
    "description": "Realtime observability — 3-layer resilience + sessions + quota alerts",
    "pause": "Pause",
    "resume": "Resume",
    "refreshNow": "Refresh now",
    "kpiSessions": "Sessions",
    "kpiCircuits": "Circuits",
    "kpiCooldowns": "Cooldowns",
    "kpiLockouts": "Lockouts",
    "hintStickyBound": "{count} sticky-bound",
    "hintRecovering": "{count} recovering",
    "hintAllHealthy": "all healthy",
    "hintOpen": "open",
    "hintConnsCooling": "connections cooling",
    "hintModelsBlocked": "models blocked",
    "resilienceTitle": "3-Layer Resilience",
    "resilienceSubtitle": "Mirrors the documented resilience model",
    "providersHealthy": "{percent}% providers healthy",
    "layer": "Layer {n}",
    "layer1Title": "Provider Circuit Breakers",
    "layer1Desc": "Stop traffic to providers failing at the upstream level",
    "layer2Title": "Connection Cooldowns",
    "layer2Desc": "Skip one bad account/key; other connections keep serving",
    "layer3Title": "Model Lockouts",
    "layer3Desc": "Per-model rate-limit locks; same connection still serves other models",
    "badgeAffectedOf": "{affected} of {total} affected",
    "badgeCooling": "{count} cooling",
    "badgeLocked": "{count} locked",
    "emptyCircuits": "No circuit breakers active yet",
    "emptyCooldowns": "No connection cooldowns active",
    "emptyLockouts": "No model lockouts",
    "moreCooldowns": "+{count} more cooldowns",
    "moreLockouts": "+{count} more lockouts",
    "feedTitle": "Live Feed",
    "feedSubtitle": "Last {count} events",
    "feedFilterAll": "All",
    "feedFilterCircuits": "Circuits",
    "feedFilterCooldowns": "Cooldowns",
    "feedFilterLockouts": "Lockouts",
    "feedFilterSessions": "Sessions",
    "feedFilterQuotas": "Quotas",
    "feedClear": "Clear",
    "feedEmptyWaiting": "Waiting for events... (polled every 5s)",
    "feedEmptyFiltered": "No events match this filter",
    "sessionsTitle": "Active Sessions",
    "sessionsSubtitle": "Sticky-bound request fingerprints (live)",
    "sessionsActive": "{count} active",
    "sessionsEmptyTitle": "No active sessions",
    "sessionsEmptyHint": "Sessions appear as requests flow through the proxy",
    "tblSession": "Session",
    "tblAge": "Age",
    "tblIdle": "Idle",
    "tblReqs": "Reqs",
    "tblBoundTo": "Bound to",
    "topApiKeys": "Top API keys",
    "quotaMonitorsTitle": "Quota Monitors",
    "quotaMonitorsSubtitle": "Live quota state per account window",
    "openQuota": "Open Quota",
    "allQuotasHealthy": "All quotas healthy",
    "statusExhausted": "EXHAUSTED",
    "statusAlerting": "ALERTING",
    "statusError": "ERROR",
    "moreSuffix": "+{count} more"
  },
  "quotaShare": {
    "title": "Quota Sharing",
    "description": "Share provider quotas across API keys with % limits",
    "newPool": "New pool",
    "betaTitle": "Beta — UI preview.",
    "betaDescription": "Configuration is saved in localStorage (not yet persisted on the server). Per-request cap enforcement is not yet wired into the proxy pipeline. This screen lets you design and visualize the quota split; real enforcement will land in a future iteration with DB persistence and upstream call interception.",
    "kpiActivePools": "Active pools",
    "kpiKeysAllocated": "Keys allocated",
    "kpiAvgUnallocated": "Avg unallocated",
    "kpiProvidersWithQuota": "Providers w/ quota",
    "emptyTitle": "No pools configured",
    "emptyDescription": "Create a pool to assign API keys to share a provider's quota window with % allocations.",
    "loading": "Loading…",
    "removePool": "Remove pool",
    "removeConfirm": "Remove this pool?",
    "pool": "Pool",
    "used": "used",
    "allocationsCount": "Allocations ({count})",
    "allocatedFree": "{allocated}% allocated · {free}% free",
    "noAllocations": "No keys allocated yet",
    "capLabel": "cap {value}",
    "notTrackedYet": "(not tracked yet)",
    "policy": "Policy",
    "policyHard": "hard",
    "policySoft": "soft",
    "policyBurst": "burst",
    "policyHardHint": "Block when key exhausts allocation",
    "policySoftHint": "Allow overflow, alert only",
    "policyBurstHint": "Allow burst into free pool",
    "editAllocations": "Edit allocations",
    "newPoolTitle": "New quota pool",
    "providerConnection": "Provider connection (account)",
    "selectConnection": "Select a connection…",
    "noEligibleConnections": "No connections with quota data. Refresh from /dashboard/quota first.",
    "quotaWindow": "Quota window",
    "selectWindow": "Select a window…",
    "alreadyUsedSuffix": "(already used)",
    "windowReset": "Reset",
    "duplicatePoolError": "A pool for this connection + window already exists",
    "cancel": "Cancel",
    "createPool": "Create pool",
    "editTitle": "Edit allocations",
    "noKeysAdded": "No keys allocated. Add one below.",
    "totalLabel": "Total: {percent}%",
    "totalExceeded": "⚠ exceeds 100%",
    "addKey": "+ Add key…",
    "equalSplit": "Equal split",
    "save": "Save allocations",
    "betaPreviewLabel": "Beta — pratonton UI.",
    "betaConfigSavedPrefix": "Konfigurasi disimpan dalam",
    "betaConfigSavedSuffix": "(belum berterusan pada pelayan). Penguatkuasaan had setiap permintaan belum disambungkan ke saluran paip proksi. Skrin ini membolehkan anda mereka bentuk dan menggambarkan pembahagian kuota; penguatkuasaan sebenar akan tiba dalam lelaran masa depan dengan kegigihan DB dan pemintasan panggilan huluan.",
    "policyLabel": "Dasar:",
    "resetIn": "set semula masuk",
    "quotaTotal": "jumlah"
  },
  "plugins": {
    "title": "Plugins",
    "description": "Install and manage plugins for extending OmniRoute functionality",
    "loading": "Loading plugins...",
    "scanning": "Scanning...",
    "scanForPlugins": "Scan for Plugins",
    "noPlugins": "No plugins installed",
    "noPluginsDescription": "Place plugin directories in ~/.omniroute/plugins/ and click Scan.",
    "activate": "Activate",
    "deactivate": "Deactivate",
    "uninstall": "Uninstall",
    "uninstallConfirm": "Uninstall plugin \"{name}\"?",
    "pluginScanComplete": "Plugin scan complete",
    "pluginScanFailed": "Plugin scan failed",
    "activated": "{name} activated",
    "deactivated": "{name} deactivated",
    "activateFailed": "Failed to activate {name}",
    "deactivateFailed": "Failed to deactivate {name}",
    "uninstalled": "{name} uninstalled",
    "uninstallFailed": "Failed to uninstall {name}",
    "configure": "Configure: {name}",
    "configurePlugin": "Configure",
    "noConfigSettings": "This plugin has no configurable settings.",
    "saving": "Saving...",
    "saveConfiguration": "Save Configuration",
    "configurationSaved": "Configuration saved",
    "saveConfigurationFailed": "Failed to save configuration",
    "pluginNotFound": "Plugin not found",
    "version": "Version",
    "author": "Author",
    "description_label": "Description",
    "status": "Status",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "hooks": "Hooks"
  }
}
