{
  "common": {
    "save": "Simpan",
    "cancel": "Batalkan",
    "delete": "Hapus",
    "loading": "Memuat...",
    "error": "Terjadi kesalahan",
    "success": "Sukses",
    "confirm": "Apakah kamu yakin?",
    "refresh": "Segarkan",
    "close": "Tutup",
    "add": "Tambahkan",
    "edit": "Sunting",
    "search": "Cari",
    "back": "Kembali",
    "next": "Selanjutnya",
    "submit": "Kirim",
    "reset": "Setel ulang",
    "copy": "Salin",
    "copied": "Disalin!",
    "enabled": "Diaktifkan",
    "disabled": "Dengan disabilitas",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "noData": "Tidak ada data yang tersedia",
    "nothingHere": "Nothing here yet",
    "configure": "Konfigurasikan",
    "manage": "Kelola",
    "name": "Nama",
    "actions": "Tindakan",
    "status": "Status",
    "type": "Ketik",
    "model": "Model",
    "models": "model",
    "provider": "Penyedia",
    "account": "Akun",
    "time": "Waktu",
    "details": "Detail",
    "created": "Dibuat",
    "lastUsed": "Last Refreshed",
    "loadMore": "Muat Lebih Banyak",
    "noResults": "Tidak ada hasil yang ditemukan",
    "reloadPage": "Muat Ulang Halaman",
    "connected": "Terhubung",
    "disconnected": "Terputus",
    "notConfigured": "Tidak dikonfigurasi",
    "testConnection": "Uji Koneksi",
    "enable": "Aktifkan",
    "disable": "Nonaktifkan",
    "columns": "Kolom",
    "newest": "Terbaru",
    "oldest": "Tertua",
    "all": "Semua",
    "none": "Tidak ada",
    "yes": "Ya",
    "no": "Tidak",
    "on": "__MISSING__:ON",
    "off": "__MISSING__:OFF",
    "warning": "Peringatan",
    "note": "Catatan",
    "free": "Gratis",
    "skipToContent": "Lewati ke konten",
    "maintenanceServerIssues": "Server is experiencing issues. Some features may be unavailable.",
    "maintenanceServerUnreachable": "Server is unreachable. Reconnecting...",
    "accept": "accept",
    "accountId": "accountId",
    "alias": "alias",
    "apiKeyId": "apiKeyId",
    "apiKeyName": "apiKeyName",
    "apiKeySecret": "apiKeySecret",
    "authorization": "authorization",
    "content-type": "content-type",
    "content-length": "content-length",
    "cookie": "cookie",
    "file": "file",
    "host": "host",
    "id": "id",
    "import": "import",
    "limit": "limit",
    "offset": "offset",
    "open": "open",
    "origin": "origin",
    "promptTokens": "promptTokens",
    "completionTokens": "completionTokens",
    "totalTokens": "totalTokens",
    "rawModel": "rawModel",
    "scope": "scope",
    "skill": "skill",
    "sortBy": "sortBy",
    "sortOrder": "sortOrder",
    "tab": "tab",
    "text": "text",
    "textarea": "textarea",
    "tool": "tool",
    "toolId": "toolId",
    "web": "web",
    "whereUsed": "whereUsed",
    "whitelist": "whitelist",
    "blacklist": "blacklist",
    "resolve": "resolve",
    "force": "force",
    "base64url": "base64url",
    "hex": "hex",
    "range": "range",
    "component": "component",
    "redirect_uri": "redirect_uri",
    "idempotency-key": "idempotency-key",
    "error_description": "error_description",
    "code": "code",
    "compatible": "compatible",
    "chat-completions": "chat-completions",
    "oauth": "oauth",
    "auth_token": "auth_token",
    "crypto": "crypto",
    "hours": "hours",
    "selfsigned": "selfsigned",
    "proxy_id": "proxy_id",
    "proxyId": "proxyId",
    "connectionId": "connectionId",
    "resolveConnectionId": "resolveConnectionId",
    "resolve_connection_id": "resolve_connection_id",
    "scope_id": "scope_id",
    "scopeId": "scopeId",
    "jwtSecret": "jwtSecret",
    "keytar": "keytar",
    "better-sqlite3": "better-sqlite3",
    "undici": "undici",
    "builder-id": "builder-id",
    "musicDesc": "musicDesc",
    "musicGeneration": "musicGeneration",
    "idc": "idc",
    "cloud-status-changed": "cloud-status-changed",
    "where_used": "where_used",
    "windowMs": "windowMs",
    "social-github": "GitHub",
    "social-google": "Google",
    "TOOL_ALLOWLIST": "Daftar Alat yang Diizinkan",
    "TOOL_DENYLIST": "Daftar Penolakan Alat",
    "Failed to save pricing": "Gagal menyimpan harga",
    "Failed to reset pricing": "Gagal menyetel ulang 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": "Penyedia Agen Cloud",
    "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": "Hanya gratis",
    "addFirstProvider": "Tambahkan penyedia pertama Anda",
    "addFirstProviderDesc": "Hubungkan penyedia AI untuk memulai perutean permintaan melalui OmniRoute. Anda dapat menggunakan penyedia gratis, kunci API, atau akun OAuth.",
    "learnMore": "Pelajari 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": "Penyedia Tingkat Gratis",
    "freeTierLabel": "Tersedia tingkat gratis",
    "freeTierProvidersDesc": "Penyedia dengan tingkatan gratis — beberapa memerlukan pendaftaran kunci API, yang lain tidak memerlukan kredensial sama sekali.",
    "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": "Admin Gamifikasi",
    "monitorAnomaliesAndHealth": "Pantau anomali dan kesehatan sistem",
    "flaggedAnomalies": "Anomali yang Ditandai",
    "noAnomaliesDetected": "Tidak ada anomali yang terdeteksi",
    "apiKey": "Kunci API",
    "xpLastHour": "XP (1 jam)",
    "zScore": "Skor-Z",
    "tokensCommunityServers": "Server Komunitas",
    "tokensServerNamePlaceholder": "Nama server",
    "tokensApiKeyPlaceholder": "Kunci API",
    "tokensTokenBalance": "Saldo Token",
    "tokensSendTokens": "Kirim Token",
    "tokensRecipientApiKeyId": "ID Kunci API Penerima",
    "tokensRecipientApiKeyIdPlaceholder": "Masukkan ID kunci API penerima",
    "tokensReasonOptional": "Alasan (opsional)",
    "tokensReasonPlaceholder": "misalnya bonus, hadiah",
    "tokensTransactionHistory": "Riwayat Transaksi",
    "tokensNoTransactionsYet": "Belum ada transaksi",
    "tokensInviteCodes": "Kode Undangan",
    "tokensMaxUses": "Penggunaan Maks",
    "tokensRedeemCode": "Tukarkan Kode",
    "tokensRedeemCodePlaceholder": "Masukkan kode undangan",
    "tokensYourActiveInvites": "Undangan Aktif Anda",
    "tierCoverageTitle": "Cakupan tingkat",
    "tierCoverageSubtitle": "Penyedia dikonfigurasi per tingkat cadangan",
    "batchDetailCopyId": "Salin ID",
    "batchDetailClose": "Tutup",
    "batchDetailEndpoint": "Titik akhir",
    "batchDetailModel": "Model",
    "batchDetailWindow": "Jendela",
    "batchDetailCreated": "Dibuat",
    "providerTopologyEmpty": "Belum ada penyedia yang terhubung",
    "badgeToastUnlocked": "Lencana Tidak Terkunci!",
    "batchListSearchPlaceholder": "Telusuri berdasarkan ID, titik akhir, model…",
    "batchListDeleteAllCompletedTitle": "Hapus semua batch yang sudah selesai",
    "batchListBatchesTable": "kumpulan",
    "changelogViewerLoading": "Memuat log perubahan dari GitHub...",
    "profileLoading": "Memuat profil...",
    "profileHowToEarn": "Bagaimana cara mendapatkan penghasilan",
    "bootstrapBannerDismiss": "Singkirkan",
    "batchListDeleteBatchTitle": "Hapus batch dan file-filenya",
    "leaderboardYourRank": "Peringkat Anda",
    "leaderboardLoading": "Memuat papan peringkat...",
    "batchFileDetailCopyId": "Salin ID",
    "batchFileDetailClose": "Tutup",
    "batchFileDetailFailedToLoad": "Gagal memuat konten file",
    "batchFilesListSearchPlaceholder": "Cari berdasarkan ID atau nama file…",
    "batchFilesListFilesTable": "File",
    "batchPageLoadingMore": "Memuat lebih banyak…",
    "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": "Dasbor",
    "providers": "Penyedia",
    "combos": "kombo",
    "usage": "Penggunaan",
    "analytics": "Analisis",
    "costs": "Biaya",
    "health": "Kesehatan",
    "proxy": "Proksi",
    "limits": "Batas & Kuota",
    "cliTools": "Alat CLI",
    "media": "Media",
    "settings": "Pengaturan",
    "translator": "Penerjemah",
    "playground": "Playground",
    "searchTools": "Search Tools",
    "agents": "Agen",
    "cloudAgents": "Agen Awan",
    "memory": "Memory",
    "skills": "Skills",
    "omniSkills": "Keahlian Omni",
    "agentSkills": "Keterampilan Agen",
    "docs": "dokumen",
    "issues": "Masalah",
    "endpoints": "Endpoint",
    "endpointsSubtitle": "URL koneksi AI Anda",
    "apiManager": "Manajer API",
    "apiManagerSubtitle": "Kelola kunci dan akses API",
    "embeddedServices": "__MISSING__:Embedded Services",
    "embeddedServicesSubtitle": "__MISSING__:Manage local proxy services",
    "logs": "Log",
    "webhooks": "Webhook",
    "webhooksSubtitle": "Dapatkan pemberitahuan tentang acara",
    "combosSubtitle": "Penyedia grup untuk failover",
    "batchSubtitle": "Proses beberapa permintaan",
    "contextCavemanSubtitle": "Kompresi yang cepat",
    "contextRtkSubtitle": "Pemfilteran keluaran",
    "auditLog": "Catatan Audit",
    "shutdown": "Matikan",
    "restart": "Mulai ulang",
    "shutdownConfirm": "Matikan OmniRoute?",
    "restartConfirm": "Mulai ulang OmniRoute?",
    "version": "v{version}",
    "debug": "Men-debug",
    "system": "Sistem",
    "help": "Bantuan",
    "primarySection": "Main",
    "cliSection": "CLI",
    "debugSection": "Debug",
    "systemSection": "System",
    "helpSection": "Help",
    "serverDisconnected": "Server Terputus",
    "serverDisconnectedMsg": "Server proxy telah dihentikan atau dimulai ulang.",
    "expandSidebar": "Luaskan bilah sisi",
    "collapseSidebar": "Ciutkan bilah 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 Fitur",
    "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": "Alihkan kemampuan 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": "Webhook",
    "description": "Konfigurasikan panggilan balik HTTP untuk kejadian sistem.",
    "configuredWebhooks": "Webhook yang Dikonfigurasi",
    "configuredWebhooksDesc": "Kelola titik akhir pengiriman, acara berlangganan, status, dan pengiriman pengujian.",
    "addWebhook": "Tambahkan Webhook",
    "editWebhook": "Sunting Webhook",
    "name": "Nama",
    "namePlaceholder": "Pemantauan produksi",
    "unnamedWebhook": "Webhook tanpa nama",
    "url": "URL titik akhir",
    "events": "Acara",
    "allEvents": "Semua acara",
    "secret": "Rahasia",
    "secretPlaceholder": "Biarkan kosong untuk membuat rahasia secara otomatis",
    "secretEditPlaceholder": "Biarkan kosong untuk menjaga rahasia saat ini",
    "status": "Status",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "errored": "Salah",
    "total": "Jumlah",
    "lastTriggered": "Terakhir Dipicu",
    "actions": "Tindakan",
    "enabled": "Diaktifkan",
    "enabledDesc": "Webhook yang dinonaktifkan tetap disimpan tetapi tidak menerima pengiriman.",
    "refresh": "Segarkan",
    "loading": "Memuat webhook...",
    "never": "Tidak pernah",
    "failureCount": "{count, plural, =0 {no failures} one {# failure} other {# failures}}",
    "testWebhook": "Kirim Tes",
    "testSuccess": "Uji webhook berhasil dikirim.",
    "testFailed": "Pengujian webhook gagal.",
    "saveSuccess": "Webhook berhasil disimpan.",
    "saveFailed": "Gagal menyimpan webhook.",
    "loadFailed": "Gagal memuat webhook.",
    "delete": "Hapus",
    "deleteConfirm": "Apakah Anda yakin ingin menghapus webhook ini?",
    "deleteSuccess": "Webhook berhasil dihapus.",
    "deleteFailed": "Gagal menghapus webhook.",
    "edit": "Sunting",
    "enable": "Aktifkan",
    "disable": "Nonaktifkan",
    "noWebhooks": "Belum ada webhook yang dikonfigurasi.",
    "signatureTitle": "Tanda Tangan Webhook",
    "signatureDescription": "Setiap pengiriman menyertakan header X-Webhook-Signature yang ditandatangani dengan HMAC-SHA256 menggunakan rahasia webhook. Verifikasi tanda tangan sebelum mempercayai payload.",
    "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": "Tinjau peristiwa kepatuhan dan panggilan alat MCP dari satu tampilan operasional.",
    "complianceTab": "Kepatuhan",
    "mcpTab": "Audit MCP",
    "title": "Audit Kepatuhan",
    "description": "Kebijakan, akses, penyedia, dan peristiwa keamanan dicatat oleh log audit kepatuhan.",
    "eventType": "Jenis Acara",
    "eventTypePlaceholder": "Filter berdasarkan tindakan atau jenis peristiwa",
    "severity": "Keparahan",
    "allSeverities": "Semua tingkat keparahan",
    "info": "Informasi",
    "warning": "Peringatan",
    "critical": "Kritis",
    "sourceIp": "Sumber IP",
    "userOrKey": "Pengguna / Kunci",
    "action": "Tindakan",
    "result": "Hasil",
    "details": "Detail",
    "timestamp": "Stempel waktu",
    "from": "Dari",
    "to": "Untuk",
    "refresh": "Segarkan",
    "export": "Ekspor",
    "clearFilters": "Hapus filter",
    "loading": "Memuat peristiwa audit...",
    "showing": "Menampilkan {count} dari {total} acara",
    "policyViolation": "Pelanggaran Kebijakan",
    "accessDenied": "Akses Ditolak",
    "injectionBlocked": "Injeksi Diblokir",
    "noEvents": "Tidak ada peristiwa kepatuhan yang tercatat.",
    "failedFetch": "Gagal mengambil log audit kepatuhan.",
    "viewDetails": "Lihat detailnya",
    "closeDetails": "Tutup detailnya",
    "notAvailable": "—",
    "system": "sistem",
    "previous": "Sebelumnya",
    "next": "Selanjutnya",
    "mcpAudit": "Audit MCP",
    "mcpAuditDesc": "Entri audit panggilan alat dicatat oleh server MCP.",
    "failedFetchMcpAudit": "Gagal mengambil log audit MCP.",
    "tool": "Alat",
    "toolPlaceholder": "Filter berdasarkan nama alat",
    "duration": "Durasi",
    "apiKey": "Kunci API",
    "output": "Keluaran",
    "allResults": "Semua hasil",
    "success": "Sukses",
    "failure": "Kegagalan",
    "noMcpEvents": "Tidak ada peristiwa audit MCP yang dicatat.",
    "a2aAudit": "Audit A2A",
    "a2aAuditDesc": "Jejak audit pelaksanaan tugas dicatat oleh server A2A.",
    "a2aShowingTasks": "Menampilkan {count} dari {total} tugas",
    "a2aSkill": "Keterampilan",
    "a2aSkillPlaceholder": "Filter berdasarkan nama keterampilan",
    "a2aState": "Negara",
    "a2aAllStates": "Semua negara bagian",
    "a2aStateSubmitted": "Dikirim",
    "a2aStateWorking": "Bekerja",
    "a2aStateCompleted": "Selesai",
    "a2aStateFailed": "Gagal",
    "a2aStateCancelled": "Dibatalkan",
    "a2aTaskId": "ID Tugas",
    "a2aEvents": "Acara",
    "a2aArtifacts": "Artefak",
    "a2aNoTasks": "Tidak ada tugas A2A yang dicatat.",
    "a2aLoadingTasks": "Memuat 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": "Keluar",
    "language": "Bahasa",
    "providers": "Penyedia",
    "providerDescription": "Kelola koneksi penyedia AI Anda",
    "combos": "kombo",
    "comboDescription": "Kombo model dengan fallback",
    "usage": "Penggunaan & Analisis",
    "usageDescription": "Pantau penggunaan API Anda, konsumsi token, dan log permintaan",
    "analytics": "Analisis",
    "analyticsDescription": "Bagan, tren, dan wawasan evaluasi",
    "cliTools": "Alat CLI",
    "cliToolsDescription": "Konfigurasikan alat CLI",
    "home": "Rumah",
    "homeDescription": "Selamat datang di 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": "Pengaturan",
    "settingsDescription": "Kelola preferensi Anda",
    "openaiCompatible": "Kompatibel dengan OpenAI",
    "anthropicCompatible": "Kompatibel Antropis",
    "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 eksekusi tugas A2A, transisi status, dan catatan pemanggilan keterampilan",
    "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 Fitur",
    "featureFlagsDescription": "Kemampuan sistem kontrol dan fitur eksperimental",
    "featureFlagsActive": "{count} aktif",
    "featureFlagsInactive": "{count} tidak aktif",
    "featureFlagsOverrides": "{count} penggantian DB",
    "featureFlagsSearch": "Bendera pencarian...",
    "featureFlagsCategoryAll": "Semua",
    "featureFlagsCategorySecurity": "Keamanan",
    "featureFlagsCategoryNetwork": "Jaringan",
    "featureFlagsCategoryPolicies": "Kebijakan",
    "featureFlagsCategoryRuntime": "Waktu proses",
    "featureFlagsCategoryCli": "CLI",
    "featureFlagsCategoryHealth": "Kesehatan",
    "featureFlagsSourceDb": "DB",
    "featureFlagsSourceEnv": "ENV",
    "featureFlagsSourceDefault": "DEF",
    "featureFlagsReset": "Setel ulang",
    "featureFlagsResetAll": "Atur Ulang Semua Penggantian",
    "featureFlagsResetAllConfirm": "Apakah Anda yakin ingin menyetel ulang semua penggantian tanda fitur? Ini akan mengembalikan semua tanda ke ENV atau nilai defaultnya.",
    "featureFlagsRestartRequired": "Mulai ulang diperlukan untuk mendaftar",
    "featureFlagsNoResults": "Tidak ada tanda yang cocok dengan penelusuran Anda",
    "featureFlagsSaved": "Bendera diperbarui",
    "featureFlagsError": "Gagal memperbarui tanda",
    "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": "Mulai Cepat",
    "quickStartDesc": "Bangun dan jalankan dalam 4 langkah. Hubungkan penyedia, model rute, pantau semuanya.",
    "fullDocs": "Dokumen Lengkap",
    "step1Title": "1. Buat kunci API",
    "step1Desc": "Buka <endpoint>Endpoint</endpoint> -> Kunci Terdaftar. Hasilkan satu kunci per lingkungan.",
    "step2Title": "2. Hubungkan penyedia",
    "step2Desc": "Tambahkan akun di <providers>Providers</providers>. Mendukung OAuth, Kunci API, dan tingkatan gratis.",
    "step3Title": "3. Arahkan klien Anda",
    "step3Desc": "Tetapkan URL dasar ke {url} di klien IDE atau API Anda.",
    "step4Title": "4. Pantau & optimalkan",
    "step4Desc": "Lacak token, biaya, dan kesalahan di <logs>Log Permintaan</logs> dan <analytics>Analytics</analytics>.",
    "providersOverview": "Ikhtisar Penyedia",
    "configuredOf": "{configured} dikonfigurasi dari {total} penyedia yang tersedia",
    "noModelsAvailable": "Tidak ada model yang tersedia untuk penyedia ini.",
    "noProvidersConfigured": "Belum ada penyedia yang dikonfigurasi",
    "addProvider": "Tambahkan penyedia",
    "configureFirst": "Konfigurasikan koneksi terlebih dahulu di {providers}",
    "configureProvider": "Konfigurasikan Penyedia",
    "modelAvailable": "Model {count} tersedia",
    "modelsAvailable": "{count} model tersedia",
    "connectionsActive": "Koneksi {count} aktif",
    "connectionsActivePlural": "{count} koneksi aktif",
    "copyModelName": "Salin nama model",
    "documentation": "Dokumentasi",
    "healthMonitor": "Pemantau Kesehatan",
    "reportIssue": "Laporkan masalah",
    "activeError": "{active} aktif · kesalahan {errors}",
    "oauthLabel": "OAuth",
    "apiKeyLabel": "Kunci API",
    "requestsShort": "{count} permintaan",
    "providerModelsTitle": "{provider} - Model",
    "copiedModel": "Disalin: {model}",
    "aliasLabel": "alias",
    "updateNow": "Perbarui sekarang",
    "updating": "Memperbarui...",
    "updateAvailableDesc": "Versi baru tersedia. Klik untuk memperbarui.",
    "updateStarted": "Pembaruan dimulai...",
    "reloadingPageAutomatically": "Memuat ulang halaman secara otomatis...",
    "providerTopology": "Topologi Penyedia"
  },
  "analytics": {
    "title": "Analisis",
    "usageAnalyticsTitle": "__MISSING__:Usage Analytics",
    "diversityScoreTitle": "Keanekaragaman Penyedia",
    "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 pola penggunaan API Anda, konsumsi token, biaya, dan tren aktivitas di semua penyedia dan model.",
    "evalsDescription": "Jalankan rangkaian evaluasi untuk menguji dan memvalidasi titik akhir LLM Anda. Bandingkan kualitas model, deteksi regresi, dan latensi tolok ukur.",
    "overview": "Ikhtisar",
    "evals": "Evaluasi",
    "utilization": "Pemanfaatan",
    "utilizationDescription": "Tren penggunaan kuota penyedia dan pelacakan batas tarif",
    "modelStatus": "Status Model",
    "modelStatusCooldown": "Pendinginan",
    "modelStatusUnavailable": "Tidak tersedia",
    "modelStatusError": "Kesalahan",
    "comboHealth": "Kesehatan Kombinasi",
    "comboHealthDescription": "Kuota tingkat kombinasi, distribusi penggunaan, dan metrik kinerja",
    "compressionAnalyticsTitle": "Compression Analytics",
    "compressionAnalyticsDescription": "Compression analytics — token savings, mode breakdown, and provider stats.",
    "autoRoutingTotalAutoRequests": "Total Permintaan Otomatis",
    "autoRoutingAvgSelectionScore": "Skor Seleksi Rata-rata",
    "autoRoutingExplorationRate": "Tingkat Eksplorasi",
    "autoRoutingLkgpHitRate": "Tingkat Hit LKGP",
    "autoRoutingRequestsByVariant": "Permintaan berdasarkan Varian",
    "autoRoutingTopRoutedProviders": "Penyedia yang Dirutekan Teratas",
    "comboHealthWorstQuotaLeft": "Sisa kuota terburuk",
    "comboHealthUsageSkew": "Penggunaannya miring",
    "comboHealthSuccessRate": "Tingkat keberhasilan",
    "comboHealthQuotaHealth": "Kesehatan kuota",
    "comboHealthRequests": "Permintaan",
    "comboHealthTokens": "Token",
    "comboHealthAvgLatency": "Latensi rata-rata",
    "comboHealthTotalRequests": "Jumlah permintaan",
    "comboHealthExecutionTargets": "Target eksekusi",
    "comboHealthSuccess": "Sukses",
    "comboHealthLatency": "Latensi",
    "comboHealthQuota": "Kuota",
    "comboHealthTitle": "Kesehatan kombo",
    "comboHealthUnableToLoad": "Tidak dapat memuat kesehatan kombo",
    "comboHealthGettingStarted": "Memulai",
    "compressionAnalyticsTotalRequests": "Jumlah Permintaan",
    "compressionAnalyticsTokensSaved": "Token Tersimpan",
    "compressionAnalyticsAvgSavings": "Penghematan Rata-rata",
    "compressionAnalyticsAvgDuration": "Durasi Rata-Rata",
    "compressionAnalyticsReceipts": "Tanda terima",
    "compressionAnalyticsFallbacks": "Penggantian",
    "compressionAnalyticsPromptTokens": "Token yang cepat",
    "compressionAnalyticsCompletionTokens": "Token penyelesaian",
    "compressionAnalyticsTotalTokens": "Jumlah token",
    "compressionAnalyticsCacheTokens": "Token cache",
    "compressionAnalyticsNoDataYet": "Belum ada data kompresi",
    "searchAnalyticsTotalSearches": "Jumlah Pencarian",
    "searchAnalyticsCacheHitRate": "Tingkat Hit Cache",
    "searchAnalyticsTotalCost": "Jumlah Biaya",
    "searchAnalyticsAvgResponse": "Respon Rata-Rata",
    "searchAnalyticsNoSearchesYet": "Belum ada pencarian",
    "providerUtilizationTitle": "Pemanfaatan penyedia",
    "providerUtilizationFailedToLoad": "Gagal memuat data pemanfaatan",
    "providerUtilizationNoData": "Tidak ada data pemanfaatan yang tersedia",
    "providerUtilizationGettingStarted": "Memulai",
    "providerUtilizationLatestSnapshot": "Cuplikan kuota terbaru",
    "providerUtilizationRemainingCapacity": "Kapasitas yang tersisa"
  },
  "apiManager": {
    "title": "Kunci API",
    "createKey": "Buat Kunci API",
    "key": "Kunci",
    "revokeKey": "Cabut Kunci",
    "revokeConfirm": "Apakah Anda yakin ingin mencabut kunci API ini?",
    "noKeys": "Belum ada kunci API",
    "noKeysDesc": "Buat kunci API pertama Anda untuk mengautentikasi permintaan ke titik akhir Anda",
    "keyLabel": "Label Kunci",
    "permissions": "Izin",
    "expiresAt": "Kedaluwarsa",
    "never": "Tidak pernah",
    "revoke": "Cabut",
    "showKey": "Tampilkan Kunci",
    "hideKey": "Sembunyikan Kunci",
    "copyKey": "Salin Kunci API",
    "allModels": "Semua model",
    "selectedModels": "Model Terpilih",
    "readOnly": "Hanya Baca",
    "fullAccess": "Akses Penuh",
    "keyManagement": "Manajemen Kunci API",
    "keyManagementDesc": "Buat dan kelola kunci API untuk mengautentikasi permintaan ke titik akhir Anda",
    "totalKeys": "Jumlah Kunci",
    "restricted": "Terbatas",
    "totalRequests": "Jumlah Permintaan",
    "modelsAvailable": "Model Tersedia",
    "registeredKeys": "Kunci Terdaftar",
    "keysRegistered": "{count} kunci terdaftar",
    "keyRegistered": "Kunci {count} terdaftar",
    "keysSecurityNote": "Setiap kunci mengisolasi pelacakan penggunaan dan dapat dicabut secara independen. Kunci disamarkan setelah pembuatan demi keamanan.",
    "createFirstKey": "Buat Kunci Pertama Anda",
    "name": "Nama",
    "usage": "Penggunaan",
    "created": "Dibuat",
    "actions": "Tindakan",
    "reqs": "persyaratan",
    "neverUsed": "Tidak pernah digunakan",
    "deleteConfirm": "Hapus kunci API ini?",
    "usageTips": "Tip Penggunaan",
    "tipAuth": "Gunakan kunci API di header Otorisasi sebagai Pembawa YOUR_KEY",
    "tipSecure": "Kunci hanya ditampilkan satu kali selama pembuatan — simpanlah dengan aman",
    "tipSeparate": "Buat kunci terpisah untuk klien atau lingkungan yang berbeda",
    "tipRestrict": "Batasi kunci pada model tertentu untuk keamanan dan pengendalian biaya yang lebih baik",
    "keyName": "Nama Kunci",
    "keyNamePlaceholder": "misalnya, Kunci Produksi, Kunci Pengembangan",
    "keyNameDesc": "Pilih nama deskriptif untuk mengidentifikasi tujuan kunci ini",
    "managementAccessDesc": "Izinkan kunci API ini mengelola konfigurasi OmniRoute.",
    "selfServiceVisibility": "Visibilitas layanan mandiri",
    "selfServiceVisibilityDesc": "Kontrol apa yang dapat dilihat kunci ini tentang penggunaannya sendiri dan kuota upstream bersama.",
    "ownUsageVisibility": "Biaya dan penggunaan token sendiri",
    "ownUsageVisibilityDesc": "Izinkan kunci ini memanggil endpoint statusnya untuk melihat penggunaan USD, persen anggaran, dan total tokennya sendiri.",
    "sharedAccountQuotaVisibility": "Kuota akun bersama",
    "sharedAccountQuotaVisibilityDesc": "Izinkan kunci ini melihat kuota akun upstream bersama saat satu koneksi eksplisit dikonfigurasi.",
    "keyCreated": "Kunci API Dibuat",
    "keyCreatedSuccess": "Kunci berhasil dibuat!",
    "keyCreatedNote": "Salin dan simpan kunci ini sekarang — kunci ini tidak akan ditampilkan lagi.",
    "done": "Selesai",
    "savePermissions": "Simpan Izin",
    "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": "Izinkan Semua",
    "restrict": "Batasi",
    "allowAllInfo": "Kunci ini dapat mengakses semua model yang tersedia.",
    "restrictInfo": "Kunci ini dapat mengakses {selected} dari {total} model.",
    "selected": "{count} dipilih",
    "all": "Semua",
    "clear": "Jelas",
    "searchModels": "Cari model berdasarkan nama atau penyedia...",
    "noModelsFound": "Tidak ada model yang ditemukan",
    "keyNameRequired": "Nama kunci wajib diisi",
    "keyNameTooLong": "Nama kunci harus terdiri dari {max} karakter atau kurang",
    "keyNameInvalid": "Nama kunci hanya boleh berisi huruf, angka, spasi, tanda hubung, dan garis bawah",
    "invalidKeyName": "Nama kunci tidak valid",
    "failedCreateKey": "Gagal membuat kunci",
    "failedCreateKeyRetry": "Gagal membuat kunci. Silakan coba lagi.",
    "invalidKeyId": "ID kunci tidak valid",
    "failedDeleteKey": "Gagal menghapus kunci",
    "failedDeleteKeyRetry": "Gagal menghapus kunci. Silakan coba lagi.",
    "invalidModelsSelection": "Pemilihan model tidak valid",
    "cannotSelectMoreThanModels": "Tidak dapat memilih lebih dari {max} model",
    "failedUpdatePermissions": "Gagal memperbarui izin",
    "failedUpdatePermissionsRetry": "Gagal memperbarui izin. Silakan coba 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 izin",
    "deleteKey": "Hapus kunci",
    "regenerateKey": "Hasilkan ulang kunci",
    "regenerateConfirm": "Apakah Anda yakin ingin menghasilkan ulang kunci API ini? Kunci lama akan segera tidak berlaku.",
    "failedRegenerateKey": "Gagal menghasilkan ulang kunci API",
    "failedRegenerateKeyRetry": "Gagal menghasilkan ulang kunci API. Silakan coba lagi.",
    "model": "{count} modelnya",
    "models": "{count} model",
    "permissionsTitle": "Izin: {name}",
    "allowAllDesc": "Kunci ini dapat mengakses semua model yang tersedia.",
    "restrictDesc": "Kunci ini dapat mengakses {selectedCount} dari {totalModels} model.",
    "selectedCount": "{count} dipilih",
    "maxActiveSessions": "Sesi Aktif Maks",
    "apiManagerCustomRateLimits": "Batas Tarif Khusus",
    "apiManagerCustomRateLimitsDesc": "Ganti batas default global. Biarkan kosong untuk menggunakan default.",
    "apiManagerRateLimitRequestsPlaceholder": "Permintaan",
    "apiManagerRateLimitReqPer": "permintaan /",
    "apiManagerRateLimitSecondsPlaceholder": "Detik",
    "apiManagerRemoveLimitTitle": "Hapus batas",
    "apiManagerTimezonePlaceholder": "Amerika/Sao_Paulo",
    "noLogPayloadPrivacy": "Privasi Muatan Tanpa Log",
    "bannedStatus": "Status Terlarang",
    "managementApiAccess": "Akses API Manajemen",
    "expirationDate": "Tanggal Kedaluwarsa",
    "managementAccess": "Akses Manajemen",
    "allowedConnections": "Koneksi yang Diizinkan",
    "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": "Catatan Audit",
    "searchPlaceholder": "Tindakan pencarian...",
    "action": "Tindakan",
    "actor": "Aktor",
    "target": "Sasaran",
    "ipAddress": "Alamat IP",
    "timestamp": "Stempel waktu",
    "noEntries": "Tidak ada entri audit yang ditemukan",
    "filterByAction": "Filter berdasarkan tindakan...",
    "filterByActor": "Filter menurut aktor...",
    "filterEntriesAria": "Filter entri log audit",
    "filterByActionTypeAria": "Filter berdasarkan jenis tindakan",
    "filterByActorAria": "Filter berdasarkan aktor",
    "refreshAuditLogAria": "Segarkan log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "notAvailable": "—",
    "description": "Tindakan administratif dan tindakan keamanan",
    "showing": "Menampilkan entri {count} (mengimbangi {offset})",
    "previous": "Sebelumnya"
  },
  "media": {
    "title": "Playground Media",
    "subtitle": "Hasilkan gambar, video, dan musik",
    "model": "Model",
    "prompt": "Prompt",
    "generate": "Hasilkan",
    "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": "Atur ulang ke default",
    "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": "Tidak ada penyedia aktif",
    "noActiveProvidersDesc": "Harap tambahkan dan sambungkan penyedia terlebih dahulu untuk mengonfigurasi alat CLI.",
    "mapModels": "Model Peta",
    "testConnection": "Uji Koneksi",
    "connectionStatus": "Status Koneksi",
    "configureEndpoint": "Konfigurasikan Titik Akhir",
    "instructions": "instruksi",
    "modelMapping": "Pemetaan Model",
    "baseUrl": "URL dasar",
    "apiKey": "Kunci API",
    "configured": "Dikonfigurasi",
    "notConfigured": "Tidak dikonfigurasi",
    "notInstalled": "Tidak dipasang",
    "custom": "Adat",
    "unknown": "Tidak diketahui",
    "lastSavedAt": "Terakhir disimpan: {date}",
    "never": "Tidak pernah",
    "justNow": "sekarang",
    "minutesAgoShort": "{count}m yang lalu",
    "hoursAgoShort": "{count}jam yang lalu",
    "daysAgoShort": "{count}hari yang lalu",
    "monthsAgoShort": "{count}bln yang lalu",
    "yearsAgoShort": "{count}tahun yang lalu",
    "runtimeCheckFailed": "Pemeriksaan waktu proses gagal",
    "yourApiKeyPlaceholder": "kunci-api-Anda",
    "modelPlaceholder": "penyedia/model-id",
    "configurationSaved": "Konfigurasi berhasil disimpan.",
    "failedToSave": "Gagal menyimpan konfigurasi.",
    "noApiKeysCreateOne": "Tidak ada kunci API - Buat satu di halaman Kunci",
    "defaultOmnirouteKey": "sk_omniroute (bawaan)",
    "selectModel": "Pilih Model",
    "selectModelForAlias": "Pilih model untuk {alias}",
    "selectModelForTool": "Pilih Model untuk {tool}",
    "select": "Pilih",
    "clear": "Jelas",
    "comingSoon": "Segera hadir",
    "checkingRuntime": "Memeriksa status waktu proses...",
    "guideOnlyIntegration": "Integrasi khusus panduan (tidak diperlukan runtime lokal)",
    "cliRuntimeDetected": "Waktu proses CLI terdeteksi dan siap",
    "cliFoundNotRunnable": "CLI ditemukan tetapi tidak dapat dijalankan{reason}",
    "cliRuntimeNotDetected": "Waktu proses CLI tidak terdeteksi",
    "binary": "Biner",
    "configPath": "jalur konfigurasi",
    "configPathShort": "Konfigurasi",
    "failedCheckRuntimeStatus": "Gagal memeriksa status waktu proses.",
    "copy": "Salin",
    "copied": "Disalin",
    "copyConfig": "Salin Konfigurasi",
    "saveConfig": "Simpan Konfigurasi",
    "selectionSaved": "Pilihan disimpan",
    "guide": "Panduan",
    "detected": "Terdeteksi",
    "notReady": "Belum siap",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "startMitm": "Mulai MITM",
    "stopMitm": "Hentikan MITM",
    "mitmStarted": "MITM dimulai dengan sukses!",
    "mitmStopped": "MITM berhasil dihentikan!",
    "failedStart": "Gagal memulai MITM",
    "failedStop": "Gagal menghentikan MITM",
    "saveMappings": "Simpan Pemetaan",
    "mappingsSaved": "Pemetaan disimpan!",
    "failedSaveMappings": "Gagal menyimpan pemetaan",
    "howItWorks": "Cara kerjanya:",
    "antigravityHowWorksDesc": "Antigravitasi mengirimkan permintaan ke titik akhir Google. MITM mencegat dan mengarahkan mereka ke OmniRoute.",
    "antigravityStep1": "1. Mulai MITM untuk merutekan permintaan melalui OmniRoute.",
    "antigravityStep2Prefix": "2. Tambahkan",
    "antigravityStep2Suffix": "ke file host Anda sebagai 127.0.0.1.",
    "antigravityStep3": "3. Buka Antigravitasi dan permintaan akan diproksi.",
    "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 Sandi Sudo Diperlukan",
    "sudoPasswordHint": "Kata sandi administrator diperlukan untuk mengubah file host dan pengaturan proxy sistem.",
    "enterSudoPassword": "Masukkan kata sandi sudo",
    "sudoPasswordRequiredError": "Kata sandi Sudo diperlukan.",
    "cancel": "Batalkan",
    "confirm": "Konfirmasikan",
    "settingsApplied": "Pengaturan berhasil diterapkan!",
    "failedApplySettings": "Gagal menerapkan pengaturan",
    "settingsReset": "Pengaturan berhasil diatur ulang!",
    "failedResetSettings": "Gagal menyetel ulang setelan",
    "backupRestored": "Cadangan dipulihkan!",
    "failedRestore": "Gagal memulihkan",
    "checkingCli": "Memeriksa {tool} CLI...",
    "cliNotRunnable": "{tool} CLI diinstal tetapi tidak dapat dijalankan",
    "cliNotInstalled": "{tool} CLI tidak diinstal",
    "cliNotDetected": "{tool} CLI tidak terdeteksi",
    "cliDetectedReady": "{tool} CLI terdeteksi dan siap",
    "cliFoundFailedHealthcheck": "{tool} CLI ditemukan tetapi pemeriksaan kesehatan runtime gagal{reason}.",
    "installCliPrompt": "Silakan instal {tool} CLI untuk menggunakan fitur ini.",
    "installCodexPrompt": "Silakan instal Codex CLI untuk menggunakan fitur penerapan otomatis.",
    "hide": "Sembunyikan",
    "howToInstall": "Cara Menginstal",
    "installationGuide": "Panduan Instalasi",
    "platforms": "macOS / Linux / Windows:",
    "afterInstallationRun": "Setelah instalasi, jalankan",
    "toVerify": "untuk memverifikasi.",
    "current": "Saat ini",
    "baseUrlPlaceholder": "https://.../v1",
    "resetToDefault": "Atur ulang ke default",
    "providerModelPlaceholder": "penyedia/model-id",
    "apply": "Terapkan",
    "reset": "Setel ulang",
    "manualConfig": "Konfigurasi Manual",
    "backups": "Cadangan",
    "configBackups": "Konfigurasi Cadangan",
    "noBackupsYet": "Belum ada cadangan. Cadangan dibuat secara otomatis sebelum setiap Terapkan atau Atur Ulang.",
    "restore": "Pulihkan",
    "backupRestoredReloading": "Cadangan dipulihkan! Memuat ulang status...",
    "failedRestoreBackup": "Gagal memulihkan cadangan",
    "applied": "Diterapkan!",
    "failed": "Gagal",
    "resetDone": "Setel ulang!",
    "omnirouteConfiguredOpenAiCompatible": "OmniRoute dikonfigurasi sebagai penyedia yang kompatibel dengan OpenAI",
    "provider": "Penyedia",
    "model": "Model",
    "providers": "Penyedia",
    "auth": "Penulis",
    "noApiKeysAvailable": "Tidak ada kunci API yang tersedia",
    "usingDefaultOmniroute": "Menggunakan default: sk_omniroute",
    "updateConfig": "Perbarui Konfigurasi",
    "applyConfig": "Terapkan Konfigurasi",
    "noBackupsAvailable": "Tidak ada cadangan yang tersedia.",
    "profileSaved": "Profil \"{name}\" disimpan!",
    "failedSaveProfile": "Gagal menyimpan profil",
    "profileActivated": "Profil diaktifkan!",
    "failedActivateProfile": "Gagal mengaktifkan profil",
    "profiles": "Profil",
    "savedProfiles": "Profil Tersimpan",
    "noProfilesYet": "Belum ada profil yang disimpan. Simpan konfigurasi saat ini sebagai profil di bawah.",
    "activate": "Aktifkan",
    "deleteProfile": "Hapus profil",
    "profileNamePlaceholder": "Nama profil (misalnya Akun Pribadi)",
    "saveCurrent": "Simpan Saat Ini",
    "codexAuthNotePrefix": "Penggunaan kodeks",
    "codexAuthNoteMiddle": "dengan",
    "codexAuthNoteSuffix": "Klik \"Terapkan\" untuk mengkonfigurasi otomatis.",
    "claudeManualConfiguration": "Claude CLI - Konfigurasi Manual",
    "codexManualConfiguration": "Codex CLI - Konfigurasi Manual",
    "droidManualConfiguration": "Pabrik Droid - Konfigurasi Manual",
    "openClawManualConfiguration": "Buka Claw - Konfigurasi Manual",
    "clineManualConfiguration": "Konfigurasi Manual Cline",
    "kiloManualConfiguration": "Konfigurasi Manual Kode Kilo",
    "whenToUseLabel": "Kapan harus digunakan",
    "openToolDocs": "Buka dokumen alat",
    "toolUseCases": {
      "claude": "Gunakan saat Anda menginginkan alur kerja perencanaan yang kuat dan pemfaktoran ulang multi-file yang panjang dengan Claude Code.",
      "codex": "Gunakan saat tim Anda terstandarisasi pada alur OpenAI Codex CLI dan autentikasi berbasis profil.",
      "droid": "Gunakan saat Anda membutuhkan agen terminal ringan yang berfokus pada pengkodean cepat dan loop eksekusi perintah.",
      "openclaw": "Gunakan saat Anda menginginkan agen pengkodean gaya Open Claw tetapi dirutekan melalui kebijakan OmniRoute.",
      "cline": "Gunakan saat Anda mengonfigurasi agen pengkodean di dalam editor dan ingin penyiapan terpandu dengan model OmniRoute.",
      "kilo": "Gunakan ketika alur kerja Anda bergantung pada perintah Kode Kilo dan pengeditan berulang yang cepat.",
      "cursor": "Gunakan saat membuat kode di Cursor dan Anda memerlukan model khusus yang kompatibel dengan OpenAI melalui OmniRoute.",
      "continue": "Gunakan saat menjalankan Lanjutkan di IDE dan Anda memerlukan konfigurasi penyedia portabel berbasis JSON.",
      "opencode": "Gunakan saat Anda lebih suka menjalankan agen terminal-asli dan otomatisasi skrip melalui OpenCode.",
      "kiro": "Gunakan saat mengintegrasikan Kiro dan mengontrol perutean model secara terpusat dari OmniRoute.",
      "windsurf": "Use when you want an AI-first IDE with Codeium/Windsurf models routed through OmniRoute.",
      "antigravity": "Gunakan ketika lalu lintas Antigravitasi/Kiro harus dicegat melalui MITM dan dialihkan ke OmniRoute.",
      "copilot": "Gunakan saat Anda menginginkan UX gaya obrolan kopilot sambil menerapkan kunci OmniRoute dan aturan perutean.",
      "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 saat Anda memerlukan asisten AI asli terminal yang ringan untuk tugas cepat.",
      "hermes-agent": "__MISSING__:Use when you need Hermes Agent (by Nousresearch) with default, delegation, vision and auxiliary models routed through OmniRoute.",
      "custom": "Gunakan untuk implementasi alat khusus atau konfigurasi umum yang kompatibel dengan OpenAI."
    },
    "toolDescriptions": {
      "antigravity": "IDE Antigravitasi Google dengan MITM",
      "claude": "CLI Kode Claude Antropis",
      "codex": "CLI Codex OpenAI",
      "droid": "Asisten AI Droid Pabrik",
      "openclaw": "Buka Asisten AI Claw",
      "cline": "CLI Asisten Pengkodean AI Cline",
      "kilo": "CLI Asisten AI Kode Kilo",
      "cursor": "Editor Kode AI Kursor",
      "continue": "Lanjutkan Asisten AI",
      "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": "Asisten Terminal AI Hermes",
      "hermes-agent": "__MISSING__:Hermes Agent (by Nousresearch) - Advanced terminal AI with multi-model support (delegation, vision, compression, etc.)",
      "custom": "Generator konfigurasi CLI atau SDK generik yang kompatibel dengan OpenAI"
    },
    "guides": {
      "cursor": {
        "notes": {
          "0": "Membutuhkan akun Cursor Pro untuk menggunakan fitur ini.",
          "1": "Kursor merutekan permintaan melalui servernya sendiri, sehingga titik akhir lokal tidak didukung. Harap aktifkan Cloud Endpoint di Pengaturan."
        },
        "steps": {
          "1": {
            "title": "Buka Pengaturan",
            "desc": "Buka Pengaturan -> Model"
          },
          "2": {
            "title": "Aktifkan API OpenAI",
            "desc": "Aktifkan opsi \"Kunci API OpenAI\"."
          },
          "3": {
            "title": "URL dasar"
          },
          "4": {
            "title": "Kunci API"
          },
          "5": {
            "title": "Tambahkan Model Khusus",
            "desc": "Klik \"Lihat Semua Model\" -> \"Tambahkan Model Khusus\""
          },
          "6": {
            "title": "Pilih Model"
          }
        }
      },
      "continue": {
        "steps": {
          "1": {
            "title": "Buka Konfigurasi",
            "desc": "Buka Lanjutkan file konfigurasi"
          },
          "2": {
            "title": "Kunci API"
          },
          "3": {
            "title": "Pilih Model"
          },
          "4": {
            "title": "Tambahkan Konfigurasi Model",
            "desc": "Tambahkan konfigurasi berikut ke array model Anda:"
          }
        },
        "notes": {
          "0": "Continue menggunakan file 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 API key.",
          "1": "Setel base URL ke endpoint 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 akun 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 khusus",
    "toolCategories": "Tool Categories",
    "visibleToolsCount": "{count} alat tersedia",
    "customCliBuilderTitle": "Pembuat CLI yang kompatibel dengan OpenAI",
    "customCliBuilderDescription": "Hasilkan env vars dan cuplikan JSON untuk CLI atau SDK apa pun yang menerima URL dasar, kunci API, dan ID model yang kompatibel dengan OpenAI.",
    "customCliNoModels": "Hubungkan setidaknya satu penyedia untuk mengisi pemilih model.",
    "customCliNameLabel": "nama CLI",
    "customCliNamePlaceholder": "misalnya CLI Tim saya",
    "customCliDefaultModelLabel": "Model bawaan",
    "customCliDefaultModelHelp": "Gunakan ID atau kombo model OmniRoute apa pun. Kebanyakan CLI yang kompatibel dengan OpenAI hanya memerlukan URL dasar /v1 ditambah string model.",
    "customCliKeyHelper": "Untuk instalasi lokal OmniRoute dapat menggunakan sk_omniroute. Dalam mode cloud, pilih salah satu kunci API manajemen Anda.",
    "customCliAliasMappingsLabel": "Pemetaan alias",
    "customCliAliasMappingsHelp": "Alias pembantu opsional untuk skrip pembungkus atau file konfigurasi yang menginginkan nama steno yang stabil.",
    "customCliAddAlias": "Tambahkan alias",
    "customCliNoMappings": "Belum ada pemetaan alias. Tambahkan satu jika skrip pembungkus atau tim Anda menggunakan nama pendek yang stabil.",
    "customCliAliasPlaceholder": "misalnya ulasan",
    "customCliTargetModelLabel": "Model sasaran",
    "customCliEndpointHintLabel": "Cara menyambungkan titik akhir",
    "customCliEndpointHint": "Arahkan klien yang kompatibel dengan OpenAI ke URL dasar OmniRoute /v1. Titik akhir penyelesaian obrolan mentah adalah {endpoint}. Gunakan blok JSON saat alat menginginkan objek penyedia, atau skrip env saat membaca variabel OPENAI_*.",
    "customCliEnvBlockTitle": "Cuplikan env / shell",
    "customCliJsonBlockTitle": "Blok JSON penyedia",
    "copilotConfigGenerator": "Generator Konfigurasi Salinan GitHub",
    "copilotApiKey": "Kunci API",
    "copilotFilterModelsPlaceholder": "menyaring model...",
    "copilotMaxInputTokens": "Token Masukan Maks",
    "copilotMaxOutputTokens": "Token Output Maks",
    "copilotToolCalling": "Panggilan Alat",
    "copilotPasteInto": "Tempel ke: ",
    "wireApiChatCompletions": "Penyelesaian Obrolan (/chat/penyelesaian)",
    "wireApiResponses": "API Respons (/respons)"
  },
  "combos": {
    "title": "kombo",
    "description": "Buat kombo model dengan perutean berbobot dan dukungan fallback",
    "autoCatalogTitle": "Katalog perutean otomatis",
    "autoCatalogTemplateCount": "{count} templat",
    "autoCatalogDescription": "Kombo otomatis/* bawaan diselesaikan secara dinamis dari penyedia yang terhubung. Gunakan salah satu ID ini sebagai bidang model — tidak perlu penyiapan.",
    "autoCatalogExpand": "Perluas katalog perutean otomatis",
    "autoCatalogCollapse": "Ciutkan katalog perutean otomatis",
    "createCombo": "Buat Kombo",
    "editCombo": "Sunting Kombo",
    "deleteCombo": "Hapus Kombo",
    "noModels": "Tidak ada model",
    "noModelsYet": "Belum ada model yang ditambahkan",
    "addModel": "Tambahkan Model",
    "addModelToCombo": "Tambahkan Model ke Kombo",
    "routingStrategy": "Strategi Perutean",
    "maxRetries": "Percobaan Ulang Maks",
    "timeout": "Batas waktu (md)",
    "healthcheck": "Pemeriksaan kesehatan",
    "priority": "Prioritas",
    "fallback": "Penggantian",
    "roundRobin": "Robin Bulat",
    "random": "Acak",
    "leastLatency": "Latensi Paling Sedikit",
    "comboName": "Nama Kombo",
    "comboNamePlaceholder": "kombo saya",
    "deleteConfirm": "Hapus kombo ini?",
    "noCombosYet": "Belum ada kombo",
    "comboCreated": "Kombo berhasil dibuat",
    "comboUpdated": "Kombo berhasil diperbarui",
    "comboDeleted": "Kombo dihapus",
    "failedCreate": "Gagal membuat kombo",
    "failedUpdate": "Gagal memperbarui kombo",
    "errorCreating": "Terjadi kesalahan saat membuat kombo",
    "errorUpdating": "Terjadi kesalahan saat memperbarui kombo",
    "errorDeleting": "Terjadi kesalahan saat menghapus kombo",
    "testFailed": "Permintaan pengujian gagal",
    "failedToggle": "Gagal mengganti kombo",
    "testResults": "Hasil Tes — {name}",
    "resolvedBy": "Diselesaikan oleh:",
    "more": "+{count} lainnya",
    "reqs": "persyaratan",
    "success": "sukses",
    "proxyConfigured": "Proksi dikonfigurasi",
    "copyComboName": "Salin nama kombo",
    "enableCombo": "Aktifkan kombo",
    "disableCombo": "Nonaktifkan kombo",
    "testCombo": "Uji kombo",
    "duplicate": "Duplikat",
    "proxyConfig": "Konfigurasi proksi",
    "nameRequired": "Nama wajib diisi",
    "nameInvalid": "Hanya huruf, angka, -, _, / dan . diperbolehkan",
    "nameHint": "Huruf, angka, -, _, / dan . diperbolehkan",
    "priorityDesc": "Penggantian berurutan: mencoba model 1 terlebih dahulu, lalu 2, dst.",
    "weightedDesc": "Mendistribusikan lalu lintas berdasarkan persentase bobot dengan fallback",
    "roundRobinDesc": "Distribusi melingkar: setiap permintaan diteruskan ke model berikutnya secara bergilir",
    "contextRelay": "Context Relay",
    "contextRelayDesc": "Preserves session continuity with handoff summaries when accounts rotate",
    "randomDesc": "Pemilihan acak seragam, lalu kembali ke model lainnya",
    "leastUsedDesc": "Memilih model dengan permintaan paling sedikit, menyeimbangkan beban dari waktu ke waktu",
    "costOptimizedDesc": "Rutekan ke model termurah terlebih dahulu berdasarkan harga",
    "resetAware": "RR Sadar Reset",
    "resetAwareDesc": "Menyeimbangkan sisa kuota dengan reset 5 jam dan mingguan, lalu menghitung skor serupa secara round-robin",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each model once before reshuffling",
    "models": "Model",
    "autoBalance": "Keseimbangan otomatis",
    "advancedSettings": "Pengaturan Lanjutan",
    "retryDelay": "Penundaan Coba Lagi (md)",
    "concurrencyPerModel": "Konkurensi / Model",
    "queueTimeout": "Batas Waktu Antrian (md)",
    "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 default global. Ini mengesampingkan pengaturan per penyedia.",
    "failoverBeforeRetry": "Failover Sebelum Coba Lagi",
    "maxSetRetries": "Percobaan Ulang Set Maks",
    "setRetryDelayMs": "Setel Penundaan Coba Ulang (md)",
    "moveUp": "Naik",
    "moveDown": "Pindah ke bawah",
    "removeModel": "Hapus",
    "saving": "Menyimpan...",
    "weighted": "Tertimbang",
    "leastUsed": "Paling Sedikit Digunakan",
    "costOpt": "Pilihan Biaya",
    "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 merutekan beberapa akun dengan telemetri kuota dan jendela pengaturan ulang yang berbeda.",
        "avoid": "Telemetri kuota tidak tersedia untuk sebagian besar akun.",
        "example": "Lebih suka pengaturan ulang akun mingguan 60% besok daripada pengaturan ulang akun 80% nanti."
      },
      "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 ketika Anda ingin menghabiskan kuota satu penyedia sepenuhnya sebelum berpindah ke penyedia berikutnya.",
        "avoid": "Hindari saat Anda memerlukan penyeimbangan beban tingkat permintaan di seluruh penyedia.",
        "example": "Contoh: Gunakan semua kredit Deepgram senilai $200 sebelum kembali ke Groq."
      },
      "auto": {
        "when": "Gunakan saat Anda memerlukan perutean penilaian multi-faktor berdasarkan biaya, latensi, dan kualitas.",
        "avoid": "Hindari saat Anda memerlukan pengurutan prioritas yang ketat atau kegigihan historis.",
        "example": "Contoh: Menyeimbangkan permintaan antar model dengan kekuatan berbeda."
      },
      "lkgp": {
        "when": "Gunakan saat Anda ingin merutekan berdasarkan tingkat keberhasilan dan kinerja historis.",
        "avoid": "Hindari ketika data historis terbatas atau tidak dapat diandalkan.",
        "example": "Contoh: Merutekan ke model dengan rekam jejak yang baik dalam tugas tertentu."
      },
      "context-optimized": {
        "when": "Gunakan saat Anda perlu mengoptimalkan penggunaan jendela konteks di seluruh model.",
        "avoid": "Hindari ketika model memiliki panjang konteks yang serupa atau tugasnya sederhana.",
        "example": "Contoh: Distribusikan percakapan panjang ke seluruh model dengan jendela 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": "Jika diaktifkan, kesalahan upstream apa pun akan langsung memicu failover ke target kombo berikutnya, sehingga melewatkan semua percobaan ulang dan URL cadangan.",
      "maxSetRetries": "Berapa kali untuk mencoba kembali set target penuh ketika setiap target gagal. 0 = tidak ada percobaan ulang pada tingkat set.",
      "setRetryDelayMs": "Penundaan antara upaya percobaan ulang tingkat set, memberikan waktu 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": "Siap menabung?",
    "readinessDescription": "Tinjau daftar periksa sebelum membuat atau memperbarui kombo ini.",
    "readinessCheckName": "Nama kombo valid",
    "readinessCheckModels": "Setidaknya satu model dipilih",
    "readinessCheckWeights": "Total tertimbang adalah 100%",
    "readinessCheckWeightsOptional": "Aturan berat tidak diperlukan",
    "readinessCheckPricing": "Data harga tersedia",
    "readinessCheckPricingOptional": "Aturan penetapan harga tidak diperlukan",
    "saveBlockedTitle": "Penyimpanan diblokir hingga item berikut diperbaiki:",
    "saveBlockName": "Tentukan nama kombo.",
    "saveBlockModels": "Tambahkan setidaknya satu model.",
    "saveBlockWeighted": "Tetapkan bobot menjadi 100% (saat ini: {total}%).",
    "saveBlockPricing": "Tambahkan harga untuk setidaknya 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": "Rotasi akun yang sadar akan pengaturan ulang",
        "description": "Menyeimbangkan sisa kuota penyedia dengan waktu reset.",
        "tip1": "Gunakan langkah akun eksplisit atau perutean tag akun untuk penyedia dengan telemetri kuota.",
        "tip2": "Sesi penyesuaian vs beban mingguan ketika kelelahan jangka pendek lebih berisiko.",
        "tip3": "Jaga agar tali pengikatnya tetap kecil sehingga akun-akun yang setara masih dapat berputar dengan 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": "Kuota penyedia knalpot secara berurutan sebelum melakukan fall back.",
        "tip1": "Gunakan untuk perutean berbasis kuota dengan rantai cadangan yang jelas.",
        "tip2": "Tetapkan kuota secara akurat untuk menghindari fallback dini.",
        "tip3": "Berfungsi paling baik dengan penyedia yang menawarkan tingkatan gratis atau keranjang kredit.",
        "title": "Kehabisan Kuota"
      },
      "auto": {
        "description": "Rute berdasarkan penilaian waktu nyata untuk biaya, latensi, kualitas, dan kesehatan.",
        "tip1": "Biarkan mesin menyeimbangkan beberapa faktor secara otomatis.",
        "tip2": "Pantau faktor mana yang mendorong keputusan perutean dalam log.",
        "tip3": "Gunakan untuk beban kerja kompleks di mana tidak ada faktor tunggal yang mendominasi.",
        "title": "Optimasi Multi-Faktor"
      },
      "lkgp": {
        "description": "Rute berdasarkan kinerja historis dan pola kesuksesan.",
        "tip1": "Membutuhkan riwayat permintaan yang memadai untuk prediksi yang akurat.",
        "tip2": "Cocok untuk beban kerja dengan pola performa model yang konsisten.",
        "tip3": "Pantau keakuratan prediksi dan sesuaikan bobot sesuai kebutuhan.",
        "title": "Perutean Berbasis Sejarah"
      },
      "context-optimized": {
        "description": "Optimalkan perutean berdasarkan penggunaan jendela konteks dan efisiensi token.",
        "tip1": "Arahkan percakapan panjang ke model dengan jendela konteks yang lebih besar.",
        "tip2": "Pantau pemanfaatan konteks untuk menghindari pemborosan token.",
        "tip3": "Terbaik untuk AI percakapan yang memerlukan retensi konteks ekstensif.",
        "title": "Optimasi Konteks"
      },
      "context-relay": {
        "description": "Yang terbaik adalah ketika rotasi akun diharapkan dan akun berikutnya harus mewarisi ringkasan tugas yang disederhanakan.",
        "tip1": "Gunakan dengan penyedia yang merotasi akun untuk keluarga model yang sama.",
        "tip2": "Tetapkan ambang penyerahan di bawah batas kuota tetap untuk waktu pembuatan ringkasan.",
        "tip3": "Hanya tetapkan model ringkasan khusus jika model ringkasan utama terlalu mahal atau tidak stabil.",
        "title": "Prioritas Kontinuitas Sesi"
      },
      "p2c": {
        "description": "Rutekan ke penyedia dengan beban terendah saat ini berdasarkan metrik waktu nyata.",
        "tip1": "Pantau metrik kesehatan penyedia untuk penilaian beban yang akurat.",
        "tip2": "Berfungsi paling baik dengan kumpulan penyedia yang homogen.",
        "tip3": "Sesuaikan sensitivitas untuk menghindari osilasi selama lonjakan lalu lintas.",
        "title": "Kekuatan 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 penyedia/model/akun 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": "Selesaikan setiap tahap untuk menentukan kombo, membangun langkah-langkah, memilih strategi perutean, dan meninjau hasil.",
    "builderStepsDescription": "Susun setiap langkah kombo secara berurutan: penyedia, model, lalu akun. Hal ini memungkinkan penggunaan kembali penyedia dan model yang sama di akun yang berbeda.",
    "selectProvider": "Pilih Penyedia",
    "selectProviderPlaceholder": "Pilih penyedia",
    "selectModel": "Pilih Model",
    "selectModelPlaceholder": "Pilih penyedia terlebih dahulu",
    "selectAccount": "Pilih Akun",
    "selectComboToReference": "Pilih kombo untuk referensi",
    "comboReference": "Referensi Kombo",
    "addComboReference": "Tambahkan Referensi Kombo",
    "addStepBeforeContinue": "Harap tambahkan setidaknya satu langkah sebelum melanjutkan ke tahap berikutnya.",
    "previewNextStep": "Pratinjau langkah berikutnya",
    "autoSelectAccount": "Pilih akun secara otomatis saat runtime",
    "modePackBalanced": "Seimbang",
    "modePackBudget": "Anggaran",
    "modePackPerformance": "Kinerja",
    "modePackCustom": "Adat",
    "browseLegacyCatalog": "Telusuri katalog kombo lawas",
    "agentFeaturesTitle": "Fitur Agen",
    "agentFeaturesDescription": "Aktifkan fitur lanjutan untuk agen yang menggunakan kombo ini",
    "agentFeaturesSystemMessageOverride": "Ganti pesan sistem",
    "agentFeaturesSystemMessagePlaceholder": "Anda adalah asisten ahli...",
    "agentFeaturesSystemMessageHint": "Penggantian pesan sistem untuk agen",
    "agentFeaturesToolFilterRegex": "/pola-regex/",
    "agentFeaturesToolFilterHint": "Regex filter alat untuk agen",
    "agentFeaturesContextCacheHint": "Aktifkan cache dalam konteks untuk alat agen",
    "agentFeaturesContextCacheProtection": "Lindungi cache dari mutasi alat agen",
    "agentFeaturesContextLength": "Panjang konteks",
    "agentFeaturesContextLengthPlaceholder": "misalnya 128000",
    "agentFeaturesContextLengthHint": "Mendefinisikan jendela konteks untuk kombo ini di /v1/models.",
    "agentFeaturesContextLengthErrorInteger": "Panjang konteks harus berupa bilangan bulat yang valid",
    "agentFeaturesContextLengthErrorRange": "Panjang konteks harus antara 1000 dan 2000000",
    "compressionOverride": "Penggantian Kompresi",
    "modePack": "Paket Modus"
  },
  "costs": {
    "title": "Biaya",
    "pageDescription": "Lacak pengeluaran, analisis tren, dan kelola anggaran AI Anda di semua penyedia",
    "overview": "Ikhtisar",
    "budget": "Anggaran",
    "totalCost": "Jumlah Biaya",
    "breakdown": "Rincian Biaya",
    "noData": "Tidak ada data biaya",
    "byModel": "Berdasarkan Model",
    "byProvider": "Oleh Penyedia",
    "range7d": "7 hari",
    "range30d": "30 Hari",
    "range90d": "90 Hari",
    "rangeAll": "Sepanjang Waktu",
    "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 Masukan",
    "outputTokens": "Token Keluaran",
    "inputOutputRatio": "Rasio Masukan/Keluaran",
    "tokens": "token",
    "routingEfficiency": "Efisiensi Perutean",
    "fallbackCount": "Permintaan Penggantian",
    "fallbackRate": "Tingkat Penggantian",
    "modelCoverage": "Cakupan Model",
    "modelCoverageDesc": "% permintaan dengan model eksplisit",
    "outOfRequests": "dari {total} permintaan",
    "costByApiKey": "Biaya berdasarkan Kunci API",
    "costByAccount": "Biaya berdasarkan Akun",
    "apiKeyName": "Kunci API",
    "account": "Akun",
    "requests": "Permintaan",
    "cost": "Biaya",
    "dayStreak": "hari berturut-turut",
    "weeklyUsagePattern": "Pola Penggunaan Mingguan",
    "activityHeatmap": "Aktivitas (365 hari)",
    "less": "Kurang",
    "more": "Lebih lanjut",
    "monthlyForecast": "Prakiraan Bulanan",
    "forecastBasis": "Berdasarkan {days} hari terakhir",
    "avgDailyCost": "Rata-rata biaya harian",
    "daysRemaining": "{days} hari tersisa",
    "periodComparison": "Perbandingan Periode",
    "previousPeriod": "Babak Sebelumnya",
    "currentPeriod": "Setengah Saat Ini",
    "exportCSV": "Ekspor sebagai CSV",
    "exportJSON": "Ekspor sebagai JSON",
    "legacyFreeLabel": "__MISSING__:Legacy / Free",
    "costExplorerTitle": "Penjelajah Biaya",
    "costExplorerDescription": "Jelajahi pengeluaran menurut penyedia, model, kunci API, akun, atau tingkat layanan.",
    "groupProvider": "Penyedia",
    "groupModel": "Jenis model",
    "groupApiKey": "Kunci API",
    "groupAccount": "Akun",
    "groupServiceTier": "Tingkat layanan",
    "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": "Porsi",
    "legacyOrFree": "Lama / gratis",
    "filterRows": "Filter baris…",
    "filterCostExplorerRows": "Filter baris Penjelajah Biaya",
    "noMatchingCostRows": "Tidak ada baris biaya yang cocok",
    "noMatchingCostRowsDescription": "Sesuaikan teks pencarian, pengelompokan, atau jendela waktu yang dipilih.",
    "showingCostRows": "Menampilkan {shown} dari {total} baris yang cocok.",
    "showingTopCostRows": "Menampilkan {shown} dari {total} baris yang cocok (50 teratas)."
  },
  "endpoint": {
    "title": "Titik Akhir API",
    "available": "Titik Akhir yang Tersedia",
    "cloudProxy": "Proksi Awan",
    "disableConfirm": "Apakah Anda yakin ingin menonaktifkan proksi cloud?",
    "baseUrl": "URL dasar",
    "apiKeyLabel": "Kunci API",
    "registeredKeys": "Kunci Terdaftar",
    "chatCompletions": "Penyelesaian Obrolan",
    "responses": "Tanggapan",
    "listModels": "Daftar Model",
    "usingCloudProxy": "Menggunakan Proksi Awan",
    "usingLocalServer": "Menggunakan Server Lokal",
    "machineId": "ID Mesin: {id}...",
    "disableCloud": "Nonaktifkan Awan",
    "enableCloud": "Aktifkan Awan",
    "modelsAcrossEndpoints": "{models} model di seluruh titik akhir {endpoints}",
    "loadingModels": "Loading available models...",
    "chatDesc": "Obrolan streaming & non-streaming dengan semua penyedia",
    "embeddings": "Penyematan",
    "embeddingsDesc": "Penyematan teks untuk saluran pencarian & RAG",
    "imageGeneration": "Pembuatan Gambar",
    "imageDesc": "Hasilkan gambar dari petunjuk teks",
    "rerank": "Ubah peringkat",
    "rerankDesc": "Urutkan ulang dokumen berdasarkan relevansinya dengan kueri",
    "audioTranscription": "Transkripsi Audio",
    "audioTranscriptionDesc": "Transkripsikan file audio ke teks (Bisikan)",
    "textToSpeech": "Teks ke Ucapan",
    "textToSpeechDesc": "Ubah teks menjadi ucapan yang terdengar alami",
    "musicGeneration": "Music Generation",
    "musicDesc": "Generate music and audio tracks via ComfyUI (Stable Audio, MusicGen)",
    "moderations": "Moderasi",
    "moderationsDesc": "Moderasi konten dan klasifikasi keamanan",
    "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 Inti",
    "categoryMedia": "Media & Multi-Modal",
    "categorySearch": "Search & Discovery",
    "categoryUtility": "Utilitas & Manajemen",
    "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": "Aktifkan Proksi Cloud",
    "whatYouGet": "Apa yang akan Anda dapatkan",
    "cloudBenefitAccess": "Akses API Anda dari mana saja di dunia",
    "cloudBenefitShare": "Bagikan titik akhir dengan tim Anda dengan mudah",
    "cloudBenefitPorts": "Tidak perlu membuka port atau mengkonfigurasi firewall",
    "cloudBenefitEdge": "Jaringan edge global yang cepat",
    "cloudSessionNote": "Cloud akan menyimpan sesi autentikasi Anda selama 1 hari. Jika tidak digunakan maka akan otomatis terhapus.",
    "cloudUnstableNote": "Cloud saat ini tidak stabil dengan Claude Code OAuth dalam beberapa kasus.",
    "cloudConnected": "Proksi Cloud terhubung!",
    "connectingToCloud": "Menghubungkan ke awan...",
    "verifyingConnection": "Memverifikasi koneksi...",
    "connecting": "Menghubungkan...",
    "verifying": "Memverifikasi...",
    "connected": "Terhubung!",
    "disableCloudTitle": "Nonaktifkan Proksi Cloud",
    "disableWarning": "Semua sesi autentikasi akan dihapus dari cloud.",
    "syncingData": "Menyinkronkan data terbaru...",
    "disablingCloud": "Menonaktifkan awan...",
    "syncing": "Menyinkronkan...",
    "disabling": "Menonaktifkan...",
    "cloudConnectedVerified": "Cloud Proxy terhubung dan terverifikasi!",
    "connectedVerificationPending": "Terhubung — verifikasi tertunda",
    "connectedVerificationPendingWithError": "Terhubung — verifikasi tertunda: {error}",
    "cloudDisabledSuccess": "Cloud berhasil dinonaktifkan",
    "syncedSuccess": "Berhasil disinkronkan",
    "failedDisable": "Gagal menonaktifkan awan",
    "failedEnable": "Gagal mengaktifkan awan",
    "cloudRequestTimeout": "Batas waktu permintaan cloud",
    "cloudRequestFailed": "Permintaan awan gagal",
    "cloudWorkerUnreachable": "Tidak dapat menjangkau pekerja cloud. Pastikan layanan cloud berjalan (npm run dev di/cloud).",
    "connectionFailed": "Koneksi gagal",
    "syncFailed": "Gagal menyinkronkan data cloud",
    "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": "Tidak ada model yang tersedia untuk penyedia ini.",
    "chat": "Obrolan",
    "embedding": "Penyematan",
    "image": "Gambar",
    "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": "Active streams",
    "protocolLastActivity": "Last activity",
    "quickStart": "Quick Start",
    "openMcpDashboard": "Open MCP management",
    "openA2aDashboard": "Open A2A management",
    "mcpQuickStartTitle": "MCP Quick Start",
    "mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.",
    "mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.",
    "mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.",
    "a2aQuickStartTitle": "A2A Quick Start",
    "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.",
    "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.",
    "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.",
    "completionsLegacy": "Completions (Legacy)",
    "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format",
    "messagesApi": "Pesan",
    "messagesApiDesc": "Format API Pesan Antropik Asli untuk penyedia yang kompatibel dengan Claude",
    "imageEdits": "Pengeditan Gambar",
    "imageEditsDesc": "Edit dan modifikasi gambar yang ada dengan AI (inpainting, outpainting, variasi)",
    "batchApi": "API kumpulan",
    "batchApiDesc": "Memproses permintaan dalam jumlah besar secara asinkron (kompatibel dengan OpenAI)",
    "filesApi": "API File",
    "filesApiDesc": "Unggah dan kelola file untuk pemrosesan batch",
    "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 Sandi Sudo (diperlukan di MacOS/Linux)",
    "ngrokTitle": "Terowongan ngrok",
    "ngrokRunning": "Berlari",
    "ngrokStarting": "Mulai",
    "ngrokStoppedState": "Berhenti",
    "ngrokNeedsAuth": "Membutuhkan Otentikasi",
    "ngrokNotInstalled": "Tidak dipasang",
    "ngrokUnsupported": "Tidak didukung",
    "ngrokError": "Kesalahan",
    "ngrokEnable": "Aktifkan Terowongan",
    "ngrokDisable": "Hentikan Terowongan",
    "ngrokUrlNotice": "Membuat terowongan ngrok publik.",
    "ngrokAuthTokenLabel": "Authtoken (Diperlukan jika NGROK_AUTHTOKEN tidak disetel)",
    "ngrokAuthTokenPlaceholder": "Masukkan token asli ngrok Anda",
    "ngrokLastError": "Kesalahan terakhir: {error}",
    "ngrokStarted": "terowongan ngrok dimulai",
    "ngrokStopped": "terowongan ngrok terhenti",
    "ngrokRequestFailed": "Gagal memperbarui terowongan ngrok",
    "tokenSaverSubtitle": "Habiskan lebih sedikit token pada setiap permintaan.",
    "tokenSaverToolOutput": "Keluaran alat",
    "tokenSaverLlmOutput": "keluaran LLM",
    "tokenSaverInputCompression": "Kompresi masukan",
    "apiEndpointsCatalogUnavailable": "Katalog API tidak tersedia",
    "apiEndpointsSearchPlaceholder": "Titik akhir pencarian...",
    "apiEndpointsRequiresAuth": "Membutuhkan autentikasi",
    "apiEndpointsNoMatch": "Tidak ada titik akhir yang cocok dengan filter Anda",
    "localServer": "Server Lokal",
    "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": "activate",
    "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": "Panggilan: {total} | halaman {page} dari {totalPages}",
    "allTools": "Semua alat",
    "allResults": "Semua hasil",
    "success": "Kesuksesan",
    "failure": "Kegagalan",
    "apiKeyIdPlaceholder": "apiKeyId",
    "loadingAuditEntries": "Memuat entri audit...",
    "noAuditEntriesForFilters": "Tidak ada entri audit yang ditemukan untuk filter saat ini.",
    "tableTimestamp": "Stempel waktu",
    "tableDuration": "Lamanya",
    "tableResult": "Hasil",
    "tableApiKey": "Kunci API",
    "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": "Active streams",
    "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": "POSTING /a2a",
    "rpcMethodSend": "pesan/kirim",
    "rpcMethodStream": "pesan/aliran",
    "rpcMethodGet": "tugas/dapatkan",
    "rpcMethodCancel": "tugas/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 Pipa Oke ({latencyMs}ms)",
    "pipelineError": "Kesalahan saluran pipa",
    "healthUnknown": "Kesehatan tidak diketahui",
    "checkingHealth": "Memeriksa…",
    "checkHealth": "Periksa kesehatan",
    "pageInfo": "Halaman {page} dari {totalPages} (total {total})",
    "previous": "Sebelumnya",
    "next": "Selanjutnya",
    "cancel": "Batalkan",
    "save": "Simpan",
    "keyPlaceholder": "misalnya pengguna.preferensi.tema",
    "contentPlaceholder": "Nilai atau konten JSON yang perlu diingat"
  },
  "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": "Filter keterampilan berdasarkan nama, deskripsi, atau tag",
    "allModes": "Semua mode",
    "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": "Pasar Keterampilan",
    "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": "Instal Keterampilan"
  },
  "health": {
    "title": "Kesehatan Sistem",
    "description": "Pemantauan instans OmniRoute Anda secara real-time",
    "healthy": "Sehat",
    "degraded": "Terdegradasi",
    "down": "Turun",
    "uptime": "Waktu aktif",
    "memory": "Memori",
    "memoryRss": "Memori (RSS)",
    "heap": "tumpukan",
    "cpu": "CPU",
    "database": "Basis data",
    "version": "Versi",
    "lastCheck": "Pemeriksaan Terakhir",
    "providerHealth": "Kesehatan Penyedia",
    "systemMetrics": "Metrik Sistem",
    "tokenHealth": "Token Kesehatan",
    "refreshAll": "Segarkan Semua",
    "checkNow": "Periksa Sekarang",
    "loadingHealth": "Memuat data kesehatan...",
    "failedToLoad": "Gagal memuat data kesehatan: {error}",
    "retry": "Coba lagi",
    "allOperational": "Semua sistem beroperasi",
    "issuesDetected": "Masalah sistem terdeteksi",
    "updatedAt": "Diperbarui {time}",
    "latency": "Latensi",
    "latencyP50": "hal50",
    "latencyP95": "hal95",
    "latencyP99": "hal99",
    "millisecondsShort": "{value}ms",
    "notAvailable": "—",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Belum ada datanya",
    "promptCache": "Tembolok Cepat",
    "entries": "Entri",
    "hitRate": "Tingkat Hit",
    "hitsMisses": "Hit / Miss",
    "signatureCache": "Tembolok Tanda Tangan",
    "signatureDefaults": "Default",
    "signatureTool": "Alat",
    "signatureFamily": "Keluarga",
    "signatureSession": "Sesi",
    "recovering": "Memulihkan",
    "noCBData": "Tidak ada data pemutus sirkuit yang tersedia. Buatlah beberapa permintaan terlebih dahulu.",
    "providerHealthStatusAria": "Status kesehatan penyedia",
    "issuesLabel": "Masalah Terdeteksi",
    "operational": "Operasional",
    "providers": "Penyedia",
    "configuredProvidersLabel": "Dikonfigurasi di dasbor",
    "configuredProvidersHint": "Penyedia dengan kredensial yang disimpan di /dashboard/providers, apa pun status runtimenya.",
    "activeProviders": "{count} active",
    "activeProvidersHint": "Penyedia yang dikonfigurasi saat ini diaktifkan untuk permintaan perutean.",
    "monitoredProviders": "{count} monitored",
    "monitoredProvidersHint": "Penyedia saat ini dilacak oleh monitor kesehatan pemutus sirkuit.",
    "healthyCount": "{count} sehat",
    "nodeVersion": "Simpul {version}",
    "failures": "{count} kegagalan",
    "failuresPlural": "{count} kegagalan",
    "lastFailure": "Terakhir",
    "rateLimitStatus": "Status Batas Nilai",
    "activeLimiters": "{count} pembatas aktif",
    "activeLimitersPlural": "{count} pembatas aktif",
    "queued": "Mengantri",
    "queuedCount": "{count} mengantri",
    "running": "berlari",
    "runningCount": "{count} berjalan",
    "ok": "Oke",
    "activeLockouts": "Penguncian Aktif",
    "resetConfirm": "Reset semua pemutus sirkuit ke kondisi sehat? Ini akan menghapus semua jumlah kegagalan dan memulihkan semua penyedia ke status operasional.",
    "resetAllTitle": "Setel ulang semua pemutus sirkuit ke kondisi sehat",
    "resetting": "Menyetel ulang...",
    "resetAll": "Atur Ulang Semua",
    "until": "Sampai {time}",
    "limitExhausted": "Exhausted",
    "learnedFromHeaders": "Learned from headers",
    "remainingOfLimit": "{remaining}/{limit} remaining",
    "throttleStatus": "Throttle: {value}",
    "lastHeaderUpdate": "Header update: {age}",
    "databaseHealth": "Kesehatan Basis Data",
    "stickyBoundSessions": "Sesi yang terikat erat",
    "sessionsByApiKey": "Sesi berdasarkan kunci API",
    "noActiveSessionsTracked": "Belum ada sesi aktif yang terlacak.",
    "noSessionQuotaMonitorsActive": "Tidak ada monitor kuota sesi yang aktif.",
    "gracefulDegradationStatus": "Status Degradasi Anggun",
    "additionalModels": "+{count} model lainnya",
    "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": "Telemetri Sistem",
    "description": "Sinyal permintaan, runtime, sesi, dan memori bergulir dari proses OmniRoute ini.",
    "uptime": "Waktu aktif",
    "totalRequests": "Jumlah Permintaan",
    "avgLatency": "Rata-rata Latensi",
    "errorRate": "Tingkat Kesalahan",
    "activeConnections": "Koneksi Aktif",
    "memoryUsage": "Penggunaan Memori",
    "latencyTrend": "Tren latensi",
    "throughputTrend": "Tren throughput",
    "memoryTrend": "Tren memori",
    "refresh": "Segarkan",
    "updatedAt": "Diperbarui {time}",
    "loadFailed": "Gagal memuat telemetri.",
    "partialData": "Telemetri tersedia sebagian: {error}"
  },
  "mitm": {
    "title": "Proksi MITM",
    "description": "Proksi transparan untuk mencegat dan merutekan permintaan klien.",
    "enable": "Aktifkan Proksi MITM",
    "enableDesc": "Memulai atau menghentikan proses intersepsi lokal dan penggantian DNS.",
    "status": "Status",
    "running": "Berlari",
    "stopped": "Berhenti",
    "start": "Mulai",
    "stop": "Berhenti",
    "refresh": "Segarkan",
    "port": "Pelabuhan Proksi",
    "apiKey": "Kunci API Router",
    "apiKeyPlaceholder": "Opsional; jatuh kembali ke kunci lokal",
    "sudoPassword": "Kata Sandi Sudo",
    "cachedPassword": "Di-cache untuk proses ini",
    "saveSettings": "Simpan Pengaturan",
    "settingsSaved": "Pengaturan MITM disimpan.",
    "startedSuccess": "Proksi MITM dimulai.",
    "stoppedSuccess": "Proksi MITM berhenti.",
    "saveFailed": "Gagal memperbarui pengaturan MITM.",
    "loadFailed": "Gagal memuat pengaturan MITM.",
    "invalidPort": "Intersepsi MITM transparan saat ini memerlukan port 443.",
    "certificate": "Sertifikat CA",
    "certificateReady": "Sertifikat tersedia untuk instalasi kepercayaan klien.",
    "certificateMissing": "Sertifikat belum dibuat.",
    "available": "Tersedia",
    "missing": "Hilang",
    "downloadCert": "Unduh Sertifikat CA",
    "regenerateCert": "Sertifikat Regenerasi",
    "regenerateConfirm": "Ini akan membatalkan kepercayaan klien yang ada. Melanjutkan?",
    "regenerateSuccess": "Sertifikat MITM dibuat ulang.",
    "regenerateFailed": "Gagal membuat ulang sertifikat MITM.",
    "targetRoutes": "Rute Sasaran",
    "interceptedRequests": "Permintaan yang Disadap",
    "activeConnections": "Koneksi Aktif",
    "dnsConfigured": "DNS Dikonfigurasi",
    "pid": "PID",
    "lastIntercept": "Intersepsi Terakhir",
    "target": "Sasaran",
    "host": "Tuan rumah",
    "localPort": "Pelabuhan Lokal",
    "endpoints": "Titik akhir",
    "enabled": "Diaktifkan",
    "configured": "Dikonfigurasi",
    "yes": "Ya",
    "no": "Tidak",
    "noTargets": "Tidak ada rute target yang dikonfigurasi."
  },
  "limits": {
    "title": "Batas & Kuota",
    "rateLimit": "Batas Nilai",
    "remaining": "Tersisa",
    "requestsPerMinute": "Permintaan/mnt",
    "tokensPerMinute": "Token/mnt",
    "dailyLimit": "Batas Harian"
  },
  "logs": {
    "title": "Log",
    "requestLogs": "Log Permintaan",
    "proxyLogs": "Log Proksi",
    "auditLog": "Catatan Audit",
    "console": "Konsol",
    "auditLogDesc": "Tindakan administratif dan tindakan keamanan",
    "loading": "Memuat...",
    "refresh": "Segarkan",
    "filterByAction": "Filter berdasarkan tindakan...",
    "filterByActor": "Filter menurut aktor...",
    "filterEntriesAria": "Filter entri log audit",
    "filterByActionTypeAria": "Filter berdasarkan jenis tindakan",
    "filterByActorAria": "Filter berdasarkan aktor",
    "refreshAuditLogAria": "Segarkan log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "showing": "Menampilkan entri {count} (mengimbangi {offset})",
    "search": "Cari",
    "timestamp": "Stempel waktu",
    "action": "Tindakan",
    "actor": "Aktor",
    "target": "Sasaran",
    "details": "Detail",
    "ipAddress": "Alamat IP",
    "notAvailable": "—",
    "noEntries": "Tidak ditemukan entri log audit",
    "previous": "Sebelumnya",
    "next": "Selanjutnya",
    "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": "Hapus Semua",
    "confirmClearActiveRequests": "Hapus 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": "Keamanan",
    "test": "Tes",
    "ready": "Siap!",
    "setPassword": "Tetapkan Kata Sandi",
    "addProvider": "Tambahkan penyedia pertama Anda",
    "getStarted": "Memulai",
    "skip": "Lewati",
    "skipWizard": "Lewati wizard sepenuhnya",
    "skipPassword": "Lewati pengaturan kata sandi",
    "skipAndContinue": "Lewati & Lanjutkan",
    "passwordLabel": "Kata sandi",
    "confirmPassword": "Konfirmasi Kata Sandi",
    "enterPassword": "Masukkan kata sandi",
    "confirmPasswordPlaceholder": "Konfirmasikan kata sandi",
    "passwordsMismatch": "Kata sandi tidak cocok",
    "setupComplete": "Penyiapan Selesai!",
    "goToDashboard": "Buka Dasbor →",
    "welcomeDesc": "OmniRoute adalah proksi AI API lokal Anda. Ini merutekan permintaan ke beberapa penyedia AI dengan penyeimbangan beban, failover, dan pelacakan penggunaan.",
    "multiProvider": "Multi-Penyedia",
    "usageTracking": "Pelacakan Penggunaan",
    "securityDesc": "Tetapkan kata sandi untuk melindungi dasbor Anda, atau lewati saja sekarang.",
    "providerDesc": "Hubungkan penyedia AI pertama Anda. Anda dapat menambahkan lebih banyak lagi nanti.",
    "apiKeyRequired": "Kunci API (wajib)",
    "customUrlOptional": "URL khusus (opsional)",
    "testDesc": "Mari verifikasi koneksi penyedia Anda berfungsi.",
    "runTest": "Jalankan Tes Koneksi",
    "testingConnection": "Menguji koneksi...",
    "connectionSuccessful": "Koneksi berhasil! Penyedia Anda sudah siap.",
    "noProviderFound": "Tidak ada penyedia yang ditemukan. Anda dapat menambahkannya dari dasbor nanti.",
    "testFailed": "Pengujian gagal, namun Anda dapat mengonfigurasinya nanti.",
    "couldNotTest": "Tidak dapat menguji saat ini. Anda dapat mengujinya dari dasbor.",
    "doneDesc": "Anda sudah siap! Instans OmniRoute Anda telah dikonfigurasi dan siap untuk memproksi permintaan AI.",
    "yourEndpoint": "Titik akhir Anda:",
    "continue": "Lanjutkan",
    "retry": "Coba lagi",
    "failedSetPassword": "Gagal menyetel kata sandi. Coba lagi.",
    "failedAddProvider": "Gagal menambahkan penyedia. Coba lagi.",
    "connectionError": "Kesalahan koneksi. Silakan coba lagi.",
    "provider": "Penyedia",
    "apiKeyHelp": "Kunci API adalah kata sandi untuk layanan AI. Dapatkan satu dari situs web penyedia Anda (mis., platform.openai.com, console.anthropic.com).",
    "tier": {
      "subtitle": "OmniRoute mengatur penyedia menjadi tiga tingkatan sehingga perutean memilih jalur yang paling andal dan berbiaya terendah terlebih dahulu.",
      "tier1": {
        "label": "Klien premium",
        "description": "CLI kelas satu dengan alur autentikasi asli dan model penalaran."
      },
      "tier2": {
        "label": "Dioptimalkan biaya",
        "description": "Penyedia murah dan throughput tinggi yang digunakan untuk lalu lintas sehari-hari."
      },
      "tier3": {
        "label": "Pengganti & spesialisasi",
        "description": "Titik akhir yang dihosting secara lokal atau khusus digunakan sebagai cadangan."
      },
      "configure": "Konfigurasikan penyedia"
    },
    "tierFlowDiagramAlt": "Diagram cadangan 3 tingkat OmniRoute",
    "apiKeyMgmt": "Manajemen Kunci API"
  },
  "providers": {
    "title": "Penyedia",
    "allProviders": "Semua Penyedia",
    "audioProviders": "Penyedia Audio",
    "showFreeOnly": "Hanya gratis",
    "addProvider": "Tambahkan Penyedia",
    "addFirstProvider": "Tambahkan penyedia pertama Anda",
    "addFirstProviderDesc": "Hubungkan penyedia AI untuk memulai perutean permintaan melalui OmniRoute. Anda dapat menggunakan penyedia gratis, kunci API, atau akun OAuth.",
    "learnMore": "Pelajari lebih lanjut",
    "editProvider": "Sunting Penyedia",
    "deleteProvider": "Hapus Penyedia",
    "noProviders": "Tidak ada penyedia yang dikonfigurasi",
    "modelAvailability": "Ketersediaan Model",
    "accounts": "Akun",
    "newAccount": "Akun Baru",
    "deleteConfirm": "Apakah Anda yakin ingin menghapus penyedia ini?",
    "testing": "Menguji...",
    "testConnection": "Uji Koneksi",
    "testSuccess": "Koneksi berhasil",
    "testFailed": "Koneksi gagal",
    "available": "Tersedia",
    "cooldown": "Pendinginan",
    "unavailable": "Tidak tersedia",
    "unknown": "Tidak diketahui",
    "oauthLabel": "OAuth",
    "compatibleLabel": "Kompatibel",
    "chat": "Obrolan",
    "responses": "Tanggapan",
    "messages": "Pesan",
    "oauthProviders": "Penyedia OAuth",
    "freeProviders": "Penyedia Gratis",
    "apiKeyProviders": "Penyedia Kunci API",
    "compatibleProviders": "Penyedia Kompatibel Kunci API",
    "testAll": "Uji Semua",
    "testAllOAuth": "Uji semua koneksi OAuth",
    "testAllFree": "Uji semua koneksi Gratis",
    "testAllApiKey": "Uji semua koneksi Kunci API",
    "testAllCompatible": "Uji semua koneksi yang Kompatibel",
    "connected": "{count} Terhubung",
    "errorCount": "{count} Kesalahan ({code})",
    "errorCountNoCode": "{count} Kesalahan",
    "warningCount": "{count} Peringatan",
    "noConnections": "Tidak ada koneksi",
    "expiredBadge": "Expired",
    "expiringSoonBadge": "Expiring Soon",
    "freeTier": "Tingkat Gratis",
    "freeTierAvailable": "Tersedia tingkat gratis",
    "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": "Tidak digunakan lagi",
    "deprecatedProvider": "Penyedia ini sudah tidak digunakan lagi",
    "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": "Dengan disabilitas",
    "enableProvider": "Aktifkan penyedia",
    "disableProvider": "Nonaktifkan penyedia",
    "testResults": "Hasil Tes",
    "noCompatibleYet": "Belum ada penyedia kompatibel yang ditambahkan",
    "compatibleHint": "Gunakan tombol di atas untuk menambahkan titik akhir yang kompatibel dengan OpenAI atau Anthropic",
    "addOpenAICompatible": "Tambahkan Kompatibel dengan OpenAI",
    "addAnthropicCompatible": "Tambahkan Kompatibel Antropis",
    "addNewProvider": "Tambahkan Penyedia Baru",
    "backToProviders": "Kembali ke Penyedia",
    "configureNewProvider": "Konfigurasikan penyedia AI baru untuk digunakan dengan aplikasi Anda.",
    "providerLabel": "Penyedia",
    "selectProvider": "Pilih penyedia",
    "selectedProvider": "Penyedia yang dipilih",
    "authMethod": "Metode Otentikasi",
    "apiKeyLabel": "Kunci API",
    "apiKeyRequired": "Kunci API diperlukan",
    "selectProviderRequired": "Silakan pilih penyedia",
    "enterApiKey": "Masukkan kunci API Anda",
    "apiKeySecure": "Kunci API Anda akan dienkripsi dan disimpan dengan aman.",
    "oauth2Connect": "Terhubung dengan OAuth2",
    "oauth2Label": "OAuth2",
    "oauth2Desc": "Hubungkan akun Anda menggunakan autentikasi OAuth2.",
    "displayName": "Nama Tampilan",
    "displayNamePlaceholder": "misalnya, API Produksi, Lingkungan Pengembang",
    "displayNameHint": "Opsional. Nama yang bersahabat untuk mengidentifikasi konfigurasi ini.",
    "active": "Aktif",
    "activeDescription": "Aktifkan penyedia ini untuk digunakan dalam aplikasi Anda",
    "cancel": "Batalkan",
    "createProvider": "Buat Penyedia",
    "failedCreate": "Gagal membuat penyedia",
    "errorOccurred": "Terjadi kesalahan. Silakan coba lagi.",
    "modelStatus": "Status Model",
    "showConfiguredOnly": "Configured only",
    "allModelsOperational": "Semua model beroperasi",
    "modelsWithIssues": "{count} model yang bermasalah",
    "allModelsNormal": "Semua model merespons secara normal.",
    "cooldownCleared": "Cooldown selesai untuk {model}",
    "failedClearCooldown": "Gagal menghapus cooldown",
    "loadingAvailability": "Memuat ketersediaan model...",
    "clearCooldown": "Jelas",
    "clearing": "Membersihkan...",
    "until": "Sampai {time}",
    "providerTestFailed": "Tes penyedia gagal",
    "providerTestTimeout": "Provider test timed out — too many connections to test at once",
    "modeTest": "{mode} Tes",
    "passedCount": "{count} lulus",
    "failedCount": "{count} gagal",
    "testedCount": "{count} diuji",
    "millisecondsAbbr": "{value}ms",
    "okShort": "Oke",
    "errorShort": "KESALAHAN",
    "noActiveConnectionsInGroup": "Tidak ditemukan koneksi aktif untuk grup ini.",
    "allTestsPassed": "Semua tes {total} lulus",
    "testSummary": "{passed}/{total} lulus, {failed} gagal",
    "nameLabel": "Nama",
    "prefixLabel": "Awalan",
    "baseUrlLabel": "URL dasar",
    "apiTypeLabel": "Jenis API",
    "prefixHint": "Diperlukan. Awalan unik untuk nama model.",
    "nameHint": "Diperlukan. Label ramah untuk node ini.",
    "baseUrlHint": "Diperlukan.  URL dasar API penyedia.",
    "anthropicPrefixPlaceholder": "ac-prod",
    "openaiPrefixPlaceholder": "oc-prod",
    "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1",
    "openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "validateConnection": "Validasi Koneksi",
    "validating": "Memvalidasi...",
    "connectionValid": "Koneksi valid!",
    "connectionFailed": "Koneksi gagal. Periksa URL dan kunci.",
    "testKeyLabel": "Uji Kunci API",
    "testKeyPlaceholder": "sk-... (untuk validasi saja)",
    "providerNotFound": "Penyedia tidak ditemukan",
    "deleteConnectionConfirm": "Hapus koneksi 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 menyetel alias",
    "failedSaveConnection": "Gagal menyimpan koneksi",
    "failedSaveConnectionRetry": "Gagal menyimpan koneksi. Silakan coba lagi.",
    "failedRetestConnection": "Gagal menguji ulang koneksi",
    "deleteCompatibleNodeConfirm": "Hapus node yang kompatibel dengan {type} ini?",
    "anthropicCompatibleDetails": "Detail Kompatibel Antropis",
    "openaiCompatibleDetails": "Detail Kompatibel OpenAI",
    "messagesApi": "API Pesan",
    "responsesApi": "API Respons",
    "embeddings": "Embeddings",
    "audioTranscriptions": "Audio Transcriptions",
    "audioSpeech": "Audio Speech",
    "imagesGenerations": "Images Generations",
    "chatCompletions": "Penyelesaian Obrolan",
    "importingModels": "Mengimpor...",
    "importFromModels": "Impor dari /models",
    "modelsImported": "{count} models imported",
    "allModelsAlreadyImported": "Semua model sudah diimpor",
    "noNewModelsToImport": "Tidak ada model baru untuk diimpor — semua model sudah ada di registri atau daftar model kustom",
    "skippingExistingModels": "Melewatkan {count} model yang sudah ada",
    "autoSync": "Sinkronisasi Otomatis",
    "autoSyncTooltip": "Segarkan daftar model secara otomatis setiap 24 jam (dapat dikonfigurasi melalui MODEL_SYNC_INTERVAL_HOURS)",
    "autoSyncEnabled": "Sinkronisasi otomatis diaktifkan — model akan disegarkan secara berkala",
    "autoSyncDisabled": "Sinkronisasi otomatis dinonaktifkan",
    "autoSyncToggleFailed": "Gagal mengaktifkan sinkronisasi otomatis",
    "clearAllModels": "Hapus Semua Model",
    "clearAllModelsConfirm": "Apakah Anda yakin ingin menghapus semua model untuk penyedia ini?",
    "clearAllModelsSuccess": "Semua model dihapus",
    "clearAllModelsFailed": "Gagal menghapus model",
    "addConnectionToImport": "Tambahkan koneksi untuk mengaktifkan impor.",
    "noModelsConfigured": "Tidak ada model yang dikonfigurasi",
    "connectionCount": "{count} koneksi",
    "fetchingModels": "Mengambil model yang tersedia...",
    "failedFetchModels": "Gagal mengambil model",
    "noModelsFound": "Tidak ada model yang ditemukan",
    "importFailed": "Impor gagal",
    "noNewModelsAdded": "Tidak ada model baru yang ditambahkan.",
    "adding": "Menambahkan...",
    "close": "Close",
    "importingModelsTitle": "Mengimpor Model",
    "copyModel": "Salin modelnya",
    "filterModels": "Filter model…",
    "modelsActive": "aktif",
    "showModel": "Tampilkan model",
    "hideModel": "Sembunyikan model",
    "removeModel": "Hapus modelnya",
    "rateLimitProtected": "Dilindungi",
    "rateLimitUnprotected": "Tidak terlindungi",
    "enableRateLimitProtection": "Klik untuk mengaktifkan perlindungan batas tarif",
    "disableRateLimitProtection": "Klik untuk menonaktifkan perlindungan batas tarif",
    "productionKey": "Kunci Produksi",
    "enterNewApiKey": "Masukkan kunci API baru",
    "codexApplyModalTitle": "Berlaku untuk Codex Lokal",
    "codexApplyTargetLabel": "Jalur sasaran",
    "codexApplyBackupLabel": "Cadangan",
    "codexApplyWarning": "Ini akan menggantikan auth.json yang ada. Melanjutkan?",
    "codexApplyConfirmCheckbox": "Saya mengonfirmasi bahwa saya ingin mengganti auth.json yang ada",
    "codexApply": "Terapkan",
    "bulkTabSingle": "Lajang",
    "bulkTabBulkAdd": "Tambah Massal",
    "bulkAddFormatHint": "Satu kunci per baris. Format: nama|apiKey atau hanya apiKey (dinamai otomatis berdasarkan indeks).",
    "bulkValidateKeys": "Validasi setiap kunci sebelum menyimpan (lebih lambat)",
    "bulkAddAllKeys": "Tambahkan Semua Kunci",
    "bulkAddedCount": "{count, plural, one {# key added} other {# keys added}}",
    "bulkFailedCount": "{count, plural, one {# failed} other {# failed}}",
    "optional": "Opsional",
    "anthropicCompatibleName": "Kompatibel Antropis",
    "openaiCompatibleName": "Kompatibel dengan OpenAI",
    "failedImportModels": "Gagal mengimpor model",
    "noModelsReturnedFromEndpoint": "Tidak ada model yang dikembalikan dari titik akhir /models.",
    "importingModelsProgress": "Mengimpor {current} dari {total} model...",
    "foundModelsStartingImport": "Ditemukan model {count}. Mulai mengimpor...",
    "importingModelById": "Mengimpor {modelId}...",
    "importSuccessCount": "Berhasil mengimpor {count, plural, one {# model} other {# models}}!",
    "noNewModelsAddedExisting": "Tidak ada model baru yang ditambahkan (semua sudah ada).",
    "importDoneCount": "✓ Selesai! {count, plural, one {# model imported.} other {# models imported.}}",
    "unexpectedErrorOccurred": "Terjadi kesalahan yang tidak terduga",
    "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}",
    "messagesPath": "pesan",
    "responsesPath": "tanggapan",
    "chatCompletionsPath": "obrolan/penyelesaian",
    "add": "Tambahkan",
    "edit": "Sunting",
    "delete": "Hapus",
    "anthropic": "Antropis",
    "openai": "OpenAI",
    "singleConnectionPerCompatible": "Hanya satu koneksi yang diperbolehkan per node yang kompatibel. Tambahkan node lain jika Anda memerlukan lebih banyak koneksi.",
    "connections": "Koneksi",
    "providerProxyTitleConfigured": "Proksi penyedia: {host}",
    "configured": "dikonfigurasi",
    "providerProxyConfigureHint": "Konfigurasikan proxy untuk semua koneksi penyedia ini",
    "providerProxy": "Proksi Penyedia",
    "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": "Belum ada koneksi",
    "addFirstConnectionHint": "Tambahkan koneksi pertama Anda untuk memulai",
    "addConnection": "Tambahkan Koneksi",
    "availableModels": "Model yang Tersedia",
    "builtInModels": "Built-in models",
    "builtInModelsHint": "Registry models for this provider. Use the pencil to set compatibility options.",
    "pageAutoRefresh": "Halaman akan disegarkan secara otomatis...",
    "statusDisabled": "dengan disabilitas",
    "statusConnected": "terhubung",
    "statusRuntimeIssue": "masalah waktu proses",
    "statusAuthFailed": "autentikasi gagal",
    "statusRateLimited": "tarif terbatas",
    "statusNetworkIssue": "masalah jaringan",
    "statusTestUnsupported": "tes tidak didukung",
    "statusUnavailable": "tidak tersedia",
    "statusFailed": "gagal",
    "statusError": "kesalahan",
    "oauthAccount": "Akun OAuth",
    "errorTypeRuntime": "Waktu proses lokal",
    "errorTypeUpstreamAuth": "Otentikasi hulu",
    "errorTypeMissingCredential": "Kredensial tidak ada",
    "errorTypeRefreshFailed": "Penyegaran gagal",
    "errorTypeTokenExpired": "Token sudah habis masa berlakunya",
    "errorTypeRateLimited": "Tarif terbatas",
    "errorTypeUpstreamUnavailable": "Hulu tidak tersedia",
    "errorTypeNetworkError": "Kesalahan jaringan",
    "errorTypeTestUnsupported": "Tes tidak didukung",
    "errorTypeUpstreamError": "Kesalahan hulu",
    "proxySourceGlobal": "Global",
    "proxySourceProvider": "Penyedia",
    "proxySourceKey": "Kunci",
    "proxyConfiguredBySource": "Proksi ({source}): {host}",
    "autoPriority": "Otomatis: {priority}",
    "proxy": "Proksi",
    "retestAuthentication": "Uji ulang autentikasi",
    "retest": "Tes ulang",
    "disableConnection": "Nonaktifkan koneksi",
    "enableConnection": "Aktifkan koneksi",
    "reauthenticateConnection": "Otentikasi ulang koneksi ini",
    "proxyConfig": "Konfigurasi proxy",
    "aliasExistsAlert": "Alias \"{alias}\" sudah ada. Silakan gunakan model lain atau edit alias yang ada.",
    "openRouterAnyModelHint": "OpenRouter mendukung model apa pun. Tambahkan model dan buat alias untuk akses cepat.",
    "modelIdFromOpenRouter": "ID Model (dari OpenRouter)",
    "openRouterModelPlaceholder": "antropik/claude-3-opus",
    "customModels": "Model Khusus",
    "customModelsHint": "Tambahkan ID model yang tidak ada dalam daftar default. Ini akan tersedia untuk perutean.",
    "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": "Pengalih Kuota Per Model",
    "modelId": "ID Model",
    "customModelPlaceholder": "misalnya gpt-4.5-turbo",
    "loading": "Memuat...",
    "removeCustomModel": "Hapus model khusus",
    "noCustomModels": "Belum ada model khusus yang ditambahkan.",
    "allSuggestedAliasesExist": "Semua alias yang disarankan sudah ada. Silakan pilih model lain atau hapus alias yang bertentangan.",
    "failedSaveCustomModel": "Gagal menyimpan model khusus",
    "modelAddedSuccess": "Model {modelId} berhasil ditambahkan",
    "failedAddModelTryAgain": "Gagal menambahkan model. Silakan coba lagi.",
    "failedSaveImportedModel": "Gagal menyimpan model yang diimpor ke database khusus",
    "failedImportModelsTryAgain": "Gagal mengimpor model. Silakan coba lagi.",
    "failedRemoveModelFromDatabase": "Gagal menghapus model dari database",
    "modelRemovedSuccess": "Model berhasil dihapus",
    "failedDeleteModelTryAgain": "Gagal menghapus model. Silakan coba lagi.",
    "compatibleModelsDescription": "Tambahkan model yang kompatibel dengan {type} secara manual atau impor dari titik akhir /models.",
    "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229",
    "openaiCompatibleModelPlaceholder": "gpt-4o",
    "apiKeyValidationFailed": "Validasi kunci API gagal. Silakan periksa kunci Anda dan coba lagi.",
    "addProviderApiKeyTitle": "Tambahkan Kunci API {provider}",
    "checking": "Memeriksa...",
    "check": "Periksa",
    "valid": "Sah",
    "invalid": "Tidak valid",
    "creating": "Membuat...",
    "validationChecksAnthropicCompatible": "Validasi memeriksa {provider} dengan memverifikasi kunci API.",
    "validationChecksOpenAiCompatible": "Pemeriksaan validasi {provider} melalui /models pada URL dasar Anda.",
    "priorityLabel": "Prioritas",
    "saving": "Menyimpan...",
    "save": "Simpan",
    "editConnection": "Sunting Koneksi",
    "accountName": "Nama akun",
    "email": "Surel",
    "healthCheckMinutes": "Pemeriksaan Kesehatan (menit)",
    "healthCheckHint": "Interval penyegaran token proaktif. 0 = dinonaktifkan.",
    "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 koneksi",
    "failed": "Gagal",
    "leaveBlankKeepCurrentApiKey": "Biarkan kosong untuk mempertahankan kunci API saat ini.",
    "editCompatibleTitle": "Sunting {type} Kompatibel",
    "compatibleBaseUrlHint": "Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.",
    "apiKeyForCheck": "Kunci API (untuk Pemeriksaan)",
    "compatibleProdPlaceholder": "{type} Kompatibel (Prod)",
    "tokenRefreshed": "Token refreshed successfully",
    "tokenRefreshFailed": "Token refresh failed",
    "applyCodexAuthLocal": "Apply auth",
    "exportCodexAuthFile": "Export auth",
    "applyClaudeAuthLocal": "Terapkan autentikasi",
    "exportClaudeAuthFile": "Ekspor autentikasi",
    "importClaudeAuth": "Impor autentikasi",
    "claudeApplyModalTitle": "Berlaku pada Kode Claude Lokal",
    "claudeApplyTargetLabel": "Jalur sasaran",
    "claudeApplyBackupLabel": "Cadangan",
    "claudeApplyMcpHint": "Status MCP OAuth yang ada akan dipertahankan.",
    "claudeApplyWarning": "Ini akan menggantikan bagian claudeAiOauth yang ada. Melanjutkan?",
    "claudeApplyConfirmCheckbox": "Saya mengonfirmasi bahwa saya ingin mengganti bagian claudeAiOauth yang ada",
    "claudeApply": "Terapkan",
    "claudeAuthAppliedLocal": "Autentikasi Claude diterapkan secara lokal",
    "claudeAuthApplyFailed": "Gagal menerapkan autentikasi Claude secara lokal",
    "claudeAuthExported": "File autentikasi Claude diekspor",
    "claudeAuthExportFailed": "Gagal mengekspor file autentikasi Claude",
    "claudeImportModalTitle": "Impor Claude Auth",
    "claudeImportTabSingle": "Lajang",
    "claudeImportTabBulk": "Massal",
    "claudeImportTabUpload": "Unggah berkas",
    "claudeImportTabPaste": "Tempel JSON",
    "claudeImportFileLabel": "Pilih .credentials.json",
    "claudeImportPasteLabel": "Tempelkan konten JSON",
    "claudeImportEmailLabel": "Email akun",
    "claudeImportNameLabel": "Nama koneksi (opsional)",
    "claudeImportOverwriteLabel": "Ganti koneksi yang ada jika akun sudah ada",
    "claudeImportSubmit": "Impor",
    "claudeImportSuccess": "Koneksi Claude berhasil diimpor",
    "claudeImportInvalidJson": "Tidak dapat menguraikan file sebagai JSON",
    "claudeImportInvalidShape": "File tersebut bukan .credentials.json yang valid",
    "claudeImportDuplicate": "Akun sudah ada — aktifkan \"Ganti yang ada\" untuk menimpa",
    "claudeImportIdentityUnverified": "Bootstrap tidak dapat memverifikasi akun. Aktifkan \"Ganti yang ada\" atau berikan email.",
    "claudeImportFailed": "Gagal mengimpor autentikasi Claude",
    "claudeImportBulkModeUpload": "Unggah file",
    "claudeImportBulkModePaste": "Tempel larik JSON",
    "claudeImportBulkModeZip": "Unggah ZIP",
    "claudeImportBulkUploadHint": "Letakkan atau ambil hingga 50 file .credentials.json (masing-masing 256KB, total 10MB).",
    "claudeImportBulkPasteHint": "Tempelkan array objek: [{ json, name?, email? }, ...]",
    "claudeImportBulkZipHint": "ZIP berisi entri .json. Maks 50 entri, 10MB dibongkar.",
    "claudeImportBulkSubmit": "Impor semua",
    "claudeImportBulkSuccess": "Koneksi {count} Claude yang diimpor",
    "claudeImportBulkFailed": "Beberapa entri gagal diimpor",
    "claudeImportBulkZipExtracting": "Mengekstrak ZIP…",
    "claudeImportBulkZipError": "Gagal mengekstrak ZIP",
    "applyGeminiAuthLocal": "Terapkan autentikasi",
    "exportGeminiAuthFile": "Ekspor autentikasi",
    "importGeminiAuth": "Impor autentikasi",
    "geminiApplyModalTitle": "Terapkan ke CLI Gemini Lokal",
    "geminiApplyTargetLabel": "Jalur sasaran",
    "geminiApplyBackupLabel": "Cadangan",
    "geminiApplyAccountsHint": "Akun aktif google_accounts.json akan diperbarui agar sesuai dengan koneksi ini.",
    "geminiApplyWarning": "Ini akan menggantikan oauth_creds.json yang ada dan memperbarui google_accounts.json. Melanjutkan?",
    "geminiApplyConfirmCheckbox": "Saya mengonfirmasi bahwa saya ingin mengganti oauth_creds.json yang ada",
    "geminiApply": "Terapkan",
    "geminiAuthAppliedLocal": "Autentikasi Gemini diterapkan secara lokal",
    "geminiAuthApplyFailed": "Gagal menerapkan autentikasi Gemini secara lokal",
    "geminiAuthExported": "File autentikasi Gemini diekspor",
    "geminiAuthExportFailed": "Gagal mengekspor file autentikasi Gemini",
    "geminiImportModalTitle": "Impor Otentikasi Gemini",
    "geminiImportTabSingle": "Lajang",
    "geminiImportTabBulk": "Massal",
    "geminiImportTabUpload": "Unggah berkas",
    "geminiImportTabPaste": "Tempel JSON",
    "geminiImportFileLabel": "Pilih oauth_creds.json",
    "geminiImportPasteLabel": "Tempelkan konten JSON",
    "geminiImportEmailLabel": "Email akun",
    "geminiImportNameLabel": "Nama koneksi (opsional)",
    "geminiImportOverwriteLabel": "Ganti koneksi yang ada jika akun sudah ada",
    "geminiImportSubmit": "Impor",
    "geminiImportSuccess": "Koneksi Gemini berhasil diimpor",
    "geminiImportInvalidJson": "Tidak dapat menguraikan file sebagai JSON",
    "geminiImportInvalidShape": "File tersebut bukan oauth_creds.json yang valid",
    "geminiImportDuplicate": "Akun sudah ada — aktifkan \"Ganti yang ada\" untuk menimpa",
    "geminiImportIdentityUnverified": "Tidak dapat memverifikasi identitas dari id_token. Aktifkan \"Ganti yang ada\" atau berikan email.",
    "geminiImportFailed": "Gagal mengimpor autentikasi Gemini",
    "geminiImportBulkModeUpload": "Unggah file",
    "geminiImportBulkModePaste": "Tempel larik JSON",
    "geminiImportBulkModeZip": "Unggah ZIP",
    "geminiImportBulkUploadHint": "Letakkan atau ambil hingga 50 file oauth_creds.json (masing-masing 256KB, total 10MB).",
    "geminiImportBulkPasteHint": "Tempelkan array objek: [{ json, name?, email? }, ...]",
    "geminiImportBulkZipHint": "ZIP berisi entri oauth_creds.json. Maks 50 entri, 10MB dibongkar.",
    "geminiImportBulkSubmit": "Impor semua",
    "geminiImportBulkSuccess": "Koneksi {count} Gemini yang diimpor",
    "geminiImportBulkFailed": "Beberapa entri gagal diimpor",
    "geminiImportBulkZipExtracting": "Mengekstrak ZIP…",
    "geminiImportBulkZipError": "Gagal mengekstrak 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": "Impor autentikasi",
    "codexImportModalTitle": "Impor Codex Auth",
    "codexImportTabSingle": "Lajang",
    "codexImportTabBulk": "Massal",
    "codexImportTabUpload": "Unggah berkas",
    "codexImportTabPaste": "Tempel JSON",
    "codexImportFileLabel": "Pilih auth.json",
    "codexImportFileHint": "Pilih file auth.json yang diekspor dari Codex atau dari OmniRoute.",
    "codexImportPasteLabel": "Tempelkan konten JSON",
    "codexImportEmailLabel": "Email akun",
    "codexImportEmailHint": "Terdeteksi secara otomatis dari file; edit jika diperlukan.",
    "codexImportNameLabel": "Nama koneksi (opsional)",
    "codexImportOverwriteLabel": "Ganti koneksi yang ada jika akun sudah ada",
    "codexImportSubmit": "Impor",
    "codexImportSuccess": "Koneksi codex berhasil diimpor",
    "codexImportInvalidJson": "Tidak dapat menguraikan file sebagai JSON",
    "codexImportInvalidShape": "File tersebut bukan Codex auth.json yang valid",
    "codexImportDuplicate": "Akun sudah ada — aktifkan \"Ganti yang ada\" untuk menimpa",
    "codexImportFailed": "Gagal mengimpor autentikasi Codex",
    "codexImportDetectedEmail": "Terdeteksi: {email}",
    "codexImportNoEmailDetected": "Tidak ada email yang terdeteksi dalam file",
    "codexImportBulkModeUpload": "Unggah file",
    "codexImportBulkModePaste": "Tempel daftar",
    "codexImportBulkModeZip": "Arsip ZIP",
    "codexImportBulkUploadHint": "Pilih beberapa file .json atau seret dan lepas",
    "codexImportBulkPasteHint": "Array JSON [ {...}, {...} ] atau beberapa JSON dipisahkan oleh --- pada barisnya sendiri",
    "codexImportBulkZipHint": "Unggah .zip yang berisi file auth.json (maks 50 file, 10 MB)",
    "codexImportBulkSubmit": "Impor akun {count}",
    "codexImportBulkLimit": "Maksimum 50 file per impor",
    "codexImportBulkSuccess": "{count} diimpor",
    "codexImportBulkFailed": "{count} gagal",
    "codexImportBulkZipExtracting": "Mengekstrak ZIP…",
    "codexImportBulkZipError": "Gagal mengekstrak 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": "Penyedia Agen Cloud",
    "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 → Penyimpanan Lokal → https://t3.chat, salin 'convex-session-id'. Lalu buka DevTools → Jaringan, salin header Cookie lengkap dari permintaan obrolan apa pun. Tempelkan kedua nilai pada kolom di bawah.",
    "t3ChatWebCookiePlaceholder": "id-sesi-cembung=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 Proyek Google Cloud Anda. Diperlukan untuk akun dengan pengecualian. Masukkan ID Project GCP Anda untuk digunakan dengan Gemini CLI.",
    "geminiCliProjectIdLabel": "ID Proyek Google Cloud",
    "geminiCliProjectIdPlaceholder": "id-proyek-gcp-saya",
    "antigravityProjectIdHint": "Penggantian opsional untuk permintaan Antigravity Cloud Code. Biarkan kosong untuk menggunakan proyek yang ditemukan selama 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 Proyek Google Cloud",
    "antigravityProjectIdPlaceholder": "id-proyek-gcp-saya",
    "grokWebCookieHint": "Grok Web Cookie Hint",
    "grokWebCookiePlaceholder": "Grok Web Cookie Placeholder",
    "herokuBaseUrlHint": "Heroku Base Url Hint",
    "hideEmail": "Hide Email",
    "imageProviders": "Image Providers",
    "videoProviders": "Pembuatan Video",
    "embeddingRerankProviders": "Penyematan & Pemeringkatan Ulang",
    "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": "Penyedia pencarian...",
    "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": "Penyedia Tingkat Gratis",
    "freeTierLabel": "Tersedia tingkat gratis",
    "freeTierProvidersDesc": "Penyedia dengan tingkatan gratis — beberapa memerlukan pendaftaran kunci API, yang lain tidak memerlukan kredensial sama sekali.",
    "providerSummaryAll": "Jumlah",
    "ideProviders": "Penyedia IDE",
    "ideProvidersDesc": "Editor dengan langganan AI bawaan. Gunakan halaman penyedia untuk mengimpor kredensial langsung dari gantungan kunci IDE.",
    "noIdeProviders": "Tidak ada penyedia IDE yang cocok dengan filter saat ini.",
    "providerDetailFastTierTooltip": "Terapkan tingkat Codex Fast ke semua koneksi Codex secara default",
    "providerDetailFastDefaultLabel": "Standar cepat",
    "providerDetailBrowserManualConnect": "Koneksi browser/manual",
    "providerDetailAuthUrl": "URL Otentikasi",
    "providerDetailCallbackUrl": "URL panggilan balik",
    "providerDetailValidClaudeCredentialsFile": "File kredensial Claude yang valid",
    "providerDetailPathAutoDetectedAllOs": "Jalur terdeteksi secara otomatis per OS (Linux/Mac/Windows).",
    "providerDetailMyClaudeAccountPlaceholder": "Akun Claude-ku",
    "providerDetailPathAutoDetected": "Jalur terdeteksi secara otomatis per 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": "Penyedia ini menggunakan sesi web browser, cookie, atau token web, bukan kunci API. Buka penyedia untuk menambahkan kredensial 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": "Wisaya Orientasi Penyedia",
    "onboardingWizardShort": "Wisaya Orientasi",
    "onboardingWizardDescription": "Hubungkan penyedia kunci API, kompatibilitas khusus, dan OAuth dengan validasi, persistensi, dan pengujian koneksi langsung.",
    "onboardingStepType": "Ketik",
    "onboardingStepProvider": "Penyedia",
    "onboardingStepCredentials": "Kredensial",
    "onboardingStepResult": "Hasil",
    "onboardingTypeApiKeyTitle": "Penyedia kunci API",
    "onboardingTypeApiKeyText": "Gunakan penyedia bawaan seperti OpenAI, Anthropic, Gemini, Groq, Azure, dan banyak lagi.",
    "onboardingTypeCustomTitle": "Penyedia khusus yang kompatibel",
    "onboardingTypeCustomText": "Buat titik akhir yang kompatibel dengan OpenAI, Anthropic, atau Claude Code dan tambahkan kuncinya.",
    "onboardingTypeOAuthTitle": "Penyedia OAuth",
    "onboardingTypeOAuthText": "Gunakan kembali OAuth, kode perangkat, atau alur impor lokal yang ada untuk penyedia pengkodean.",
    "onboardingChooseOAuthProvider": "Pilih penyedia OAuth",
    "onboardingChooseApiKeyProvider": "Pilih penyedia kunci API",
    "onboardingChooseProviderDescription": "Pilih penyedia, lalu wizard akan memandu Anda melalui kredensial dan pengujian.",
    "onboardingChangeType": "Ubah jenis",
    "onboardingChangeProvider": "Ganti penyedia",
    "onboardingSearchProviders": "Penyedia pencarian…",
    "onboardingApiKeyOptional": "Kunci API opsional",
    "onboardingProviderConnected": "Penyedia terhubung",
    "onboardingProviderSavedWithWarnings": "Penyedia disimpan dengan peringatan",
    "onboardingProviderFinished": "Orientasi penyedia selesai",
    "onboardingYourProviderConnection": "Koneksi penyedia Anda",
    "onboardingTestPassed": "Tes lulus",
    "onboardingTestFailed": "Tes gagal",
    "onboardingOpenProviderDetails": "Buka detail penyedia",
    "onboardingTryInPlayground": "Cobalah di taman bermain",
    "onboardingDefaultConnectionName": "{provider} Pratama",
    "onboardingTestingConnection": "Menguji koneksi penyedia…",
    "onboardingValidatingCredentials": "Memvalidasi kredensial…",
    "onboardingSavingConnection": "Menyimpan koneksi penyedia…",
    "onboardingProviderFailed": "Orientasi penyedia gagal",
    "onboardingCreatingCompatibleProvider": "Membuat penyedia yang kompatibel…",
    "onboardingSavingCompatibleConnection": "Menyimpan koneksi penyedia yang kompatibel…",
    "onboardingCustomProviderFallbackName": "Penyedia khusus",
    "onboardingCustomProviderFailed": "Orientasi penyedia khusus gagal",
    "onboardingLoadingOAuthConnection": "Memuat koneksi OAuth…",
    "onboardingOAuthNoConnectionFound": "OAuth selesai, namun koneksi penyedia tidak ditemukan.",
    "onboardingOAuthFailed": "Orientasi OAuth gagal",
    "onboardingAddProvider": "Tambahkan {provider}",
    "onboardingConnectionName": "Nama koneksi",
    "onboardingApiKeyOptionalLabel": "Kunci API (opsional)",
    "onboardingBaseUrlOverride": "Penggantian URL dasar",
    "onboardingBaseUrlOverrideHint": "Opsional. Disimpan sebagai penyediaSpecificData.baseUrl.",
    "onboardingRegion": "Wilayah",
    "onboardingSearchCx": "Cari CX / ID mesin",
    "onboardingProviderSpecificIdPlaceholder": "ID khusus penyedia opsional",
    "onboardingCustomUserAgent": "Agen Pengguna Khusus",
    "onboardingWorking": "Bekerja…",
    "onboardingValidateSaveTest": "Validasi, simpan, dan uji",
    "onboardingBack": "Kembali",
    "onboardingCreateCustomCompatibleProvider": "Buat penyedia khusus yang kompatibel",
    "onboardingCreateCustomCompatibleDescription": "Wizard membuat node penyedia terlebih dahulu, lalu menyimpan dan menguji koneksi kunci API-nya.",
    "onboardingProtocol": "Protokol",
    "onboardingOpenAiCompatible": "Kompatibel dengan OpenAI",
    "onboardingAnthropicCompatible": "Kompatibel dengan antropik",
    "onboardingClaudeCodeCompatible": "Kompatibel dengan Kode Claude",
    "onboardingProviderPrefix": "Awalan penyedia",
    "onboardingProviderPrefixHint": "Digunakan untuk menghasilkan id penyedia terkelola.",
    "onboardingChatPath": "Jalur obrolan",
    "onboardingModelsPath": "Jalur model",
    "onboardingCreateSaveTest": "Buat, simpan, dan uji",
    "onboardingConnectProvider": "Hubungkan {provider}",
    "onboardingOAuthFlowDescription": "OmniRoute akan membuka aliran OAuth yang ada untuk penyedia ini. Setelah login, wizard memuat ulang koneksi yang disimpan dan menjalankan tes koneksi yang sama seperti halaman penyedia.",
    "onboardingStartOAuthFlow": "Mulai alur OAuth",
    "passthroughModelsDescription": "{provider} menerima ID model asli penyedia. Impor dari /models atau tambahkan ID khusus untuk perutean.",
    "bedrockModelsDescription": "Model Amazon Bedrock dicakup berdasarkan wilayah AWS. Impor dari /models atau tambahkan ID model Batuan Dasar yang diaktifkan di wilayah yang dipilih.",
    "bedrockModelPlaceholder": "antropik.claude-soneta-4-6",
    "addProviderSessionCookieTitle": "Tambahkan cookie sesi {provider}",
    "addProviderWebTokenTitle": "Tambahkan token web {provider}",
    "addProviderConnectionTitle": "Tambahkan koneksi {provider}",
    "webTokenCredentialLabel": "Token sesi web",
    "webNoAuthCredentialLabel": "Tidak diperlukan kredensial",
    "webCookieCredentialHint": "Cookie yang diperlukan: {credential}. Tempelkan nilai header Cookie dari sesi web {provider} yang Anda gunakan untuk masuk. Jangan sertakan awalan Cookie:.",
    "webTokenCredentialHint": "Kredensial: {credential}. Tempelkan nilai token dari sesi web {provider} yang Anda masuki, atau ekspor HAR DevTools jika penyedia mendukungnya.",
    "webCookieEditHint": "Biarkan kosong untuk menyimpan cookie sesi saat ini. Cookie yang diperlukan: {credential}.",
    "webTokenEditHint": "Biarkan kosong untuk mempertahankan token sesi web saat ini. Kredensial: {credential}.",
    "webSessionGuideTitle": "Cara mendapatkan kredensial sesi",
    "webSessionGuideIntro": "{provider} menggunakan sesi web browser alih-alih kunci API.",
    "webCookieRequiredCredential": "Cookie yang diperlukan: {credential}",
    "webTokenRequiredCredential": "Token yang diperlukan: {credential}",
    "webSessionGuideStep1": "Masuk ke {provider} di browser Anda.",
    "webSessionGuideStep2": "Buka alat pengembang browser dan periksa permintaan yang dibuat oleh aplikasi web.",
    "webSessionGuideStep3": "Salin kredensial yang diperlukan dari domain penyedia itu sendiri. Untuk cookie, salin hanya nilai header Cookie dan hilangkan Cookie:.",
    "webSessionGuideStep4": "Rekatkan di sini dan periksa koneksinya. Jika berhenti berfungsi, masuk lagi dan ganti dengan nilai baru.",
    "webSessionSecurityHint": "Perlakukan ini seperti kata sandi: kata sandi tersebut dapat mengakses akun web yang Anda masuki hingga masa berlakunya habis atau dicabut.",
    "webNoAuthGuideTitle": "Tidak diperlukan kredensial",
    "webNoAuthGuideBody": "{provider} tidak memerlukan kunci API atau cookie. Simpan koneksi untuk menggunakan titik akhir web gratisnya.",
    "webSessionCredentialValidationFailed": "Validasi kredensial sesi gagal. Masuk lagi, salin kredensial baru, dan coba lagi.",
    "checkCookie": "Periksa kue",
    "checkWebToken": "Periksa token"
  },
  "settings": {
    "title": "Pengaturan",
    "general": "Umum",
    "security": "Keamanan",
    "appearance": "Penampilan",
    "routing": "Perutean",
    "cache": "Tembolok",
    "resilience": "Ketahanan",
    "routingSettingsIntro": "Mengontrol bagaimana permintaan Anda dirutekan, diubah, dan dikirim ke penyedia 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": "Percobaan ulang, cooldown, dan fallback otomatis ketika penyedia gagal.",
    "aiSettingsIntro": "Pengaturan khusus AI untuk memikirkan anggaran, perilaku model, dan kompresi.",
    "systemPrompt": "Perintah Sistem",
    "thinkingBudget": "Memikirkan Anggaran",
    "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": "Harga",
    "storage": "Penyimpanan",
    "policies": "Kebijakan",
    "ipFilter": "penyaring IP",
    "comboDefaults": "Default Kombo",
    "fallbackChains": "Rantai Pengganti",
    "changePassword": "Ubah Kata Sandi",
    "enablePassword": "Aktifkan Kata Sandi",
    "darkMode": "Mode Gelap",
    "lightMode": "Modus 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": "sekarang",
    "modelsDevStats": "Sync Statistics",
    "modelsDevStatsDesc": "Current models.dev data coverage",
    "providers": "Penyedia",
    "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": "Aktifkan Cache",
    "cacheTTL": "Tembolok TTL",
    "maxCacheSize": "Ukuran Tembolok Maks",
    "clearCache": "Hapus Tembolok",
    "cacheCleared": "Cache cleared successfully",
    "clearCacheFailed": "Failed to clear cache",
    "cacheHits": "Cache Hit",
    "cacheMisses": "Cache Hilang",
    "hitRate": "Tingkat Hit",
    "cacheEntries": "Entri Cache",
    "cacheSettings": "Cache Settings",
    "semanticCache": "Semantic Cache",
    "maxEntries": "Max Entries",
    "ttlMinutes": "TTL (minutes)",
    "promptCache": "Tembolok Cepat",
    "strategy": "Strategy",
    "preserveClientCache": "Preserve Client Cache",
    "enabled": "Enabled",
    "loading": "Loading...",
    "saving": "Menyimpan...",
    "save": "Save",
    "circuitBreaker": "Pemutus Arus",
    "retryPolicy": "Kebijakan Coba Ulang",
    "maxRetries": "Percobaan Ulang Maks",
    "retryDelay": "Coba lagi Penundaan",
    "timeoutMs": "Batas waktu (md)",
    "enableSystemPrompt": "Aktifkan Perintah Sistem",
    "systemPromptText": "Teks Perintah 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 mengonfigurasi perilaku. Status pemutusan langsung ditampilkan di halaman Kesehatan. Percobaan ulang khusus kombo dan kontrol slot round-robin tetap pada pengaturan kombo.",
    "enableThinking": "Aktifkan Berpikir",
    "maxThinkingTokens": "Token Berpikir Maks",
    "enableProxy": "Aktifkan Proksi",
    "proxyUrl": "URL proksi",
    "pricingRates": "Format Tarif Harga",
    "currentPricing": "Ikhtisar Harga Saat Ini",
    "loadingPricing": "Memuat data harga...",
    "noPricing": "Tidak ada data harga yang tersedia",
    "input": "Masukan",
    "output": "Keluaran",
    "cached": "Di-cache",
    "reasoning": "Penalaran",
    "cacheCreation": "Pembuatan Cache",
    "customPricing": "Harga Khusus",
    "databaseSize": "Ukuran Basis Data",
    "backupDb": "Basis Data Cadangan",
    "restoreDb": "Pulihkan Basis Data",
    "exportData": "Ekspor Data",
    "importData": "Impor Data",
    "clearData": "Hapus Semua Data",
    "clearDataConfirm": "Ini akan menghapus semua data secara permanen. Apa kamu yakin?",
    "enableRequestLogs": "Aktifkan Log Permintaan",
    "logRetention": "Retensi Log",
    "ipWhitelist": "Daftar Putih IP",
    "ipBlacklist": "Daftar Hitam IP",
    "addIP": "Tambahkan alamat IP",
    "savedSuccessfully": "Pengaturan berhasil disimpan",
    "ai": "AI",
    "advanced": "Lanjutan",
    "localMode": "Mode Lokal — Semua data disimpan di mesin Anda",
    "settingsSectionsAria": "Bagian pengaturan",
    "switchThemes": "Beralih antara tema terang dan gelap",
    "themeSelectionAria": "Pemilihan tema",
    "themeLight": "Ringan",
    "themeDark": "Gelap",
    "themeSystem": "Sistem",
    "endpointTunnelVisibility": "Visibilitas terowongan titik akhir",
    "endpointTunnelVisibilityDesc": "Sembunyikan kontrol terowongan dari halaman Titik Akhir tanpa mengubah status terowongan.",
    "showCloudflareTunnel": "Terowongan Cepat Cloudflare",
    "showCloudflareTunnelDesc": "Tampilkan kontrol Cloudflare Quick Tunnel di halaman Endpoint.",
    "showTailscaleFunnel": "Corong Sisik Ekor",
    "showTailscaleFunnelDesc": "Tampilkan kontrol Corong Tailscale di halaman Titik Akhir.",
    "showNgrokTunnel": "Terowongan ngrok",
    "showNgrokTunnelDesc": "Tampilkan kontrol Terowongan ngrok di halaman Titik Akhir.",
    "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 Kesehatan",
    "hideHealthLogsDesc": "Saat AKTIF, sembunyikan pesan [HealthCheck] di konsol server",
    "themeAccent": "Warna tema",
    "themeAccentDesc": "Pilih warna preset atau buat tema Anda sendiri dengan satu warna",
    "themeCreate": "Buat tema",
    "themeCustom": "Tema kustom",
    "themeBlue": "Biru",
    "themeRed": "Merah",
    "themeGreen": "Hijau",
    "themeViolet": "Ungu",
    "themeOrange": "Oranye",
    "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": "Siram Cache",
    "flushing": "Pembilasan…",
    "size": "Ukuran",
    "hits": "Pukulan",
    "evictions": "Penggusuran",
    "loadingCacheStats": "Memuat statistik cache…",
    "globalProxy": "Proksi Global",
    "globalProxyDesc": "Konfigurasikan proksi keluar global untuk semua panggilan API. Penyedia individual, kombo, dan kunci dapat mengesampingkan hal ini.",
    "noGlobalProxy": "Tidak ada proksi global yang dikonfigurasi",
    "globalLabel": "Global",
    "configure": "Konfigurasikan",
    "globalSystemPrompt": "Perintah 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} karakter",
    "thinkingBudgetTitle": "Memikirkan Anggaran",
    "thinkingBudgetDesc": "Kontrol penggunaan token penalaran AI di semua permintaan",
    "passthrough": "Melewati",
    "passthroughDesc": "Tidak ada perubahan — klien mengontrol anggaran pemikiran",
    "auto": "Otomatis",
    "autoDesc": "Hapus semua konfigurasi pemikiran — biarkan penyedia memutuskan",
    "custom": "Adat",
    "customDesc": "Tetapkan anggaran token tetap untuk semua permintaan",
    "adaptive": "adaptif",
    "adaptiveDesc": "Skalakan anggaran berdasarkan kompleksitas permintaan",
    "effortNone": "Tidak ada (0 token)",
    "effortLow": "Rendah (token 1K)",
    "effortMedium": "Sedang (10 ribu token)",
    "effortHigh": "Tinggi (128 ribu token)",
    "tokenBudget": "Anggaran Token",
    "tokens": "token",
    "baseEffortLevel": "Tingkat Upaya Dasar",
    "adaptiveHint": "Mode adaptif diskalakan dari tingkat dasar ini berdasarkan jumlah pesan, penggunaan alat, dan panjang perintah.",
    "requireLogin": "Memerlukan login",
    "requireLoginDesc": "Saat AKTIF, dasbor memerlukan kata sandi. Saat MATI, akses tanpa login.",
    "currentPassword": "Kata Sandi Saat Ini",
    "enterCurrentPassword": "Masukkan kata sandi saat ini",
    "newPassword": "Kata Sandi Baru",
    "enterNewPassword": "Masukkan kata sandi baru",
    "confirmPassword": "Konfirmasi Kata Sandi Baru",
    "confirmPasswordPlaceholder": "Konfirmasikan kata sandi baru",
    "passwordsNoMatch": "Kata sandi tidak cocok",
    "passwordUpdated": "Kata sandi berhasil diperbarui",
    "failedUpdatePassword": "Gagal memperbarui kata sandi",
    "errorOccurred": "Terjadi kesalahan",
    "updatePassword": "Perbarui Kata Sandi",
    "setPassword": "Tetapkan Kata Sandi",
    "apiEndpointProtection": "Perlindungan Titik Akhir API",
    "requireAuthModels": "Memerlukan kunci API untuk /models",
    "requireAuthModelsDesc": "Saat AKTIF, titik akhir /v1/models mengembalikan 404 untuk permintaan yang tidak diautentikasi. Mencegah penemuan model oleh pengguna yang tidak sah.",
    "authModelHeading": "Model otorisasi aktif",
    "authModelClient": "Titik akhir API klien (/v1/*, /chat/*, /responses/*, /codex/*, /messages/*) memerlukan kunci API Pembawa.",
    "authModelManagement": "Titik akhir manajemen (/dashboard, /api/*) memerlukan sesi dasbor atau kredensial manajemen.",
    "authModelPublic": "Hanya rute login, kesehatan, dan bootstrap yang bersifat publik.",
    "bruteForceProtection": "Masuk perlindungan brute force",
    "bruteForceProtectionDesc": "Batasi dan kunci /api/auth/login setelah kegagalan berulang kali dari IP yang sama.",
    "corsAllowedOrigins": "CORS mengizinkan asal",
    "corsAllowedOriginsDesc": "Daftar asal browser yang dipisahkan koma diizinkan untuk memanggil server ini. Daftar kosong = tidak ada akses CORS browser (server-ke-server masih berfungsi). Gunakan CORS_ALLOW_ALL=true env var hanya untuk pengembangan.",
    "blockedProviders": "Penyedia yang Diblokir",
    "blockedProvidersDesc": "Sembunyikan penyedia tertentu dari respons /v1/models. Penyedia yang diblokir tidak akan muncul dalam daftar model.",
    "providersBlocked": "{count} penyedia diblokir dari /models",
    "blockProviderTitle": "Blokir {provider}",
    "unblockProviderTitle": "Buka blokir {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": "Alur Transformasi Blok Sistem",
    "systemTransformsDesc": "Alur transformasi yang dipesan per penyedia diterapkan ke isi permintaan sebelum meneruskan. Mendukung ID penyedia apa pun.",
    "systemTransformsAddProvider": "Tambahkan penyedia",
    "systemTransformsAddProviderPlaceholder": "Pilih penyedia…",
    "systemTransformsAddProviderAllConfigured": "Semua penyedia sudah dikonfigurasi",
    "systemTransformsRemoveProvider": "Hapus penyedia",
    "systemTransformsNoProviders": "Tidak ada penyedia yang dikonfigurasi. Tambahkan penyedia untuk memulai.",
    "systemTransformsOpMoveUp": "Naik",
    "systemTransformsOpMoveDown": "Pindah ke bawah",
    "systemTransformsOpDelete": "Hapus operasi",
    "routingStrategy": "Strategi Perutean",
    "routingAdvancedGuideTitle": "Panduan perutean tingkat lanjut",
    "routingAdvancedGuideHint1": "Gunakan Fill First untuk prioritas yang dapat diprediksi, Round Robin untuk keadilan, dan P2C untuk ketahanan latensi.",
    "routingAdvancedGuideHint2": "Jika penyedia memiliki kualitas/biaya yang berbeda-beda, mulailah dengan Cost Opt (Pilihan Biaya) untuk pekerjaan latar belakang dan Paling Sedikit Digunakan untuk pemakaian yang seimbang.",
    "fillFirst": "Isi Dulu",
    "fillFirstDesc": "Gunakan akun dalam urutan prioritas",
    "roundRobin": "Robin Bulat",
    "roundRobinDesc": "Telusuri semua akun",
    "p2c": "P2C",
    "p2cDesc": "Pilih 2 secara acak, gunakan yang lebih sehat",
    "random": "Acak",
    "randomDesc": "Akun acak setiap permintaan",
    "leastUsed": "Paling Sedikit Digunakan",
    "leastUsedDesc": "Pilih akun yang paling jarang digunakan",
    "costOpt": "Pilihan Biaya",
    "costOptDesc": "Lebih suka akun termurah yang tersedia",
    "resetAware": "RR Sadar Reset",
    "resetAwareDesc": "Lebih suka akun dengan sisa kuota yang sehat dan hampir disetel ulang",
    "strictRandom": "Strict Random",
    "strictRandomDesc": "Shuffle deck — uses each account once before reshuffling",
    "stickyLimit": "Batas Lengket",
    "stickyLimitDesc": "Panggilan per akun sebelum beralih",
    "modelAliases": "Alias Model",
    "modelAliasesTitle": "Alias Model",
    "modelAliasesDesc": "Remap model names using exact matches or wildcard patterns.",
    "addCustomAlias": "Tambah Alias Kustom",
    "deprecatedModelId": "ID model yang sudah usang",
    "newModelId": "ID model baru",
    "customAliases": "Alias Kustom",
    "builtInAliases": "Alias Bawaan",
    "backgroundDegradationTitle": "Degradasi Tugas Latar Belakang",
    "backgroundDegradationDesc": "Deteksi otomatis tugas latar belakang (judul, ringkasan) dan arahkan ke model yang lebih murah",
    "enableDegradation": "Aktifkan Degradasi Latar Belakang",
    "enableDegradationHint": "Saat diaktifkan, tugas latar belakang seperti pembuatan judul dan ringkasan diarahkan ke model yang lebih murah secara otomatis",
    "tasksDetected": "Tugas terdeteksi",
    "degradationMap": "Peta Degradasi Model",
    "premiumModel": "Model premium",
    "cheapModel": "Model murah",
    "detectionPatterns": "Pola Deteksi",
    "newPattern": "cth. \"buat judul\"",
    "aliasPatternPlaceholder": "claude-soneta-*",
    "aliasTargetPlaceholder": "claude-soneta-4-20250514",
    "pattern": "Pola",
    "targetModel": "Model Sasaran",
    "add": "+ Tambahkan",
    "session": "Sesi",
    "sessionDetailsAria": "Detail sesi",
    "status": "Status",
    "authenticated": "Diautentikasi",
    "guest": "Tamu",
    "loginTime": "Waktu Masuk",
    "sessionAge": "Usia Sesi",
    "browser": "Peramban",
    "clearLocalData": "Hapus Data Lokal",
    "logout": "Keluar",
    "clearLocalDataConfirm": "Hapus semua data lokal? Ini akan mengatur ulang preferensi Anda.",
    "unknown": "Tidak diketahui",
    "systemActor": "sistem",
    "ipAccessControl": "Kontrol Akses IP",
    "ipAccessControlDesc": "Blokir atau izinkan alamat IP tertentu",
    "ipModeDisabled": "Dengan disabilitas",
    "ipModeBlacklist": "Daftar Hitam",
    "ipModeWhitelist": "Daftar putih",
    "ipModeWhitelistPriority": "Prioritas WL",
    "addIpAddress": "Tambahkan Alamat IP",
    "ipAddressPlaceholder": "192.168.1.0/24 atau 10.0.*.*",
    "block": "+ Blokir",
    "allow": "+ Izinkan",
    "blocked": "Diblokir ({count})",
    "allowed": "Diizinkan ({count})",
    "temporaryBans": "Larangan Sementara ({count})",
    "minLeft": "{min}m lagi",
    "auditLog": "Catatan Audit",
    "searchAuditLogs": "Telusuri log audit...",
    "failedLoadAuditLog": "Gagal memuat log audit",
    "noAuditEvents": "Tidak ada peristiwa audit yang ditemukan",
    "action": "Tindakan",
    "actor": "Aktor",
    "details": "Detail",
    "time": "Waktu",
    "fallbackChainsTitle": "Rantai Pengganti",
    "fallbackChainsDesc": "Tentukan pesanan cadangan penyedia per model",
    "addChain": "+ Tambahkan Rantai",
    "modelName": "Nama Model",
    "modelNamePlaceholder": "claude-soneta-4-20250514",
    "providersCommaSeparated": "Penyedia (dipisahkan koma, dalam urutan prioritas)",
    "providersCommaSeparatedPlaceholder": "antropik, openai, gemini",
    "createChain": "Buat Rantai",
    "noFallbackChains": "Tidak Ada Rantai Cadangan",
    "noFallbackChainsDesc": "Buat rantai untuk menentukan urutan cadangan penyedia untuk suatu model.",
    "loadingFallbackChains": "Memuat rantai cadangan...",
    "deleteChainConfirm": "Hapus rantai cadangan untuk \"{model}\"?",
    "chainCreated": "Rantai dibuat untuk {model}",
    "chainDeleted": "Rantai dihapus untuk {model}",
    "failedCreateChain": "Gagal membuat rantai",
    "failedDeleteChain": "Gagal menghapus rantai",
    "deleteChain": "Hapus rantai",
    "fillModelAndProviders": "Silakan isi nama model dan penyedia",
    "addAtLeastOneProvider": "Tambahkan setidaknya satu penyedia",
    "comboDefaultsTitle": "Default Kombo",
    "comboDefaultsGuideTitle": "Cara menyetel default kombo",
    "comboDefaultsGuideHint1": "Jaga agar percobaan ulang tetap rendah dalam aliran latensi rendah; menambah waktu tunggu hanya untuk tugas-tugas generasi panjang.",
    "comboDefaultsGuideHint2": "Gunakan penggantian penyedia ketika satu penyedia memerlukan perilaku batas waktu/coba lagi yang berbeda dari default global.",
    "globalComboConfig": "Konfigurasi kombo global",
    "defaultStrategy": "Strategi Bawaan",
    "defaultStrategyDesc": "Diterapkan pada kombo baru tanpa strategi eksplisit",
    "comboStrategyAria": "Strategi kombo",
    "priority": "Prioritas",
    "weighted": "Tertimbang",
    "contextRelay": "Context Relay",
    "contextRelayDesc": "Hands off context between providers with automatic summarization",
    "maxRetriesLabel": "Percobaan Ulang Maks",
    "retryDelayLabel": "Penundaan Coba Lagi (md)",
    "timeoutLabel": "Batas waktu (md)",
    "healthCheck": "Pemeriksaan Kesehatan",
    "healthCheckDesc": "Periksa terlebih dahulu ketersediaan penyedia",
    "trackMetrics": "Lacak Metrik",
    "trackMetricsDesc": "Catat metrik permintaan per kombo",
    "providerOverrides": "Penggantian Penyedia",
    "providerOverridesDesc": "Ganti batas waktu dan coba lagi per penyedia. Pengaturan penyedia mengambil alih pengaturan default global.",
    "providerMaxRetriesAria": "{provider} percobaan ulang maksimal",
    "providerTimeoutAria": "{provider} batas waktu mdtk",
    "removeProviderOverrideAria": "Hapus penggantian {provider}",
    "newProviderNamePlaceholder": "misalnya google, buka...",
    "newProviderNameAria": "Nama penyedia baru",
    "retries": "percobaan ulang",
    "ms": "Nona",
    "saveComboDefaults": "Simpan Default Kombo",
    "maxNestingDepth": "Kedalaman Sarang Maks",
    "concurrencyPerModel": "Konkurensi / Model",
    "queueTimeout": "Batas Waktu Antrian (md)",
    "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 Penyedia",
    "providerProfilesDesc": "Pisahkan pengaturan ketahanan untuk penyedia OAuth (berbasis sesi) dan Kunci API (terukur). Penyedia OAuth memiliki ambang batas yang lebih ketat karena batas tarif yang lebih rendah.",
    "oauthProviders": "Penyedia OAuth",
    "apiKeyProviders": "Penyedia Kunci API",
    "transientCooldown": "Pendinginan Sementara",
    "rateLimitCooldown": "Cooldown Batas Nilai",
    "maxBackoffLevel": "Tingkat Mundur Maks",
    "cbThreshold": "Ambang Batas CB",
    "cbResetTime": "Waktu Reset CB",
    "rateLimiting": "Pembatasan Nilai",
    "rateLimitingDesc": "Penyedia Kunci API secara otomatis dibatasi tarifnya dengan default yang aman. Batasan dipelajari dari header respons dan diadaptasi seiring waktu.",
    "defaultSafetyNet": "Jaring Pengaman Default",
    "rpm": "RPM",
    "minGap": "Kesenjangan Minimal",
    "maxConcurrent": "Maks Bersamaan",
    "activeLimiters": "Pembatas Aktif",
    "noActiveLimiters": "Belum ada pembatas tarif aktif.",
    "reservoir": "waduk",
    "running": "Berlari",
    "queued": "Mengantri",
    "circuitBreakers": "Pemutus Sirkuit",
    "breakerStateClosed": "Tertutup",
    "breakerStateOpen": "Buka",
    "breakerStateHalfOpen": "Setengah Terbuka",
    "tripped": "{count} tersandung",
    "healthy": "{count} sehat",
    "resetAll": "Atur Ulang Semua",
    "noCircuitBreakers": "Belum ada pemutus sirkuit yang aktif. Mereka dibuat secara otomatis ketika permintaan mengalir melalui pipa kombo.",
    "failures": "{count} kegagalan",
    "policiesLocked": "Kebijakan & Pengidentifikasi Terkunci",
    "allOperational": "Semua sistem beroperasi — tidak ada penguncian atau pemutus arus",
    "loadingPolicies": "Memuat kebijakan...",
    "lockedIdentifiers": "Pengidentifikasi Terkunci",
    "unlockedIdentifier": "Tidak Terkunci: {identifier}",
    "sinceDate": "sejak {date}",
    "forceUnlock": "Paksa Buka Kunci",
    "unlocking": "Membuka kunci...",
    "failedUnlock": "Gagal membuka kunci",
    "failedLoadWithStatus": "Gagal memuat: {status}",
    "failedLoadResilience": "Gagal memuat status ketahanan",
    "saveFailed": "Gagal menyimpan",
    "resetFailed": "Penyetelan ulang gagal",
    "loadingResilience": "Memuat status ketahanan...",
    "retry": "Coba lagi",
    "systemStorage": "Sistem & Penyimpanan",
    "allDataLocal": "Semua data disimpan secara lokal di mesin Anda",
    "databasePath": "Jalur Basis Data",
    "exportDatabase": "Ekspor Basis Data",
    "exportAll": "Ekspor Semua (.tar.gz)",
    "importDatabase": "Impor Basis Data",
    "confirmDbImport": "Konfirmasikan Impor Basis Data",
    "confirmDbImportDesc": "Ini akan mengganti semua data saat ini dengan konten dari {file}. Cadangan akan dibuat secara otomatis sebelum impor.",
    "yesImport": "Ya, Impor",
    "lastBackup": "Cadangan Terakhir",
    "noBackupYet": "Belum ada cadangan",
    "backupNow": "Cadangkan Sekarang",
    "backupRestore": "Cadangkan & Pulihkan",
    "viewBackups": "Lihat Cadangan",
    "hide": "Sembunyikan",
    "backupRetentionDesc": "Snapshot database dibuat secara otomatis sebelum pemulihan dan setiap 15 menit saat data berubah. Retensi: 24 jam + 30 pencadangan harian dengan rotasi cerdas.",
    "loadingBackups": "Memuat cadangan...",
    "noBackupsYet": "Belum ada cadangan yang tersedia. Cadangan akan dibuat secara otomatis ketika data berubah.",
    "backupsAvailable": "{count} cadangan tersedia",
    "refresh": "Segarkan",
    "confirm": "Konfirmasikan?",
    "yes": "Ya",
    "no": "Tidak",
    "restore": "Pulihkan",
    "invalidFileType": "Jenis berkas tidak valid. Hanya file .sqlite yang diterima.",
    "exportFailed": "Ekspor gagal",
    "exportFailedWithError": "Ekspor gagal: {error}",
    "fullExportFailedWithError": "Ekspor penuh gagal: {error}",
    "backupCreated": "Cadangan dibuat: {file}",
    "restoreSuccess": "Dipulihkan! {connections} koneksi, {nodes} node, {combos} kombo, {apiKeys} kunci API.",
    "importSuccess": "Basis data diimpor! {connections} koneksi, {nodes} node, {combos} kombo, {apiKeys} kunci API.",
    "minutesAgo": "{count}m yang lalu",
    "hoursAgo": "{count}jam yang lalu",
    "daysAgo": "{count}hari yang lalu",
    "backupReasonManual": "panduan",
    "backupReasonPreRestore": "pra-pemulihan",
    "connectionsCount": "{count, plural, one {# connection} other {# connections}}",
    "noChangesSinceBackup": "Tidak ada perubahan sejak pencadangan terakhir",
    "backupFailed": "Pencadangan gagal",
    "restoreFailed": "Pemulihan gagal",
    "importFailed": "Impor gagal",
    "errorDuringRestore": "Terjadi kesalahan saat pemulihan",
    "errorDuringImport": "Terjadi kesalahan saat mengimpor",
    "modelPricing": "Harga Model",
    "modelPricingDesc": "Konfigurasikan tarif biaya per model • Semua tarif dalam token $/1 juta",
    "registry": "Registri",
    "priced": "Harga",
    "searchProvidersModels": "Penyedia atau model pencarian...",
    "showAll": "Tampilkan Semua",
    "noProvidersMatch": "Tidak ada penyedia yang cocok dengan pencarian Anda.",
    "howPricingWorks": "Bagaimana Penetapan Harga Bekerja",
    "cacheWrite": "Tulis Cache",
    "unsaved": "belum disimpan",
    "resetDefaults": "Atur Ulang Default",
    "saveProvider": "Simpan Penyedia",
    "model": "Model",
    "models": "model",
    "moreProviders": "{count} penyedia lainnya",
    "withPricing": "dengan harga yang dikonfigurasi",
    "policiesCircuitBreakers": "Kebijakan & Pemutus Arus",
    "activeIssuesDetected": "Masalah aktif terdeteksi",
    "off": "Mati",
    "resetPricingConfirm": "Reset semua harga untuk {provider} ke default?",
    "pricingDescInput": "Input: token dikirim ke model",
    "pricingDescOutput": "Output: token dihasilkan",
    "pricingDescCached": "Tembolok: masukan yang digunakan kembali (~50% dari tingkat masukan)",
    "pricingDescReasoning": "Penalaran: token pemikiran (kembali ke Output)",
    "pricingDescCacheWrite": "Cache Write: membuat entri cache (kembali ke Input)",
    "pricingDescFormula": "Biaya = (input × input_rate) + (output × output_rate) + (cached × cached_rate) per juta token.",
    "pricingSettingsTitle": "Pengaturan Harga",
    "totalModels": "Jumlah Model",
    "active": "Aktif",
    "costCalculation": "Perhitungan Biaya",
    "costCalculationDesc": "Biaya dihitung berdasarkan penggunaan token dan tarif harga yang dikonfigurasi untuk setiap model.",
    "pricingFormat": "Format Harga",
    "pricingFormatDesc": "Semua tarif dalam $/1 juta token (dolar per juta token).",
    "tokenTypes": "Jenis Token",
    "inputTokenDesc": "Token cepat standar",
    "outputTokenDesc": "Token penyelesaian/respons",
    "cachedTokenDesc": "Token masukan yang di-cache (biasanya 50% dari tingkat masukan)",
    "reasoningTokenDesc": "Token penalaran/pemikiran khusus (pengembalian ke tingkat output)",
    "cacheCreationTokenDesc": "Token yang digunakan untuk membuat entri cache (pengembalian ke tingkat input)",
    "customPricingNote": "Anda dapat mengganti harga default untuk model tertentu. Penggantian khusus lebih diprioritaskan dibandingkan harga yang terdeteksi otomatis.",
    "editPricing": "Sunting Harga",
    "viewFullDetails": "Lihat Detail Lengkap",
    "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 menghapus 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 menyetel ulang harga: {reason}",
    "tab": "Tab",
    "pricingSavedProvider": "Harga disimpan untuk {provider}",
    "pricingSyncFailed": "Pricing Sync Failed",
    "pricingSaveFailedWithReason": "Gagal menyimpan harga: {reason}",
    "pricingResetProvider": "Penyetelan ulang harga untuk {provider}",
    "nextSync": "Next Sync",
    "pricingSyncFailedWithReason": "Sinkronisasi 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 Mesin Agresif",
    "compressionAggressiveConfigDesc": "Sempurnakan ringkasan, kompresi alat, dan ambang batas penuaan",
    "compressionUltraConfig": "Konfigurasi Mesin Ultra",
    "compressionUltraConfigDesc": "Sempurnakan pemangkasan heuristik, penggantian SLM, dan ambang batas per pesan",
    "compressionUltraRate": "Pertahankan Nilai",
    "compressionUltraMinScore": "Ambang Batas Skor Minimum",
    "compressionUltraSlmFallback": "Mundur ke Agresif",
    "compressionUltraModelPath": "Jalur Model SLM",
    "compressionSummarizerEnabled": "Aktifkan Peringkas",
    "compressionMaxTokensPerMessage": "Token Maksimum Per Pesan",
    "compressionMinSavings": "Ambang Batas Penghematan Min",
    "compressionAgingThresholds": "Ambang Batas Penuaan",
    "compressionAgingThresholdsDesc": "Jumlah pesan terbaru yang disimpan pada setiap tingkatan penuaan (lebih tinggi = lebih dipertahankan)",
    "compressionToolStrategies": "Strategi Hasil Alat",
    "compressionToolStrategiesDesc": "Alihkan strategi kompresi untuk jenis hasil alat yang berbeda",
    "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": "menit",
    "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": "Opsional",
    "current": "Saat ini",
    "remove": "Hapus",
    "search": "Cari",
    "oneproxyTitle": "1proxy Pasar Proxy Gratis",
    "oneproxyTotalProxies": "Total Proksi",
    "oneproxyAvgQuality": "Kualitas Rata-Rata",
    "resilienceScope": "Ruang lingkup:",
    "resilienceTrigger": "Pemicu:",
    "resilienceEffect": "Efek:",
    "resilienceRequestQueueTitle": "Request Queue & Rate",
    "resilienceAutoEnableApiKeyProviders": "Auto-enable for API-key providers",
    "resilienceRequestsPerMinute": "Requests per minute",
    "resilienceMinTimeBetweenRequests": "Minimum time between requests",
    "resilienceConcurrentRequests": "Concurrent requests",
    "resilienceMaxQueueWaitTime": "Waktu tunggu antrian maksimum",
    "resilienceBaseCooldown": "Base cooldown",
    "resilienceUseUpstreamRetryHints": "Use upstream retry hints",
    "resilienceDefaultPerProvider": "Default (per provider)",
    "resilienceAlwaysOn": "Always on",
    "resilienceAlwaysOff": "Always off",
    "routingRemoveEntry": "Hapus entri",
    "routingNeedlesSubstrings": "Jarum (substring yang cocok)",
    "routingCaseSensitive": "Peka huruf besar-kecil",
    "routingPrefixes": "Awalan",
    "routingMatch": "Cocok",
    "routingReplacement": "Penggantian",
    "routingReplaceAllOccurrences": "Ganti semua kejadian",
    "routingPatternRegex": "Pola (regex)",
    "routingFlags": "Bendera",
    "routingNeedles": "jarum",
    "routingBlockText": "Blokir teks",
    "routingIdempotencyKey": "Kunci idempotensi",
    "routingEntrypoint": "Titik masuk",
    "routingVersionFormat": "Format versi",
    "routingCchAlgorithm": "Algoritma CCH",
    "routingWordsToObfuscate": "Kata-kata untuk dikaburkan (ZWJ disisipkan setelah karakter pertama)",
    "logsSettingsTitle": "Pengaturan Log",
    "detailedLogsLabel": "Log Terperinci Diaktifkan",
    "detailedLogsDesc": "Aktifkan pencatatan permintaan/respons terperinci",
    "callLogPipelineLabel": "Saluran Log Panggilan",
    "callLogPipelineDesc": "Aktifkan alur pemrosesan log panggilan",
    "maxDetailSizeLabel": "Ukuran Detail Maks (KB)",
    "maxDetailSizeDesc": "Ukuran maksimum untuk entri log terperinci",
    "ringBufferSizeLabel": "Ukuran Penyangga Cincin",
    "ringBufferSizeDesc": "Ukuran buffer cincin untuk log",
    "semanticCacheEnabledLabel": "Cache Semantik Diaktifkan",
    "semanticCacheMaxSizeLabel": "Ukuran Maksimum Cache Semantik",
    "semanticCacheMaxSizeDesc": "Jumlah maksimum entri cache semantik",
    "semanticCacheTTLLabel": "TTL Cache Semantik",
    "promptCacheEnabledLabel": "Cache Prompt Diaktifkan",
    "promptCacheEnabledDesc": "Aktifkan cache cepat",
    "promptCacheStrategyLabel": "Strategi Cache Cepat",
    "promptCacheStrategyDesc": "Strategi untuk cache yang cepat",
    "alwaysPreserveClientCacheLabel": "Selalu Pertahankan Cache Klien",
    "alwaysPreserveClientCacheDesc": "Kebijakan pelestarian cache klien",
    "logRetentionPolicyTitle": "Kebijakan penyimpanan log",
    "resilienceUseUpstream429HintsForBreaker": "Gunakan petunjuk 429 hulu (pemutus)",
    "appearanceLogoPreviewAlt": "Pratinjau logo",
    "appearanceFaviconPreviewAlt": "Pratinjau favicon",
    "oneproxyLastSync": "Sinkronisasi Terakhir",
    "oneproxyAllProtocols": "Semua Protokol",
    "oneproxyCountryCodePlaceholder": "Kode negara (misalnya AS)",
    "oneproxyMinQualityPlaceholder": "kualitas minimal",
    "oneproxyLoadingProxies": "Memuat proxy...",
    "oneproxyLastSyncLabel": "Sinkronisasi terakhir:",
    "oneproxyProxiesFetched": "Proksi diambil:",
    "oneproxyConsecutiveFailures": "Kegagalan berturut-turut:",
    "oneproxyErrorLabel": "Kesalahan:",
    "oneproxyNever": "Tidak pernah",
    "oneproxySyncStatusTitle": "Status Sinkronisasi",
    "oneproxySuccess": "Sukses",
    "oneproxyFailed": "Gagal",
    "routingAntigravitySignatureTitle": "Mode Cache Tanda Tangan Antigravitasi",
    "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": "Sidik jari header (per penyedia)",
    "routingServerRejectedSave": "⚠ Server menolak penyimpanan:",
    "routingAddTransformOp": "Tambahkan operasi transformasi",
    "routingClientCacheControlTitle": "Kontrol Cache Klien",
    "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": "Perutean Otomatis Tanpa Konfigurasi",
    "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 Otomatis Default",
    "visionBridge": "Jembatan Visi",
    "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 Jembatan",
    "visionBridgeModelPlaceholder": "openai/gpt-4o-mini",
    "visionBridgeModelHint": "__MISSING__:Any OmniRoute model ID that supports vision can be used here.",
    "visionBridgePrompt": "Jembatan Cepat",
    "visionBridgePromptPlaceholder": "Jelaskan gambar ini secara singkat.",
    "visionBridgePromptHint": "__MISSING__:Sent to the vision model before the extracted description is injected back into the original request.",
    "visionBridgeTimeoutMs": "Batas waktu (md)",
    "visionBridgeMaxImagesPerRequest": "Gambar Maks Per Permintaan",
    "resilienceMaxBackoffSteps": "Max backoff steps",
    "resilienceProviderBreakerTitle": "Circuit Breaker per Provider",
    "resilienceFailureThreshold": "Failure threshold",
    "resilienceResetTimeout": "Setel ulang batas waktu",
    "resilienceFailureThresholdLabel": "Ambang batas kegagalan",
    "resilienceResetTimeoutLabel": "Setel ulang batas waktu",
    "resilienceConnectionCooldownTitle": "Connection Cooldown",
    "resilienceUseUpstreamRetryHintsLabel": "Gunakan petunjuk coba ulang hulu",
    "resilienceUseUpstream429BreakerLabel": "Gunakan petunjuk 429 hulu (pemutus)",
    "resilienceMaxBackoffStepsLabel": "Langkah mundur maksimal",
    "resilienceYes": "Ya",
    "resilienceNo": "Tidak",
    "resilienceDefault": "Default",
    "storageDatabaseBackupRetention": "Retensi cadangan basis data",
    "storagePurgeData": "Bersihkan Data",
    "retentionQuotaSnapshots": "Cuplikan Kuota (hari)",
    "retentionMcpAudit": "Audit MCP (hari)",
    "retentionA2aEvents": "Acara A2A (hari)",
    "retentionCallLogs": "Log Panggilan (hari)",
    "retentionUsageHistory": "Riwayat Penggunaan (hari)",
    "retentionMemoryEntries": "Entri Memori (hari)",
    "storageAutoVacuumMode": "Mode Vakum Otomatis",
    "storageScheduledVacuum": "Vakum Terjadwal",
    "storageVacuumHour": "Jam Vakum (0-23)",
    "storagePageSize": "Ukuran Halaman (byte)",
    "storageDatabaseSize": "Ukuran Basis Data",
    "storagePageCount": "Jumlah Halaman",
    "storageFreelistCount": "Jumlah Daftar Bebas",
    "storageLastVacuum": "Vakum Terakhir",
    "storageLastOptimization": "Optimasi Terakhir",
    "storageIntegrityCheck": "Pemeriksaan Integritas",
    "storageIntegrityOk": "✓ Oke",
    "storageIntegrityError": "✗ Kesalahan",
    "storageUsageTokenBuffer": "Penyangga Token Penggunaan",
    "compressionSettingsAutoTriggerMode": "Mode pemicu otomatis",
    "compressionSettingsMcpDescriptionCompression": "Kompresi deskripsi MCP",
    "compressionSettingsCavemanIntensity": "Intensitas manusia gua",
    "compressionSettingsCavemanOutputMode": "Mode keluaran manusia gua",
    "compressionSettingsOutputIntensity": "Intensitas keluaran",
    "compressionSettingsAutoClarityBypass": "Bypass kejelasan otomatis",
    "resilienceWaitForCooldown": "Tunggu Cooldown",
    "resilienceEnableServerSideWait": "Aktifkan menunggu di sisi server",
    "resilienceMaximumRetries": "Percobaan ulang maksimum",
    "resilienceMaximumWaitPerRetry": "Waktu tunggu maksimum untuk setiap percobaan ulang",
    "memorySkillsSkillsmpMarketplace": "Pasar KeterampilanMP",
    "memorySkillsFailedToSave": "Gagal menyimpan",
    "memorySkillsApiKey": "Kunci API",
    "memorySkillsActiveSkillsProvider": "Penyedia Keterampilan Aktif",
    "cliproxyapiFallback": "Penggantian CLIProxyAPI",
    "cliproxyapiEnableFallback": "Aktifkan Penggantian CLIProxyAPI",
    "cliproxyapiUrl": "URL CLIProxyAPI",
    "cliproxyapiStatus": "Status CLIProxyAPI",
    "cliproxyapiNotDetected": "Tidak terdeteksi",
    "payloadRulesTitle": "Aturan 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": "Tidak ada model dalam cooldown saat ini.",
    "codexFastTierTitle": "Tingkat Cepat Codex",
    "codexFastTierDesc": "Menyuntikkan service_tier=priority secara global untuk permintaan OpenAI Codex.",
    "codexFastTierHint": "Saat diaktifkan, OmniRoute menambahkan service_tier=priority ke permintaan Codex keluar untuk koneksi yang belum menentukan tingkat. Tingkat prioritas memerlukan kunci OpenAI Enterprise API atau jalur Codex autentikasi ChatGPT; jenis kunci lainnya akan menerima kesalahan terkait tingkatan dari OpenAI. Pengaturan per koneksi pada halaman penyedia Codex diutamakan.",
    "codexFastTierSaveError": "Gagal memperbarui pengaturan 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": "Mode Cepat Claude",
    "claudeFastModeDesc": "Ikut sertakan permintaan Claude yang dipilih ke dalam Mode Cepat Antropik (kecepatan: \"cepat\").",
    "claudeFastModeHint": "Anthropic tidak secara resmi mendukung Mode Cepat untuk klien bergaya SDK. Saat diaktifkan, OmniRoute meneruskan header X-CPA-Force-Fast-Mode sehingga build CLIProxyAPI yang dipasangkan dapat ikut serta memalsukan titik masuk. Hanya model Opus yang terdaftar yang dilindungi oleh pemeriksaan sisi klien Anthropic. Tingkat langganan, paket Maks, dan saldo kredit Mode Cepat masih diterapkan di sisi server — Anthropic dapat mengembalikan out_of_credits meskipun tombolnya aktif.",
    "claudeFastModeModelsLabel": "Diterapkan pada model ({count})",
    "claudeFastModeModelCheckbox": "Aktifkan Mode Cepat untuk {model}",
    "claudeFastModeSaveError": "Gagal memperbarui pengaturan Mode 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 dasar",
    "scopeLabel": "Ruang lingkup",
    "triggerLabel": "Pemicu",
    "effectLabel": "Efek",
    "statusEnabled": "Diaktifkan",
    "statusDisabled": "Dengan disabilitas",
    "resilienceRequestQueueScope": "Per antrian permintaan",
    "resilienceRequestQueueTrigger": "Sebelum dikirim ke hulu",
    "resilienceRequestQueueEffect": "Mengantri permintaan, membatasi konkurensi, dan membatasi panggilan",
    "resilienceRequestQueueDesc": "Lapisan ini hanya mengontrol antrian dan mondar-mandir. Itu tidak menyimpan cooldown atau pemutus sirkuit terbuka.",
    "resilienceAutoEnableApiKeyProvidersDesc": "Mengaktifkan perlindungan antrean secara default untuk koneksi kunci API aktif.",
    "resilienceMaxQueueWait": "Waktu tunggu antrian maksimum",
    "resilienceConnectionCooldownScope": "Koneksi individu",
    "resilienceConnectionCooldownTrigger": "Ketika koneksi mengembalikan kegagalan hulu sementara",
    "resilienceConnectionCooldownEffect": "Melewati koneksi itu untuk sementara dan meningkatkan backoff jika terjadi kegagalan berulang",
    "resilienceConnectionCooldownDesc": "Cooldown dasar mencakup kegagalan koneksi sementara. Saat petunjuk percobaan ulang upstream diaktifkan, jendela eksplisit penyedia akan menggantikan cooldown lokal.",
    "resilienceUseUpstreamRetryHintsDesc": "Menggunakan nilai coba lagi setelah/reset dari penyedia upstream bila tersedia.",
    "resilienceUseUpstream429BreakerHints": "Gunakan petunjuk 429 hulu untuk cooldown pemutus",
    "resilienceUseUpstream429BreakerHintsShort": "Gunakan petunjuk 429 hulu",
    "resilienceUseUpstream429BreakerHintsDesc": "Menerapkan sinyal Retry-After / kuota habis dari 429 respons ke durasi cooldown pemutus sirkuit. Defaultnya menggunakan kebijakan per penyedia: default penyedia cloud langsung aktif; penyedia proksi terbalik, yang dihosting sendiri, dan didukung CLI tidak aktif secara default. Tidak bergantung pada \"Gunakan petunjuk coba ulang hulu\".",
    "resilienceProviderBreakerScope": "Seluruh penyedia",
    "resilienceProviderBreakerTrigger": "Kegagalan transportasi/server terakhir setelah penggantian koneksi habis",
    "resilienceProviderBreakerEffect": "Blokir sementara penyedia tersebut hingga waktu penyetelan ulang berakhir",
    "resilienceProviderBreakerDesc": "Status pemutusan langsung hanya muncul di halaman Kesehatan. Batas kecepatan 429 cakupan koneksi tetap berada dalam Masa Tenang Koneksi dan tidak membuat pemutus penyedia tersandung.",
    "resilienceResetTime": "Atur ulang waktu",
    "resilienceWaitForCooldownTitle": "Tunggu Cooldown",
    "resilienceWaitForCooldownScope": "Permintaan klien saat ini",
    "resilienceWaitForCooldownTrigger": "Ketika semua koneksi kandidat sudah cooldown",
    "resilienceWaitForCooldownEffect": "Menunggu di server dan mencoba lagi ketika cooldown pertama berakhir",
    "resilienceWaitForCooldownDesc": "Ini hanya mempengaruhi permintaan saat ini. Itu tidak menyimpan koneksi atau status penyedia.",
    "resilienceEnableServerWait": "Aktifkan menunggu di sisi server",
    "resilienceEnableServerWaitDesc": "Saat diaktifkan, OmniRoute menunggu hingga cooldown pertama berakhir dan mencoba lagi secara otomatis.",
    "resilienceMaxAttempts": "Upaya maksimal",
    "resilienceMaxWaitPerAttempt": "Penantian maksimum per upaya",
    "forcedFingerprintTitle": "Always enabled for {provider} — required for OAuth account safety; cannot be turned off.",
    "forcedFingerprintBadge": "Required",
    "codexSessionAffinityTitle": "Afinitas sesi Codex",
    "codexSessionAffinityDesc": "Menyimpan satu percakapan Codex di akun yang sama selama beberapa detik. 0 menonaktifkannya.",
    "codexSessionAffinityTtl": "Afinitas TTL (detik)",
    "resetAwareQuotaCacheTitle": "Cache kuota yang dapat disetel ulang",
    "resetAwareQuotaCacheDesc": "Menyimpan telemetri kuota dalam cache hanya untuk pemesanan yang diatur ulang. Preflight kuota tetap melindungi permintaan. 0/0 terus mengambil langsung.",
    "resetAwareQuotaCacheTtl": "TTL baru (detik)",
    "resetAwareQuotaCacheMaxStale": "Maks basi (detik)",
    "qdrantCleanupSuccess": "Oke: menghapus {count} poin (retensi: {days} hari)",
    "qdrantCleanupFailed": "Pembersihan gagal",
    "qdrantCleanupError": "Kesalahan: {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 Filter",
    "filterCatalogDesc": "Filter keluaran tersedia berdasarkan kategori",
    "guidedConfig": "Konfigurasi",
    "guidedConfigDesc": "Sesuaikan cara RTK memfilter keluaran terminal Anda",
    "maxLines": "Max lines",
    "maxChars": "Max chars",
    "deduplicateThreshold": "Ambang batas penghapusan duplikat",
    "customFilters": "Filter khusus",
    "detectedType": "Tipe terdeteksi",
    "confidence": "Keyakinan",
    "beforeAfter": "Sebelum / Sesudah",
    "trustProjectFilters": "Percayai filter proyek",
    "rawOutputRetention": "Retensi keluaran mentah",
    "rawOutputNever": "Tidak pernah",
    "rawOutputFailures": "Kegagalan",
    "rawOutputAlways": "Selalu",
    "rawOutputMaxBytes": "Byte maks keluaran mentah",
    "filterTesting": "Filter Testing",
    "pasteOutput": "Paste tool output to test filtering...",
    "presetHigh": "Agresif",
    "presetLow": "Ringan",
    "presetMaxChars": "Karakter keluaran maksimal",
    "presetMaxLines": "Jalur keluaran maksimal",
    "presetMedium": "Standar",
    "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": "Sederhana",
    "advancedMode": "Lanjutan",
    "searchFilters": "Filter pencarian...",
    "tooltipDedup": "Betapa agresifnya menghilangkan garis yang berulang.",
    "tooltipMaxChars": "Karakter maksimum per blok keluaran.",
    "tooltipMaxLines": "Garis maksimum yang harus dijaga dari keluaran perintah. Kelebihannya terpotong."
  },
  "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": "Sempurnakan perilaku kompresi",
    "aggressiveSettings": "Pengaturan Agresif",
    "aggressiveSettingsDesc": "Kompresi maksimum dengan potensi pengorbanan kualitas",
    "requests": "Requests",
    "tokensSaved": "Tokens saved",
    "savingsPercent": "Savings %",
    "avgLatency": "Avg latency",
    "languagePacks": "Language Packs",
    "languagePacksDesc": "Enable compression rules for specific languages.",
    "labelAutoTrigger": "Kompres otomatis ketika konteks melebihi",
    "labelCompressionRate": "Kekuatan kompresi",
    "labelMaxTokens": "Targetkan token per pesan",
    "labelMinLength": "Panjang pesan 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": "Modus Keluaran",
    "outputModeDesc": "Instructs the LLM to respond in a terse, compact format.",
    "outputModeTitle": "Output Mode",
    "quickSettings": "Pengaturan Cepat",
    "quickSettingsDesc": "Pengaturan kompresi dasar untuk memulai",
    "autoClarity": "Auto-Clarity Bypass",
    "bypassConditions": "Bypass conditions",
    "bypassConditionsList": "keamanan, tidak dapat diubah, klarifikasi, peka terhadap perintah",
    "simpleMode": "Sederhana",
    "advancedMode": "Lanjutan",
    "tooltipAutoTrigger": "Kompres secara otomatis ketika konteks melebihi ukuran ini.",
    "tooltipCompressionRate": "0,0 = tidak ada, 1,0 = maksimal. 0,5 = seimbang.",
    "tooltipMaxTokens": "Jumlah token target setelah kompresi. Lebih rendah = lebih agresif.",
    "tooltipMinLength": "Pesan yang lebih pendek dari ini tidak dikompresi. Lebih rendah = lebih banyak kompresi.",
    "tooltipMinSavings": "Hanya kompres jika menyimpan setidaknya token sebanyak ini.",
    "ultraSettings": "Pengaturan Ultra",
    "ultraSettingsDesc": "Kompresi semantik bertenaga 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": "Penerjemah",
    "metaTitle": "Taman Bermain Penerjemah | OmniRoute",
    "metaDescription": "Debug, uji, dan visualisasikan terjemahan format API antar penyedia",
    "playgroundTitle": "Taman Bermain Penerjemah",
    "playground": "Taman bermain",
    "realtime": "Aktivitas Penerjemahan Waktu Nyata",
    "chatTester": "Penguji Obrolan",
    "testBench": "Bangku Tes",
    "liveMonitor": "Monitor Langsung",
    "modeDescriptionPlayground": "Tempelkan isi permintaan API apa pun dan lihat bagaimana OmniRoute menerjemahkannya di antara format penyedia (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)",
    "modeDescriptionChatTester": "Kirim permintaan obrolan nyata melalui OmniRoute dan periksa perjalanan pulang pergi secara lengkap: masukan, permintaan yang diterjemahkan, respons penyedia, dan keluaran yang diterjemahkan.",
    "modeDescriptionTestBench": "Jalankan skenario yang telah ditentukan sebelumnya dan bandingkan kompatibilitas antar penyedia dan model.",
    "modeDescriptionLiveMonitor": "Tonton acara terjemahan secara real time saat permintaan mengalir melalui OmniRoute.",
    "modeDescriptionFallback": "Debug, uji, dan visualisasikan bagaimana OmniRoute menerjemahkan permintaan API antar penyedia.",
    "recentTranslations": "Terjemahan Terbaru",
    "noTranslations": "Belum ada terjemahan",
    "source": "Sumber",
    "target": "Sasaran",
    "time": "Waktu",
    "model": "Model",
    "status": "Status",
    "latency": "Latensi",
    "totalTranslations": "Terjemahan Total",
    "successful": "Berhasil",
    "errors": "Kesalahan",
    "avgLatency": "Rata-rata Latensi",
    "millisecondsShort": "{value}ms",
    "notAvailableSymbol": "—",
    "liveAutoRefreshing": "Langsung — Menyegarkan otomatis",
    "paused": "Dijeda",
    "eventsAppearHint": "Peristiwa penerjemahan muncul di sini saat permintaan mengalir melalui OmniRoute. Gunakan salah satu metode berikut untuk menghasilkan peristiwa:",
    "chatTesterTab": "Tab Penguji Obrolan",
    "testBenchTab": "Tab Bangku Tes",
    "externalApiCalls": "Panggilan API eksternal",
    "ideCliIntegrations": "Integrasi IDE/CLI",
    "inMemoryNote": "Catatan: Acara disimpan di memori dan disetel ulang saat server dimulai ulang.",
    "ok": "Oke",
    "errorShort": "KESALAHAN",
    "formatConverter": "Konverter Format",
    "formatConverterDescription": "Tempel atau ketik isi permintaan JSON. Penerjemah akan secara otomatis mendeteksi format sumber dan mengubahnya ke format target. Gunakan ini untuk men-debug bagaimana OmniRoute menerjemahkan permintaan antar format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).",
    "translationPathHubSpoke": "{source} → OpenAI (menengah) → {target}",
    "translationPathDirect": "{source} → {target} (penerjemah langsung)",
    "translationPathPassthrough": "Format yang sama — tidak perlu terjemahan",
    "openaiIntermediatePanel": "OpenAI Menengah",
    "autoFeaturesTitle": "Apa yang dilakukan OmniRoute secara otomatis",
    "autoFeaturesCount": "8 fitur",
    "featureReasoningCache": "Tembolok Penalaran",
    "featureReasoningCacheDesc": "Menyuntikkan kembali penalaran_konten yang di-cache untuk model mode berpikir (DeepSeek V4, Kimi K2, Qwen) ketika klien menghilangkannya dari riwayat percakapan.",
    "featureSchemaCoercion": "Pemaksaan Skema",
    "featureSchemaCoercionDesc": "Memperbaiki skema alat yang rusak: menambahkan Properti tambahan yang hilang, membersihkan deskripsi panjang, menormalkan objek bersarang.",
    "featureRoleNormalization": "Normalisasi Peran",
    "featureRoleNormalizationDesc": "Pengembang peta→sistem untuk target non-OpenAI. Sistem peta→pengguna untuk model yang tidak mendukung peran sistem.",
    "featureToolCallIds": "Normalisasi ID Panggilan Alat",
    "featureToolCallIdsDesc": "Menghasilkan ID panggilan_alat unik saat hilang. Menormalkan ke format 9 karakter untuk penyedia seperti Mistral.",
    "featureMissingToolResponse": "Injeksi Respon Alat",
    "featureMissingToolResponseDesc": "Menyuntikkan pesan tool_result kosong ketika klien mengirim tool_calls tanpa respons yang sesuai.",
    "featureThinkingBudget": "Memikirkan Anggaran",
    "featureThinkingBudgetDesc": "Secara otomatis mengelola konfigurasi pemikiran. Menghapus parameter pemikiran ketika pesan terakhir bukan dari pengguna.",
    "featureDirectPaths": "Jalur Terjemahan Langsung",
    "featureDirectPathsDesc": "Beberapa pasangan format (Claude→Gemini) memiliki penerjemah langsung yang melewati hub OpenAI, sehingga menghasilkan keluaran yang lebih akurat.",
    "featureImageMapping": "Pemetaan Ukuran Gambar",
    "featureImageMappingDesc": "Menerjemahkan konvensi dimensi gambar antar format API (misalnya, tingkat detail OpenAI → dimensi Gemini).",
    "input": "Masukan",
    "output": "Keluaran",
    "auto": "Otomatis",
    "swapFormats": "Tukar format",
    "translateAction": "Terjemahkan",
    "clear": "Jelas",
    "inputPlaceholder": "Tempelkan isi permintaan di sini atau pilih templat di bawah...",
    "exampleTemplates": "Contoh Template",
    "exampleTemplatesHint": "— Klik untuk memuat",
    "templateLoadHint": "Templat memuat permintaan dalam format {format}. Ubah Format Sumber untuk memuat dalam format yang berbeda.",
    "compatibilityTester": "Penguji Kompatibilitas",
    "compatibilityReport": "Laporan Kompatibilitas",
    "testBenchDescription": "Jalankan skenario yang telah ditentukan sebelumnya (Obrolan Sederhana, Panggilan Alat, dll.) untuk memverifikasi kompatibilitas terjemahan dan penyedia. Pilih format sumber dan penyedia target, lalu jalankan semua pengujian untuk melihat persentase kompatibilitas. Gunakan ini untuk menemukan fitur mana yang berfungsi di seluruh penyedia.",
    "targetProvider": "Penyedia Sasaran",
    "runAllTests": "Jalankan Semua Tes",
    "runTest": "Jalankan Tes",
    "reRun": "Jalankan kembali",
    "running": "Berlari...",
    "passed": "berlalu",
    "failed": "gagal",
    "passedIconLabel": "✅ Lulus",
    "chunks": "potongan",
    "scenarioSimpleChat": "Obrolan Sederhana",
    "scenarioToolCalling": "Panggilan Alat",
    "scenarioMultiTurn": "Multi-putaran",
    "scenarioThinking": "Berpikir",
    "scenarioSystemPrompt": "Perintah Sistem",
    "scenarioStreaming": "Streaming",
    "templateNames": {
      "simple-chat": "Obrolan Sederhana",
      "tool-calling": "Panggilan Alat",
      "multi-turn": "Multi-putaran",
      "thinking": "Berpikir",
      "system-prompt": "Perintah Sistem",
      "streaming": "Streaming",
      "vision": "Visi",
      "schema-coercion": "Pemaksaan Skema"
    },
    "templateDescriptions": {
      "simple-chat": "Pesan teks dasar",
      "tool-calling": "Pemanggilan fungsi/alat",
      "multi-turn": "Percakapan dengan sejarah",
      "thinking": "Pemikiran/penalaran yang diperluas",
      "system-prompt": "Instruksi sistem yang kompleks",
      "streaming": "Permintaan streaming SSE",
      "vision": "Permintaan multimodal dengan input gambar",
      "schema-coercion": "Penegakan skema keluaran terstruktur/JSON"
    },
    "templatePayloads": {
      "simpleChat": {
        "system": "Anda adalah asisten yang membantu.",
        "userGreeting": "Halo! Apa kabarmu hari ini?"
      },
      "toolCalling": {
        "userWeather": "Bagaimana cuaca di Sao Paulo?",
        "toolDescription": "Dapatkan cuaca terkini untuk suatu lokasi",
        "cityNameDescription": "Nama kota"
      },
      "multiTurn": {
        "system": "Anda adalah asisten pengkodean.",
        "userInitial": "Tulis fungsi untuk mengurutkan array dengan Python.",
        "assistantExample": "Berikut fungsi pengurutan sederhana:\n\n``` ular piton\ndef sort_array(arr):\n    kembali diurutkan(arr)\n```",
        "userFollowUp": "Sekarang urutkan dalam urutan menurun."
      },
      "thinking": {
        "question": "Berapa jumlah 100 bilangan prima pertama?"
      },
      "systemPrompt": {
        "systemInstruction": "Anda adalah insinyur perangkat lunak senior yang berspesialisasi dalam sistem terdistribusi. Jawab pertanyaan dengan singkat menggunakan praktik terbaik industri. Selalu berikan contoh kode bila relevan. Format tanggapan Anda menggunakan penurunan harga.",
        "question": "Bagaimana cara menerapkan pola pemutus sirkuit?"
      },
      "streaming": {
        "prompt": "Ceritakan sebuah cerita pendek tentang robot yang belajar melukis."
      },
      "vision": {
        "system": "Anda adalah asisten yang mendeskripsikan gambar dengan tepat.",
        "userPrompt": "Apa yang ditampilkan pada gambar 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 tahu cuaca di Tokyo menggunakan satuan metrik dan sertakan rincian per jamnya.",
        "toolDescription": "Ambil cuaca untuk kota dengan opsi terstruktur.",
        "cityDescription": "Kota yang akan ditanyakan, mis. 'Tokyo' atau 'New York'."
      }
    },
    "openaiCompatibleLabel": "Kompatibel dengan OpenAI",
    "anthropicCompatibleLabel": "Kompatibel Antropis",
    "noTemplateForFormat": "Tidak ada templat untuk format ini",
    "translationFailed": "Terjemahan gagal: {error}",
    "pipelineDebugger": "Debugger Saluran Pipa",
    "translationPipeline": "Saluran Terjemahan",
    "pipelineVisualization": "Visualisasi saluran pipa",
    "pipelineVisualizationHint": "Kirim pesan untuk melihat bagaimana permintaan Anda mengalir melalui deteksi → terjemahan → panggilan penyedia.",
    "chatTesterDescription": "Kirim pesan sebagai format klien tertentu dan periksa setiap langkah alur terjemahan.",
    "chatTesterFlow": "Permintaan Klien → Deteksi Format → OpenAI Intermediate → Format Penyedia → Respons",
    "clickStepToInspect": "Klik langkah mana pun untuk memeriksa data pada tahap itu.",
    "clientFormat": "Format Klien",
    "provider": "Penyedia",
    "modelPlaceholder": "Pilih atau ketikkan nama model...",
    "sendMessageToSeePipeline": "Kirim pesan untuk melihat alur terjemahan",
    "chatMessageHintPrefix": "Pesan Anda akan diformat sebagai a",
    "chatMessageHintSuffix": "permintaan, diterjemahkan melalui pipeline, dan dikirim ke penyedia yang dipilih.",
    "youWithFormat": "Anda ({format})",
    "assistant": "Asisten",
    "typeMessage": "Ketik pesan...",
    "send": "Kirim",
    "clientRequest": "Permintaan Klien",
    "clientRequestDescription": "Badan permintaan sebagai klien Anda akan mengirimkannya",
    "formatDetected": "Format Terdeteksi",
    "formatDetectedDescription": "OmniRoute secara otomatis mendeteksi format API dari struktur permintaan",
    "openaiIntermediate": "OpenAI Menengah",
    "openaiIntermediateDescription": "Semua format pertama-tama dinormalisasi ke format OpenAI (jembatan universal)",
    "providerFormat": "Format Penyedia",
    "providerFormatDescription": "Format OpenAI diterjemahkan ke format asli penyedia",
    "providerResponse": "Respon Penyedia",
    "providerResponseRawDescription": "Respons mentah dari API penyedia",
    "providerResponseSseDescription": "Aliran SSE mentah dari API penyedia",
    "unexpectedError": "Terjadi kesalahan yang tidak terduga",
    "error": "Kesalahan",
    "errorMessage": "Kesalahan: {message}",
    "requestFailed": "Permintaan gagal",
    "noTextExtracted": "(Tidak ada teks yang diekstraksi)",
    "liveMonitorMemoryNote": "Acara disimpan dalam memori dan hilang saat restart.",
    "liveMonitorMemoryCapNote": "Maksimum 200 acara dipertahankan.",
    "eventSourcesLabel": "Sumber acara:",
    "eventSourceTranslatorPage": "• Halaman Penerjemah (Penguji Obrolan, Bangku Tes)",
    "eventSourceMainPipeline": "• Pipeline permintaan utama (lalu lintas CLI/IDE/API)",
    "liveMonitorDescriptionPrefix": "Menampilkan peristiwa terjemahan saat panggilan API mengalir melalui OmniRoute. Acara berasal dari buffer dalam memori (direset saat restart). Gunakan",
    "liveMonitorDescriptionSuffix": ", atau panggilan API eksternal untuk menghasilkan peristiwa.",
    "streamTransformer": "Transformator Aliran",
    "modeDescriptionStreamTransformer": "Jalankan penyelesaian obrolan aliran SSE melalui transformator Respons.",
    "streamTransformerTitle": "Tanggapan Transformator Aliran",
    "streamTransformerDescription": "Tempelkan aliran SSE penyelesaian obrolan, jalankan melalui transformator Respons OmniRoute, dan periksa peristiwa respons yang dipancarkan.* sebelum menghubungkan klien.",
    "loadTextSample": "Muat sampel teks",
    "loadToolSample": "Muat sampel panggilan alat",
    "transformToResponses": "Transformasikan ke Respons",
    "rawChatSseInput": "Penyelesaian obrolan mentah SSE",
    "transformedResponsesSse": "SSE API Respons yang Diubah",
    "noResultsYet": "Belum ada hasil",
    "transformedEvents": "Peristiwa yang diubah",
    "uniqueEventTypes": "Jenis acara unik",
    "inputLines": "Jalur masukan",
    "outputLines": "Jalur keluaran",
    "transformedEventTimeline": "Garis waktu acara yang diubah",
    "transformerTimelineHint": "Jalankan transformator untuk memeriksa peristiwa respon.output_* yang dipancarkan secara berurutan.",
    "eventType": "Jenis acara",
    "eventPreview": "Pratinjau",
    "comboRouted": "Kombo dialihkan",
    "uniqueEndpoints": "Titik akhir yang unik",
    "routeDetails": "Detail rute",
    "comboBadge": "kombo",
    "routeEndpointLabel": "Titik akhir",
    "routeConnectionLabel": "Koneksi",
    "scenarioVision": "Visi (pemahaman gambar)",
    "scenarioSchemaCoercion": "Pemaksaan skema (keluaran terstruktur)",
    "techniques": "Teknik:"
  },
  "usage": {
    "title": "Penggunaan",
    "loggerTab": "penebang",
    "proxyTab": "Proksi",
    "budgetManagement": "Manajemen Anggaran",
    "budgetSaved": "Batasan anggaran dihemat",
    "budgetSaveFailed": "Gagal menghemat anggaran",
    "loadingBudgetData": "Memuat data anggaran...",
    "noApiKeysTitle": "Tidak Ada Kunci API",
    "noApiKeysDescription": "Tambahkan kunci API terlebih dahulu untuk menyiapkan batas anggaran.",
    "apiKey": "Kunci API",
    "todaysSpend": "Pembelanjaan hari ini",
    "thisMonth": "Bulan ini",
    "setLimits": "Tetapkan Batasan",
    "dailyLimitUsd": "Batas Harian (USD)",
    "monthlyLimitUsd": "Batas Bulanan (USD)",
    "warningThresholdPercent": "Ambang Peringatan (%)",
    "dailyLimitPlaceholder": "misalnya 5.00",
    "monthlyLimitPlaceholder": "misalnya 50.00",
    "warningThresholdPlaceholder": "80",
    "saveLimits": "Simpan Batas",
    "budgetOk": "Anggaran OK — {remaining} tersisa",
    "budgetExceeded": "Anggaran terlampaui — permintaan mungkin diblokir",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Belum ada datanya",
    "latency": "Latensi",
    "latencyP50": "hal50",
    "latencyP95": "hal95",
    "latencyP99": "hal99",
    "promptCache": "Tembolok Cepat",
    "systemHealth": "Kesehatan Sistem",
    "entries": "Entri",
    "activeCount": "{count} aktif",
    "openCircuitBreakersDetected": "Pemutus sirkuit terbuka terdeteksi",
    "hitRate": "Tingkat Hit",
    "hitsMisses": "Hit / Miss",
    "circuitBreakers": "Pemutus Sirkuit",
    "lockedIPs": "IP terkunci",
    "lockoutsAutoRefreshHint": "Kunci batas kecepatan per model • Refresh otomatis 10 detik",
    "lockedCount": "{count, plural, one {# locked} other {# locked}}",
    "timeLeft": "{time} tersisa",
    "howItWorks": "Cara Kerjanya",
    "howItWorksSubtitle": "Pelajari bagaimana evaluasi memvalidasi respons LLM Anda",
    "define": "Definisikan",
    "defineStepDescription": "Buat kasus pengujian dengan perintah masukan dan kriteria keluaran yang diharapkan menggunakan strategi seperti berisi, regex, atau pencocokan tepat.",
    "run": "Jalankan",
    "runStepDescription": "Jalankan kasus uji terhadap titik akhir LLM Anda melalui OmniRoute. Setiap kasus dikirim sebagai permintaan API nyata.",
    "evaluate": "Evaluasi",
    "evaluateStepDescription": "Tanggapan dibandingkan dengan kriteria yang diharapkan. Lihat lulus/gagal untuk setiap kasus dengan metrik latensi dan masukan 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": "Ruang Evaluasi",
    "evalSuitesHint": "Klik rangkaian untuk melihat kasus pengujian, lalu jalankan untuk mengevaluasi titik akhir LLM Anda",
    "evalsLoading": "Memuat suite eval...",
    "noEvalSuitesFound": "Tidak Ada Suite Eval yang Ditemukan",
    "noEvalSuitesDescription": "Suite eval dapat ditentukan melalui API atau kode. Mereka menguji keluaran model terhadap hasil yang diharapkan menggunakan strategi seperti konten, regex, pencocokan tepat, dan fungsi khusus.",
    "columnCase": "Kasus",
    "columnStatus": "Status",
    "columnLatency": "Latensi",
    "columnDetails": "Detail",
    "columnModel": "Model",
    "columnStrategy": "Strategi",
    "columnExpected": "Diharapkan",
    "statsSuites": "Suite",
    "statsTestCases": "Kasus Uji",
    "statsModels": "Model",
    "statsCoverage": "Cakupan",
    "statsStrategiesCount": "{count} strategi",
    "evaluationStrategies": "Strategi Evaluasi",
    "modelsUnderTest": "Model Sedang Diuji",
    "searchSuitesPlaceholder": "Ruang pencarian...",
    "passSuffix": "lulus",
    "casesCount": "{count, plural, one {# case} other {# cases}}",
    "runEval": "Jalankan Eval",
    "runAllSuites": "Jalankan Semua",
    "runAllRunning": "Menjalankan semua...",
    "runAllProgress": "Menjalankan {current}/{total}: {name}",
    "runAllFailedSuites": "{count, plural, one {# suite failed} other {# suites failed}}",
    "runAllCompleted": "Jalankan {suites} suite — {passed} lulus, {failed} gagal",
    "runAllCompletedWithFailures": "Menjalankan {completed} suite; {failedSuites} gagal diselesaikan",
    "runningProgress": "Menjalankan {current}/{total}...",
    "passRate": "tingkat kelulusan",
    "summaryBreakdown": "{passed} lulus · {failed} gagal · {total} total",
    "passedIconLabel": "✅ Lulus",
    "failedIconLabel": "❌ Gagal",
    "resultPassed": "Lulus",
    "resultFailed": "Gagal",
    "expandResult": "Perluas detail hasil",
    "collapseResult": "Ciutkan detail hasil",
    "detailsContains": "Berisi: \"{term}\"",
    "detailsRegex": "Regex: {pattern}",
    "detailsExpected": "Diharapkan: \"{expected}\"",
    "expectedOutputLabel": "Keluaran yang Diharapkan",
    "noResultsYet": "Belum ada hasil",
    "testCasesCount": "Kasus Uji ({count})",
    "noTestCasesDefined": "Tidak ada kasus uji yang ditentukan",
    "runEvalHint": "Klik \"Jalankan Eval\" untuk menjalankan semua kasus terhadap titik akhir LLM Anda. Setiap pengujian mengirimkan permintaan nyata melalui OmniRoute.",
    "notifyNoTestCases": "Tidak ada kasus uji yang ditentukan untuk rangkaian ini",
    "notifyAllCasesPassed": "Semua kasus {total} lolos ✅",
    "notifySomeCasesFailed": "{passed}/{total} lulus, {failed} gagal",
    "notifyEvalRunFailed": "Proses evaluasi gagal",
    "notifyEvalTitle": "Evaluasi: {name}",
    "modelEvals": "Evaluasi Model",
    "evalsHeroDescription": "Uji dan validasi titik akhir LLM Anda dengan menjalankan rangkaian evaluasi yang telah ditentukan sebelumnya. Setiap rangkaian berisi kasus pengujian yang mengirimkan perintah nyata melalui OmniRoute dan membandingkan respons terhadap kriteria yang diharapkan — membantu Anda mendeteksi regresi, membandingkan model, dan memastikan kualitas respons di seluruh penyedia.",
    "qualityValidation": "Validasi Kualitas",
    "modelComparison": "Perbandingan Model",
    "regressionDetection": "Deteksi Regresi",
    "latencyBenchmarks": "Tolok Ukur Latensi",
    "modelLockouts": "Penguncian Model",
    "noLockouts": "Tidak ada model yang dikunci saat ini",
    "activeSessions": "Sesi Aktif",
    "noSessions": "Tidak ada sesi aktif",
    "sessionsHint": "Sesi muncul saat permintaan mengalir melalui proxy",
    "sessionsTrackedHint": "Dilacak melalui permintaan sidik jari • Penyegaran otomatis 5 detik",
    "session": "Sesi",
    "age": "Usia",
    "requests": "Permintaan",
    "connection": "Koneksi",
    "durationMillisecondsShort": "{value}ms",
    "durationSecondsShort": "{value}dtk",
    "durationMinutesShort": "{value}m",
    "durationHoursShort": "{value}jam",
    "reasonSeparator": " - ",
    "notAvailableSymbol": "-",
    "providerLimits": "Batasan Penyedia",
    "noProviders": "Tidak Ada Penyedia yang Terhubung",
    "connectProvidersForQuota": "Hubungkan ke penyedia dengan OAuth untuk melacak batas dan penggunaan kuota API Anda.",
    "accountsCount": "{count, plural, one {# account} other {# accounts}}",
    "filteredFromCount": "(difilter dari {count})",
    "autoRefresh": "Segarkan otomatis",
    "refreshAll": "Segarkan Semua",
    "loadingQuotas": "Memuat...",
    "account": "Akun",
    "modelQuotas": "Kuota Model",
    "lastUsed": "Last Refreshed",
    "actions": "Tindakan",
    "refreshQuota": "Segarkan kuota",
    "today": "Hari ini",
    "tomorrow": "Besok",
    "dayTimeFormat": "{day}, {time}",
    "inDuration": "di {duration}",
    "notApplicable": "T/A",
    "rawPlanWithValue": "Paket mentah: {plan}",
    "noPlanFromProvider": "Tidak ada rencana dari penyedia",
    "noQuotaData": "Tidak ada data kuota",
    "cardExpand": "__MISSING__:Expand",
    "cardCollapse": "__MISSING__:Collapse",
    "moreQuotas": "__MISSING__:+{count} more",
    "ungrouped": "Ungrouped",
    "viewFlat": "Flat",
    "viewByEnvironment": "By Environment",
    "noQuotaDataAvailable": "Tidak ada data kuota yang tersedia",
    "noAccountsForTierFilter": "Tidak ditemukan akun untuk filter tingkat",
    "tierAll": "Semua",
    "tierEnterprise": "Perusahaan",
    "tierTeam": "Tim",
    "tierBusiness": "Bisnis",
    "tierUltra": "Sangat",
    "tierPro": "Pro",
    "tierPlus": "Ditambah lagi",
    "tierFree": "Gratis",
    "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": "Segarkan sekarang",
    "suiteBuilderSaveFailed": "Failed to save suite",
    "clone": "Klon",
    "exportSuite": "Ekspor",
    "importSuite": "Impor",
    "suiteExported": "Suite diekspor",
    "suiteExportFailed": "Gagal mengekspor rangkaian",
    "suiteImportReady": "Impor suite dimuat untuk ditinjau",
    "suiteImportFailed": "Gagal mengimpor rangkaian",
    "suiteImportInvalid": "JSON rangkaian evaluasi tidak valid",
    "suiteBuilderCloneSuffix": "salin",
    "suiteBuilderImportedSuite": "Suite yang Diimpor",
    "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": "misalnya def fibonacci",
    "suiteBuilderCaseExpectedPlaceholderExact": "Tempelkan respons yang diharapkan secara tepat",
    "suiteBuilderCaseExpectedPlaceholderRegex": "misalnya ^\\\\s*\\\\{.*\\\\}\\\\s*$",
    "suiteBuilderCaseExpectedHintRegex": "Gunakan ekspresi reguler JavaScript tanpa menambahkan 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": "Duplikat",
    "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": "menit ke kiri",
    "quotaCutoffsColumnHelp": "Hentikan permintaan ketika sisa kuota mencapai persentase ini atau lebih rendah.",
    "quotaCutoffsButtonDefault": "Bawaan",
    "quotaCutoffsButtonHelp": "Edit batas sisa kuota minimum untuk akun ini.",
    "quotaCutoffsButtonDisabled": "Belum ada jendela kuota yang tersedia untuk akun ini.",
    "quotaCutoffsTitle": "Pemotongan kuota untuk {name} ({provider})",
    "quotaCutoffsExplainer": "Ganti persentase sisa kuota minimum saat akun ini berhenti dipilih untuk setiap jendela kuota. Biarkan kosong untuk mewarisi default penyedia.",
    "quotaCutoffsDefaultHint": "Sisa minimum default: {default}%",
    "quotaCutoffsResetAll": "Setel ulang semua",
    "quotaCutoffsNoWindows": "Belum ada jendela kuota yang tersedia untuk akun ini.",
    "quotaThresholdInvalid": "Masukkan bilangan bulat dari 0 hingga 100.",
    "budgetKpiToday": "Hari ini",
    "budgetKpiThisMonth": "Bulan ini",
    "budgetKpiProjEom": "Proyek EOM",
    "budgetKpiBlocked": "Diblokir",
    "budgetKpiAtRisk": "Beresiko",
    "budgetKpiActiveKeys": "Kunci aktif",
    "budgetSearchKeysPlaceholder": "Kunci pencarian...",
    "budgetSortPctUsed": "Urutkan: % Digunakan ↓",
    "budgetSortTodayDollar": "Urutkan: Hari ini $ ↓",
    "budgetSortMonthDollar": "Urutkan: Bulan $ ↓",
    "budgetSortNameAZ": "Sortir: Nama (A–Z)",
    "budgetColDailyLim": "Batas harian",
    "budgetColMonthlyLim": "Batas bulanan",
    "budgetColUsedPct": "% terpakai",
    "budgetLoading": "Memuat…",
    "budgetNoKeysMatch": "Tidak ada kunci yang cocok dengan filter",
    "budgetLinearExtrapolation": "ekstrapolasi linier",
    "budgetThisMonthSoFar": "Bulan ini sejauh ini",
    "budgetProjectedEndOfMonth": "Proyeksi akhir bulan",
    "budgetByProvider": "oleh penyedia",
    "budgetDailyDollar": "Setiap hari $",
    "budgetWeeklyDollar": "Mingguan $",
    "budgetMonthlyDollar": "$bulanan",
    "budgetWarnAtPct": "Peringatkan pada%",
    "quotaAlerts": "Peringatan kuota",
    "quotaTableRefreshing": "⟳ Menyegarkan...",
    "noSpendLast30Days": "Tidak ada pembelanjaan dalam 30 hari terakhir",
    "updatedShort": "__MISSING__:Updated",
    "lastRefreshed": "__MISSING__:Last refreshed",
    "providerQuota": "__MISSING__:Provider Quota",
    "providerQuotaHomeHint": "__MISSING__:Live status across connected accounts"
  },
  "modals": {
    "waitingAuth": "Menunggu Otorisasi",
    "verificationUrl": "URL verifikasi",
    "yourCode": "Kode Anda",
    "remoteAccess": "Akses jarak jauh:",
    "connectedSuccess": "Berhasil Terhubung!",
    "connectionFailed": "Koneksi Gagal",
    "chooseAuthMethod": "Pilih metode autentikasi Anda:",
    "awsBuilderId": "ID Pembuat AWS",
    "awsIamIdentity": "Pusat Identitas AWS IAM",
    "googleAccount": "Akun Google",
    "githubAccount": "Akun GitHub",
    "importToken": "Impor Token",
    "pasteToken": "Tempel token penyegaran dari Kiro IDE.",
    "awsRegion": "Wilayah AWS",
    "autoDetecting": "Token yang terdeteksi secara otomatis...",
    "readingFromCache": "Membaca dari cache AWS SSO",
    "readingFromCursor": "Membaca dari database Cursor IDE",
    "initializing": "Menginisialisasi...",
    "pricingConfig": "Konfigurasi Harga",
    "loadingPricing": "Memuat data harga...",
    "pricingRatesFormat": "Format Tarif Harga",
    "noPricingData": "Tidak ada data harga yang tersedia",
    "noModelsFound": "Tidak ada model yang ditemukan"
  },
  "loggers": {
    "allProviders": "Semua Penyedia",
    "allModels": "Semua Model",
    "allAccounts": "Semua Akun",
    "allApiKeys": "Semua Kunci API",
    "allTypes": "Semua Jenis",
    "allLevels": "Semua Tingkat",
    "modelAZ": "Model A-Z",
    "modelZA": "Model Z-A",
    "loadingLogs": "Memuat log...",
    "loadingProxyLogs": "Memuat log proxy...",
    "noLogEntries": "Tidak ada entri log yang ditemukan",
    "noPayloadData": "Tidak ada data muatan yang tersedia untuk entri log ini.",
    "proxyEvent": "Acara Proksi",
    "proxy": "Proksi",
    "level": "Tingkat",
    "directNative": "Langsung (asli)",
    "combo": "kombo",
    "inputTokens": "Saya:",
    "outputTokens": "HAI:"
  },
  "stats": {
    "usageOverview": "Ikhtisar Penggunaan",
    "outputTokens": "Token Keluaran",
    "totalCost": "Jumlah Biaya",
    "usageByModel": "Penggunaan berdasarkan Model",
    "usageByAccount": "Penggunaan berdasarkan Akun",
    "failedToLoad": "Gagal memuat statistik penggunaan.",
    "tokenHealth": "Token Kesehatan",
    "totalOAuth": "Total OAuth",
    "healthy": "Sehat",
    "warning": "Peringatan",
    "errored": "Salah",
    "lastCheck": "Pemeriksaan terakhir",
    "noData": "Tidak ada data",
    "share": "Bagikan",
    "unableToLoad": "Tidak dapat memuat metrik sistem",
    "product": "Produk",
    "resources": "Sumber daya",
    "company": "Perusahaan"
  },
  "auth": {
    "welcome": "Selamat datang",
    "signIn": "Masuk",
    "enterPassword": "Masukkan kata sandi Anda untuk melanjutkan",
    "password": "Kata sandi",
    "unifiedProxy": "Proksi API AI Terpadu",
    "unifiedAiApiProxy": "Proksi API AI Terpadu",
    "unifiedAiApiProxyDesc": "Merutekan permintaan ke beberapa penyedia AI melalui satu titik akhir. Penyeimbangan beban, failover, dan pelacakan penggunaan sudah ada di dalamnya.",
    "passwordNotEnabled": "Perlindungan kata sandi tidak diaktifkan",
    "loading": "Memuat...",
    "invalidPassword": "Kata sandi tidak valid",
    "errorOccurredRetry": "Terjadi kesalahan. Silakan coba lagi.",
    "configureInstance": "Mari konfigurasikan instans OmniRoute Anda",
    "runOnboardingWizard": "Jalankan wizard orientasi untuk menyiapkan kata sandi Anda dan menghubungkan penyedia AI pertama Anda.",
    "startOnboarding": "Mulai Orientasi",
    "secureYourInstance": "Amankan Instans Anda",
    "setPasswordDescription": "Tetapkan kata sandi untuk melindungi dasbor Anda dan mengamankan titik akhir API Anda dari akses tidak sah.",
    "configurePassword": "Konfigurasikan Kata Sandi",
    "continue": "Lanjutkan",
    "windowWillClose": "Jendela ini akan tertutup secara otomatis...",
    "closeTabNow": "Anda dapat menutup tab ini sekarang.",
    "copyUrlManual": "Silakan salin URL dari bilah alamat dan tempelkan di aplikasi.",
    "accessDeniedDescription": "Anda tidak memiliki izin untuk mengakses sumber daya ini. Periksa kunci API Anda atau hubungi administrator.",
    "goToDashboard": "Buka Dasbor",
    "featureMultiProviderTitle": "Multi-Penyedia",
    "featureMultiProviderDesc": "OpenAI, Antropik, Google, dan banyak lagi",
    "featureLoadBalancingTitle": "Penyeimbangan Beban",
    "featureLoadBalancingDesc": "Distribusikan permintaan dengan cerdas",
    "featureUsageTrackingTitle": "Pelacakan Penggunaan",
    "featureUsageTrackingDesc": "Pantau biaya dan token",
    "resetPassword": "Atur Ulang Kata Sandi",
    "resetDescription": "Pilih metode untuk memulihkan akses ke dasbor Anda",
    "stopServer": "Hentikan server OmniRoute",
    "processing": "Memproses...",
    "pleaseWait": "Harap tunggu sementara kami menyelesaikan otorisasi.",
    "authSuccess": "Otorisasi Berhasil!",
    "copyUrl": "Salin URL ini",
    "accessDenied": "Akses Ditolak",
    "methodCliTitle": "Metode 1: Atur Ulang CLI",
    "methodCliDescription": "Jalankan perintah berikut di server tempat OmniRoute berjalan:",
    "methodCliHint": "Ini akan meminta Anda untuk menetapkan kata sandi baru. Server harus dihentikan terlebih dahulu.",
    "methodManualTitle": "Metode 2: Reset Manual",
    "methodManualDescription": "Hapus kata sandi dari database dan atur kata sandi baru saat startup:",
    "setPasswordInYour": "Tetapkan kata sandi baru di Anda",
    "fileLabelSuffix": "mengajukan:",
    "newPasswordPlaceholder": "kata sandi_baru_Anda",
    "deleteSettingsFile": "Hapus",
    "orRemovePasswordHashField": "atau hapus bidang passwordHash",
    "restartServerWithNewPassword": "Mulai ulang server - server akan menggunakan kata sandi baru",
    "backToLogin": "Kembali ke Masuk",
    "forgotPassword": "Lupa kata sandi?",
    "defaultPasswordHint": "Default password: CHANGEME (unless INITIAL_PASSWORD was set)",
    "Authorization": "Otorisasi",
    "Content-Disposition": "Disposisi Konten",
    "waitingForAuthorization": "Waiting for authorization...",
    "waitingForGoogleAuthorization": "Waiting for Google authorization...",
    "waitingForOpenAIAuthorization": "Waiting for OpenAI authorization...",
    "waitingForAntigravityAuthorization": "Waiting for Antigravity authorization...",
    "waitingForQoderAuthorization": "Waiting for Qoder authorization...",
    "exchangingCodeForTokens": "Exchanging code for tokens...",
    "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": "Arahkan ke rumah",
    "toggleMenu": "Alihkan menu",
    "featuresLink": "Fitur",
    "docsLink": "dokumen",
    "github": "GitHub",
    "versionLive": "v1.0 sekarang aktif",
    "oneEndpoint": "Satu Titik Akhir untuk",
    "allProviders": "Semua Penyedia AI",
    "heroDescription": "Proksi titik akhir AI dengan dasbor web - Port JavaScript CLIProxyAPI. Bekerja secara lancar dengan Claude Code, OpenAI Codex, Cline, RooCode, dan alat CLI lainnya.",
    "getStarted": "Memulai",
    "viewOnGithub": "Lihat di GitHub",
    "powerfulFeatures": "Fitur Canggih",
    "featuresSubtitle": "Semua yang Anda perlukan untuk mengelola infrastruktur AI Anda di satu tempat, dibuat untuk skala besar.",
    "featureUnifiedEndpointTitle": "Titik Akhir Terpadu",
    "featureUnifiedEndpointDesc": "Akses semua penyedia melalui satu URL API standar.",
    "featureEasySetupTitle": "Pengaturan Mudah",
    "featureEasySetupDesc": "Bangun dan jalankan dalam hitungan menit dengan perintah npx.",
    "featureModelFallbackTitle": "Penggantian Model",
    "featureModelFallbackDesc": "Secara otomatis beralih penyedia jika terjadi kegagalan atau latensi tinggi.",
    "featureUsageTrackingTitle": "Pelacakan Penggunaan",
    "featureUsageTrackingDesc": "Analisis terperinci dan pemantauan biaya di semua model.",
    "featureOAuthApiKeysTitle": "Kunci OAuth & API",
    "featureOAuthApiKeysDesc": "Kelola kredensial dengan aman dalam satu brankas.",
    "featureCloudSyncTitle": "Sinkronisasi Awan",
    "featureCloudSyncDesc": "Sinkronkan konfigurasi Anda di seluruh perangkat secara instan.",
    "featureCliSupportTitle": "Dukungan CLI",
    "featureCliSupportDesc": "Bekerja dengan Claude Code, Codex, Cline, Cursor, dan banyak lagi.",
    "featureDashboardTitle": "Dasbor",
    "featureDashboardDesc": "Dasbor visual untuk analisis lalu lintas waktu nyata.",
    "howItWorks": "Cara Kerja OmniRoute",
    "howItWorksDescription": "Data mengalir dengan lancar dari aplikasi Anda melalui lapisan perutean cerdas kami ke penyedia terbaik untuk pekerjaan tersebut.",
    "howItWorksStep1Title": "1. CLI & SDK",
    "howItWorksStep1Description": "Permintaan Anda dimulai dari alat favorit Anda atau SDK terpadu kami. Ubah saja URL dasar.",
    "howItWorksStep2Title": "2. Hub OmniRoute",
    "howItWorksStep2Description": "Mesin kami menganalisis perintah, memeriksa kesehatan penyedia, dan merutekan latensi atau biaya terendah.",
    "howItWorksStep3Title": "3. Penyedia AI",
    "howItWorksStep3Description": "Permintaan tersebut dipenuhi oleh OpenAI, Anthropic, Gemini, atau lainnya secara instan.",
    "getStartedIn30Seconds": "Memulai dalam 30 Detik",
    "getStartedDescription": "Instal OmniRoute, konfigurasikan penyedia Anda melalui dasbor web, dan mulai merutekan permintaan AI.",
    "installOmniRoute": "Instal OmniRoute",
    "installStepDescription": "Jalankan perintah npx untuk memulai server secara instan",
    "openDashboard": "Buka Dasbor",
    "openDashboardStepDescription": "Konfigurasikan penyedia dan kunci API melalui antarmuka web",
    "routeRequests": "Permintaan Rute",
    "routeRequestsStepDescription": "Arahkan alat CLI Anda ke {endpoint}",
    "terminal": "terminal",
    "copy": "Salin",
    "copied": "✓ Disalin",
    "startingOmniRoute": "Memulai OmniRoute...",
    "serverRunningOnLabel": "Server berjalan",
    "dashboardLabel": "Dasbor",
    "readyToRoute": "Siap untuk rute! ✓",
    "configureProvidersNote": "📝 Konfigurasikan penyedia di dasbor atau gunakan variabel lingkungan",
    "dataLocation": "Lokasi Data:",
    "dataLocationMacLinux": " macOS/Linux:",
    "dataLocationWindows": " jendela:",
    "product": "Produk",
    "dashboardLink": "Dasbor",
    "changelog": "log perubahan",
    "resources": "Sumber daya",
    "documentation": "Dokumentasi",
    "npm": "NPM",
    "legal": "Hukum",
    "mitLicense": "Lisensi MIT",
    "footerTagline": "Titik akhir terpadu untuk generasi AI. Hubungkan, rutekan, dan kelola penyedia AI Anda dengan mudah.",
    "copyright": "© {year} OmniRoute. Semua hak dilindungi undang-undang.",
    "flowToolClaudeCode": "Kode Claude",
    "flowToolOpenAICodex": "Kodeks OpenAI",
    "flowToolCline": "Klinik",
    "flowToolCursor": "Kursor",
    "flowProviderOpenAI": "OpenAI",
    "flowProviderAnthropic": "Antropis",
    "flowProviderGemini": "kembar",
    "flowProviderGithubCopilot": "Kopilot GitHub",
    "interactiveDiagram": "Diagram interaktif terlihat di desktop",
    "ctaTitle": "Siap Menyederhanakan Infrastruktur AI Anda?",
    "ctaDescription": "Bergabunglah dengan pengembang yang menyederhanakan integrasi AI mereka dengan OmniRoute. Sumber terbuka dan gratis untuk memulai.",
    "startFree": "Mulai Gratis",
    "readDocumentation": "Baca Dokumentasi"
  },
  "docs": {
    "title": "Dokumentasi",
    "quickStart": "Mulai Cepat",
    "deploymentGuides": "Panduan Penerapan",
    "features": "Fitur",
    "supportedProviders": "Penyedia yang Didukung",
    "supportedProvidersToc": "Penyedia",
    "commonUseCases": "Kasus Penggunaan Umum",
    "clientCompatibility": "Kompatibilitas Klien",
    "protocolsToc": "Protocols",
    "apiReference": "Referensi API",
    "managementApiReference": "Referensi API Manajemen",
    "managementApiDescription": "Endpoint automasi untuk registry proxy, assignment scope, dan migrasi proxy lama.",
    "method": "Metode",
    "path": "Jalan",
    "notes": "Catatan",
    "modelPrefixes": "Awalan Model",
    "prefix": "Awalan",
    "troubleshooting": "Pemecahan masalah",
    "supportsChat": "Mendukung titik akhir obrolan dan respons.",
    "oauthAutoRefresh": "Koneksi OAuth dengan penyegaran token otomatis.",
    "fullStreaming": "Dukungan streaming penuh untuk semua model.",
    "docsLabel": "dokumen",
    "docsHeroDescription": "Gerbang AI untuk LLM multi-penyedia. Satu titik akhir untuk OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor, dan 20+ penyedia lainnya.",
    "openDashboard": "Buka Dasbor",
    "endpointPage": "Halaman Titik Akhir",
    "github": "GitHub",
    "reportIssue": "Laporkan Masalah",
    "onThisPage": "Di halaman ini",
    "documentationVersion": "Dokumentasi - v{version}",
    "quickStartStep1Title": "1. Instal dan jalankan",
    "quickStartStep1Prefix": "Jalankan",
    "quickStartStep1Middle": "atau kloning dari GitHub dan jalankan",
    "quickStartStep2Title": "2. Buat kunci API",
    "quickStartStep2Text": "Buka Titik Akhir -> Kunci Terdaftar. Hasilkan satu kunci per lingkungan.",
    "quickStartStep3Title": "3. Hubungkan penyedia",
    "quickStartStep3Text": "Tambahkan akun penyedia melalui login OAuth, kunci API, atau koneksi otomatis tingkat gratis.",
    "quickStartStep4Title": "4. Tetapkan URL basis klien",
    "quickStartStep4Prefix": "Arahkan klien IDE atau API Anda ke",
    "quickStartStep4Suffix": "Gunakan awalan penyedia, misalnya",
    "deploySetupTitle": "Panduan Pengaturan",
    "deploySetupText": "Instalasi langkah demi langkah, konfigurasi lingkungan, dan panduan pertama kali dijalankan untuk OmniRoute.",
    "deployElectronTitle": "Desktop Elektron",
    "deployElectronText": "Jalankan OmniRoute sebagai aplikasi desktop asli di Windows, macOS, dan Linux.",
    "deployDockerTitle": "buruh pelabuhan",
    "deployDockerText": "Penerapan dalam container dengan Docker Compose; siap untuk tumpukan produksi dan Kubernetes.",
    "deployVmTitle": "Mesin Virtual",
    "deployVmText": "Host mandiri di VM Linux apa pun. Termasuk unit systemd, rotasi log, dan perkakas cadangan.",
    "deployFlyTitle": "Terbang.io",
    "deployFlyText": "Terapkan ke runtime Fly.io edge dengan satu fly.toml dan satu perintah penerapan.",
    "deployPwaTitle": "PWA",
    "deployPwaText": "Instal OmniRoute sebagai Aplikasi Web Progresif di browser Android, iOS, dan desktop.",
    "deployTermuxTitle": "Termux (Android)",
    "deployTermuxText": "Run OmniRoute headless on Android via Termux. Access the dashboard from your mobile browser.",
    "featureRoutingTitle": "Perutean Multi-Penyedia",
    "featureRoutingText": "Rutekan permintaan ke 30+ penyedia AI melalui satu titik akhir yang kompatibel dengan OpenAI. Mendukung API obrolan, respons, audio, dan gambar.",
    "featureCombosTitle": "Kombo dan Penyeimbangan",
    "featureCombosText": "Buat kombo model dengan rantai cadangan dan strategi penyeimbangan: round-robin, prioritas, acak, paling jarang digunakan, dan hemat biaya.",
    "featureUsageTitle": "Pelacakan Penggunaan dan Biaya",
    "featureUsageText": "Penghitungan token secara real-time, penghitungan biaya per penyedia/model, dan perincian penggunaan terperinci berdasarkan kunci API dan akun.",
    "featureAnalyticsTitle": "Dasbor Analisis",
    "featureAnalyticsText": "Analisis visual dengan bagan untuk permintaan, token, kesalahan, latensi, biaya, dan popularitas model dari waktu ke waktu.",
    "featureHealthTitle": "Pemantauan Kesehatan",
    "featureHealthText": "Pemeriksaan kesehatan langsung, status penyedia, status pemutus sirkuit, dan deteksi batas tarif otomatis dengan backoff eksponensial.",
    "featureCliTitle": "Alat CLI",
    "featureCliText": "Kelola konfigurasi IDE, ekspor/impor cadangan, temukan profil codex, dan konfigurasikan pengaturan dari dasbor.",
    "featureSecurityTitle": "Keamanan dan Kebijakan",
    "featureSecurityText": "Otentikasi kunci API, pemfilteran IP, pelindung injeksi cepat, kebijakan domain, manajemen sesi, dan pencatatan audit.",
    "featureCloudSyncTitle": "Sinkronisasi Awan",
    "featureCloudSyncText": "Sinkronkan konfigurasi Anda ke Cloudflare Workers untuk akses jarak jauh dengan kredensial terenkripsi dan failover otomatis.",
    "providersAcrossConnectionTypes": "{count} penyedia di tiga jenis koneksi.",
    "manageProviders": "Kelola Penyedia",
    "providersCount": "{count} penyedia",
    "providerTypeFree": "Tingkat Gratis",
    "providerTypeOAuth": "OAuth",
    "providerTypeApiKey": "Kunci API",
    "useCaseSingleEndpointTitle": "Titik akhir tunggal untuk banyak penyedia",
    "useCaseSingleEndpointText": "Arahkan klien ke satu URL dasar dan rutekan berdasarkan awalan model (misalnya: gh/, cc/, kr/, openai/).",
    "useCaseFallbackTitle": "Penggantian dan peralihan model dengan kombo",
    "useCaseFallbackText": "Buat model kombo di Dasbor dan pertahankan konfigurasi klien tetap stabil sementara penyedia melakukan rotasi secara internal.",
    "useCaseUsageVisibilityTitle": "Penggunaan, biaya, dan visibilitas debug",
    "useCaseUsageVisibilityText": "Lacak token dan biaya berdasarkan penyedia, akun, dan kunci API di tab Penggunaan dan Analisis.",
    "clientCherryStudioTitle": "Studio Ceri",
    "baseUrlLabel": "URL dasar",
    "chatEndpointLabel": "Titik akhir obrolan",
    "modelRecommendationLabel": "Rekomendasi model: awalan eksplisit",
    "clientCodexTitle": "Model Kopilot Codex / GitHub",
    "clientCodexBullet1": "Gunakan ID model dengan",
    "clientCodexBullet2": "Model keluarga Codex dirutekan otomatis ke",
    "clientCodexBullet3": "Model non-Codex terus berlanjut",
    "clientCursorTitle": "IDE kursor",
    "clientCursorBullet1": "Gunakan",
    "clientCursorBullet1Suffix": "awalan untuk model Kursor.",
    "clientCursorBullet2": "Koneksi OAuth - login dari halaman Penyedia.",
    "clientClaudeTitle": "Kode Claude / Antigravitasi",
    "clientClaudeBullet1Prefix": "Gunakan",
    "clientClaudeBullet1Middle": "(Claude) atau",
    "clientClaudeBullet1Suffix": "Awalan (Antigravitasi).",
    "clientWindsurfTitle": "selancar angin",
    "clientWindsurfBullet1": "Gunakan OmniRoute sebagai URL dasar yang kompatibel dengan OpenAI dan pertahankan awalan penyedia eksplisit untuk perutean deterministik.",
    "clientWindsurfBullet2": "Arahkan model ke `/v1/chat/completions` untuk lalu lintas umum dan pertahankan `/v1/responses` untuk alur bergaya Codex.",
    "clientWindsurfBullet3": "Gunakan Dashboard -> CLI Tools untuk panduan konfigurasi Windsurf yang sudah jadi.",
    "clientClineTitle": "Klinik",
    "clientClineBullet1": "Cline berfungsi paling baik dengan awalan penyedia/model eksplisit sehingga router tidak perlu menebak backend.",
    "clientClineBullet2": "Gunakan `/v1/chat/completions` untuk model umum dan gunakan kembali URL dasar OmniRoute yang sama di berbagai akun.",
    "clientClineBullet3": "Gunakan dasbor Penyedia untuk memvalidasi kunci OAuth/API sebelum men-debug masalah runtime Cline.",
    "clientKimiTitle": "Pengkodean Kimi",
    "clientKimiBullet1": "Gunakan OmniRoute sebagai URL dasar yang stabil sambil merotasi akun atau kombo penyedia di bawahnya.",
    "clientKimiBullet2": "Lebih memilih model awalan dalam alur pengkodean sehingga fallback dan jejak audit tetap eksplisit.",
    "clientKimiBullet3": "Gunakan `/v1/responses` bila Anda menginginkan perutean gaya Respons asli untuk klien 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 obrolan yang kompatibel dengan OpenAI (default).",
    "endpointResponsesNote": "Titik akhir API respons (Codex, o-series).",
    "endpointModelsNote": "Katalog model untuk semua penyedia yang terhubung.",
    "endpointAudioNote": "Transkripsi audio (Deepgram, MajelisAI).",
    "endpointSpeechNote": "Generasi text-to-speech (ElevenLabs, OpenAI TTS).",
    "endpointEmbeddingsNote": "Generasi embedding teks (OpenAI, Cohere, Voyage).",
    "endpointImagesNote": "Pembuatan gambar (NanoBanana).",
    "endpointRewriteChatNote": "Tulis ulang pembantu untuk klien tanpa /v1.",
    "endpointRewriteResponsesNote": "Tulis ulang pembantu untuk Respons tanpa /v1.",
    "endpointRewriteModelsNote": "Tulis ulang pembantu untuk penemuan model tanpa /v1.",
    "mgmtProxiesListNote": "Daftar item proxy registry tersimpan (mendukung pagination).",
    "mgmtProxiesCreateNote": "Buat item proxy reusable di registry.",
    "mgmtProxiesHealthNote": "Ambil metrik kesehatan proxy tersimpan (24 jam/window) dari proxy logs.",
    "mgmtProxiesBulkAssignNote": "Set atau hapus satu proxy ke banyak scope ID dalam satu request.",
    "mgmtAssignmentsListNote": "Daftar assignment proxy berdasarkan scope, scope_id, atau proxy_id.",
    "mgmtAssignmentsUpdateNote": "Set atau hapus proxy untuk scope global/provider/account/combo.",
    "mgmtLegacyMigrationNote": "Impor map proxyConfig lama ke assignment registry.",
    "modelPrefixesDescriptionStart": "Gunakan awalan penyedia sebelum nama model untuk merutekan ke penyedia tertentu. Contoh:",
    "modelPrefixesDescriptionEnd": "rute ke GitHub Copilot.",
    "provider": "Penyedia",
    "type": "Ketik",
    "troubleshootingModelRouting": "Jika klien gagal dengan perutean model, gunakan penyedia/model eksplisit (misalnya: gh/gpt-5.1-codex).",
    "troubleshootingAmbiguousModels": "Jika Anda menerima kesalahan model yang ambigu, pilih awalan penyedia, bukan ID model biasa.",
    "troubleshootingCodexFamily": "Untuk model keluarga GitHub Codex, pertahankan model sebagai gh/codex-model; router memilih / merespons secara otomatis.",
    "troubleshootingTestConnection": "Gunakan Dasbor > Penyedia > Uji Koneksi sebelum menguji dari IDE atau klien eksternal.",
    "troubleshootingCircuitBreaker": "Jika penyedia menunjukkan pemutus sirkuit terbuka, tunggu hingga cooldown atau periksa halaman Kesehatan untuk detailnya.",
    "troubleshootingOAuth": "Untuk penyedia OAuth, autentikasi ulang jika masa berlaku token habis. Periksa indikator status kartu penyedia.",
    "endpointCompletionsNote": "Titik akhir penyelesaian lama untuk pembuatan teks.",
    "endpointModerationsNote": "Moderasi konten dan klasifikasi keamanan.",
    "endpointRerankNote": "Pemeringkatan ulang dokumen untuk generasi yang ditambah pengambilan (Cohere, Jina).",
    "endpointSearchNote": "Pencarian web dengan 5 penyedia (Serper, Brave, Exa, Tavily, Perplexity).",
    "endpointSearchAnalyticsNote": "Analisis dan metrik untuk permintaan pencarian.",
    "endpointVideoNote": "Pembuatan video (ComfyUI, alur kerja SD WebUI).",
    "endpointMusicNote": "Pembuatan musik melalui alur kerja ComfyUI.",
    "endpointMessagesNote": "Titik akhir pesan asli antropik.",
    "endpointCountTokensNote": "Hitung token untuk muatan pesan tertentu.",
    "endpointFilesNote": "Unggah file untuk input multimodal.",
    "endpointBatchesNote": "Pemrosesan batch untuk permintaan API massal.",
    "endpointWsNote": "Titik akhir WebSocket untuk streaming waktu nyata.",
    "mgmtProvidersListNote": "Daftar semua koneksi penyedia terdaftar.",
    "mgmtProvidersCreateNote": "Buat koneksi penyedia baru.",
    "mgmtProvidersUpdateNote": "Perbarui koneksi penyedia yang ada.",
    "mgmtProvidersDeleteNote": "Hapus koneksi penyedia.",
    "mgmtProvidersTestNote": "Uji konektivitas dan autentikasi untuk penyedia.",
    "mgmtProvidersModelsNote": "Buat daftar model yang tersedia untuk penyedia tertentu.",
    "mgmtSettingsGetNote": "Ambil pengaturan aplikasi saat ini.",
    "mgmtSettingsUpdateNote": "Perbarui pengaturan aplikasi.",
    "mgmtPayloadRulesGetNote": "Dapatkan aturan transformasi muatan.",
    "mgmtPayloadRulesUpdateNote": "Perbarui aturan transformasi muatan.",
    "mcpToolsTitle": "Alat MCP",
    "mcpToolsDescription": "OmniRoute mengekspos alat {count} melalui Model Context Protocol untuk orkestrasi agen.",
    "mcpToolsCount": "{count} alat",
    "mcpToolsToc": "Alat MCP",
    "mcpToolsRoutingTitle": "Perutean & Penemuan",
    "mcpToolsRoutingDesc": "Pemeriksaan kesehatan, manajemen kombo, pemantauan kuota, pelaporan biaya, dan akses katalog model.",
    "mcpToolsOperationsTitle": "Operasi & Strategi",
    "mcpToolsOperationsDesc": "Simulasi rute, penjaga anggaran, peralihan strategi, profil ketahanan, dan metrik penyedia.",
    "mcpToolsCacheTitle": "Manajemen Tembolok",
    "mcpToolsCacheDesc": "Lihat statistik cache dan bersihkan cache semantik atau tanda tangan.",
    "mcpToolsCompressionTitle": "Mesin Kompresi",
    "mcpToolsCompressionDesc": "Konfigurasikan kompresi RTK/Brotli, tukar mesin, dan periksa analisis kompresi berdasarkan kombo.",
    "mcpToolsOneProxyTitle": "1Proxy / Terowongan",
    "mcpToolsOneProxyDesc": "Kelola proxy keluar, rotasikan IP perumahan, dan periksa kesehatan proxy.",
    "mcpToolsMemoryTitle": "Memori",
    "mcpToolsMemoryDesc": "Cari, tambahkan, dan hapus entri memori percakapan yang persisten.",
    "mcpToolsSkillsTitle": "Keterampilan",
    "mcpToolsSkillsDesc": "Buat daftar, aktifkan, jalankan, dan pantau eksekusi keterampilan khusus.",
    "featureAutoComboTitle": "Kombo Otomatis",
    "featureAutoComboText": "Secara otomatis membuat kombo yang dioptimalkan berdasarkan penyedia Anda yang terhubung, pola penggunaan, dan kemampuan model.",
    "featureSearchTitle": "Pencarian Web",
    "featureSearchText": "Pencarian web terintegrasi dengan 5 penyedia (Serper, Brave, Exa, Tavily, Perplexity) termasuk analitik dan pelacakan biaya.",
    "featureMemoryTitle": "Sistem Memori",
    "featureMemoryText": "Memori percakapan yang persisten dengan ekstraksi, injeksi, pengambilan, dan ringkasan di seluruh sesi.",
    "featureSkillsTitle": "Kerangka Keterampilan",
    "featureSkillsText": "Sistem keterampilan yang dapat diperluas dengan keterampilan bawaan dan khusus, eksekusi kotak pasir, intersepsi permintaan, dan injeksi konteks.",
    "featureAcpTitle": "Agen Komunikasi",
    "featureAcpText": "Registri Agent Communication Protocol (ACP) untuk mengelola alur kerja agen-ke-agen dan orkestrasi alat.",
    "protocolAcpTitle": "ACP (Agen Komunikasi)",
    "protocolAcpDesc": "Daftarkan dan kelola agen melalui registri ACP untuk komunikasi antar agen dan berbagi alat.",
    "protocolAcpStep1": "Navigasikan ke Dasbor → Agen untuk melihat agen ACP yang terdaftar.",
    "protocolAcpStep2": "Daftarkan agen baru dengan kemampuan dan konfigurasi titik akhir.",
    "protocolAcpStep3": "Gunakan Alat CLI untuk mengonfigurasi saluran komunikasi agen."
  },
  "legal": {
    "privacyPolicy": "Kebijakan Privasi",
    "termsOfService": "Ketentuan Layanan",
    "providerConfigurations": "Konfigurasi penyedia",
    "apiKeys": "Kunci API",
    "usageLogs": "Log penggunaan",
    "applicationSettings": "Pengaturan aplikasi",
    "viewExportAnalytics": "Lihat dan ekspor analisis penggunaan",
    "clearHistory": "Hapus riwayat penggunaan kapan saja",
    "configureRetention": "Konfigurasikan kebijakan penyimpanan log",
    "backupRestore": "Cadangkan dan pulihkan database Anda",
    "privacyMetadataTitle": "Kebijakan Privasi | OmniRoute",
    "privacyMetadataDescription": "Kebijakan privasi untuk router proksi OmniRoute AI API.",
    "termsMetadataTitle": "Ketentuan Layanan | OmniRoute",
    "termsMetadataDescription": "Persyaratan layanan untuk router proksi OmniRoute AI API.",
    "backToHome": "Kembali ke rumah",
    "lastUpdated": "Terakhir diperbarui: {date}",
    "policyLastUpdatedDate": "13 Februari 2026",
    "listSeparator": "-",
    "questionsVisit": "Pertanyaan? Kunjungi kami",
    "githubRepository": "Repositori GitHub",
    "privacySection1Title": "1. Arsitektur Lokal-Pertama",
    "privacySection1Text": "OmniRoute dirancang sebagai aplikasi lokal pertama. Semua pemrosesan dan penyimpanan data sepenuhnya dilakukan di mesin Anda. Tidak ada server terpusat yang mengumpulkan informasi Anda.",
    "privacySection2Title": "2. Data yang Kami Simpan",
    "privacyDataStoredIn": "Data berikut disimpan secara lokal di",
    "privacyDataProviderConfigurationsDesc": "URL koneksi, jenis penyedia, dan pengaturan prioritas",
    "privacyDataApiKeysDesc": "dienkripsi dan disimpan secara lokal untuk diautentikasi dengan penyedia AI",
    "privacyDataUsageLogsDesc": "jumlah permintaan, penggunaan token, nama model, stempel waktu, dan waktu respons",
    "privacyDataApplicationSettingsDesc": "preferensi tema, strategi perutean, dan konfigurasi kombo",
    "privacySection3Title": "3. Tidak Ada Telemetri",
    "privacySection3Text": "OmniRoute tidak mengumpulkan telemetri, analitik, atau laporan kerusakan. Tidak ada data yang dikirimkan kepada kami atau pihak ketiga mana pun. Pola penggunaan, panggilan API, dan konfigurasi Anda sepenuhnya bersifat pribadi.",
    "privacySection4Title": "4. Penyedia AI Pihak Ketiga",
    "privacySection4Text": "Saat Anda melakukan panggilan API melalui OmniRoute, permintaan Anda diteruskan ke penyedia AI yang telah Anda konfigurasikan (misalnya: OpenAI, Anthropic, Google). Penyedia ini memiliki kebijakan privasinya sendiri yang mengatur cara mereka menangani data Anda. Harap tinjau:",
    "privacyOpenAiPolicy": "Kebijakan Privasi OpenAI",
    "privacyAnthropicPolicy": "Kebijakan Privasi Antropis",
    "privacyGooglePolicy": "Kebijakan Privasi Google",
    "privacySection5Title": "5. Sinkronisasi Cloud (Opsional)",
    "privacySection5Text": "Jika Anda mengaktifkan fitur sinkronisasi cloud opsional, konfigurasi penyedia dan kunci API dapat dikirimkan ke titik akhir cloud yang dikonfigurasi. Fitur ini dinonaktifkan secara default dan memerlukan keikutsertaan yang jelas.",
    "privacySection6Title": "6. Pencatatan",
    "privacyLoggingIntro": "Log permintaan dapat dikonfigurasi melalui pengaturan dasbor. Anda dapat:",
    "privacySection7Title": "7. Hak Anda",
    "privacySection7TextStart": "Karena semua data disimpan secara lokal, Anda memiliki kendali penuh. Anda dapat menghapus data Anda kapan saja dengan menghapusnya",
    "privacySection7TextEnd": "direktori atau menggunakan fitur pencadangan dan pemulihan basis data di dasbor.",
    "termsSection1Title": "1. Ikhtisar",
    "termsSection1Text": "OmniRoute adalah router proksi AI API lokal pertama yang beroperasi sepenuhnya di mesin Anda. Ini merutekan permintaan ke beberapa penyedia AI dengan penyeimbangan beban, failover, dan pelacakan penggunaan.",
    "termsSection2Title": "2. Tanggung Jawab Pengguna",
    "termsResponsibilityApiKeys": "Anda sepenuhnya bertanggung jawab untuk mengelola kunci API dan kredensial Anda sendiri untuk penyedia AI pihak ketiga (OpenAI, Anthropic, Google, dll.).",
    "termsResponsibilityCompliance": "Anda harus mematuhi persyaratan layanan setiap penyedia AI yang API-nya Anda akses melalui OmniRoute.",
    "termsResponsibilitySecurity": "Anda bertanggung jawab atas keamanan instalasi OmniRoute lokal Anda, termasuk mengatur kata sandi dan membatasi akses jaringan.",
    "termsSection3Title": "3. Cara Kerjanya",
    "termsSection3Text": "OmniRoute bertindak sebagai proksi perantara. Panggilan API yang dikirim ke OmniRoute diterjemahkan dan diteruskan ke penyedia AI Anda yang dikonfigurasi. OmniRoute tidak mengubah konten permintaan atau tanggapan Anda di luar terjemahan protokol yang diperlukan.",
    "termsSection4Title": "4. Penanganan Data",
    "termsDataStoredLocally": "Semua data disimpan secara lokal di mesin Anda dalam database SQLite.",
    "termsNoTransmission": "OmniRoute tidak mengirimkan data apa pun ke server eksternal kecuali Anda secara eksplisit mengaktifkan fitur sinkronisasi cloud.",
    "termsDataLocationText": "Log penggunaan, kunci API, dan konfigurasi disimpan di",
    "termsSection5Title": "5. Penafian",
    "termsSection5Text": "OmniRoute disediakan \"sebagaimana adanya\" tanpa jaminan apa pun. Kami tidak bertanggung jawab atas segala biaya yang timbul akibat penggunaan API, gangguan layanan, atau kehilangan data. Selalu simpan cadangan konfigurasi Anda.",
    "termsSection6Title": "6. Sumber Terbuka",
    "termsSection6Text": "OmniRoute adalah perangkat lunak sumber terbuka. Anda bebas memeriksa, memodifikasi, dan mendistribusikannya berdasarkan ketentuan lisensinya."
  },
  "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 Target Agen — Apa Bedanya?",
    "comparisonCliToolsLabel": "halaman Alat CLI",
    "comparisonCliToolsTitle": "IDE Anda mengirimkan permintaan melalui OmniRoute",
    "comparisonCliToolsDesc": "Konfigurasikan Claude Code, Codex, Cursor, dan IDE lainnya untuk menggunakan OmniRoute sebagai URL dasar API-nya. OmniRoute bertindak sebagai proksi, merutekan permintaan ke penyedia Anda yang dikonfigurasi.",
    "comparisonAgentsLabel": "Halaman ini (Target Agen)",
    "comparisonAgentsTitle": "OmniRoute mengirimkan permintaan ke alat CLI lokal",
    "comparisonAgentsDesc": "OmniRoute dapat menghasilkan binari CLI lokal (claude, codex, goose) sebagai backend eksekusi. Alat CLI memproses permintaan menggunakan autentikasinya sendiri dan mengembalikan hasilnya.",
    "comparisonSummary": "Singkatnya: CLI Tools = Anda mengonfigurasi alat untuk menunjuk ke OmniRoute. Agen Target = OmniRoute menggunakan alat sebagai titik akhirnya.",
    "agentUseCaseHint": "Dapat digunakan sebagai target eksekusi melalui protokol ACP",
    "flowDiagramClient": "Aplikasi Klien",
    "flowDiagramClientDesc": "SDK, API, atau layanan upstream",
    "flowDiagramOmniRoute": "OmniRoute",
    "flowDiagramOmniRouteDesc": "Menerima permintaan dan memilih target",
    "flowDiagramSpawn": "Proses Pemijahan",
    "flowDiagramSpawnDesc": "Meluncurkan biner CLI melalui stdio",
    "flowDiagramCli": "Agen CLI",
    "flowDiagramCliDesc": "Proses dengan autentikasi/model sendiri",
    "fingerprintSettingsHint": "Pencocokan sidik jari CLI (menyamarkan permintaan sebagai alat CLI tertentu) dapat dikonfigurasi",
    "settingsRoutingLink": "Pengaturan/Perutean",
    "openSettings": "Pengaturan",
    "copyRawUrlTitle": "Salin URL mentah ke clipboard",
    "copied": "Disalin!",
    "copyUrl": "Salin URL",
    "startHere": "Mulai Disini",
    "badgeNew": "Baru",
    "viewOnGithub": "Lihat di GitHub",
    "howToUse": "Cara menggunakan",
    "browseAllSkillsOnGithub": "Jelajahi semua keterampilan di GitHub",
    "apiSkills": "Keterampilan API",
    "cliSkills": "Keterampilan 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": "Kelola agen pengkodean otonom (Jules, Devin, Codex Cloud)",
    "loading": "Memuat tugas...",
    "aboutTitle": "Tentang Agen Cloud",
    "aboutDescription": "Agen cloud adalah asisten pengkodean AI jarak jauh yang dapat menjalankan tugas secara mandiri. Cara kerjanya berbeda dari agen CLI lokal - Anda berinteraksi dengan mereka melalui API OmniRoute.",
    "howItWorksTitle": "Cara kerjanya:",
    "howItWorksDesc": "Buat tugas → Agen menganalisis dan mengusulkan rencana → Anda menyetujui → Agen mengeksekusi → Hasil dikembalikan",
    "newTaskTitle": "Buat Tugas Baru",
    "newTaskDescription": "Mulai tugas baru dengan agen cloud",
    "selectAgent": "Pilih Agen",
    "taskDescription": "Deskripsi Tugas",
    "taskDescriptionPlaceholder": "Jelaskan apa yang Anda ingin agen lakukan...",
    "startTask": "Mulai Tugas",
    "tasks": "Tugas",
    "taskDetail": "Detil Tugas",
    "noTasks": "Belum ada tugas. Buat satu untuk memulai.",
    "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 Judul",
    "created": "Dibuat",
    "conversation": "Percakapan",
    "result": "Hasil",
    "error": "Kesalahan",
    "planReady": "Rencana Siap untuk Persetujuan",
    "approvePlan": "Setujui Rencana",
    "rejectPlan": "Tolak & Batalkan",
    "sendMessagePlaceholder": "Kirim pesan ke agen...",
    "cancel": "Batalkan",
    "delete": "Hapus",
    "selectTaskPrompt": "Pilih tugas untuk melihat detailnya",
    "statusPending": "Tertunda",
    "statusRunning": "Berlari",
    "statusWaitingApproval": "Menunggu Persetujuan",
    "statusCompleted": "Selesai",
    "statusFailed": "Gagal",
    "statusCancelled": "Dibatalkan",
    "repositoryName": "Nama repositori",
    "repositoryUrl": "URL repositori",
    "branch": "Cabang"
  },
  "templateNames": {
    "simple-chat": "Simple Chat",
    "streaming": "Streaming",
    "system-prompt": "System Prompt",
    "thinking": "Thinking",
    "tool-calling": "Tool Calling",
    "multi-turn": "Multi-turn",
    "vision": "Visi",
    "schema-coercion": "Pemaksaan Skema"
  },
  "templateDescriptions": {
    "simple-chat": "Basic chat template",
    "streaming": "Streaming template",
    "system-prompt": "System prompt template",
    "thinking": "Thinking template",
    "tool-calling": "Tool calling template",
    "multi-turn": "Multi-turn template",
    "vision": "Templat multimodal dengan masukan gambar",
    "schema-coercion": "Penegakan skema keluaran terstruktur/JSON"
  },
  "templatePayloads": {
    "simpleChat": {
      "system": "Anda adalah asisten AI yang membantu.",
      "userGreeting": "Halo! Apa yang bisa saya bantu hari ini?"
    },
    "streaming": {
      "prompt": "Tulis cerita tentang"
    },
    "systemPrompt": {
      "question": "Apa arti hidup?",
      "systemInstruction": "Berikan jawaban yang bijaksana dan filosofis."
    },
    "thinking": {
      "question": "Jelaskan komputasi kuantum"
    },
    "toolCalling": {
      "cityNameDescription": "Nama kota untuk mengetahui cuaca",
      "toolDescription": "Dapatkan cuaca terkini untuk suatu lokasi",
      "userWeather": "Bagaimana cuaca di Tokyo?"
    },
    "multiTurn": {
      "system": "Anda adalah asisten yang membantu.",
      "assistantExample": "Saya akan dengan senang hati membantu Anda dalam hal itu.",
      "userInitial": "Saya butuh bantuan",
      "userFollowUp": "Bisakah Anda menjelaskannya lebih lanjut?"
    }
  },
  "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": "Pemutaran Ulang Penalaran",
    "reasoningCacheDesc": "Mempertahankan pemikiran model untuk alur pemanggilan alat multi-putaran",
    "reasoningEntries": "Entri Aktif",
    "reasoningReplayRate": "Tingkat Pemutaran Ulang",
    "reasoningReplays": "Total Pemutaran Ulang",
    "reasoningCharsCached": "Karakter Di-cache",
    "reasoningMisses": "Cache Hilang",
    "reasoningByProvider": "Oleh Penyedia",
    "reasoningByModel": "Berdasarkan Model",
    "reasoningRecentEntries": "Entri Terbaru",
    "reasoningToolCallId": "ID Panggilan Alat",
    "reasoningChars": "Karakter",
    "reasoningAge": "Usia",
    "reasoningView": "Lihat",
    "reasoningDetail": "Konten Penalaran",
    "reasoningBehavior": "Perilaku",
    "reasoningBehaviorCapture": "Menangkap penalaran_konten dari respons streaming",
    "reasoningBehaviorReplay": "Menyuntikkan kembali pada giliran berikutnya ketika klien menghilangkannya",
    "reasoningBehaviorFallback": "Mengutamakan memori dengan fallback SQLite untuk pemulihan kerusakan",
    "reasoningBehaviorTtl": "TTL: 2 jam | Entri maksimal: 2.000 (memori)",
    "reasoningBehaviorModels": "Didukung: DeepSeek, Kimi, Qwen-Thinking, GLM",
    "reasoningClearAll": "Hapus Cache Penalaran",
    "reasoningClearSuccess": "Menghapus entri cache alasan {count}",
    "reasoningClearError": "Gagal menghapus cache alasan",
    "reasoningNoData": "Belum ada entri alasan yang di-cache. Entri muncul ketika model berpikir menggunakan pemanggilan alat.",
    "cachePerformanceRetry": "Coba lagi",
    "cachePerformanceHitRate": "Tingkat Hit",
    "cachePerformanceAvgLatency": "Rata-rata Latensi (ms)",
    "cachePerformanceP95Latency": "p95 Latensi (ms)",
    "retry": "Coba lagi",
    "reasoningAvgChars": "Karakter Rata-Rata",
    "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": "Penyedia",
    "levelCombo": "kombo",
    "levelKey": "Kunci",
    "levelDirect": "Langsung (tanpa proxy)",
    "titleGlobal": "Konfigurasi Proksi Global",
    "titleLevel": "{level} Proksi — {label}",
    "loading": "Memuat konfigurasi proxy...",
    "inheritingFrom": "Mewarisi dari",
    "source": "Sumber",
    "savedProxy": "Proksi Tersimpan",
    "custom": "Adat",
    "selectSavedProxyPlaceholder": "Pilih proksi yang disimpan...",
    "proxyType": "Jenis Proksi",
    "host": "Tuan rumah",
    "hostPlaceholder": "1.2.3.4 atau proxy.example.com",
    "port": "Pelabuhan",
    "authOptional": "Otentikasi (opsional)",
    "username": "Nama pengguna",
    "usernamePlaceholder": "Nama pengguna",
    "password": "Kata sandi",
    "passwordPlaceholder": "Kata sandi",
    "connected": "Terhubung",
    "ip": "IP:",
    "connectionFailed": "Koneksi gagal",
    "testConnection": "Uji koneksi",
    "clear": "Jelas",
    "cancel": "Batalkan",
    "save": "Simpan",
    "errorSelectSavedProxy": "Silakan pilih proxy yang disimpan terlebih dahulu.",
    "errorSelectProxyFirst": "Silakan pilih proxy terlebih dahulu.",
    "errorProxyNotFound": "Proksi yang dipilih tidak ditemukan.",
    "errorClearSavedProxy": "Gagal menghapus proksi yang disimpan",
    "errorSaveProxy": "Gagal menyimpan konfigurasi proksi",
    "errorClearProxy": "Gagal menghapus konfigurasi proksi",
    "errorSocks5Hidden": "SOCKS5 dikonfigurasi tetapi disembunyikan karena NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=false."
  },
  "oauthModal": {
    "title": "Hubungkan {providerName}",
    "waiting": "Menunggu otorisasi",
    "completeAuthInPopup": "Selesaikan otorisasi dalam popup.",
    "popupClosedHint": "Jika popup ditutup tanpa mengalihkan kembali (misalnya Qoder), dialog ini akan otomatis beralih ke mode entri URL manual.",
    "popupBlocked": "Pop-up diblokir? Masukkan URL secara manual",
    "deviceCodeVisitUrl": "Kunjungi URL di bawah dan masukkan kode:",
    "deviceCodeVerificationUrl": "URL verifikasi",
    "deviceCodeYourCode": "Kode Anda",
    "deviceCodeWaiting": "Menunggu otorisasi...",
    "googleOAuthWarning": "Akses jarak jauh + Google OAuth: Kredensial default hanya menerima pengalihan ke <code>localhost</code>. Setelah otorisasi, browser Anda akan mencoba membuka <code>localhost</code> — salin URL lengkap tersebut dan tempel di bawah. Untuk penggunaan jarak jauh sepenuhnya tanpa langkah manual ini, <a>konfigurasi kredensial OAuth Anda sendiri</a>.",
    "remoteAccessInfo": "Akses jarak jauh: Karena Anda mengakses OmniRoute dari jarak jauh, setelah otorisasi Anda akan melihat halaman kesalahan (localhost tidak ditemukan). Ini normal — cukup salin URL lengkap dari bilah alamat browser Anda dan tempelkan di bawah.",
    "step1OpenUrl": "Langkah 1: Buka URL ini di browser Anda",
    "copy": "Salin",
    "step2PasteCallback": "Langkah 2: Tempelkan URL panggilan balik atau kode otorisasi di sini",
    "step2Hint": "Setelah otorisasi, tempelkan URL panggilan balik lengkap. Untuk Kode Claude dan Cline, Anda juga dapat menempelkan kode autentikasi secara langsung, mis. <code>kode#negara</code>.",
    "connect": "Hubungkan",
    "cancel": "Batalkan",
    "success": "Koneksi berhasil!",
    "successMessage": "Akun {providerName} Anda telah terhubung.",
    "done": "Selesai",
    "error": "Koneksi gagal",
    "tryAgain": "Coba lagi"
  },
  "cursorAuthModal": {
    "title": "Hubungkan IDE Kursor",
    "autoDetecting": "Token yang terdeteksi secara otomatis...",
    "readingFromCursor": "Membaca dari IDE Kursor atau agen kursor",
    "tokensAutoDetected": "Token berhasil terdeteksi secara otomatis dari Cursor IDE!",
    "cursorNotDetected": "IDE kursor tidak terdeteksi. Harap tempelkan token Anda secara manual.",
    "accessToken": "Akses Token",
    "required": "*",
    "accessTokenPlaceholder": "Token akses akan terisi secara otomatis...",
    "machineId": "ID Mesin",
    "optional": "(opsional)",
    "machineIdPlaceholder": "ID Mesin akan terisi secara otomatis...",
    "importing": "Mengimpor...",
    "importToken": "Impor Token",
    "cancel": "Batalkan",
    "errorAutoDetect": "Tidak dapat mendeteksi token secara otomatis",
    "errorAutoDetectFailed": "Token deteksi otomatis gagal",
    "errorEnterToken": "Silakan masukkan token akses",
    "errorImportFailed": "Impor gagal"
  },
  "pricingModal": {
    "title": "Konfigurasi Harga",
    "loading": "Memuat data harga...",
    "pricingRatesFormat": "Format Tarif Harga",
    "ratesDescription": "Semua tarif dalam <strong>dolar per juta token</strong> ($/1 juta token). Contoh: Tingkat input 2,50 berarti $2,50 per 1.000.000 token input.",
    "model": "Model",
    "input": "Masukan",
    "output": "Keluaran",
    "cached": "Di-cache",
    "reasoning": "Penalaran",
    "cacheCreation": "Pembuatan Cache",
    "noPricingData": "Tidak ada data harga yang tersedia",
    "resetToDefaults": "Atur ulang ke default",
    "cancel": "Batalkan",
    "saving": "Menyimpan...",
    "saveChanges": "Simpan perubahan",
    "resetConfirm": "Reset semua harga ke default? Hal ini tidak dapat dibatalkan.",
    "errorSaveFailed": "Gagal menyimpan harga",
    "errorResetFailed": "Gagal menyetel ulang 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": "Ketik",
    "labelHost": "Tuan rumah",
    "labelPort": "Pelabuhan",
    "labelUsername": "Nama pengguna",
    "labelPassword": "Kata sandi",
    "labelRegion": "Wilayah",
    "labelStatus": "Status",
    "labelNotes": "Catatan",
    "usernamePlaceholderEdit": "Biarkan kosong untuk mempertahankan nama pengguna saat ini",
    "passwordPlaceholderEdit": "Biarkan kosong untuk menyimpan kata sandi saat ini",
    "statusActive": "Aktif",
    "statusInactive": "Tidak aktif",
    "cancel": "Batalkan",
    "save": "Simpan",
    "bulkModalTitle": "Penugasan Proksi Massal",
    "bulkLabelScope": "Ruang lingkup",
    "bulkLabelProxy": "Proksi",
    "bulkClearAssignment": "(Hapus tugas)",
    "bulkLabelScopeIds": "ID Cakupan (dipisahkan koma atau baris baru)",
    "bulkScopeIdsPlaceholder": "penyedia-openai, penyedia-antropik",
    "bulkApply": "Terapkan",
    "labelScope": "__MISSING__:Scope",
    "labelProxy": "__MISSING__:Proxy",
    "scopeGlobal": "__MISSING__:global",
    "scopeProvider": "__MISSING__:provider",
    "scopeAccount": "__MISSING__:account",
    "scopeCombo": "__MISSING__:combo",
    "bulkImportErrorMissingName": "NAMA tidak ada",
    "bulkImportErrorMissingHost": "HOST tidak ada",
    "bulkImportErrorInvalidPort": "PORT tidak valid (harus 1-65535)",
    "bulkImportErrorInvalidType": "TYPE tidak valid (gunakan http, https, atau sock5)",
    "bulkImportErrorInvalidStatus": "STATUS tidak valid (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}% sukses",
    "avgLatency": "Rata-rata {latency}ms",
    "assignmentsCount": "{count} tugas",
    "noData": "No Data",
    "testSuccess": "✓ {ip}",
    "testLatency": "{latency}ms",
    "testFailure": "✗ {error}",
    "bulkImport": "Impor Massal",
    "bulkImportTitle": "Proksi Impor Massal",
    "bulkImportDescription": "Tempelkan profil proxy menggunakan format yang dibatasi pipa. Satu proxy per baris. Proksi yang ada (host + port yang sama) akan diperbarui.",
    "bulkImportParse": "Mengurai",
    "bulkImportImport": "Impor {count} Proksi",
    "bulkImportImporting": "Mengimpor...",
    "bulkImportParsed": "{count} proxy diurai",
    "bulkImportSkipped": "{count} baris dilewati",
    "bulkImportParseErrors": "{count} kesalahan",
    "bulkImportNoValidEntries": "Tidak ada entri yang valid ditemukan. Periksa formatnya dan coba lagi.",
    "bulkImportSuccess": "Impor selesai: {created} dibuat, {updated} diperbarui, {failed} gagal",
    "bulkImportErrorLine": "Baris {line}: {reason}",
    "bulkImportMaxExceeded": "Maksimum 100 proxy per impor",
    "bulkImportPreview": "Pratinjau",
    "clearAssignment": "(tugas yang jelas)",
    "bulkProxyAssignment": "Penugasan Proksi Massal"
  },
  "playground": {
    "title": "Title",
    "description": "Description",
    "endpoint": "Endpoint",
    "provider": "Provider",
    "model": "Model",
    "accountKey": "Account Key",
    "autoAccounts": "Otomatis ({count} akun)",
    "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": "Menghasilkan {count} gambar",
    "generatedImage": "Gambar 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": "Obrolan Percakapan",
    "clearChat": "Hapus obrolan",
    "typeMessagePlaceholder": "Ketik pesan... (Shift+Enter untuk baris baru)",
    "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": "Kompresi",
      "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 — Pratinjau UI.",
    "betaConfigSavedPrefix": "Konfigurasi disimpan di",
    "betaConfigSavedSuffix": "(belum bertahan di server). Pemberlakuan batasan per permintaan belum dimasukkan ke dalam jalur proksi. Layar ini memungkinkan Anda merancang dan memvisualisasikan pembagian kuota; penegakan hukum yang nyata akan diterapkan pada iterasi mendatang dengan persistensi DB dan intersepsi panggilan upstream.",
    "policyLabel": "Kebijakan:",
    "resetIn": "ulang 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"
  }
}
