{
  "common": {
    "save": "Jimat",
    "cancel": "Batal",
    "delete": "Padam",
    "loading": "Memuatkan...",
    "error": "Ralat berlaku",
    "success": "Kejayaan",
    "confirm": "Adakah anda pasti?",
    "refresh": "Segarkan semula",
    "close": "tutup",
    "add": "Tambah",
    "edit": "Sunting",
    "search": "Cari",
    "back": "belakang",
    "next": "Seterusnya",
    "submit": "Hantar",
    "reset": "Tetapkan semula",
    "copy": "salin",
    "copied": "disalin!",
    "enabled": "Didayakan",
    "disabled": "Dilumpuhkan",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "noData": "Tiada data tersedia",
    "configure": "Konfigurasikan",
    "manage": "Urus",
    "name": "Nama",
    "actions": "Tindakan",
    "status": "Status",
    "type": "taip",
    "model": "Model",
    "models": "model",
    "provider": "Pembekal",
    "account": "Akaun",
    "time": "Masa",
    "details": "Butiran",
    "created": "Dicipta",
    "lastUsed": "Terakhir Digunakan",
    "loadMore": "Muatkan Lagi",
    "noResults": "Tiada hasil ditemui",
    "reloadPage": "Muat Semula Halaman",
    "connected": "Bersambung",
    "disconnected": "Terputus sambungan",
    "notConfigured": "Tidak dikonfigurasikan",
    "testConnection": "Sambungan Ujian",
    "enable": "Dayakan",
    "disable": "Lumpuhkan",
    "columns": "Lajur",
    "newest": "Terbaru",
    "oldest": "Tertua",
    "all": "Semua",
    "none": "tiada",
    "yes": "ya",
    "no": "Tidak",
    "warning": "Amaran",
    "note": "Nota",
    "free": "Percuma",
    "skipToContent": "Langkau ke kandungan"
  },
  "sidebar": {
    "home": "Rumah",
    "dashboard": "Papan pemuka",
    "providers": "Pembekal",
    "combos": "Kombo",
    "usage": "Penggunaan",
    "analytics": "Analitis",
    "costs": "Kos",
    "health": "Kesihatan",
    "limits": "Had & Kuota",
    "cliTools": "Alat CLI",
    "settings": "tetapan",
    "translator": "Penterjemah",
    "docs": "Dokumen",
    "issues": "Isu",
    "endpoint": "Titik akhir",
    "apiManager": "Pengurus API",
    "logs": "Log",
    "auditLog": "Log Audit",
    "shutdown": "Tutup",
    "restart": "Mulakan semula",
    "shutdownConfirm": "Tutup OmniRoute?",
    "restartConfirm": "Mulakan semula OmniRoute?",
    "version": "v{version}",
    "debug": "Nyahpepijat",
    "system": "Sistem",
    "help": "Tolong",
    "serverDisconnected": "Pelayan Terputus Sambungan",
    "serverDisconnectedMsg": "Pelayan proksi telah dihentikan atau dimulakan semula.",
    "expandSidebar": "Kembangkan bar sisi",
    "collapseSidebar": "Runtuhkan bar sisi"
  },
  "header": {
    "logout": "Log keluar",
    "language": "Bahasa",
    "providers": "Pembekal",
    "providerDescription": "Urus sambungan pembekal AI anda",
    "combos": "Kombo",
    "comboDescription": "Gabungan model dengan sandaran",
    "usage": "Penggunaan & Analitis",
    "usageDescription": "Pantau penggunaan API anda, penggunaan token dan log permintaan",
    "analytics": "Analitis",
    "analyticsDescription": "Carta, arah aliran dan cerapan penilaian",
    "cliTools": "Alat CLI",
    "cliToolsDescription": "Konfigurasikan alatan CLI",
    "home": "Rumah",
    "homeDescription": "Selamat datang ke OmniRoute",
    "endpoint": "Titik akhir",
    "endpointDescription": "Konfigurasi titik akhir API",
    "settings": "tetapan",
    "settingsDescription": "Urus pilihan anda",
    "openaiCompatible": "Serasi OpenAI",
    "anthropicCompatible": "Serasi Anthropic"
  },
  "home": {
    "quickStart": "Mula Pantas",
    "quickStartDesc": "Bangun dan berlari dalam 4 langkah. Sambungkan pembekal, model laluan, pantau segala-galanya.",
    "fullDocs": "Dokumen Penuh",
    "step1Title": "1. Cipta kunci API",
    "step1Desc": "Pergi ke <endpoint>Endpoint</endpoint> -> Kunci Berdaftar. Hasilkan satu kunci bagi setiap persekitaran.",
    "step2Title": "2. Sambungkan pembekal",
    "step2Desc": "Tambahkan akaun dalam <providers>Providers</providers>. Menyokong OAuth, Kunci API dan peringkat percuma.",
    "step3Title": "3. Arahkan pelanggan anda",
    "step3Desc": "Tetapkan URL asas kepada {url} dalam klien IDE atau API anda.",
    "step4Title": "4. Pantau & optimumkan",
    "step4Desc": "Jejaki token, kos dan ralat dalam <logs>Log Permintaan</logs> dan <analytics>Analytics</analytics>.",
    "providersOverview": "Gambaran Keseluruhan Penyedia",
    "configuredOf": "{configured} dikonfigurasikan daripada {total} pembekal yang tersedia",
    "noModelsAvailable": "Tiada model tersedia untuk pembekal ini.",
    "configureFirst": "Konfigurasikan sambungan dahulu dalam {providers}",
    "configureProvider": "Konfigurasikan Pembekal",
    "modelAvailable": "{count} model tersedia",
    "modelsAvailable": "{count} model tersedia",
    "connectionsActive": "{count} sambungan aktif",
    "connectionsActivePlural": "{count} sambungan aktif",
    "copyModelName": "Salin nama model",
    "documentation": "Dokumentasi",
    "healthMonitor": "Pemantau Kesihatan",
    "reportIssue": "Laporkan isu",
    "activeError": "{active} aktif · {errors} ralat",
    "oauthLabel": "OAuth",
    "apiKeyLabel": "Kunci API",
    "requestsShort": "{count} permintaan",
    "providerModelsTitle": "{provider} - Model",
    "copiedModel": "Disalin: {model}",
    "aliasLabel": "alias"
  },
  "analytics": {
    "title": "Analitis",
    "overviewDescription": "Pantau corak penggunaan API anda, penggunaan token, kos dan aliran aktiviti merentas semua pembekal dan model.",
    "evalsDescription": "Jalankan suite penilaian untuk menguji dan mengesahkan titik akhir LLM anda. Bandingkan kualiti model, mengesan regresi dan kependaman penanda aras.",
    "overview": "Gambaran keseluruhan",
    "evals": "Evals"
  },
  "apiManager": {
    "title": "Kunci API",
    "createKey": "Cipta Kunci API",
    "key": "kunci",
    "revokeKey": "Batalkan Kunci",
    "revokeConfirm": "Adakah anda pasti mahu membatalkan kunci API ini?",
    "noKeys": "Tiada kunci API lagi",
    "noKeysDesc": "Cipta kunci API pertama anda untuk mengesahkan permintaan ke titik akhir anda",
    "keyLabel": "Label Kunci",
    "permissions": "kebenaran",
    "expiresAt": "tamat tempoh",
    "never": "tidak pernah",
    "revoke": "Batalkan",
    "showKey": "Tunjukkan Kunci",
    "hideKey": "Sembunyikan Kunci",
    "copyKey": "Salin Kunci API",
    "allModels": "Semua model",
    "selectedModels": "Model Terpilih",
    "readOnly": "Baca Sahaja",
    "fullAccess": "Akses Penuh",
    "keyManagement": "Pengurusan Kunci API",
    "keyManagementDesc": "Buat dan urus kunci API untuk mengesahkan permintaan ke titik akhir anda",
    "totalKeys": "Jumlah Kunci",
    "restricted": "Terhad",
    "totalRequests": "Jumlah Permintaan",
    "modelsAvailable": "Model Tersedia",
    "registeredKeys": "Kunci Berdaftar",
    "keysRegistered": "{count} kunci didaftarkan",
    "keyRegistered": "{count} kunci didaftarkan",
    "keysSecurityNote": "Setiap kunci mengasingkan penjejakan penggunaan dan boleh dibatalkan secara bebas. Kunci ditutup selepas penciptaan untuk keselamatan.",
    "createFirstKey": "Cipta Kunci Pertama Anda",
    "name": "Nama",
    "usage": "Penggunaan",
    "created": "Dicipta",
    "actions": "Tindakan",
    "reqs": "reqs",
    "neverUsed": "Tidak pernah digunakan",
    "deleteConfirm": "Padamkan kunci API ini?",
    "usageTips": "Petua Penggunaan",
    "tipAuth": "Gunakan kunci API dalam pengepala Kebenaran sebagai Pembawa YOUR_KEY",
    "tipSecure": "Kunci hanya ditunjukkan sekali semasa penciptaan — simpannya dengan selamat",
    "tipSeparate": "Buat kunci berasingan untuk pelanggan atau persekitaran yang berbeza",
    "tipRestrict": "Hadkan kunci kepada model tertentu untuk keselamatan dan kawalan kos yang lebih baik",
    "keyName": "Nama Kunci",
    "keyNamePlaceholder": "cth., Kunci Pengeluaran, Kunci Pembangunan",
    "keyNameDesc": "Pilih nama deskriptif untuk mengenal pasti tujuan kunci ini",
    "keyCreated": "Kunci API Dicipta",
    "keyCreatedSuccess": "Kunci berjaya dibuat!",
    "keyCreatedNote": "Salin dan simpan kunci ini sekarang — ia tidak akan ditunjukkan lagi.",
    "done": "Selesai",
    "savePermissions": "Simpan Kebenaran",
    "allowAll": "Benarkan Semua",
    "restrict": "Sekat",
    "allowAllInfo": "Kunci ini boleh mengakses semua model yang tersedia.",
    "restrictInfo": "Kunci ini boleh mengakses {selected} daripada {total} model.",
    "selected": "{count} dipilih",
    "all": "Semua",
    "clear": "Jelas",
    "searchModels": "Cari model mengikut nama atau pembekal...",
    "noModelsFound": "Tiada model ditemui",
    "keyNameRequired": "Nama kunci diperlukan",
    "keyNameTooLong": "Nama kunci mestilah {max} aksara atau kurang",
    "keyNameInvalid": "Nama kunci hanya boleh mengandungi huruf, nombor, ruang, sempang dan garis bawah",
    "invalidKeyName": "Nama kunci tidak sah",
    "failedCreateKey": "Gagal mencipta kunci",
    "failedCreateKeyRetry": "Gagal mencipta kunci. Sila cuba lagi.",
    "invalidKeyId": "ID kunci tidak sah",
    "failedDeleteKey": "Gagal memadamkan kunci",
    "failedDeleteKeyRetry": "Gagal memadamkan kunci. Sila cuba lagi.",
    "invalidModelsSelection": "Pemilihan model tidak sah",
    "cannotSelectMoreThanModels": "Tidak boleh memilih lebih daripada {max} model",
    "failedUpdatePermissions": "Gagal mengemas kini kebenaran",
    "failedUpdatePermissionsRetry": "Gagal mengemas kini kebenaran. Sila cuba lagi.",
    "unknownProvider": "tidak diketahui",
    "copyMaskedKey": "Salin kunci bertopeng",
    "modelsCount": "{count, plural, one {# model} other {# models}}",
    "lastUsedOn": "Terakhir: {date}",
    "editPermissions": "Edit kebenaran",
    "deleteKey": "Padam kunci",
    "model": "{count} model",
    "models": "{count} model",
    "permissionsTitle": "Kebenaran: {name}",
    "allowAllDesc": "Kunci ini boleh mengakses semua model yang tersedia.",
    "restrictDesc": "Kunci ini boleh mengakses {selectedCount} daripada {totalModels} model.",
    "selectedCount": "{count} dipilih"
  },
  "auditLog": {
    "title": "Log Audit",
    "searchPlaceholder": "Tindakan carian...",
    "action": "Tindakan",
    "actor": "pelakon",
    "target": "Sasaran",
    "ipAddress": "Alamat IP",
    "timestamp": "Cap masa",
    "noEntries": "Tiada entri audit ditemui",
    "filterByAction": "Tapis mengikut tindakan...",
    "filterByActor": "Tapis mengikut pelakon...",
    "filterEntriesAria": "Tapis entri log audit",
    "filterByActionTypeAria": "Tapis mengikut jenis tindakan",
    "filterByActorAria": "Tapis mengikut pelakon",
    "refreshAuditLogAria": "Muat semula log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "notAvailable": "—",
    "description": "Tindakan pentadbiran dan acara keselamatan",
    "showing": "Menunjukkan entri {count} (mengimbangi {offset})",
    "previous": "Sebelumnya"
  },
  "cliTools": {
    "title": "Alat CLI",
    "noActiveProviders": "Tiada pembekal aktif",
    "noActiveProvidersDesc": "Sila tambah dan sambungkan pembekal terlebih dahulu untuk mengkonfigurasi alatan CLI.",
    "mapModels": "Model Peta",
    "testConnection": "Sambungan Ujian",
    "connectionStatus": "Status Sambungan",
    "configureEndpoint": "Konfigurasikan Titik Akhir",
    "instructions": "Arahan",
    "modelMapping": "Pemetaan Model",
    "baseUrl": "URL asas",
    "apiKey": "Kunci API",
    "configured": "Dikonfigurasikan",
    "notConfigured": "Tidak dikonfigurasikan",
    "notInstalled": "Tidak dipasang",
    "custom": "Adat",
    "unknown": "Tidak diketahui",
    "lastSavedAt": "Terakhir disimpan: {date}",
    "never": "tidak pernah",
    "justNow": "tadi",
    "minutesAgoShort": "{count}m yang lalu",
    "hoursAgoShort": "{count}j lalu",
    "daysAgoShort": "{count}h yang lalu",
    "monthsAgoShort": "{count}bln lalu",
    "yearsAgoShort": "{count}y yang lalu",
    "runtimeCheckFailed": "Semakan masa jalan gagal",
    "yourApiKeyPlaceholder": "kunci-api anda",
    "modelPlaceholder": "pembekal/model-id",
    "configurationSaved": "Konfigurasi berjaya disimpan.",
    "failedToSave": "Gagal menyimpan konfigurasi.",
    "noApiKeysCreateOne": "Tiada kunci API - Buat satu dalam halaman Kekunci",
    "defaultOmnirouteKey": "sk_omniroute (lalai)",
    "selectModel": "Pilih Model",
    "selectModelForAlias": "Pilih model untuk {alias}",
    "selectModelForTool": "Pilih Model untuk {tool}",
    "select": "Pilih",
    "clear": "Jelas",
    "comingSoon": "Akan datang",
    "checkingRuntime": "Menyemak status masa jalan...",
    "guideOnlyIntegration": "Penyepaduan panduan sahaja (tiada masa jalan tempatan diperlukan)",
    "cliRuntimeDetected": "Masa jalan CLI dikesan dan sedia",
    "cliFoundNotRunnable": "CLI ditemui tetapi tidak boleh dijalankan{reason}",
    "cliRuntimeNotDetected": "Masa jalan CLI tidak dikesan",
    "binary": "binari",
    "configPath": "Laluan konfigurasi",
    "configPathShort": "Konfigurasi",
    "failedCheckRuntimeStatus": "Gagal menyemak status masa jalan.",
    "copy": "salin",
    "copied": "disalin",
    "copyConfig": "Salin Konfigurasi",
    "saveConfig": "Simpan Konfigurasi",
    "selectionSaved": "Pilihan disimpan",
    "guide": "Panduan",
    "detected": "Dikesan",
    "notReady": "Tidak bersedia",
    "active": "Aktif",
    "inactive": "Tidak aktif",
    "startMitm": "Mulakan MITM",
    "stopMitm": "Hentikan MITM",
    "mitmStarted": "MITM bermula dengan jayanya!",
    "mitmStopped": "MITM berjaya berhenti!",
    "failedStart": "Gagal memulakan MITM",
    "failedStop": "Gagal menghentikan MITM",
    "saveMappings": "Simpan Pemetaan",
    "mappingsSaved": "Pemetaan disimpan!",
    "failedSaveMappings": "Gagal menyimpan pemetaan",
    "howItWorks": "Cara ia berfungsi:",
    "antigravityHowWorksDesc": "Antigraviti menghantar permintaan ke titik akhir Google. MITM memintas dan mengubah hala mereka ke OmniRoute.",
    "antigravityStep1": "1. Mulakan MITM untuk menghalakan permintaan melalui OmniRoute.",
    "antigravityStep2Prefix": "2. Tambah",
    "antigravityStep2Suffix": "ke fail hos anda sebagai 127.0.0.1.",
    "antigravityStep3": "3. Buka Antigraviti dan permintaan akan diproksikan.",
    "sudoPasswordRequiredTitle": "Kata Laluan Sudo Diperlukan",
    "sudoPasswordHint": "Kata laluan pentadbir diperlukan untuk mengubah suai fail hos dan tetapan proksi sistem.",
    "enterSudoPassword": "Masukkan kata laluan sudo",
    "sudoPasswordRequiredError": "Kata laluan sudo diperlukan.",
    "cancel": "Batal",
    "confirm": "sahkan",
    "settingsApplied": "Tetapan berjaya digunakan!",
    "failedApplySettings": "Gagal menggunakan tetapan",
    "settingsReset": "Tetapan berjaya ditetapkan semula!",
    "failedResetSettings": "Gagal menetapkan semula tetapan",
    "backupRestored": "Sandaran dipulihkan!",
    "failedRestore": "Gagal dipulihkan",
    "checkingCli": "Menyemak {tool} CLI...",
    "cliNotRunnable": "{tool} CLI dipasang tetapi tidak boleh dijalankan",
    "cliNotInstalled": "{tool} CLI tidak dipasang",
    "cliNotDetected": "{tool} CLI tidak dikesan",
    "cliDetectedReady": "{tool} CLI dikesan dan sedia",
    "cliFoundFailedHealthcheck": "{tool} CLI ditemui tetapi gagal pemeriksaan kesihatan masa jalan{reason}.",
    "installCliPrompt": "Sila pasang {tool} CLI untuk menggunakan ciri ini.",
    "installCodexPrompt": "Sila pasang Codex CLI untuk menggunakan ciri autoguna.",
    "hide": "Sembunyi",
    "howToInstall": "Cara Memasang",
    "installationGuide": "Panduan Pemasangan",
    "platforms": "macOS / Linux / Windows:",
    "afterInstallationRun": "Selepas pemasangan, jalankan",
    "toVerify": "untuk mengesahkan.",
    "current": "semasa",
    "baseUrlPlaceholder": "https://.../v1",
    "resetToDefault": "Tetapkan semula kepada lalai",
    "providerModelPlaceholder": "pembekal/model-id",
    "apply": "Mohon",
    "reset": "Tetapkan semula",
    "manualConfig": "Konfigurasi Manual",
    "backups": "Sandaran",
    "configBackups": "Konfigurasi Sandaran",
    "noBackupsYet": "Tiada sandaran lagi. Sandaran dibuat secara automatik sebelum setiap Guna atau Tetapkan Semula.",
    "restore": "Pulihkan",
    "backupRestoredReloading": "Sandaran dipulihkan! Memuat semula status...",
    "failedRestoreBackup": "Gagal memulihkan sandaran",
    "applied": "Digunakan!",
    "failed": "gagal",
    "resetDone": "Tetapkan semula!",
    "omnirouteConfiguredOpenAiCompatible": "OmniRoute dikonfigurasikan sebagai pembekal serasi OpenAI",
    "provider": "Pembekal",
    "model": "Model",
    "providers": "Pembekal",
    "auth": "Pengesahan",
    "noApiKeysAvailable": "Tiada kunci API tersedia",
    "usingDefaultOmniroute": "Menggunakan lalai: sk_omniroute",
    "updateConfig": "Kemas kini Konfigurasi",
    "applyConfig": "Gunakan Konfigurasi",
    "noBackupsAvailable": "Tiada sandaran tersedia.",
    "profileSaved": "Profil \"{name}\" disimpan!",
    "failedSaveProfile": "Gagal menyimpan profil",
    "profileActivated": "Profil diaktifkan!",
    "failedActivateProfile": "Gagal mengaktifkan profil",
    "profiles": "Profil",
    "savedProfiles": "Profil Disimpan",
    "noProfilesYet": "Tiada profil disimpan lagi. Simpan konfigurasi semasa sebagai profil di bawah.",
    "activate": "Aktifkan",
    "deleteProfile": "Padam profil",
    "profileNamePlaceholder": "Nama profil (cth. Akaun Peribadi)",
    "saveCurrent": "Simpan Semasa",
    "codexAuthNotePrefix": "Penggunaan Codex",
    "codexAuthNoteMiddle": "dengan",
    "codexAuthNoteSuffix": "Klik \"Guna\" untuk konfigurasi automatik.",
    "claudeManualConfiguration": "Claude CLI - Konfigurasi Manual",
    "codexManualConfiguration": "Codex CLI - Konfigurasi Manual",
    "droidManualConfiguration": "Droid Kilang - Konfigurasi Manual",
    "openClawManualConfiguration": "Cakar Terbuka - Konfigurasi Manual",
    "clineManualConfiguration": "Konfigurasi Manual Cline",
    "kiloManualConfiguration": "Konfigurasi Manual Kod Kilo",
    "toolDescriptions": {
      "antigravity": "IDE Antigraviti Google dengan MITM",
      "claude": "Kod Claude Anthropic CLI",
      "codex": "OpenAI Codex CLI",
      "droid": "Pembantu AI Droid Kilang",
      "openclaw": "Buka Pembantu AI Claw",
      "cline": "Pembantu Pengekodan AI Cline CLI",
      "kilo": "Kilo Code AI Assistant CLI",
      "cursor": "Editor Kod AI Kursor",
      "continue": "Teruskan AI Assistant"
    },
    "guides": {
      "cursor": {
        "notes": {
          "0": "Memerlukan akaun Cursor Pro untuk menggunakan ciri ini.",
          "1": "Laluan kursor meminta melalui pelayannya sendiri, jadi titik akhir setempat tidak disokong. Sila dayakan Cloud Endpoint dalam Tetapan."
        },
        "steps": {
          "1": {
            "title": "Buka Tetapan",
            "desc": "Pergi ke Tetapan -> Model"
          },
          "2": {
            "title": "Dayakan OpenAI API",
            "desc": "Dayakan pilihan \"kunci API OpenAI\"."
          },
          "3": {
            "title": "URL asas"
          },
          "4": {
            "title": "Kunci API"
          },
          "5": {
            "title": "Tambah Model Tersuai",
            "desc": "Klik \"Lihat Semua Model\" -> \"Tambah Model Tersuai\""
          },
          "6": {
            "title": "Pilih Model"
          }
        }
      },
      "continue": {
        "steps": {
          "1": {
            "title": "Buka Konfigurasi",
            "desc": "Buka fail konfigurasi Teruskan"
          },
          "2": {
            "title": "Kunci API"
          },
          "3": {
            "title": "Pilih Model"
          },
          "4": {
            "title": "Tambah Konfigurasi Model",
            "desc": "Tambahkan konfigurasi berikut pada tatasusunan model anda:"
          }
        }
      }
    }
  },
  "combos": {
    "title": "Kombo",
    "description": "Cipta gabungan model dengan penghalaan berwajaran dan sokongan sandaran",
    "createCombo": "Buat Combo",
    "editCombo": "Edit Kombo",
    "deleteCombo": "Padamkan Kombo",
    "noModels": "Tiada model",
    "noModelsYet": "Tiada model ditambah lagi",
    "addModel": "Tambah Model",
    "addModelToCombo": "Tambahkan Model pada Combo",
    "routingStrategy": "Strategi Penghalaan",
    "maxRetries": "Max Cuba Semula",
    "timeout": "Tamat masa (ms)",
    "healthcheck": "Pemeriksaan kesihatan",
    "priority": "Keutamaan",
    "fallback": "Fallback",
    "roundRobin": "Round Robin",
    "random": "rawak",
    "leastLatency": "Kependaman Terkecil",
    "comboName": "Nama Kombo",
    "comboNamePlaceholder": "kombo saya",
    "deleteConfirm": "Padamkan kombo ini?",
    "noCombosYet": "Tiada kombo lagi",
    "comboCreated": "Kombo berjaya dibuat",
    "comboUpdated": "Kombo berjaya dikemas kini",
    "comboDeleted": "Kombo dipadamkan",
    "failedCreate": "Gagal membuat kombo",
    "failedUpdate": "Gagal mengemas kini kombo",
    "errorCreating": "Ralat membuat kombo",
    "errorUpdating": "Ralat mengemas kini kombo",
    "errorDeleting": "Ralat memadam kombo",
    "testFailed": "Permintaan ujian gagal",
    "failedToggle": "Gagal menukar kombo",
    "testResults": "Keputusan Ujian — {name}",
    "resolvedBy": "diselesaikan oleh:",
    "more": "+{count} lagi",
    "reqs": "reqs",
    "success": "kejayaan",
    "proxyConfigured": "Proksi dikonfigurasikan",
    "copyComboName": "Salin nama kombo",
    "enableCombo": "Dayakan kombo",
    "disableCombo": "Lumpuhkan kombo",
    "testCombo": "Kombo ujian",
    "duplicate": "Pendua",
    "proxyConfig": "Konfigurasi proksi",
    "nameRequired": "Nama diperlukan",
    "nameInvalid": "Hanya huruf, nombor, -, _, / dan . dibenarkan",
    "nameHint": "Huruf, nombor, -, _, / dan . dibenarkan",
    "priorityDesc": "Saling berurutan: cuba model 1 dahulu, kemudian 2, dsb.",
    "weightedDesc": "Mengagihkan trafik mengikut peratusan berat dengan sandaran",
    "roundRobinDesc": "Pengedaran pekeliling: setiap permintaan pergi ke model seterusnya secara bergilir",
    "randomDesc": "Pemilihan rawak seragam, kemudian sandarkan kepada model yang tinggal",
    "leastUsedDesc": "Memilih model dengan permintaan paling sedikit, mengimbangi beban dari semasa ke semasa",
    "costOptimizedDesc": "Laluan ke model termurah dahulu berdasarkan harga",
    "models": "model",
    "autoBalance": "Imbangan automatik",
    "advancedSettings": "Tetapan Lanjutan",
    "retryDelay": "Cuba Semula Kelewatan (ms)",
    "concurrencyPerModel": "Concurrency / Model",
    "queueTimeout": "Waktu Beratur (ms)",
    "advancedHint": "Biarkan kosong untuk menggunakan lalai global. Ini mengatasi tetapan setiap pembekal.",
    "moveUp": "Bergerak ke atas",
    "moveDown": "Bergerak ke bawah",
    "removeModel": "Alih keluar",
    "saving": "Menyimpan...",
    "weighted": "Ditimbang",
    "leastUsed": "Paling Kurang Digunakan",
    "costOpt": "Kos-Opt"
  },
  "costs": {
    "title": "Kos",
    "budget": "Bajet",
    "totalCost": "Jumlah Kos",
    "breakdown": "Pecahan Kos",
    "noData": "Tiada data kos",
    "byModel": "Mengikut Model",
    "byProvider": "Oleh Pembekal"
  },
  "endpoint": {
    "title": "Titik Akhir API",
    "available": "Titik Akhir Tersedia",
    "cloudProxy": "Proksi Awan",
    "disableConfirm": "Adakah anda pasti mahu melumpuhkan proksi awan?",
    "baseUrl": "URL asas",
    "apiKeyLabel": "Kunci API",
    "registeredKeys": "Kunci Berdaftar",
    "chatCompletions": "Selesai Sembang",
    "responses": "Jawapan",
    "listModels": "Senaraikan Model",
    "usingCloudProxy": "Menggunakan Proksi Awan",
    "usingLocalServer": "Menggunakan Pelayan Tempatan",
    "machineId": "ID Mesin: {id}...",
    "disableCloud": "Lumpuhkan Cloud",
    "enableCloud": "Dayakan Cloud",
    "modelsAcrossEndpoints": "{models} model merentas {endpoints} titik akhir",
    "chatDesc": "Sembang penstriman & bukan penstriman dengan semua pembekal",
    "embeddings": "Embeddings",
    "embeddingsDesc": "Pembenaman teks untuk carian & saluran paip RAG",
    "imageGeneration": "Penjanaan Imej",
    "imageDesc": "Hasilkan imej daripada gesaan teks",
    "rerank": "Kedudukan semula",
    "rerankDesc": "Susun semula dokumen mengikut kaitan dengan pertanyaan",
    "audioTranscription": "Transkripsi Audio",
    "audioTranscriptionDesc": "Transkripsikan fail audio kepada teks (Bisikan)",
    "textToSpeech": "Teks kepada Ucapan",
    "textToSpeechDesc": "Tukar teks kepada pertuturan yang berbunyi semula jadi",
    "moderations": "Kesederhanaan",
    "moderationsDesc": "Penyederhanaan kandungan dan klasifikasi keselamatan",
    "enableCloudTitle": "Dayakan Cloud Proxy",
    "whatYouGet": "Apa yang anda akan dapat",
    "cloudBenefitAccess": "Akses API anda dari mana-mana sahaja di dunia",
    "cloudBenefitShare": "Kongsi titik akhir dengan pasukan anda dengan mudah",
    "cloudBenefitPorts": "Tidak perlu membuka port atau mengkonfigurasi tembok api",
    "cloudBenefitEdge": "Rangkaian kelebihan global yang pantas",
    "cloudSessionNote": "Cloud akan mengekalkan sesi pengesahan anda selama 1 hari. Jika tidak digunakan, ia akan dipadam secara automatik.",
    "cloudUnstableNote": "Cloud tidak stabil pada masa ini dengan Claude Code OAuth dalam beberapa kes.",
    "cloudConnected": "Proksi Awan disambungkan!",
    "connectingToCloud": "Menyambung ke awan...",
    "verifyingConnection": "Mengesahkan sambungan...",
    "connecting": "Menyambung...",
    "verifying": "Mengesahkan...",
    "connected": "Bersambung!",
    "disableCloudTitle": "Lumpuhkan Proksi Awan",
    "disableWarning": "Semua sesi pengesahan akan dipadamkan daripada awan.",
    "syncingData": "Menyegerakkan data terkini...",
    "disablingCloud": "Melumpuhkan awan...",
    "syncing": "Menyegerakkan...",
    "disabling": "Melumpuhkan...",
    "cloudConnectedVerified": "Cloud Proxy disambungkan dan disahkan!",
    "connectedVerificationPending": "Bersambung — pengesahan belum selesai",
    "connectedVerificationPendingWithError": "Disambungkan — pengesahan belum selesai: {error}",
    "cloudDisabledSuccess": "Cloud berjaya dilumpuhkan",
    "syncedSuccess": "Berjaya disegerakkan",
    "failedDisable": "Gagal melumpuhkan awan",
    "failedEnable": "Gagal mendayakan awan",
    "cloudRequestTimeout": "Tamat masa permintaan awan",
    "cloudRequestFailed": "Permintaan awan gagal",
    "cloudWorkerUnreachable": "Tidak dapat menghubungi pekerja awan. Pastikan perkhidmatan awan sedang berjalan (npm run dev in /cloud).",
    "connectionFailed": "Sambungan gagal",
    "syncFailed": "Gagal menyegerakkan data awan",
    "providerModelsTitle": "{provider} — Model",
    "noModelsForProvider": "Tiada model tersedia untuk pembekal ini.",
    "chat": "Sembang",
    "embedding": "Membenamkan",
    "image": "Imej",
    "custom": "adat",
    "modelsCount": "{count, plural, one {# model} other {# models}}"
  },
  "health": {
    "title": "Kesihatan Sistem",
    "description": "Pemantauan masa nyata bagi tika OmniRoute anda",
    "healthy": "Sihat",
    "degraded": "Dihina",
    "down": "Bawah",
    "uptime": "Masa aktif",
    "memory": "Ingatan",
    "memoryRss": "Memori (RSS)",
    "heap": "Timbunan",
    "cpu": "CPU",
    "database": "Pangkalan data",
    "version": "Versi",
    "lastCheck": "Semakan Terakhir",
    "providerHealth": "Kesihatan Pembekal",
    "systemMetrics": "Metrik Sistem",
    "tokenHealth": "Kesihatan Token",
    "refreshAll": "Muat semula Semua",
    "checkNow": "Semak Sekarang",
    "loadingHealth": "Memuatkan data kesihatan...",
    "failedToLoad": "Gagal memuatkan data kesihatan: {error}",
    "retry": "Cuba semula",
    "allOperational": "Semua sistem beroperasi",
    "issuesDetected": "Isu sistem dikesan",
    "updatedAt": "Dikemas kini {time}",
    "latency": "Latensi",
    "latencyP50": "p50",
    "latencyP95": "p95",
    "latencyP99": "p99",
    "millisecondsShort": "{value}ms",
    "notAvailable": "—",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Tiada data lagi",
    "promptCache": "Cache Prompt",
    "entries": "entri",
    "hitRate": "Kadar Hit",
    "hitsMisses": "Hit / Rindu",
    "signatureCache": "Cache Tandatangan",
    "signatureDefaults": "Lalai",
    "signatureTool": "alat",
    "signatureFamily": "Keluarga",
    "signatureSession": "Sesi",
    "recovering": "Pulih",
    "noCBData": "Tiada data pemutus litar tersedia. Buat beberapa permintaan dahulu.",
    "providerHealthStatusAria": "Status kesihatan pembekal",
    "issuesLabel": "Isu Dikesan",
    "operational": "Beroperasi",
    "providers": "Pembekal",
    "healthyCount": "{count} sihat",
    "nodeVersion": "Nod {version}",
    "failures": "{count} kegagalan",
    "failuresPlural": "{count} kegagalan",
    "lastFailure": "Terakhir",
    "rateLimitStatus": "Status Had Kadar",
    "activeLimiters": "{count} pengehad aktif",
    "activeLimitersPlural": "{count} pengehad aktif",
    "queued": "Beratur",
    "queuedCount": "{count} beratur",
    "running": "berlari",
    "runningCount": "{count} berjalan",
    "ok": "OK",
    "activeLockouts": "Sekatan Aktif",
    "resetConfirm": "Tetapkan semula semua pemutus litar kepada keadaan sihat? Ini akan mengosongkan semua kiraan kegagalan dan memulihkan semua pembekal kepada status operasi.",
    "resetAllTitle": "Tetapkan semula semua pemutus litar kepada keadaan sihat",
    "resetting": "Menetapkan semula...",
    "resetAll": "Tetapkan Semula Semua",
    "until": "Sehingga {time}"
  },
  "limits": {
    "title": "Had & Kuota",
    "rateLimit": "Had Kadar",
    "remaining": "yang tinggal",
    "requestsPerMinute": "Permintaan/min",
    "tokensPerMinute": "Token/min",
    "dailyLimit": "Had Harian"
  },
  "logs": {
    "title": "Log",
    "requestLogs": "Permintaan Log",
    "proxyLogs": "Log Proksi",
    "auditLog": "Log Audit",
    "console": "Konsol",
    "auditLogDesc": "Tindakan pentadbiran dan acara keselamatan",
    "loading": "Memuatkan...",
    "refresh": "Segarkan semula",
    "filterByAction": "Tapis mengikut tindakan...",
    "filterByActor": "Tapis mengikut pelakon...",
    "filterEntriesAria": "Tapis entri log audit",
    "filterByActionTypeAria": "Tapis mengikut jenis tindakan",
    "filterByActorAria": "Tapis mengikut pelakon",
    "refreshAuditLogAria": "Muat semula log audit",
    "tableAria": "Entri log audit",
    "failedFetchAuditLog": "Gagal mengambil log audit",
    "showing": "Menunjukkan entri {count} (mengimbangi {offset})",
    "search": "Cari",
    "timestamp": "Cap masa",
    "action": "Tindakan",
    "actor": "pelakon",
    "target": "Sasaran",
    "details": "Butiran",
    "ipAddress": "Alamat IP",
    "notAvailable": "—",
    "noEntries": "Tiada entri log audit ditemui",
    "previous": "Sebelumnya",
    "next": "Seterusnya"
  },
  "onboarding": {
    "welcome": "Selamat datang",
    "security": "Keselamatan",
    "test": "Ujian",
    "ready": "sedia!",
    "setPassword": "Tetapkan Kata Laluan",
    "addProvider": "Tambahkan pembekal pertama anda",
    "getStarted": "Mulakan",
    "skip": "Langkau",
    "skipWizard": "Langkau wizard sepenuhnya",
    "skipPassword": "Langkau persediaan kata laluan",
    "skipAndContinue": "Langkau & Teruskan",
    "passwordLabel": "Kata laluan",
    "confirmPassword": "Sahkan Kata Laluan",
    "enterPassword": "Masukkan kata laluan",
    "confirmPasswordPlaceholder": "Sahkan kata laluan",
    "passwordsMismatch": "Kata laluan tidak sepadan",
    "setupComplete": "Persediaan Selesai!",
    "goToDashboard": "Pergi ke Papan Pemuka →",
    "welcomeDesc": "OmniRoute ialah proksi API AI tempatan anda. Ia mengarahkan permintaan kepada berbilang penyedia AI dengan pengimbangan beban, failover dan penjejakan penggunaan.",
    "multiProvider": "Pelbagai Pembekal",
    "usageTracking": "Penjejakan Penggunaan",
    "apiKeyMgmt": "Mgmt Kunci API",
    "securityDesc": "Tetapkan kata laluan untuk melindungi papan pemuka anda atau langkau buat masa ini.",
    "providerDesc": "Sambungkan pembekal AI pertama anda. Anda boleh menambah lagi kemudian.",
    "apiKeyRequired": "Kunci API (diperlukan)",
    "customUrlOptional": "URL tersuai (pilihan)",
    "testDesc": "Mari sahkan sambungan pembekal anda berfungsi.",
    "runTest": "Jalankan Ujian Sambungan",
    "testingConnection": "Menguji sambungan...",
    "connectionSuccessful": "Sambungan berjaya! Pembekal anda sudah bersedia.",
    "noProviderFound": "Tiada pembekal ditemui. Anda boleh menambah satu daripada papan pemuka kemudian.",
    "testFailed": "Ujian gagal, tetapi anda boleh mengkonfigurasi ini kemudian.",
    "couldNotTest": "Tidak dapat menguji sekarang. Anda boleh menguji dari papan pemuka.",
    "doneDesc": "Anda sudah bersedia! Contoh OmniRoute anda dikonfigurasikan dan bersedia untuk memproksi permintaan AI.",
    "yourEndpoint": "Titik akhir anda:",
    "continue": "teruskan",
    "retry": "Cuba semula",
    "failedSetPassword": "Gagal menetapkan kata laluan. Cuba lagi.",
    "failedAddProvider": "Gagal menambah pembekal. Cuba lagi.",
    "connectionError": "Ralat sambungan. Sila cuba lagi.",
    "provider": "Pembekal"
  },
  "providers": {
    "title": "Pembekal",
    "addProvider": "Tambah Pembekal",
    "editProvider": "Edit Pembekal",
    "deleteProvider": "Padamkan Pembekal",
    "noProviders": "Tiada pembekal dikonfigurasikan",
    "modelAvailability": "Ketersediaan Model",
    "accounts": "Akaun",
    "newAccount": "Akaun Baru",
    "deleteConfirm": "Adakah anda pasti mahu memadamkan pembekal ini?",
    "testing": "Menguji...",
    "testConnection": "Sambungan Ujian",
    "testSuccess": "Sambungan berjaya",
    "testFailed": "Sambungan gagal",
    "available": "Tersedia",
    "cooldown": "Cooldown",
    "unavailable": "Tidak tersedia",
    "unknown": "Tidak diketahui",
    "oauthLabel": "OAuth",
    "compatibleLabel": "serasi",
    "chat": "Sembang",
    "responses": "Jawapan",
    "messages": "Mesej",
    "oauthProviders": "Pembekal OAuth",
    "freeProviders": "Pembekal Percuma",
    "apiKeyProviders": "Pembekal Kunci API",
    "compatibleProviders": "Pembekal Serasi Kunci API",
    "testAll": "Uji Semua",
    "testAllOAuth": "Uji semua sambungan OAuth",
    "testAllFree": "Uji semua sambungan Percuma",
    "testAllApiKey": "Uji semua sambungan Kunci API",
    "testAllCompatible": "Uji semua sambungan yang Serasi",
    "connected": "{count} Disambungkan",
    "errorCount": "{count} Ralat ({code})",
    "errorCountNoCode": "{count} Ralat",
    "noConnections": "Tiada sambungan",
    "disabled": "Dilumpuhkan",
    "enableProvider": "Dayakan pembekal",
    "disableProvider": "Lumpuhkan pembekal",
    "testResults": "Keputusan Ujian",
    "noCompatibleYet": "Tiada pembekal yang serasi ditambah lagi",
    "compatibleHint": "Gunakan butang di atas untuk menambah titik akhir serasi OpenAI atau Anthropic",
    "addOpenAICompatible": "Tambah OpenAI Compatible",
    "addAnthropicCompatible": "Tambah Anthropic Compatible",
    "addNewProvider": "Tambah Penyedia Baharu",
    "backToProviders": "Kembali ke Penyedia",
    "configureNewProvider": "Konfigurasikan pembekal AI baharu untuk digunakan dengan aplikasi anda.",
    "providerLabel": "Pembekal",
    "selectProvider": "Pilih pembekal",
    "selectedProvider": "Pembekal terpilih",
    "authMethod": "Kaedah Pengesahan",
    "apiKeyLabel": "Kunci API",
    "apiKeyRequired": "Kunci API diperlukan",
    "selectProviderRequired": "Sila pilih pembekal",
    "enterApiKey": "Masukkan kunci API anda",
    "apiKeySecure": "Kunci API anda akan disulitkan dan disimpan dengan selamat.",
    "oauth2Connect": "Berhubung dengan OAuth2",
    "oauth2Label": "OAuth2",
    "oauth2Desc": "Sambungkan akaun anda menggunakan pengesahan OAuth2.",
    "displayName": "Nama Paparan",
    "displayNamePlaceholder": "cth., API Pengeluaran, Persekitaran Dev",
    "displayNameHint": "Pilihan. Nama yang mesra untuk mengenal pasti konfigurasi ini.",
    "active": "Aktif",
    "activeDescription": "Dayakan pembekal ini untuk digunakan dalam aplikasi anda",
    "cancel": "Batal",
    "createProvider": "Buat Pembekal",
    "failedCreate": "Gagal membuat pembekal",
    "errorOccurred": "Ralat berlaku. Sila cuba lagi.",
    "modelStatus": "Status Model",
    "allModelsOperational": "Semua model beroperasi",
    "modelsWithIssues": "{count} model dengan isu",
    "allModelsNormal": "Semua model bertindak balas secara normal.",
    "cooldownCleared": "Cooldown dikosongkan untuk {model}",
    "failedClearCooldown": "Gagal mengosongkan cooldown",
    "loadingAvailability": "Memuatkan ketersediaan model...",
    "clearCooldown": "Jelas",
    "clearing": "Membersihkan...",
    "until": "Sehingga {time}",
    "providerTestFailed": "Ujian pembekal gagal",
    "modeTest": "{mode} Ujian",
    "passedCount": "{count} lulus",
    "failedCount": "{count} gagal",
    "testedCount": "{count} diuji",
    "millisecondsAbbr": "{value}ms",
    "okShort": "OK",
    "errorShort": "RALAT",
    "noActiveConnectionsInGroup": "Tiada sambungan aktif ditemui untuk kumpulan ini.",
    "allTestsPassed": "Semua ujian {total} lulus",
    "testSummary": "{passed}/{total} lulus, {failed} gagal",
    "nameLabel": "Nama",
    "prefixLabel": "Awalan",
    "baseUrlLabel": "URL asas",
    "apiTypeLabel": "Jenis API",
    "prefixHint": "Diperlukan. Awalan unik untuk nama model.",
    "nameHint": "Diperlukan. Label mesra untuk nod ini.",
    "baseUrlHint": "Diperlukan.  URL asas API pembekal.",
    "anthropicPrefixPlaceholder": "ac-prod",
    "openaiPrefixPlaceholder": "oc-prod",
    "anthropicBaseUrlPlaceholder": "https://api.anthropic.com/v1",
    "openaiBaseUrlPlaceholder": "https://api.openai.com/v1",
    "validateConnection": "Sahkan Sambungan",
    "validating": "Mengesahkan...",
    "connectionValid": "Sambungan adalah sah!",
    "connectionFailed": "Sambungan gagal. Semak URL dan kunci.",
    "testKeyLabel": "Uji Kunci API",
    "testKeyPlaceholder": "sk-... (untuk pengesahan sahaja)",
    "providerNotFound": "Pembekal tidak ditemui",
    "deleteConnectionConfirm": "Padamkan sambungan ini?",
    "failedSetAlias": "Gagal menetapkan alias",
    "failedSaveConnection": "Gagal menyimpan sambungan",
    "failedSaveConnectionRetry": "Gagal menyimpan sambungan. Sila cuba lagi.",
    "failedRetestConnection": "Gagal menguji semula sambungan",
    "deleteCompatibleNodeConfirm": "Padamkan {type} nod yang serasi ini?",
    "anthropicCompatibleDetails": "Butiran Serasi Anthropic",
    "openaiCompatibleDetails": "Butiran Serasi OpenAI",
    "messagesApi": "API Messages",
    "responsesApi": "API Respons",
    "chatCompletions": "Selesai Sembang",
    "importingModels": "Mengimport...",
    "importFromModels": "Import daripada /models",
    "addConnectionToImport": "Tambahkan sambungan untuk mendayakan pengimportan.",
    "noModelsConfigured": "Tiada model yang dikonfigurasikan",
    "connectionCount": "{count} sambungan",
    "fetchingModels": "Mengambil model yang tersedia...",
    "failedFetchModels": "Gagal mengambil model",
    "noModelsFound": "Tiada model ditemui",
    "importFailed": "Import gagal",
    "noNewModelsAdded": "Tiada model baharu ditambahkan.",
    "adding": "Menambah...",
    "importingModelsTitle": "Mengimport Model",
    "copyModel": "Salin model",
    "removeModel": "Alih keluar model",
    "rateLimitProtected": "Dilindungi",
    "rateLimitUnprotected": "Tidak dilindungi",
    "enableRateLimitProtection": "Klik untuk mendayakan perlindungan had kadar",
    "disableRateLimitProtection": "Klik untuk melumpuhkan perlindungan had kadar",
    "productionKey": "Kunci Pengeluaran",
    "enterNewApiKey": "Masukkan kunci API baharu",
    "optional": "Pilihan",
    "anthropicCompatibleName": "Serasi Anthropic",
    "openaiCompatibleName": "Serasi OpenAI",
    "failedImportModels": "Gagal mengimport model",
    "noModelsReturnedFromEndpoint": "Tiada model dikembalikan dari titik akhir /models.",
    "importingModelsProgress": "Mengimport {current} daripada {total} model...",
    "foundModelsStartingImport": "Menemui model {count}. Memulakan import...",
    "importingModelById": "Mengimport {modelId}...",
    "importSuccessCount": "Berjaya mengimport {count, plural, one {# model} other {# models}}!",
    "noNewModelsAddedExisting": "Tiada model baharu ditambahkan (semua sudah wujud).",
    "importDoneCount": "✓ Selesai! {count, plural, one {# model imported.} other {# models imported.}}",
    "unexpectedErrorOccurred": "Ralat yang tidak dijangka berlaku",
    "connectionCountLabel": "{count, plural, one {# connection} other {# connections}}",
    "messagesPath": "mesej",
    "responsesPath": "maklum balas",
    "chatCompletionsPath": "sembang/penyelesaian",
    "add": "Tambah",
    "edit": "Sunting",
    "delete": "Padam",
    "anthropic": "Antropik",
    "openai": "OpenAI",
    "singleConnectionPerCompatible": "Hanya satu sambungan dibenarkan bagi setiap nod yang serasi. Tambahkan nod lain jika anda memerlukan lebih banyak sambungan.",
    "connections": "Sambungan",
    "providerProxyTitleConfigured": "Proksi pembekal: {host}",
    "configured": "dikonfigurasikan",
    "providerProxyConfigureHint": "Konfigurasikan proksi untuk semua sambungan pembekal ini",
    "providerProxy": "Proksi Pembekal",
    "noConnectionsYet": "Tiada sambungan lagi",
    "addFirstConnectionHint": "Tambahkan sambungan pertama anda untuk bermula",
    "addConnection": "Tambah Sambungan",
    "availableModels": "Model Tersedia",
    "pageAutoRefresh": "Halaman akan dimuat semula secara automatik...",
    "statusDisabled": "kurang upaya",
    "statusConnected": "bersambung",
    "statusRuntimeIssue": "isu runtime",
    "statusAuthFailed": "pengesahan gagal",
    "statusRateLimited": "kadar terhad",
    "statusNetworkIssue": "isu rangkaian",
    "statusTestUnsupported": "ujian tidak disokong",
    "statusUnavailable": "tidak tersedia",
    "statusFailed": "gagal",
    "statusError": "kesilapan",
    "oauthAccount": "Akaun OAuth",
    "errorTypeRuntime": "Masa jalan tempatan",
    "errorTypeUpstreamAuth": "Pengesahan huluan",
    "errorTypeMissingCredential": "Tiada bukti kelayakan",
    "errorTypeRefreshFailed": "Muat semula gagal",
    "errorTypeTokenExpired": "Token tamat tempoh",
    "errorTypeRateLimited": "Kadar terhad",
    "errorTypeUpstreamUnavailable": "Hulu tidak tersedia",
    "errorTypeNetworkError": "Ralat rangkaian",
    "errorTypeTestUnsupported": "Ujian tidak disokong",
    "errorTypeUpstreamError": "Ralat huluan",
    "proxySourceGlobal": "Global",
    "proxySourceProvider": "Pembekal",
    "proxySourceKey": "kunci",
    "proxyConfiguredBySource": "Proksi ({source}): {host}",
    "autoPriority": "Auto: {priority}",
    "proxy": "proksi",
    "retestAuthentication": "Uji semula pengesahan",
    "retest": "Uji semula",
    "disableConnection": "Lumpuhkan sambungan",
    "enableConnection": "Dayakan sambungan",
    "reauthenticateConnection": "Sahkan semula sambungan ini",
    "proxyConfig": "Konfigurasi proksi",
    "aliasExistsAlert": "Alias \"{alias}\" sudah wujud. Sila gunakan model lain atau edit alias sedia ada.",
    "openRouterAnyModelHint": "OpenRouter menyokong mana-mana model. Tambah model dan buat alias untuk akses pantas.",
    "modelIdFromOpenRouter": "ID Model (dari OpenRouter)",
    "openRouterModelPlaceholder": "antropik/claude-3-opus",
    "customModels": "Model Tersuai",
    "customModelsHint": "Tambahkan ID model yang tiada dalam senarai lalai. Ini akan tersedia untuk penghalaan.",
    "modelId": "ID model",
    "customModelPlaceholder": "cth. gpt-4.5-turbo",
    "loading": "Memuatkan...",
    "removeCustomModel": "Alih keluar model tersuai",
    "noCustomModels": "Tiada model tersuai ditambahkan lagi.",
    "allSuggestedAliasesExist": "Semua alias yang dicadangkan sudah wujud. Sila pilih model lain atau alih keluar alias bercanggah.",
    "failedSaveCustomModel": "Gagal menyimpan model tersuai",
    "modelAddedSuccess": "Model {modelId} berjaya ditambahkan",
    "failedAddModelTryAgain": "Gagal menambah model. Sila cuba lagi.",
    "failedSaveImportedModel": "Gagal menyimpan model yang diimport ke pangkalan data tersuai",
    "failedImportModelsTryAgain": "Gagal mengimport model. Sila cuba lagi.",
    "failedRemoveModelFromDatabase": "Gagal mengalih keluar model daripada pangkalan data",
    "modelRemovedSuccess": "Model berjaya dialih keluar",
    "failedDeleteModelTryAgain": "Gagal memadamkan model. Sila cuba lagi.",
    "compatibleModelsDescription": "Tambah {type}-model yang serasi secara manual atau importnya dari titik akhir /models.",
    "anthropicCompatibleModelPlaceholder": "claude-3-opus-20240229",
    "openaiCompatibleModelPlaceholder": "gpt-4o",
    "apiKeyValidationFailed": "Pengesahan kunci API gagal. Sila semak kunci anda dan cuba lagi.",
    "addProviderApiKeyTitle": "Tambahkan {provider} Kunci API",
    "checking": "Menyemak...",
    "check": "Semak",
    "valid": "sah",
    "invalid": "Tidak sah",
    "creating": "Mencipta...",
    "validationChecksAnthropicCompatible": "Pengesahan menyemak {provider} dengan mengesahkan kunci API.",
    "validationChecksOpenAiCompatible": "Semakan pengesahan {provider} melalui /models pada URL asas anda.",
    "priorityLabel": "Keutamaan",
    "saving": "Menyimpan...",
    "save": "Jimat",
    "editConnection": "Edit Sambungan",
    "accountName": "Nama akaun",
    "email": "E-mel",
    "healthCheckMinutes": "Pemeriksaan Kesihatan (min)",
    "healthCheckHint": "Selang penyegaran token proaktif. 0 = kurang upaya.",
    "failedTestConnection": "Gagal menguji sambungan",
    "failed": "gagal",
    "leaveBlankKeepCurrentApiKey": "Biarkan kosong untuk mengekalkan kunci API semasa.",
    "editCompatibleTitle": "Edit {type} Serasi",
    "compatibleBaseUrlHint": "Gunakan URL asas (berakhir dengan /v1) untuk API serasi {type} anda.",
    "apiKeyForCheck": "Kunci API (untuk Semakan)",
    "compatibleProdPlaceholder": "{type} Serasi (Prod)"
  },
  "settings": {
    "title": "tetapan",
    "general": "Umum",
    "security": "Keselamatan",
    "appearance": "Penampilan",
    "routing": "Penghalaan",
    "cache": "Cache",
    "resilience": "Ketahanan",
    "systemPrompt": "Gesaan Sistem",
    "thinkingBudget": "Belanjawan Berfikir",
    "proxy": "proksi",
    "pricing": "penentuan harga",
    "storage": "Penyimpanan",
    "policies": "dasar",
    "ipFilter": "Penapis IP",
    "comboDefaults": "Kombo Lalai",
    "fallbackChains": "Rantai Fallback",
    "changePassword": "Tukar Kata Laluan",
    "enablePassword": "Dayakan Kata Laluan",
    "darkMode": "Mod Gelap",
    "lightMode": "Mod Cahaya",
    "systemTheme": "Tema Sistem",
    "enableCache": "Dayakan Cache",
    "cacheTTL": "Cache TTL",
    "maxCacheSize": "Saiz Cache Maks",
    "clearCache": "Kosongkan Cache",
    "cacheHits": "Cache Hits",
    "cacheMisses": "Cache Rindu",
    "hitRate": "Kadar Hit",
    "cacheEntries": "Entri Cache",
    "circuitBreaker": "Pemutus Litar",
    "retryPolicy": "Dasar Cuba semula",
    "maxRetries": "Max Cuba Semula",
    "retryDelay": "Cuba Semula Kelewatan",
    "timeoutMs": "Tamat masa (ms)",
    "enableSystemPrompt": "Dayakan Sistem Prompt",
    "systemPromptText": "Teks Gesaan Sistem",
    "enableThinking": "Dayakan Berfikir",
    "maxThinkingTokens": "Token Pemikiran Maks",
    "enableProxy": "Dayakan Proksi",
    "proxyUrl": "URL proksi",
    "pricingRates": "Format Kadar Harga",
    "currentPricing": "Gambaran Keseluruhan Harga Semasa",
    "loadingPricing": "Memuatkan data harga...",
    "noPricing": "Tiada data harga tersedia",
    "input": "Input",
    "output": "Keluaran",
    "cached": "Dicache",
    "reasoning": "Penaakulan",
    "cacheCreation": "Penciptaan Cache",
    "customPricing": "Harga Tersuai",
    "databaseSize": "Saiz Pangkalan Data",
    "backupDb": "Pangkalan Data Sandaran",
    "restoreDb": "Pulihkan Pangkalan Data",
    "exportData": "Eksport Data",
    "importData": "Import Data",
    "clearData": "Kosongkan Semua Data",
    "clearDataConfirm": "Ini akan memadamkan semua data secara kekal. Adakah anda pasti?",
    "enableRequestLogs": "Dayakan Log Permintaan",
    "logRetention": "Pengekalan Log",
    "ipWhitelist": "Senarai Putih IP",
    "ipBlacklist": "Senarai Hitam IP",
    "addIP": "Tambah IP",
    "savedSuccessfully": "Tetapan berjaya disimpan",
    "ai": "AI",
    "advanced": "Maju",
    "localMode": "Mod Setempat — Semua data yang disimpan pada mesin anda",
    "settingsSectionsAria": "Bahagian tetapan",
    "switchThemes": "Beralih antara tema terang dan gelap",
    "themeSelectionAria": "Pemilihan tema",
    "themeLight": "Cahaya",
    "themeDark": "Gelap",
    "themeSystem": "Sistem",
    "hideHealthLogs": "Sembunyikan Log Pemeriksaan Kesihatan",
    "hideHealthLogsDesc": "Apabila HIDUP, sekat mesej [HealthCheck] dalam konsol pelayan",
    "promptCache": "Cache Prompt",
    "flushCache": "Flush Cache",
    "flushing": "Membilas…",
    "size": "Saiz",
    "hits": "Hits",
    "evictions": "Pengusiran",
    "loadingCacheStats": "Memuatkan statistik cache…",
    "globalProxy": "Proksi Global",
    "globalProxyDesc": "Konfigurasikan proksi keluar global untuk semua panggilan API. Pembekal individu, kombo dan kunci boleh mengatasi perkara ini.",
    "noGlobalProxy": "Tiada proksi global dikonfigurasikan",
    "globalLabel": "Global",
    "configure": "Konfigurasikan",
    "globalSystemPrompt": "Gesaan Sistem Global",
    "systemPromptDesc": "Disuntik ke dalam semua permintaan di peringkat proksi",
    "saved": "Disimpan",
    "systemPromptPlaceholder": "Masukkan gesaan sistem untuk memasukkan semua permintaan...",
    "systemPromptHint": "Gesaan ini disertakan pada mesej sistem setiap permintaan. Gunakan untuk arahan global, garis panduan keselamatan atau peraturan pemformatan respons.",
    "chars": "{count} aksara",
    "thinkingBudgetTitle": "Belanjawan Berfikir",
    "thinkingBudgetDesc": "Kawal penggunaan token penaakulan AI merentas semua permintaan",
    "passthrough": "Laluan",
    "passthroughDesc": "Tiada perubahan — pelanggan mengawal belanjawan berfikir",
    "auto": "Auto",
    "autoDesc": "Keluarkan semua konfigurasi pemikiran — biarkan pembekal memutuskan",
    "custom": "Adat",
    "customDesc": "Tetapkan belanjawan token tetap untuk semua permintaan",
    "adaptive": "Adaptif",
    "adaptiveDesc": "Skala belanjawan berdasarkan kerumitan permintaan",
    "effortNone": "Tiada (0 token)",
    "effortLow": "Rendah (1K token)",
    "effortMedium": "Sederhana (10K token)",
    "effortHigh": "Tinggi (128K token)",
    "tokenBudget": "Belanjawan Token",
    "tokens": "token",
    "baseEffortLevel": "Tahap Usaha Asas",
    "adaptiveHint": "Skala mod penyesuaian dari tahap asas ini berdasarkan kiraan mesej, penggunaan alat dan panjang segera.",
    "requireLogin": "Memerlukan log masuk",
    "requireLoginDesc": "Apabila HIDUP, papan pemuka memerlukan kata laluan. Apabila MATI, akses tanpa log masuk.",
    "currentPassword": "Kata Laluan Semasa",
    "enterCurrentPassword": "Masukkan kata laluan semasa",
    "newPassword": "Kata Laluan Baharu",
    "enterNewPassword": "Masukkan kata laluan baharu",
    "confirmPassword": "Sahkan Kata Laluan Baharu",
    "confirmPasswordPlaceholder": "Sahkan kata laluan baharu",
    "passwordsNoMatch": "Kata laluan tidak sepadan",
    "passwordUpdated": "Kata laluan berjaya dikemas kini",
    "failedUpdatePassword": "Gagal mengemas kini kata laluan",
    "errorOccurred": "Ralat berlaku",
    "updatePassword": "Kemas kini Kata Laluan",
    "setPassword": "Tetapkan Kata Laluan",
    "apiEndpointProtection": "Perlindungan Titik Akhir API",
    "requireAuthModels": "Memerlukan kunci API untuk /models",
    "requireAuthModelsDesc": "Apabila HIDUP, titik akhir /v1/models mengembalikan 404 untuk permintaan yang tidak disahkan. Menghalang penemuan model oleh pengguna yang tidak dibenarkan.",
    "blockedProviders": "Penyedia yang disekat",
    "blockedProvidersDesc": "Sembunyikan pembekal tertentu daripada respons /v1/models. Penyedia yang disekat tidak akan muncul dalam penyenaraian model.",
    "providersBlocked": "{count} pembekal disekat daripada /models",
    "blockProviderTitle": "Sekat {provider}",
    "unblockProviderTitle": "Nyahsekat {provider}",
    "routingStrategy": "Strategi Penghalaan",
    "fillFirst": "Isi dahulu",
    "fillFirstDesc": "Gunakan akaun dalam susunan keutamaan",
    "roundRobin": "Round Robin",
    "roundRobinDesc": "Kitaran melalui semua akaun",
    "p2c": "P2C",
    "p2cDesc": "Pilih 2 secara rawak, gunakan yang lebih sihat",
    "random": "rawak",
    "randomDesc": "Akaun rawak setiap permintaan",
    "leastUsed": "Paling Kurang Digunakan",
    "leastUsedDesc": "Pilih akaun yang paling kurang digunakan baru-baru ini",
    "costOpt": "Pilihan Kos",
    "costOptDesc": "Pilih akaun termurah yang tersedia",
    "stickyLimit": "Had Melekit",
    "stickyLimitDesc": "Panggilan setiap akaun sebelum bertukar",
    "modelAliases": "Alias Model",
    "modelAliasesDesc": "Corak kad liar untuk memetakan semula nama model • Gunakan * dan ?",
    "aliasPatternPlaceholder": "claude-sonnet-*",
    "aliasTargetPlaceholder": "claude-sonnet-4-20250514",
    "pattern": "Corak",
    "targetModel": "Model Sasaran",
    "add": "+ Tambah",
    "session": "Sesi",
    "sessionDetailsAria": "Butiran sesi",
    "status": "Status",
    "authenticated": "Disahkan",
    "guest": "tetamu",
    "loginTime": "Masa Log Masuk",
    "sessionAge": "Umur Sesi",
    "browser": "pelayar",
    "clearLocalData": "Kosongkan Data Tempatan",
    "logout": "Log keluar",
    "clearLocalDataConfirm": "Kosongkan semua data setempat? Ini akan menetapkan semula pilihan anda.",
    "unknown": "Tidak diketahui",
    "systemActor": "sistem",
    "ipAccessControl": "Kawalan Capaian IP",
    "ipAccessControlDesc": "Sekat atau benarkan alamat IP tertentu",
    "ipModeDisabled": "Dilumpuhkan",
    "ipModeBlacklist": "Senarai hitam",
    "ipModeWhitelist": "Senarai putih",
    "ipModeWhitelistPriority": "Keutamaan WL",
    "addIpAddress": "Tambah Alamat IP",
    "ipAddressPlaceholder": "192.168.1.0/24 atau 10.0.*.*",
    "block": "+ Sekat",
    "allow": "+ Benarkan",
    "blocked": "Disekat ({count})",
    "allowed": "Dibenarkan ({count})",
    "temporaryBans": "Larangan Sementara ({count})",
    "minLeft": "{min}m lagi",
    "auditLog": "Log Audit",
    "searchAuditLogs": "Cari log audit...",
    "failedLoadAuditLog": "Gagal memuatkan log audit",
    "noAuditEvents": "Tiada acara audit ditemui",
    "action": "Tindakan",
    "actor": "pelakon",
    "details": "Butiran",
    "time": "Masa",
    "fallbackChainsTitle": "Rantai Fallback",
    "fallbackChainsDesc": "Tentukan pesanan sandaran pembekal bagi setiap model",
    "addChain": "+ Tambah Rantaian",
    "modelName": "Nama Model",
    "modelNamePlaceholder": "claude-sonnet-4-20250514",
    "providersCommaSeparated": "Penyedia (dipisahkan koma, dalam susunan keutamaan)",
    "providersCommaSeparatedPlaceholder": "antropik, openai, gemini",
    "createChain": "Buat Rantaian",
    "noFallbackChains": "Tiada Rantai Fallback",
    "noFallbackChainsDesc": "Buat rantaian untuk menentukan pesanan sandaran pembekal untuk model.",
    "loadingFallbackChains": "Memuatkan rantaian sandaran...",
    "deleteChainConfirm": "Padamkan rantaian sandaran untuk \"{model}\"?",
    "chainCreated": "Rantaian dibuat untuk {model}",
    "chainDeleted": "Rantaian dipadamkan untuk {model}",
    "failedCreateChain": "Gagal membuat rantaian",
    "failedDeleteChain": "Gagal memadamkan rantai",
    "deleteChain": "Padamkan rantai",
    "fillModelAndProviders": "Sila isi nama model dan pembekal",
    "addAtLeastOneProvider": "Tambah sekurang-kurangnya satu pembekal",
    "comboDefaultsTitle": "Kombo Lalai",
    "globalComboConfig": "Konfigurasi kombo global",
    "defaultStrategy": "Strategi Lalai",
    "defaultStrategyDesc": "Digunakan pada kombo baharu tanpa strategi yang jelas",
    "comboStrategyAria": "Strategi kombo",
    "priority": "Keutamaan",
    "weighted": "Ditimbang",
    "maxRetriesLabel": "Max Cuba Semula",
    "retryDelayLabel": "Cuba Semula Kelewatan (ms)",
    "timeoutLabel": "Tamat masa (ms)",
    "healthCheck": "Pemeriksaan Kesihatan",
    "healthCheckDesc": "Prasemak ketersediaan pembekal",
    "trackMetrics": "Metrik Jejak",
    "trackMetricsDesc": "Catatkan metrik permintaan setiap kombo",
    "providerOverrides": "Penggantian Pembekal",
    "providerOverridesDesc": "Gantikan tamat masa dan cuba semula setiap pembekal. Tetapan pembekal mengatasi lalai global.",
    "providerMaxRetriesAria": "{provider} percubaan semula maks",
    "providerTimeoutAria": "{provider} tamat masa ms",
    "removeProviderOverrideAria": "Alih keluar {provider} override",
    "newProviderNamePlaceholder": "cth. google, openai...",
    "newProviderNameAria": "Nama pembekal baharu",
    "retries": "mencuba semula",
    "ms": "ms",
    "saveComboDefaults": "Simpan Combo Lalai",
    "maxNestingDepth": "Kedalaman Bersarang Maks",
    "concurrencyPerModel": "Concurrency / Model",
    "queueTimeout": "Waktu Beratur (ms)",
    "providerProfiles": "Profil Pembekal",
    "providerProfilesDesc": "Tetapan daya tahan yang berasingan untuk pembekal OAuth (berasaskan sesi) dan Kunci API (bermeter). Pembekal OAuth mempunyai ambang yang lebih ketat disebabkan oleh had kadar yang lebih rendah.",
    "oauthProviders": "Pembekal OAuth",
    "apiKeyProviders": "Pembekal Kunci API",
    "transientCooldown": "Cooldown Sementara",
    "rateLimitCooldown": "Sejuk Had Kadar",
    "maxBackoffLevel": "Tahap Backoff Maks",
    "cbThreshold": "Ambang CB",
    "cbResetTime": "Masa Tetapan Semula CB",
    "rateLimiting": "Mengehadkan Kadar",
    "rateLimitingDesc": "Pembekal Kunci API dihadkan kadar secara automatik dengan lalai yang selamat. Had dipelajari daripada pengepala respons dan menyesuaikan diri dari semasa ke semasa.",
    "defaultSafetyNet": "Jaringan Keselamatan Lalai",
    "rpm": "RPM",
    "minGap": "Jurang Min",
    "maxConcurrent": "Serentak Maks",
    "activeLimiters": "Penghad Aktif",
    "noActiveLimiters": "Tiada pengehad kadar aktif lagi.",
    "reservoir": "takungan",
    "running": "Berlari",
    "queued": "Beratur",
    "circuitBreakers": "Pemutus Litar",
    "breakerStateClosed": "tertutup",
    "breakerStateOpen": "Buka",
    "breakerStateHalfOpen": "Separuh Terbuka",
    "tripped": "{count} tersandung",
    "healthy": "{count} sihat",
    "resetAll": "Tetapkan Semula Semua",
    "noCircuitBreakers": "Tiada pemutus litar aktif lagi. Ia dicipta secara automatik apabila permintaan mengalir melalui saluran paip kombo.",
    "failures": "{count} kegagalan",
    "policiesLocked": "Dasar & Pengecam Terkunci",
    "allOperational": "Semua sistem beroperasi — tiada penguncian atau pemutus tersandung",
    "loadingPolicies": "Memuatkan dasar...",
    "lockedIdentifiers": "Pengecam Terkunci",
    "unlockedIdentifier": "Dibuka kunci: {identifier}",
    "sinceDate": "sejak {date}",
    "forceUnlock": "Paksa Buka Kunci",
    "unlocking": "Membuka kunci...",
    "failedUnlock": "Gagal membuka kunci",
    "failedLoadWithStatus": "Gagal memuatkan: {status}",
    "failedLoadResilience": "Gagal memuatkan status daya tahan",
    "saveFailed": "Simpan gagal",
    "resetFailed": "Tetapan semula gagal",
    "loadingResilience": "Memuatkan status daya tahan...",
    "retry": "Cuba semula",
    "systemStorage": "Sistem & Storan",
    "allDataLocal": "Semua data disimpan secara setempat pada mesin anda",
    "databasePath": "Laluan Pangkalan Data",
    "exportDatabase": "Eksport Pangkalan Data",
    "exportAll": "Eksport Semua (.tar.gz)",
    "importDatabase": "Import Pangkalan Data",
    "confirmDbImport": "Sahkan Import Pangkalan Data",
    "confirmDbImportDesc": "Ini akan menggantikan semua data semasa dengan kandungan daripada {file}. Sandaran akan dibuat secara automatik sebelum import.",
    "yesImport": "Ya, Import",
    "lastBackup": "Sandaran Terakhir",
    "noBackupYet": "Tiada sandaran lagi",
    "backupNow": "Sandaran Sekarang",
    "backupRestore": "Sandaran & Pulihkan",
    "viewBackups": "Lihat Sandaran",
    "hide": "Sembunyi",
    "backupRetentionDesc": "Syot kilat pangkalan data dibuat secara automatik sebelum dipulihkan dan setiap 15 minit apabila data berubah. Pengekalan: 24 jam + 30 sandaran harian dengan putaran pintar.",
    "loadingBackups": "Memuatkan sandaran...",
    "noBackupsYet": "Tiada sandaran tersedia lagi. Sandaran akan dibuat secara automatik apabila data berubah.",
    "backupsAvailable": "{count} sandaran tersedia",
    "refresh": "Segarkan semula",
    "confirm": "Sahkan?",
    "yes": "ya",
    "no": "Tidak",
    "restore": "Pulihkan",
    "invalidFileType": "Jenis fail tidak sah. Hanya fail .sqlite diterima.",
    "exportFailed": "Eksport gagal",
    "exportFailedWithError": "Eksport gagal: {error}",
    "fullExportFailedWithError": "Eksport penuh gagal: {error}",
    "backupCreated": "Sandaran dibuat: {file}",
    "restoreSuccess": "Dipulihkan! {connections} sambungan, {nodes} nod, {combos} gabungan, {apiKeys} kunci API.",
    "importSuccess": "Pangkalan data diimport! {connections} sambungan, {nodes} nod, {combos} gabungan, {apiKeys} kunci API.",
    "justNow": "tadi",
    "minutesAgo": "{count}m yang lalu",
    "hoursAgo": "{count}j lalu",
    "daysAgo": "{count}h yang lalu",
    "backupReasonManual": "manual",
    "backupReasonPreRestore": "pra-pemulihan",
    "connectionsCount": "{count, plural, one {# connection} other {# connections}}",
    "noChangesSinceBackup": "Tiada perubahan sejak sandaran terakhir",
    "backupFailed": "Sandaran gagal",
    "restoreFailed": "Pemulihan gagal",
    "importFailed": "Import gagal",
    "errorDuringRestore": "Ralat berlaku semasa pemulihan",
    "errorDuringImport": "Ralat berlaku semasa import",
    "modelPricing": "Harga Model",
    "modelPricingDesc": "Konfigurasikan kadar kos setiap model • Semua kadar dalam token $/1J",
    "providers": "Pembekal",
    "registry": "Pendaftaran",
    "priced": "Berharga",
    "searchProvidersModels": "Cari pembekal atau model...",
    "showAll": "Tunjukkan Semua",
    "noProvidersMatch": "Tiada pembekal yang sepadan dengan carian anda.",
    "howPricingWorks": "Cara Harga Berfungsi",
    "cacheWrite": "Tulis Cache",
    "unsaved": "belum disimpan",
    "resetDefaults": "Tetapkan Semula Lalai",
    "saveProvider": "Simpan Penyedia",
    "saving": "Menyimpan...",
    "model": "Model",
    "models": "model",
    "moreProviders": "{count} lagi pembekal",
    "withPricing": "dengan penetapan harga dikonfigurasikan",
    "policiesCircuitBreakers": "Polisi & Pemutus Litar",
    "activeIssuesDetected": "Isu aktif dikesan",
    "off": "Mati",
    "resetPricingConfirm": "Tetapkan semula semua harga untuk {provider} kepada lalai?",
    "pricingDescInput": "Input: token dihantar kepada model",
    "pricingDescOutput": "Output: token dijana",
    "pricingDescCached": "Dicache: input yang digunakan semula (~50% daripada kadar input)",
    "pricingDescReasoning": "Penaakulan: token pemikiran (kembali kepada Output)",
    "pricingDescCacheWrite": "Cache Write: mencipta entri cache (kembali ke Input)",
    "pricingDescFormula": "Kos = (input × input_rate) + (output × output_rate) + (cached × cached_rate) setiap juta token.",
    "pricingSettingsTitle": "Tetapan Harga",
    "totalModels": "Jumlah Model",
    "active": "Aktif",
    "costCalculation": "Pengiraan Kos",
    "costCalculationDesc": "Kos dikira berdasarkan penggunaan token dan kadar harga yang dikonfigurasikan untuk setiap model.",
    "pricingFormat": "Format Harga",
    "pricingFormatDesc": "Semua kadar adalah dalam token $/1J (dolar per juta token).",
    "tokenTypes": "Jenis Token",
    "inputTokenDesc": "Token gesaan standard",
    "outputTokenDesc": "Token penyiapan/tindak balas",
    "cachedTokenDesc": "Token input dicache (biasanya 50% daripada kadar input)",
    "reasoningTokenDesc": "Token penaakulan/pemikiran khas (sandaran kepada kadar keluaran)",
    "cacheCreationTokenDesc": "Token yang digunakan untuk mencipta entri cache (sandar kepada kadar input)",
    "customPricingNote": "Anda boleh mengatasi harga lalai untuk model tertentu. Penggantian tersuai diutamakan berbanding harga yang dikesan secara automatik.",
    "editPricing": "Edit Harga",
    "viewFullDetails": "Lihat Butiran Penuh"
  },
  "translator": {
    "title": "Penterjemah",
    "metaTitle": "Taman Permainan Penterjemah | OmniRoute",
    "metaDescription": "Nyahpepijat, menguji dan memvisualisasikan terjemahan format API antara pembekal",
    "playgroundTitle": "Taman Permainan Penterjemah",
    "playground": "Taman permainan",
    "realtime": "Aktiviti Terjemahan Masa Nyata",
    "chatTester": "Penguji Sembang",
    "testBench": "Bangku Ujian",
    "liveMonitor": "Monitor Langsung",
    "modeDescriptionPlayground": "Tampal sebarang badan permintaan API dan lihat cara OmniRoute menterjemahkannya antara format pembekal (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)",
    "modeDescriptionChatTester": "Hantar permintaan sembang sebenar melalui OmniRoute dan periksa perjalanan pergi balik penuh: input, permintaan terjemahan, respons pembekal dan output terjemahan.",
    "modeDescriptionTestBench": "Jalankan senario yang dipratentukan dan bandingkan keserasian merentas pembekal dan model.",
    "modeDescriptionLiveMonitor": "Tonton acara terjemahan dalam masa nyata apabila permintaan mengalir melalui OmniRoute.",
    "modeDescriptionFallback": "Nyahpepijat, uji dan gambarkan cara OmniRoute menterjemah permintaan API antara pembekal.",
    "recentTranslations": "Terjemahan Terkini",
    "noTranslations": "Tiada terjemahan lagi",
    "source": "Sumber",
    "target": "Sasaran",
    "time": "Masa",
    "model": "Model",
    "status": "Status",
    "latency": "Latensi",
    "totalTranslations": "Jumlah Terjemahan",
    "successful": "Berjaya",
    "errors": "Kesilapan",
    "avgLatency": "Purata Latensi",
    "millisecondsShort": "{value}ms",
    "notAvailableSymbol": "—",
    "liveAutoRefreshing": "Langsung — Auto muat semula",
    "paused": "Dijeda",
    "eventsAppearHint": "Peristiwa terjemahan muncul di sini apabila permintaan mengalir melalui OmniRoute. Gunakan mana-mana kaedah ini untuk menjana acara:",
    "chatTesterTab": "Tab Penguji Sembang",
    "testBenchTab": "Tab Ujian Bangku",
    "externalApiCalls": "Panggilan API luaran",
    "ideCliIntegrations": "Penyepaduan IDE/CLI",
    "inMemoryNote": "Nota: Peristiwa disimpan dalam memori dan ditetapkan semula apabila pelayan dimulakan semula.",
    "ok": "OK",
    "errorShort": "ERR",
    "formatConverter": "Penukar Format",
    "formatConverterDescription": "Tampal atau taip badan permintaan JSON. Penterjemah akan mengesan format sumber secara automatik dan menukarnya kepada format sasaran. Gunakan ini untuk nyahpepijat cara OmniRoute menterjemah permintaan antara format (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).",
    "input": "Input",
    "output": "Keluaran",
    "auto": "Auto",
    "swapFormats": "Tukar format",
    "translateAction": "Terjemah",
    "clear": "Jelas",
    "inputPlaceholder": "Tampalkan badan permintaan di sini atau pilih templat di bawah...",
    "exampleTemplates": "Contoh Templat",
    "exampleTemplatesHint": "— Klik untuk memuatkan",
    "templateLoadHint": "Templat memuatkan permintaan dalam format {format}. Tukar Format Sumber untuk memuatkan dalam format yang berbeza.",
    "compatibilityTester": "Penguji Keserasian",
    "compatibilityReport": "Laporan Keserasian",
    "testBenchDescription": "Jalankan senario yang dipratentukan (Sembang Mudah, Panggilan Alat, dll.) untuk mengesahkan keserasian terjemahan dan pembekal. Pilih format sumber dan pembekal sasaran, kemudian jalankan semua ujian untuk melihat peratusan keserasian. Gunakan ini untuk mencari ciri yang berfungsi merentas penyedia.",
    "targetProvider": "Pembekal Sasaran",
    "runAllTests": "Jalankan Semua Ujian",
    "runTest": "Jalankan Ujian",
    "reRun": "Jalankan semula",
    "running": "Berlari...",
    "passed": "lulus",
    "failed": "gagal",
    "passedIconLabel": "✅ Lulus",
    "chunks": "ketulan",
    "scenarioSimpleChat": "Sembang Mudah",
    "scenarioToolCalling": "Alat Panggilan",
    "scenarioMultiTurn": "Pelbagai pusingan",
    "scenarioThinking": "Berfikir",
    "scenarioSystemPrompt": "Gesaan Sistem",
    "scenarioStreaming": "Penstriman",
    "templateNames": {
      "simple-chat": "Sembang Mudah",
      "tool-calling": "Alat Panggilan",
      "multi-turn": "Pelbagai pusingan",
      "thinking": "Berfikir",
      "system-prompt": "Gesaan Sistem",
      "streaming": "Penstriman"
    },
    "templateDescriptions": {
      "simple-chat": "Mesej teks asas",
      "tool-calling": "Seruan fungsi/alat",
      "multi-turn": "Perbualan dengan sejarah",
      "thinking": "Memanjangkan pemikiran / penaakulan",
      "system-prompt": "Arahan sistem yang kompleks",
      "streaming": "Permintaan penstriman SSE"
    },
    "templatePayloads": {
      "simpleChat": {
        "system": "Anda seorang pembantu yang membantu.",
        "userGreeting": "hello! Apa khabar hari ini?"
      },
      "toolCalling": {
        "userWeather": "Bagaimanakah cuaca di São Paulo?",
        "toolDescription": "Dapatkan cuaca semasa untuk lokasi",
        "cityNameDescription": "nama bandar"
      },
      "multiTurn": {
        "system": "Anda seorang pembantu pengekodan.",
        "userInitial": "Tulis fungsi untuk mengisih tatasusunan dalam Python.",
        "assistantExample": "Berikut ialah fungsi isihan mudah:\n\n```python\ndef sort_array(arr):\n    pulangan disusun(arr)\n```",
        "userFollowUp": "Sekarang buat ia disusun mengikut tertib menurun."
      },
      "thinking": {
        "question": "Apakah hasil tambah bagi 100 nombor perdana pertama?"
      },
      "systemPrompt": {
        "systemInstruction": "Anda seorang jurutera perisian kanan yang pakar dalam sistem teragih. Jawab soalan dengan ringkas menggunakan amalan terbaik industri. Sentiasa berikan contoh kod apabila berkaitan. Formatkan jawapan anda menggunakan penurunan nilai.",
        "question": "Bagaimanakah saya melaksanakan corak pemutus litar?"
      },
      "streaming": {
        "prompt": "Beritahu saya cerita pendek tentang robot yang belajar melukis."
      }
    },
    "openaiCompatibleLabel": "Serasi OpenAI",
    "anthropicCompatibleLabel": "Serasi Anthropic",
    "noTemplateForFormat": "Tiada templat untuk format ini",
    "translationFailed": "Terjemahan gagal: {error}",
    "pipelineDebugger": "Penyahpepijat Saluran Paip",
    "translationPipeline": "Saluran Paip Terjemahan",
    "pipelineVisualization": "Visualisasi saluran paip",
    "pipelineVisualizationHint": "Hantar mesej untuk melihat bagaimana permintaan anda mengalir melalui pengesanan → terjemahan → panggilan pembekal.",
    "chatTesterDescription": "Hantar mesej sebagai format pelanggan tertentu dan periksa setiap langkah saluran paip terjemahan.",
    "chatTesterFlow": "Permintaan Pelanggan → Pengesanan Format → OpenAI Intermediate → Format Pembekal → Respons",
    "clickStepToInspect": "Klik mana-mana langkah untuk memeriksa data pada peringkat itu.",
    "clientFormat": "Format Pelanggan",
    "provider": "Pembekal",
    "modelPlaceholder": "Pilih atau taip nama model...",
    "sendMessageToSeePipeline": "Hantar mesej untuk melihat saluran terjemahan",
    "chatMessageHintPrefix": "Mesej anda akan diformatkan sebagai a",
    "chatMessageHintSuffix": "permintaan, diterjemahkan melalui saluran paip, dan dihantar kepada pembekal yang dipilih.",
    "youWithFormat": "Anda ({format})",
    "assistant": "Penolong",
    "typeMessage": "Taip mesej...",
    "send": "Hantar",
    "clientRequest": "Permintaan Pelanggan",
    "clientRequestDescription": "Badan permintaan sebagai pelanggan anda akan menghantarnya",
    "formatDetected": "Format Dikesan",
    "formatDetectedDescription": "OmniRoute mengesan secara automatik format API daripada struktur permintaan",
    "openaiIntermediate": "OpenAI Intermediate",
    "openaiIntermediateDescription": "Semua format mula-mula dinormalkan kepada format OpenAI (jambatan universal)",
    "providerFormat": "Format Pembekal",
    "providerFormatDescription": "Format OpenAI diterjemahkan kepada format asal pembekal",
    "providerResponse": "Respon Pembekal",
    "providerResponseRawDescription": "Sambutan mentah daripada API pembekal",
    "providerResponseSseDescription": "Strim SSE mentah daripada API pembekal",
    "unexpectedError": "Ralat yang tidak dijangka berlaku",
    "error": "ralat",
    "errorMessage": "Ralat: {message}",
    "requestFailed": "Permintaan gagal",
    "noTextExtracted": "(Tiada teks diekstrak)",
    "liveMonitorDescriptionPrefix": "Menunjukkan peristiwa terjemahan semasa panggilan API mengalir melalui OmniRoute. Peristiwa datang daripada penimbal dalam memori (ditetapkan semula semasa dimulakan semula). guna",
    "liveMonitorDescriptionSuffix": ", atau panggilan API luaran untuk menjana acara."
  },
  "usage": {
    "title": "Penggunaan",
    "loggerTab": "Pembalak",
    "proxyTab": "proksi",
    "budgetManagement": "Pengurusan Belanjawan",
    "budgetSaved": "Had belanjawan disimpan",
    "budgetSaveFailed": "Gagal menyimpan belanjawan",
    "loadingBudgetData": "Memuatkan data belanjawan...",
    "noApiKeysTitle": "Tiada Kunci API",
    "noApiKeysDescription": "Tambahkan kunci API terlebih dahulu untuk menyediakan had belanjawan.",
    "apiKey": "Kunci API",
    "todaysSpend": "Perbelanjaan Hari Ini",
    "thisMonth": "Bulan ini",
    "setLimits": "Tetapkan Had",
    "dailyLimitUsd": "Had Harian (USD)",
    "monthlyLimitUsd": "Had Bulanan (USD)",
    "warningThresholdPercent": "Ambang Amaran (%)",
    "dailyLimitPlaceholder": "cth. 5.00",
    "monthlyLimitPlaceholder": "cth. 50.00",
    "warningThresholdPlaceholder": "80",
    "saveLimits": "Simpan Had",
    "budgetOk": "Belanjawan OK — {remaining} tinggal",
    "budgetExceeded": "Belanjawan melebihi — permintaan mungkin disekat",
    "totalRequests": "Jumlah permintaan",
    "noDataYet": "Tiada data lagi",
    "latency": "Latensi",
    "latencyP50": "p50",
    "latencyP95": "p95",
    "latencyP99": "p99",
    "promptCache": "Cache Prompt",
    "systemHealth": "Kesihatan Sistem",
    "entries": "entri",
    "activeCount": "{count} aktif",
    "openCircuitBreakersDetected": "Pemutus litar terbuka dikesan",
    "hitRate": "Kadar Hit",
    "hitsMisses": "Hit / Rindu",
    "circuitBreakers": "Pemutus Litar",
    "lockedIPs": "IP berkunci",
    "lockoutsAutoRefreshHint": "Kunci had kadar setiap model • Muat semula automatik 10s",
    "lockedCount": "{count, plural, one {# locked} other {# locked}}",
    "timeLeft": "{time} tinggal",
    "howItWorks": "Bagaimana Ia Berfungsi",
    "howItWorksSubtitle": "Ketahui cara penilaian mengesahkan respons LLM anda",
    "define": "takrifkan",
    "defineStepDescription": "Buat kes ujian dengan gesaan input dan kriteria output yang dijangka menggunakan strategi seperti kandungan, regex atau padanan tepat.",
    "run": "Lari",
    "runStepDescription": "Laksanakan kes ujian terhadap titik akhir LLM anda melalui OmniRoute. Setiap kes dihantar sebagai permintaan API sebenar.",
    "evaluate": "nilaikan",
    "evaluateStepDescription": "Jawapan dibandingkan dengan kriteria yang dijangkakan. Lihat lulus/gagal untuk setiap kes dengan metrik kependaman dan maklum balas terperinci.",
    "evalSuites": "Suite Penilaian",
    "evalSuitesHint": "Klik suite untuk melihat kes ujian, kemudian jalankan untuk menilai titik akhir LLM anda",
    "evalsLoading": "Memuatkan suite eval...",
    "noEvalSuitesFound": "Tiada Suite Eval Ditemui",
    "noEvalSuitesDescription": "Suite Eval boleh ditakrifkan melalui API atau dalam kod. Mereka menguji output model terhadap hasil yang dijangka menggunakan strategi seperti kandungan, regex, padanan tepat dan fungsi tersuai.",
    "columnCase": "Kes",
    "columnStatus": "Status",
    "columnLatency": "Latensi",
    "columnDetails": "Butiran",
    "columnModel": "Model",
    "columnStrategy": "Strategi",
    "columnExpected": "Dijangka",
    "statsSuites": "Suite",
    "statsTestCases": "Kes Ujian",
    "statsModels": "model",
    "statsCoverage": "Liputan",
    "statsStrategiesCount": "{count} strategi",
    "evaluationStrategies": "Strategi Penilaian",
    "modelsUnderTest": "Model Dalam Ujian",
    "searchSuitesPlaceholder": "Cari suite...",
    "passSuffix": "lulus",
    "casesCount": "{count, plural, one {# case} other {# cases}}",
    "runEval": "Lari Eval",
    "runningProgress": "Menjalankan {current}/{total}...",
    "passRate": "kadar lulus",
    "summaryBreakdown": "{passed} lulus · {failed} gagal · {total} jumlah",
    "passedIconLabel": "✅ Lulus",
    "failedIconLabel": "❌ Gagal",
    "detailsContains": "Mengandungi: \"{term}\"",
    "detailsRegex": "Regex: {pattern}",
    "detailsExpected": "Dijangka: \"{expected}\"",
    "noResultsYet": "Tiada keputusan lagi",
    "testCasesCount": "Kes Ujian ({count})",
    "noTestCasesDefined": "Tiada kes ujian ditentukan",
    "runEvalHint": "Klik \"Jalankan Eval\" untuk melaksanakan semua kes terhadap titik akhir LLM anda. Setiap ujian menghantar permintaan sebenar melalui OmniRoute.",
    "notifyNoTestCases": "Tiada kes ujian ditentukan untuk suite ini",
    "notifyAllCasesPassed": "Semua kes {total} lulus ✅",
    "notifySomeCasesFailed": "{passed}/{total} lulus, {failed} gagal",
    "notifyEvalRunFailed": "Larian Eval gagal",
    "notifyEvalTitle": "Eval: {name}",
    "modelEvals": "Penilaian Model",
    "evalsHeroDescription": "Uji dan sahkan titik akhir LLM anda dengan menjalankan suite penilaian yang telah ditetapkan. Setiap suite mengandungi kes ujian yang menghantar gesaan sebenar melalui OmniRoute dan membandingkan respons dengan kriteria yang dijangkakan — membantu anda mengesan regresi, membandingkan model dan memastikan kualiti respons merentas penyedia.",
    "qualityValidation": "Pengesahan Kualiti",
    "modelComparison": "Perbandingan Model",
    "regressionDetection": "Pengesanan Regresi",
    "latencyBenchmarks": "Penanda Aras Latensi",
    "modelLockouts": "Model Lockout",
    "noLockouts": "Tiada model dikunci pada masa ini",
    "activeSessions": "Sesi Aktif",
    "noSessions": "Tiada sesi aktif",
    "sessionsHint": "Sesi muncul semasa permintaan mengalir melalui proksi",
    "sessionsTrackedHint": "Dijejaki melalui cap jari permintaan • Muat semula automatik 5s",
    "session": "Sesi",
    "age": "Umur",
    "requests": "Permintaan",
    "connection": "Sambungan",
    "durationMillisecondsShort": "{value}ms",
    "durationSecondsShort": "{value}s",
    "durationMinutesShort": "{value}m",
    "durationHoursShort": "{value}j",
    "reasonSeparator": " - ",
    "notAvailableSymbol": "-",
    "providerLimits": "Had Pembekal",
    "noProviders": "Tiada Pembekal Disambungkan",
    "connectProvidersForQuota": "Sambung kepada pembekal dengan OAuth untuk menjejak had kuota dan penggunaan API anda.",
    "accountsCount": "{count, plural, one {# account} other {# accounts}}",
    "filteredFromCount": "(ditapis daripada {count})",
    "autoRefresh": "Muat semula automatik",
    "refreshAll": "Muat semula Semua",
    "loadingQuotas": "Memuatkan...",
    "account": "Akaun",
    "modelQuotas": "Kuota Model",
    "lastUsed": "Terakhir Digunakan",
    "actions": "Tindakan",
    "refreshQuota": "Muat semula kuota",
    "today": "Hari ini",
    "tomorrow": "Esok",
    "dayTimeFormat": "{day}, {time}",
    "inDuration": "dalam {duration}",
    "notApplicable": "T/A",
    "rawPlanWithValue": "Pelan mentah: {plan}",
    "noPlanFromProvider": "Tiada pelan daripada pembekal",
    "noQuotaData": "Tiada data kuota",
    "noQuotaDataAvailable": "Tiada data kuota tersedia",
    "noAccountsForTierFilter": "Tiada akaun ditemui untuk penapis peringkat",
    "tierAll": "Semua",
    "tierEnterprise": "Perusahaan",
    "tierTeam": "Pasukan",
    "tierBusiness": "Perniagaan",
    "tierUltra": "Ultra",
    "tierPro": "Pro",
    "tierPlus": "Tambahan pula",
    "tierFree": "Percuma",
    "tierUnknown": "Tidak diketahui"
  },
  "modals": {
    "waitingAuth": "Menunggu Keizinan",
    "verificationUrl": "URL pengesahan",
    "yourCode": "Kod Anda",
    "remoteAccess": "Akses jauh:",
    "connectedSuccess": "Berjaya Bersambung!",
    "connectionFailed": "Sambungan Gagal",
    "chooseAuthMethod": "Pilih kaedah pengesahan anda:",
    "awsBuilderId": "ID Pembina AWS",
    "awsIamIdentity": "Pusat Identiti AWS IAM",
    "googleAccount": "Akaun Google",
    "githubAccount": "Akaun GitHub",
    "importToken": "Import Token",
    "pasteToken": "Tampalkan token muat semula daripada Kiro IDE.",
    "awsRegion": "Wilayah AWS",
    "autoDetecting": "Token pengesan automatik...",
    "readingFromCache": "Membaca daripada cache AWS SSO",
    "readingFromCursor": "Membaca daripada pangkalan data Cursor IDE",
    "initializing": "Memulakan...",
    "pricingConfig": "Konfigurasi Harga",
    "loadingPricing": "Memuatkan data harga...",
    "pricingRatesFormat": "Format Kadar Harga",
    "noPricingData": "Tiada data harga tersedia",
    "noModelsFound": "Tiada model ditemui"
  },
  "loggers": {
    "allProviders": "Semua Penyedia",
    "allModels": "Semua Model",
    "allAccounts": "Semua Akaun",
    "allApiKeys": "Semua Kunci API",
    "allTypes": "Semua Jenis",
    "allLevels": "Semua Peringkat",
    "modelAZ": "Model A-Z",
    "modelZA": "Model Z-A",
    "loadingLogs": "Memuatkan log...",
    "loadingProxyLogs": "Memuatkan log proksi...",
    "noLogEntries": "Tiada entri log ditemui",
    "noPayloadData": "Tiada data muatan tersedia untuk entri log ini.",
    "proxyEvent": "Acara Proksi",
    "proxy": "proksi",
    "level": "Tahap",
    "directNative": "Langsung (asli)",
    "combo": "Kombo",
    "inputTokens": "saya:",
    "outputTokens": "O:"
  },
  "stats": {
    "usageOverview": "Gambaran Keseluruhan Penggunaan",
    "outputTokens": "Token Keluaran",
    "totalCost": "Jumlah Kos",
    "usageByModel": "Penggunaan mengikut Model",
    "usageByAccount": "Penggunaan mengikut Akaun",
    "failedToLoad": "Gagal memuatkan statistik penggunaan.",
    "tokenHealth": "Kesihatan Token",
    "totalOAuth": "Jumlah OAuth",
    "healthy": "Sihat",
    "warning": "Amaran",
    "errored": "Ralat",
    "lastCheck": "Semakan terakhir",
    "noData": "Tiada data",
    "share": "Kongsi",
    "unableToLoad": "Tidak dapat memuatkan metrik sistem",
    "product": "produk",
    "resources": "Sumber",
    "company": "Syarikat"
  },
  "auth": {
    "welcome": "Selamat datang",
    "signIn": "Log masuk",
    "enterPassword": "Masukkan kata laluan anda untuk meneruskan",
    "password": "Kata laluan",
    "unifiedProxy": "Proksi API AI Bersatu",
    "unifiedAiApiProxy": "Proksi API AI Bersatu",
    "unifiedAiApiProxyDesc": "Halakan permintaan kepada berbilang pembekal AI melalui satu titik akhir. Pengimbangan beban, failover dan penjejakan penggunaan terbina dalam.",
    "passwordNotEnabled": "Perlindungan kata laluan tidak didayakan",
    "loading": "Memuatkan...",
    "invalidPassword": "Kata laluan tidak sah",
    "errorOccurredRetry": "Ralat berlaku. Sila cuba lagi.",
    "configureInstance": "Mari kita konfigurasikan tika OmniRoute anda",
    "runOnboardingWizard": "Jalankan wizard onboarding untuk menyediakan kata laluan anda dan sambungkan pembekal AI pertama anda.",
    "startOnboarding": "Mulakan Onboarding",
    "secureYourInstance": "Lindungi Instance Anda",
    "setPasswordDescription": "Tetapkan kata laluan untuk melindungi papan pemuka anda dan selamatkan titik akhir API anda daripada akses tanpa kebenaran.",
    "configurePassword": "Konfigurasi Kata Laluan",
    "continue": "teruskan",
    "windowWillClose": "Tetingkap ini akan ditutup secara automatik...",
    "closeTabNow": "Anda boleh menutup tab ini sekarang.",
    "copyUrlManual": "Sila salin URL dari bar alamat dan tampalkannya dalam aplikasi.",
    "accessDeniedDescription": "Anda tidak mempunyai kebenaran untuk mengakses sumber ini. Semak kunci API anda atau hubungi pentadbir.",
    "goToDashboard": "Pergi ke Papan Pemuka",
    "featureMultiProviderTitle": "Pelbagai Pembekal",
    "featureMultiProviderDesc": "OpenAI, Anthropic, Google dan banyak lagi",
    "featureLoadBalancingTitle": "Pengimbangan Beban",
    "featureLoadBalancingDesc": "Sebarkan permintaan secara bijak",
    "featureUsageTrackingTitle": "Penjejakan Penggunaan",
    "featureUsageTrackingDesc": "Pantau kos dan token",
    "resetPassword": "Tetapkan Semula Kata Laluan",
    "resetDescription": "Pilih kaedah untuk memulihkan akses kepada papan pemuka anda",
    "stopServer": "Hentikan pelayan OmniRoute",
    "processing": "Memproses...",
    "pleaseWait": "Sila tunggu sementara kami melengkapkan kebenaran.",
    "authSuccess": "Keizinan Berjaya!",
    "copyUrl": "Salin URL Ini",
    "accessDenied": "Akses Ditolak",
    "methodCliTitle": "Kaedah 1: Tetapkan Semula CLI",
    "methodCliDescription": "Jalankan arahan berikut pada pelayan tempat OmniRoute sedang berjalan:",
    "methodCliHint": "Ini akan menggesa anda untuk menetapkan kata laluan baharu. Pelayan mesti dihentikan dahulu.",
    "methodManualTitle": "Kaedah 2: Tetapan Semula Manual",
    "methodManualDescription": "Padamkan kata laluan daripada pangkalan data dan tetapkan yang baharu pada permulaan:",
    "setPasswordInYour": "Tetapkan kata laluan baharu dalam anda",
    "fileLabelSuffix": "fail:",
    "newPasswordPlaceholder": "kata laluan_baru_anda",
    "deleteSettingsFile": "Padam",
    "orRemovePasswordHashField": "atau alih keluar medan passwordHash",
    "restartServerWithNewPassword": "Mulakan semula pelayan - ia akan menggunakan kata laluan baharu",
    "backToLogin": "Kembali ke Log Masuk",
    "forgotPassword": "Lupa kata laluan?"
  },
  "landing": {
    "brandName": "OmniRoute",
    "navigateHome": "Navigasi ke rumah",
    "toggleMenu": "Togol menu",
    "featuresLink": "Ciri-ciri",
    "docsLink": "Dokumen",
    "github": "GitHub",
    "versionLive": "v1.0 kini disiarkan",
    "oneEndpoint": "Satu Titik Akhir untuk",
    "allProviders": "Semua Pembekal AI",
    "heroDescription": "Proksi titik akhir AI dengan papan pemuka web - Port JavaScript CLIProxyAPI. Berfungsi dengan lancar dengan Claude Code, OpenAI Codex, Cline, RooCode dan alatan CLI yang lain.",
    "getStarted": "Mulakan",
    "viewOnGithub": "Lihat di GitHub",
    "powerfulFeatures": "Ciri Berkuasa",
    "featuresSubtitle": "Semua yang anda perlukan untuk mengurus infrastruktur AI anda di satu tempat, dibina mengikut skala.",
    "featureUnifiedEndpointTitle": "Titik Akhir Bersatu",
    "featureUnifiedEndpointDesc": "Akses semua pembekal melalui URL API standard tunggal.",
    "featureEasySetupTitle": "Persediaan Mudah",
    "featureEasySetupDesc": "Bangun dan jalankan dalam beberapa minit dengan arahan npx.",
    "featureModelFallbackTitle": "Model Fallback",
    "featureModelFallbackDesc": "Tukar pembekal secara automatik pada kegagalan atau kependaman tinggi.",
    "featureUsageTrackingTitle": "Penjejakan Penggunaan",
    "featureUsageTrackingDesc": "Analisis terperinci dan pemantauan kos merentas semua model.",
    "featureOAuthApiKeysTitle": "OAuth & Kunci API",
    "featureOAuthApiKeysDesc": "Urus bukti kelayakan dengan selamat dalam satu peti besi.",
    "featureCloudSyncTitle": "Penyegerakan Awan",
    "featureCloudSyncDesc": "Segerakkan konfigurasi anda merentas peranti dengan serta-merta.",
    "featureCliSupportTitle": "Sokongan CLI",
    "featureCliSupportDesc": "Berfungsi dengan Claude Code, Codex, Cline, Cursor dan banyak lagi.",
    "featureDashboardTitle": "Papan pemuka",
    "featureDashboardDesc": "Papan pemuka visual untuk analisis trafik masa nyata.",
    "howItWorks": "Cara OmniRoute Berfungsi",
    "howItWorksDescription": "Data mengalir dengan lancar daripada aplikasi anda melalui lapisan penghalaan pintar kami kepada penyedia terbaik untuk tugas itu.",
    "howItWorksStep1Title": "1. CLI & SDK",
    "howItWorksStep1Description": "Permintaan anda bermula daripada alatan kegemaran anda atau SDK bersatu kami. Hanya tukar URL asas.",
    "howItWorksStep2Title": "2. Hab OmniRoute",
    "howItWorksStep2Description": "Enjin kami menganalisis gesaan, memeriksa kesihatan pembekal dan laluan untuk kependaman atau kos terendah.",
    "howItWorksStep3Title": "3. Pembekal AI",
    "howItWorksStep3Description": "Permintaan dipenuhi oleh OpenAI, Anthropic, Gemini atau yang lain serta-merta.",
    "getStartedIn30Seconds": "Bermula dalam 30 Saat",
    "getStartedDescription": "Pasang OmniRoute, konfigurasikan pembekal anda melalui papan pemuka web dan mulakan penghalaan permintaan AI.",
    "installOmniRoute": "Pasang OmniRoute",
    "installStepDescription": "Jalankan arahan npx untuk memulakan pelayan dengan serta-merta",
    "openDashboard": "Buka Papan Pemuka",
    "openDashboardStepDescription": "Konfigurasikan pembekal dan kunci API melalui antara muka web",
    "routeRequests": "Permintaan Laluan",
    "routeRequestsStepDescription": "Halakan alatan CLI anda ke {endpoint}",
    "terminal": "terminal",
    "copy": "salin",
    "copied": "✓ Disalin",
    "startingOmniRoute": "Memulakan OmniRoute...",
    "serverRunningOnLabel": "Pelayan berjalan",
    "dashboardLabel": "Papan pemuka",
    "readyToRoute": "Sedia untuk laluan! ✓",
    "configureProvidersNote": "📝 Konfigurasikan penyedia dalam papan pemuka atau gunakan pembolehubah persekitaran",
    "dataLocation": "Lokasi Data:",
    "dataLocationMacLinux": " macOS/Linux:",
    "dataLocationWindows": " Windows:",
    "product": "produk",
    "dashboardLink": "Papan pemuka",
    "changelog": "Changelog",
    "resources": "Sumber",
    "documentation": "Dokumentasi",
    "npm": "NPM",
    "legal": "sah",
    "mitLicense": "Lesen MIT",
    "footerTagline": "Titik akhir bersatu untuk penjanaan AI. Sambung, halakan dan urus pembekal AI anda dengan mudah.",
    "copyright": "© {year} OmniRoute. Semua hak terpelihara.",
    "flowToolClaudeCode": "Kod Claude",
    "flowToolOpenAICodex": "OpenAI Codex",
    "flowToolCline": "Cline",
    "flowToolCursor": "Kursor",
    "flowProviderOpenAI": "OpenAI",
    "flowProviderAnthropic": "Antropik",
    "flowProviderGemini": "Gemini",
    "flowProviderGithubCopilot": "GitHub Copilot",
    "interactiveDiagram": "Gambar rajah interaktif kelihatan pada desktop",
    "ctaTitle": "Bersedia untuk Memudahkan Infrastruktur AI Anda?",
    "ctaDescription": "Sertai pembangun yang memperkemas penyepaduan AI mereka dengan OmniRoute. Sumber terbuka dan percuma untuk bermula.",
    "startFree": "Mula Percuma",
    "readDocumentation": "Baca Dokumentasi"
  },
  "docs": {
    "title": "Dokumentasi",
    "quickStart": "Mula Pantas",
    "features": "Ciri-ciri",
    "supportedProviders": "Pembekal yang Disokong",
    "supportedProvidersToc": "Pembekal",
    "commonUseCases": "Kes Penggunaan Biasa",
    "clientCompatibility": "Keserasian Pelanggan",
    "apiReference": "Rujukan API",
    "method": "Kaedah",
    "path": "Laluan",
    "notes": "Nota",
    "modelPrefixes": "Awalan Model",
    "prefix": "Awalan",
    "troubleshooting": "Menyelesaikan masalah",
    "supportsChat": "Menyokong kedua-dua titik akhir sembang dan respons.",
    "oauthAutoRefresh": "Sambungan OAuth dengan muat semula token automatik.",
    "fullStreaming": "Sokongan penstriman penuh untuk semua model.",
    "docsLabel": "Dokumen",
    "docsHeroDescription": "Gerbang AI untuk LLM berbilang pembekal. Satu titik akhir untuk OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor dan 20+ lagi pembekal.",
    "openDashboard": "Buka Papan Pemuka",
    "endpointPage": "Halaman Akhir",
    "github": "GitHub",
    "reportIssue": "Laporan Isu",
    "onThisPage": "Pada halaman ini",
    "documentationVersion": "Dokumentasi - v{version}",
    "quickStartStep1Title": "1. Pasang dan jalankan",
    "quickStartStep1Prefix": "Lari",
    "quickStartStep1Middle": "atau klon daripada GitHub dan jalankan",
    "quickStartStep2Title": "2. Cipta kunci API",
    "quickStartStep2Text": "Pergi ke Titik Akhir -> Kunci Berdaftar. Hasilkan satu kunci bagi setiap persekitaran.",
    "quickStartStep3Title": "3. Sambungkan pembekal",
    "quickStartStep3Text": "Tambahkan akaun pembekal melalui log masuk OAuth, kunci API atau sambung automatik peringkat percuma.",
    "quickStartStep4Title": "4. Tetapkan URL asas pelanggan",
    "quickStartStep4Prefix": "Halakan klien IDE atau API anda",
    "quickStartStep4Suffix": "Gunakan awalan pembekal, sebagai contoh",
    "featureRoutingTitle": "Penghalaan Berbilang Penyedia",
    "featureRoutingText": "Halakan permintaan kepada 30+ pembekal AI melalui satu titik akhir serasi OpenAI. Menyokong sembang, respons, audio dan API imej.",
    "featureCombosTitle": "Kombo dan Pengimbangan",
    "featureCombosText": "Cipta gabungan model dengan rantaian mundur dan strategi pengimbangan: round-robin, keutamaan, rawak, paling kurang digunakan dan dioptimumkan kos.",
    "featureUsageTitle": "Penjejakan Penggunaan dan Kos",
    "featureUsageText": "Pengiraan token masa nyata, pengiraan kos setiap pembekal/model, dan pecahan penggunaan terperinci mengikut kunci dan akaun API.",
    "featureAnalyticsTitle": "Papan Pemuka Analitis",
    "featureAnalyticsText": "Analitis visual dengan carta untuk permintaan, token, ralat, kependaman, kos dan populariti model dari semasa ke semasa.",
    "featureHealthTitle": "Pemantauan Kesihatan",
    "featureHealthText": "Pemeriksaan kesihatan secara langsung, status pembekal, keadaan pemutus litar dan pengesanan had kadar automatik dengan pengunduran eksponen.",
    "featureCliTitle": "Alat CLI",
    "featureCliText": "Urus konfigurasi IDE, eksport/import sandaran, temui profil codex dan konfigurasikan tetapan daripada papan pemuka.",
    "featureSecurityTitle": "Keselamatan dan Dasar",
    "featureSecurityText": "Pengesahan kunci API, penapisan IP, pengawal suntikan segera, dasar domain, pengurusan sesi dan pengelogan audit.",
    "featureCloudSyncTitle": "Penyegerakan Awan",
    "featureCloudSyncText": "Segerakkan konfigurasi anda ke Cloudflare Workers untuk akses jauh dengan kelayakan yang disulitkan dan failover automatik.",
    "providersAcrossConnectionTypes": "{count} pembekal merentas tiga jenis sambungan.",
    "manageProviders": "Uruskan Pembekal",
    "providersCount": "{count} pembekal",
    "providerTypeFree": "Peringkat Percuma",
    "providerTypeOAuth": "OAuth",
    "providerTypeApiKey": "Kunci API",
    "useCaseSingleEndpointTitle": "Titik akhir tunggal untuk banyak pembekal",
    "useCaseSingleEndpointText": "Halakan pelanggan ke satu URL asas dan laluan mengikut awalan model (contohnya: gh/, cc/, kr/, openai/).",
    "useCaseFallbackTitle": "Fallback dan penukaran model dengan kombo",
    "useCaseFallbackText": "Cipta model kombo dalam Papan Pemuka dan pastikan konfigurasi pelanggan stabil sementara pembekal berputar secara dalaman.",
    "useCaseUsageVisibilityTitle": "Keterlihatan penggunaan, kos dan nyahpepijat",
    "useCaseUsageVisibilityText": "Jejaki token dan kos mengikut pembekal, akaun dan kunci API dalam tab Penggunaan dan Analitis.",
    "clientCherryStudioTitle": "Studio Ceri",
    "baseUrlLabel": "URL asas",
    "chatEndpointLabel": "Titik akhir sembang",
    "modelRecommendationLabel": "Cadangan model: awalan eksplisit",
    "clientCodexTitle": "Model Copilot Codex / GitHub",
    "clientCodexBullet1": "Gunakan ID model dengan",
    "clientCodexBullet2": "Laluan automatik model keluarga Codex ke",
    "clientCodexBullet3": "Model bukan Codex diteruskan",
    "clientCursorTitle": "IDE kursor",
    "clientCursorBullet1": "guna",
    "clientCursorBullet1Suffix": "awalan untuk model Kursor.",
    "clientCursorBullet2": "Sambungan OAuth - log masuk dari halaman Penyedia.",
    "clientClaudeTitle": "Kod Claude / Antigraviti",
    "clientClaudeBullet1Prefix": "guna",
    "clientClaudeBullet1Middle": "(Claude) atau",
    "clientClaudeBullet1Suffix": "(Antigraviti) awalan.",
    "endpointChatNote": "Titik akhir sembang serasi OpenAI (lalai).",
    "endpointResponsesNote": "Titik akhir API Respons (Codex, o-siri).",
    "endpointModelsNote": "Katalog model untuk semua pembekal yang disambungkan.",
    "endpointAudioNote": "Transkripsi audio (Deepgram, AssemblyAI).",
    "endpointImagesNote": "Penjanaan imej (NanoBanana).",
    "endpointRewriteChatNote": "Tulis semula pembantu untuk pelanggan tanpa /v1.",
    "endpointRewriteResponsesNote": "Tulis semula pembantu untuk Respons tanpa /v1.",
    "endpointRewriteModelsNote": "Tulis semula pembantu untuk penemuan model tanpa /v1.",
    "modelPrefixesDescriptionStart": "Gunakan awalan pembekal sebelum nama model untuk menghala ke pembekal tertentu. Contoh:",
    "modelPrefixesDescriptionEnd": "laluan ke GitHub Copilot.",
    "provider": "Pembekal",
    "type": "taip",
    "troubleshootingModelRouting": "Jika pelanggan gagal dengan penghalaan model, gunakan pembekal/model eksplisit (contohnya: gh/gpt-5.1-codex).",
    "troubleshootingAmbiguousModels": "Jika anda menerima ralat model yang tidak jelas, pilih awalan pembekal dan bukannya ID model kosong.",
    "troubleshootingCodexFamily": "Untuk model keluarga Codex GitHub, kekalkan model sebagai gh/<codex-model>; penghala memilih /membalas secara automatik.",
    "troubleshootingTestConnection": "Gunakan Papan Pemuka > Pembekal > Uji Sambungan sebelum menguji daripada IDE atau pelanggan luaran.",
    "troubleshootingCircuitBreaker": "Jika pembekal menunjukkan pemutus litar terbuka, tunggu masa bertenang atau semak halaman Kesihatan untuk mendapatkan butiran.",
    "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal."
  },
  "legal": {
    "privacyPolicy": "Dasar Privasi",
    "termsOfService": "Syarat Perkhidmatan",
    "providerConfigurations": "Konfigurasi pembekal",
    "apiKeys": "kunci API",
    "usageLogs": "Log penggunaan",
    "applicationSettings": "Tetapan aplikasi",
    "viewExportAnalytics": "Lihat dan eksport analitis penggunaan",
    "clearHistory": "Kosongkan sejarah penggunaan pada bila-bila masa",
    "configureRetention": "Konfigurasikan dasar pengekalan log",
    "backupRestore": "Sandarkan dan pulihkan pangkalan data anda",
    "privacyMetadataTitle": "Dasar Privasi | OmniRoute",
    "privacyMetadataDescription": "Dasar privasi untuk penghala proksi API OmniRoute AI.",
    "termsMetadataTitle": "Syarat Perkhidmatan | OmniRoute",
    "termsMetadataDescription": "Syarat perkhidmatan untuk penghala proksi API OmniRoute AI.",
    "backToHome": "Balik rumah",
    "lastUpdated": "Kemas kini terakhir: {date}",
    "policyLastUpdatedDate": "13 Februari 2026",
    "listSeparator": "-",
    "questionsVisit": "Soalan? Lawati kami",
    "githubRepository": "repositori GitHub",
    "privacySection1Title": "1. Seni Bina Tempatan-Pertama",
    "privacySection1Text": "OmniRoute direka sebagai aplikasi tempatan pertama. Semua pemprosesan dan penyimpanan data berlaku sepenuhnya pada mesin anda. Tiada pelayan berpusat yang mengumpul maklumat anda.",
    "privacySection2Title": "2. Data Kami Simpan",
    "privacyDataStoredIn": "Data berikut disimpan secara setempat dalam",
    "privacyDataProviderConfigurationsDesc": "URL sambungan, jenis pembekal dan tetapan keutamaan",
    "privacyDataApiKeysDesc": "disulitkan dan disimpan secara tempatan untuk pengesahan dengan pembekal AI",
    "privacyDataUsageLogsDesc": "kiraan permintaan, penggunaan token, nama model, cap masa dan masa tindak balas",
    "privacyDataApplicationSettingsDesc": "keutamaan tema, strategi penghalaan dan konfigurasi kombo",
    "privacySection3Title": "3. Tiada Telemetri",
    "privacySection3Text": "OmniRoute tidak mengumpul laporan telemetri, analitik atau ranap sistem. Tiada data dihantar kepada kami atau mana-mana pihak ketiga. Corak penggunaan, panggilan API dan konfigurasi anda kekal peribadi sepenuhnya.",
    "privacySection4Title": "4. Pembekal AI Pihak Ketiga",
    "privacySection4Text": "Apabila anda membuat panggilan API melalui OmniRoute, permintaan anda dimajukan kepada penyedia AI yang telah anda konfigurasikan (contohnya: OpenAI, Anthropic, Google). Pembekal ini mempunyai dasar privasi mereka sendiri yang mengawal cara mereka mengendalikan data anda. Sila semak semula:",
    "privacyOpenAiPolicy": "Dasar Privasi OpenAI",
    "privacyAnthropicPolicy": "Dasar Privasi Anthropic",
    "privacyGooglePolicy": "Dasar Privasi Google",
    "privacySection5Title": "5. Penyegerakan Awan (Pilihan)",
    "privacySection5Text": "Jika anda mendayakan ciri penyegerakan awan pilihan, konfigurasi pembekal dan kunci API mungkin dihantar ke titik akhir awan yang dikonfigurasikan. Ciri ini dilumpuhkan secara lalai dan memerlukan ikut serta secara eksplisit.",
    "privacySection6Title": "6. Pembalakan",
    "privacyLoggingIntro": "Log permintaan boleh dikonfigurasikan melalui tetapan papan pemuka. Anda boleh:",
    "privacySection7Title": "7. Hak Anda",
    "privacySection7TextStart": "Memandangkan semua data disimpan secara setempat, anda mempunyai kawalan penuh. Anda boleh memadam data anda pada bila-bila masa dengan mengalih keluar",
    "privacySection7TextEnd": "direktori atau menggunakan ciri sandaran pangkalan data dan memulihkan dalam papan pemuka.",
    "termsSection1Title": "1. Gambaran keseluruhan",
    "termsSection1Text": "OmniRoute ialah penghala proksi API AI tempatan pertama yang beroperasi sepenuhnya pada mesin anda. Ia mengarahkan permintaan kepada berbilang penyedia AI dengan pengimbangan beban, failover dan penjejakan penggunaan.",
    "termsSection2Title": "2. Tanggungjawab Pengguna",
    "termsResponsibilityApiKeys": "Anda bertanggungjawab sepenuhnya untuk mengurus kunci API dan bukti kelayakan anda sendiri untuk pembekal AI pihak ketiga (OpenAI, Anthropic, Google, dll.).",
    "termsResponsibilityCompliance": "Anda mesti mematuhi syarat perkhidmatan setiap pembekal AI yang APInya anda akses melalui OmniRoute.",
    "termsResponsibilitySecurity": "Anda bertanggungjawab untuk keselamatan pemasangan OmniRoute setempat anda, termasuk menetapkan kata laluan dan menyekat akses rangkaian.",
    "termsSection3Title": "3. Bagaimana Ia Berfungsi",
    "termsSection3Text": "OmniRoute bertindak sebagai proksi perantara. Panggilan API yang dihantar ke OmniRoute diterjemahkan dan dimajukan kepada pembekal AI yang dikonfigurasikan anda. OmniRoute tidak mengubah suai kandungan permintaan atau respons anda melebihi terjemahan protokol yang diperlukan.",
    "termsSection4Title": "4. Pengendalian Data",
    "termsDataStoredLocally": "Semua data disimpan secara setempat pada mesin anda dalam pangkalan data SQLite.",
    "termsNoTransmission": "OmniRoute tidak menghantar sebarang data ke pelayan luaran melainkan anda mendayakan ciri penyegerakan awan secara eksplisit.",
    "termsDataLocationText": "Log penggunaan, kunci API dan konfigurasi disimpan dalam",
    "termsSection5Title": "5. Penafian",
    "termsSection5Text": "OmniRoute disediakan \"seadanya\" tanpa sebarang jenis waranti. Kami tidak bertanggungjawab untuk sebarang kos yang ditanggung melalui penggunaan API, gangguan perkhidmatan atau kehilangan data. Sentiasa kekalkan sandaran konfigurasi anda.",
    "termsSection6Title": "6. Sumber Terbuka",
    "termsSection6Text": "OmniRoute ialah perisian sumber terbuka. Anda bebas untuk memeriksa, mengubah suai dan mengedarkannya di bawah syarat lesennya."
  }
}
