omniroute 3.3.6 → 3.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +2 -2
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/_global-error.html +2 -2
  42. package/app/.next/server/app/_global-error.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  47. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  48. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  50. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  62. package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
  63. package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__950558b8._.js +1 -1
  66. package/app/.next/server/chunks/[root-of-the-server]__9698d25e._.js +1 -1
  67. package/app/.next/server/chunks/[root-of-the-server]__a32d3818._.js +1 -1
  68. package/app/.next/server/chunks/[root-of-the-server]__bc251fbe._.js +1 -1
  69. package/app/.next/server/chunks/[root-of-the-server]__d5a064d5._.js +1 -1
  70. package/app/.next/server/chunks/_05c48915._.js +1 -1
  71. package/app/.next/server/chunks/_06515a8a._.js +1 -1
  72. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  73. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  74. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  75. package/app/.next/server/chunks/_68683848._.js +1 -1
  76. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  77. package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
  78. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  79. package/app/.next/server/chunks/ssr/src_i18n_messages_ar_json_e1d5145b._.js +1 -1
  80. package/app/.next/server/chunks/ssr/src_i18n_messages_bg_json_34495a0f._.js +1 -1
  81. package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
  82. package/app/.next/server/chunks/ssr/src_i18n_messages_da_json_7500ed02._.js +1 -1
  83. package/app/.next/server/chunks/ssr/src_i18n_messages_de_json_b2a40318._.js +1 -1
  84. package/app/.next/server/chunks/ssr/src_i18n_messages_es_json_82775c4a._.js +1 -1
  85. package/app/.next/server/chunks/ssr/src_i18n_messages_fi_json_dcc6745e._.js +1 -1
  86. package/app/.next/server/chunks/ssr/src_i18n_messages_fr_json_fe904570._.js +1 -1
  87. package/app/.next/server/chunks/ssr/src_i18n_messages_he_json_3e3c1e1b._.js +1 -1
  88. package/app/.next/server/chunks/ssr/src_i18n_messages_hi_json_83a0b9e5._.js +1 -1
  89. package/app/.next/server/chunks/ssr/src_i18n_messages_hu_json_651e00d3._.js +1 -1
  90. package/app/.next/server/chunks/ssr/src_i18n_messages_id_json_725d4a34._.js +1 -1
  91. package/app/.next/server/chunks/ssr/src_i18n_messages_in_json_2d7cd177._.js +1 -1
  92. package/app/.next/server/chunks/ssr/src_i18n_messages_it_json_e23882ae._.js +1 -1
  93. package/app/.next/server/chunks/ssr/src_i18n_messages_ja_json_fc6af4d8._.js +1 -1
  94. package/app/.next/server/chunks/ssr/src_i18n_messages_ko_json_0ffdbdc6._.js +1 -1
  95. package/app/.next/server/chunks/ssr/src_i18n_messages_ms_json_610df819._.js +1 -1
  96. package/app/.next/server/chunks/ssr/src_i18n_messages_nl_json_55ad1507._.js +1 -1
  97. package/app/.next/server/chunks/ssr/src_i18n_messages_no_json_9f484a8c._.js +1 -1
  98. package/app/.next/server/chunks/ssr/src_i18n_messages_phi_json_871ece45._.js +1 -1
  99. package/app/.next/server/chunks/ssr/src_i18n_messages_pl_json_79d0be4b._.js +1 -1
  100. package/app/.next/server/chunks/ssr/src_i18n_messages_pt-BR_json_e7b9e8db._.js +1 -1
  101. package/app/.next/server/chunks/ssr/src_i18n_messages_pt_json_2fc13a82._.js +1 -1
  102. package/app/.next/server/chunks/ssr/src_i18n_messages_ro_json_d1a5f5ee._.js +1 -1
  103. package/app/.next/server/chunks/ssr/src_i18n_messages_ru_json_9d7a9dfe._.js +1 -1
  104. package/app/.next/server/chunks/ssr/src_i18n_messages_sk_json_1c5bff4a._.js +1 -1
  105. package/app/.next/server/chunks/ssr/src_i18n_messages_sv_json_e8ae9f28._.js +1 -1
  106. package/app/.next/server/chunks/ssr/src_i18n_messages_th_json_6ed546bd._.js +1 -1
  107. package/app/.next/server/chunks/ssr/src_i18n_messages_tr_json_c8d78b01._.js +1 -1
  108. package/app/.next/server/chunks/ssr/src_i18n_messages_uk-UA_json_c72cdf08._.js +1 -1
  109. package/app/.next/server/chunks/ssr/src_i18n_messages_vi_json_03ec9dfd._.js +1 -1
  110. package/app/.next/server/pages/500.html +2 -2
  111. package/app/.next/server/server-reference-manifest.js +1 -1
  112. package/app/.next/server/server-reference-manifest.json +1 -1
  113. package/app/.next/static/chunks/{b9999bd9d2b99bf6.js → d3c3a9266158d9b0.js} +1 -1
  114. package/app/CHANGELOG.md +19 -1
  115. package/app/docs/openapi.yaml +1 -1
  116. package/app/open-sse/handlers/responseTranslator.ts +1 -1
  117. package/app/open-sse/package.json +1 -1
  118. package/app/package-lock.json +3 -3
  119. package/app/package.json +1 -1
  120. package/app/src/i18n/messages/ar.json +2 -1
  121. package/app/src/i18n/messages/bg.json +2 -1
  122. package/app/src/i18n/messages/cs.json +2 -1
  123. package/app/src/i18n/messages/da.json +2 -1
  124. package/app/src/i18n/messages/de.json +2 -1
  125. package/app/src/i18n/messages/es.json +2 -1
  126. package/app/src/i18n/messages/fi.json +2 -1
  127. package/app/src/i18n/messages/fr.json +2 -1
  128. package/app/src/i18n/messages/he.json +2 -1
  129. package/app/src/i18n/messages/hi.json +2 -1
  130. package/app/src/i18n/messages/hu.json +2 -1
  131. package/app/src/i18n/messages/id.json +2 -1
  132. package/app/src/i18n/messages/in.json +2 -1
  133. package/app/src/i18n/messages/it.json +2 -1
  134. package/app/src/i18n/messages/ja.json +2 -1
  135. package/app/src/i18n/messages/ko.json +2 -1
  136. package/app/src/i18n/messages/ms.json +2 -1
  137. package/app/src/i18n/messages/nl.json +2 -1
  138. package/app/src/i18n/messages/no.json +2 -1
  139. package/app/src/i18n/messages/phi.json +2 -1
  140. package/app/src/i18n/messages/pl.json +2 -1
  141. package/app/src/i18n/messages/pt-BR.json +2 -1
  142. package/app/src/i18n/messages/pt.json +2 -1
  143. package/app/src/i18n/messages/ro.json +2 -1
  144. package/app/src/i18n/messages/ru.json +2 -1
  145. package/app/src/i18n/messages/sk.json +2 -1
  146. package/app/src/i18n/messages/sv.json +2 -1
  147. package/app/src/i18n/messages/th.json +2 -1
  148. package/app/src/i18n/messages/tr.json +2 -1
  149. package/app/src/i18n/messages/uk-UA.json +2 -1
  150. package/app/src/i18n/messages/vi.json +2 -1
  151. package/app/src/shared/services/opencodeConfig.ts +14 -13
  152. package/app/tests/unit/t40-opencode-cli-tools-integration.test.mjs +5 -5
  153. package/package.json +1 -1
  154. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_buildManifest.js +0 -0
  155. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_clientMiddlewareManifest.json +0 -0
  156. /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[82800,a=>{a.v(JSON.parse('{"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","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Terima","accountId":"ID Akaun","alias":"Alias","apiKeyId":"ID Kunci API","apiKeyName":"Nama Kunci API","apiKeySecret":"Rahsia Kunci API","authorization":"Keizinan","content-type":"Jenis Kandungan","content-length":"Panjang Kandungan","cookie":"Kuki","file":"Fail","host":"hos","id":"ID","import":"Import","limit":"had","offset":"Offset","open":"Buka","origin":"asal usul","promptTokens":"Token Gesaan","completionTokens":"Token Penyiapan","totalTokens":"Jumlah Token","rawModel":"Model Mentah","scope":"Skop","skill":"Kemahiran","sortBy":"Isih Mengikut","sortOrder":"Susun Susunan","tab":"Tab","text":"Teks","textarea":"Textarea","tool":"alat","toolId":"ID alat","web":"Web","whereUsed":"Di mana Digunakan","whitelist":"Senarai putih","blacklist":"Senarai hitam","resolve":"Selesaikan","force":"Paksa","base64url":"URL Base64","hex":"Hex","range":"Julat","component":"Komponen","redirect_uri":"Ubah hala URI","idempotency-key":"Kunci Idepotency","error_description":"Penerangan Ralat","code":"Kod","compatible":"serasi","chat-completions":"Selesai Sembang","oauth":"OAuth","auth_token":"Token Pengesahan","crypto":"Kripto","hours":"jam","selfsigned":"Ditandatangani sendiri","proxy_id":"ID proksi","proxyId":"ID proksi","connectionId":"ID Sambungan","resolveConnectionId":"Selesaikan ID Sambungan","resolve_connection_id":"Selesaikan ID Sambungan","scope_id":"ID Skop","scopeId":"ID Skop","jwtSecret":"Rahsia JWT","keytar":"Keytar","better-sqlite3":"lebih baik-sqlite3","undici":"undici","builder-id":"ID Pembina","musicDesc":"Penerangan Muzik","musicGeneration":"Penjanaan Muzik","idc":"IDC","cloud-status-changed":"Status awan berubah","where_used":"Di mana Digunakan","windowMs":"Tetingkap (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Senarai Benarkan Alat","TOOL_DENYLIST":"Senarai Penafian Alat","Failed to save pricing":"Gagal menyimpan harga","Failed to reset pricing":"Gagal menetapkan semula harga","apikey":"Kunci API","http":"HTTP"},"sidebar":{"home":"Rumah","dashboard":"Papan pemuka","providers":"Pembekal","combos":"Kombo","usage":"Penggunaan","analytics":"Analitis","costs":"Kos","health":"Kesihatan","limits":"Had & Kuota","cliTools":"Alat CLI","media":"Media","settings":"tetapan","translator":"Penterjemah","docs":"Dokumen","issues":"Isu","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","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Red","themeGreen":"Green","themeViolet":"Violet","themeOrange":"Orange","themeCyan":"Cyan","endpoints":"Titik Akhir","playground":"Playground","agents":"Ejen","cliToolsShort":"Alat","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Choose a preset theme or create your own with a single color","presetColors":"Popular colors","customTheme":"Custom theme","customThemeDesc":"Click create theme and pick one color","createTheme":"Create theme","activePreset":"Active theme"},"header":{"logout":"Log keluar","language":"Bahasa","providers":"Pembekal","providerDescription":"Urus sambungan pembekal AI anda","combos":"Kombo","comboDescription":"Gabungan model dengan sandaran","usage":"Penggunaan & Analitis","usageDescription":"Pantau penggunaan API anda, penggunaan token dan log permintaan","analytics":"Analitis","analyticsDescription":"Carta, arah aliran dan cerapan penilaian","cliTools":"Alat CLI","cliToolsDescription":"Konfigurasikan alatan CLI","home":"Rumah","homeDescription":"Selamat datang ke OmniRoute","endpoint":"Endpoints","endpointDescription":"Manage proxy endpoints, MCP, A2A, and API endpoints","settings":"tetapan","settingsDescription":"Urus pilihan anda","openaiCompatible":"Serasi OpenAI","anthropicCompatible":"Serasi Anthropic","media":"Media","mediaDescription":"Generate images, videos, and music","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"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","updateNow":"Kemas kini Sekarang","updating":"Mengemas kini...","updateAvailableDesc":"Versi baharu tersedia. Klik untuk mengemas kini.","updateStarted":"Kemas kini bermula..."},"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","autoResolve":"Auto-Resolve","autoResolveDesc":"Auto-resolve ambiguous model names to native provider for this API key.","keyActive":"Key Active","keyActiveDesc":"Enable or disable this API key. Disabled keys are immediately rejected with 403.","accessSchedule":"Access Schedule","accessScheduleDesc":"Restrict access to specific hours and days of the week.","scheduleFrom":"From","scheduleUntil":"Until","scheduleDays":"Days","scheduleTimezone":"Timezone","scheduleTimezoneHint":"Use IANA timezone names, e.g. America/New_York, Europe/Berlin","scheduleActive":"Schedule","disabled":"Disabled","daySun":"Sun","dayMon":"Mon","dayTue":"Tue","dayWed":"Wed","dayThu":"Thu","dayFri":"Fri","daySat":"Sat","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"auditLog":{"title":"Log Audit","searchPlaceholder":"Tindakan carian...","action":"Tindakan","actor":"pelakon","target":"Sasaran","ipAddress":"Alamat IP","timestamp":"Cap masa","noEntries":"Tiada entri audit ditemui","filterByAction":"Tapis mengikut tindakan...","filterByActor":"Tapis mengikut pelakon...","filterEntriesAria":"Tapis entri log audit","filterByActionTypeAria":"Tapis mengikut jenis tindakan","filterByActorAria":"Tapis mengikut pelakon","refreshAuditLogAria":"Muat semula log audit","tableAria":"Entri log audit","failedFetchAuditLog":"Gagal mengambil log audit","notAvailable":"—","description":"Tindakan pentadbiran dan acara keselamatan","showing":"Menunjukkan entri {count} (mengimbangi {offset})","previous":"Sebelumnya"},"media":{"title":"Ruang Media","subtitle":"Jana imej, video dan muzik","model":"Model","prompt":"Prompt","generate":"Jana","generating":"Generating...","loadingModels":"Loading available models...","noModels":"No models available. Configure providers with media capabilities first.","error":"Generation Failed","result":"Result","imageDescription":"Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.","videoDescription":"Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.","musicDescription":"Compose music using Stable Audio Open or MusicGen via ComfyUI."},"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","opencode":"OpenCode AI coding agent (Terminal)","kiro":"Amazon Kiro — AI-powered IDE","windsurf":"Windsurf AI Code Editor","copilot":"GitHub Copilot 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:"}},"notes":{"0":"Teruskan menggunakan fail konfigurasi JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"}},"notes":{"0":"OpenCode memerlukan konfigurasi kunci API.","1":"Tetapkan URL asas kepada titik akhir OmniRoute anda."}},"kiro":{"steps":{"1":{"title":"Open Kiro Settings","desc":"Go to Settings → AI Provider"},"2":{"title":"Base URL","desc":"Paste your OmniRoute endpoint URL"},"3":{"title":"API Key"},"4":{"title":"Select Model"}},"notes":{"0":"Kiro memerlukan akaun Amazon."}}},"mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","whenToUseLabel":"Bila nak guna","openToolDocs":"Buka dokumen alat","toolUseCases":{"claude":"Gunakan apabila anda mahukan aliran kerja perancangan yang kukuh dan refactor berbilang fail panjang dengan Kod Claude.","codex":"Gunakan apabila pasukan anda diseragamkan pada aliran OpenAI Codex CLI dan pengesahan berasaskan profil.","droid":"Gunakan apabila anda memerlukan ejen terminal ringan yang menumpukan pada pengekodan pantas dan gelung pelaksanaan perintah.","openclaw":"Gunakan apabila anda mahukan ejen pengekodan gaya Open Claw tetapi dihalakan melalui dasar OmniRoute.","cline":"Gunakan apabila anda mengkonfigurasi ejen pengekodan dalam editor dan mahukan persediaan berpandu dengan model OmniRoute.","kilo":"Gunakan apabila aliran kerja anda bergantung pada arahan Kilo Code dan pengeditan berulang yang pantas.","cursor":"Gunakan semasa pengekodan dalam Kursor dan anda memerlukan model serasi OpenAI tersuai melalui OmniRoute.","continue":"Gunakan semasa menjalankan Teruskan dalam IDE dan anda memerlukan konfigurasi pembekal berasaskan JSON mudah alih.","opencode":"Gunakan apabila anda lebih suka ejen terminal-native run dan automasi skrip melalui OpenCode.","kiro":"Gunakan apabila menyepadukan Kiro dan mengawal penghalaan model secara berpusat daripada OmniRoute.","antigravity":"Gunakan apabila trafik Antigraviti/Kiro mesti dipintas melalui MITM dan dihalakan ke OmniRoute.","copilot":"Gunakan apabila anda mahu Copilot gaya sembang UX sambil menguatkuasakan kekunci OmniRoute dan peraturan penghalaan."}},"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","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each model once before reshuffling","models":"model","autoBalance":"Imbangan automatik","advancedSettings":"Tetapan Lanjutan","retryDelay":"Cuba Semula Kelewatan (ms)","concurrencyPerModel":"Concurrency / Model","queueTimeout":"Waktu Beratur (ms)","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","strategyGuideTitle":"How to use this strategy","strategyGuideWhen":"When to use","strategyGuideAvoid":"Avoid when","strategyGuideExample":"Example","strategyGuide":{"priority":{"when":"You have one preferred model and only want fallback on failure.","avoid":"You need request distribution across models.","example":"Primary coding model with cheaper backup for outages."},"weighted":{"when":"You need controlled traffic split across models.","avoid":"You cannot maintain accurate weights over time.","example":"80% stable model + 20% canary model rollout."},"round-robin":{"when":"You want predictable and even distribution.","avoid":"Models differ too much in latency or cost.","example":"Same model on multiple accounts to spread throughput."},"random":{"when":"You want simple distribution with minimal setup.","avoid":"You need strict traffic guarantees.","example":"Quick prototyping with equivalent models."},"least-used":{"when":"You want adaptive balancing based on live demand.","avoid":"Traffic is too low to benefit from usage balancing.","example":"Mixed workloads where one model often gets overloaded."},"cost-optimized":{"when":"Cost reduction is your top priority.","avoid":"Pricing data is missing or outdated.","example":"Background or batch jobs where lower cost is preferred."}},"advancedHelp":{"maxRetries":"How many retries are attempted before failing a request.","retryDelay":"Initial wait between retries. Higher values reduce burst pressure.","timeout":"Maximum request duration before aborting.","healthcheck":"Skips unhealthy models/providers from routing decisions.","concurrencyPerModel":"Max simultaneous requests allowed per model in round-robin.","queueTimeout":"How long a request can wait in queue before timing out."},"templatesTitle":"Quick templates","templatesDescription":"Apply a starting profile, then adjust models and config.","templateApply":"Apply template","templateHighAvailability":"High availability","templateHighAvailabilityDesc":"Priority routing with health checks and safe retries.","templateCostSaver":"Cost saver","templateCostSaverDesc":"Cost-optimized routing for budget-first workloads.","templateBalanced":"Balanced load","templateBalancedDesc":"Least-used routing to spread demand over time.","usageGuideHide":"Hide","usageGuideDontShowAgain":"Don\'t show again","usageGuideShow":"Show guide","quickTestTitle":"Combo ready to validate","quickTestDescription":"Run a test now to confirm fallback and latency behavior.","testNow":"Test now","pricingCoverage":"Pricing coverage","pricingCoverageHint":"Cost-optimized works best when all combo models have pricing.","pricingAvailable":"Pricing available","pricingMissing":"No pricing","pricingAvailableShort":"priced","pricingMissingShort":"no-price","warningRoundRobinSingleModel":"Round-robin is most useful with at least 2 models.","warningCostOptimizedPartialPricing":"Only {priced} of {total} models have pricing. Routing may be partially cost-aware.","warningCostOptimizedNoPricing":"No pricing data found for this combo. Cost-optimized may route unexpectedly.","readinessTitle":"Bersedia untuk menyimpan?","readinessDescription":"Semak senarai semak sebelum membuat atau mengemas kini kombo ini.","readinessCheckName":"Nama kombo adalah sah","readinessCheckModels":"Sekurang-kurangnya satu model dipilih","readinessCheckWeights":"Jumlah wajaran ialah 100%","readinessCheckWeightsOptional":"Peraturan berat tidak diperlukan","readinessCheckPricing":"Data harga tersedia","readinessCheckPricingOptional":"Peraturan harga tidak diperlukan","saveBlockedTitle":"Simpan disekat sehingga item berikut diperbaiki:","saveBlockName":"Tentukan nama kombo.","saveBlockModels":"Tambah sekurang-kurangnya satu model.","saveBlockWeighted":"Tetapkan berat kepada 100% (semasa: {total}%).","saveBlockPricing":"Tambahkan harga untuk sekurang-kurangnya satu model atau pilih strategi lain.","recommendationsLabel":"Recommended setup","applyRecommendations":"Apply recommendations","recommendationsUpdated":"Recommendations updated for {strategy}.","recommendationsApplied":"Recommendations applied to this combo.","strategyRecommendations":{"priority":{"title":"Fail-safe baseline","description":"Use one primary model and keep fallback chain short and reliable.","tip1":"Put your most reliable model first.","tip2":"Keep 1-2 backup models with similar quality.","tip3":"Use safe retries to absorb transient provider failures."},"weighted":{"title":"Controlled traffic split","description":"Great for canary rollouts and gradual migration between models.","tip1":"Start with conservative split like 90/10.","tip2":"Keep the total at 100% and auto-balance after changes.","tip3":"Monitor success and latency before increasing canary weight."},"round-robin":{"title":"Predictable load sharing","description":"Best when models are equivalent and you need smooth distribution.","tip1":"Use at least 2 models.","tip2":"Set concurrency limits to avoid burst overload.","tip3":"Use queue timeout to fail fast under saturation."},"random":{"title":"Quick spread with low setup","description":"Use when you need simple distribution without strict guarantees.","tip1":"Use models with similar latency profiles.","tip2":"Keep retries enabled to absorb random misses.","tip3":"Prefer this for experimentation, not strict SLAs."},"least-used":{"title":"Adaptive balancing","description":"Routes to less-used models to reduce hotspots over time.","tip1":"Works better under continuous traffic.","tip2":"Combine with health checks for safer balancing.","tip3":"Track per-model usage to validate distribution gains."},"cost-optimized":{"title":"Budget-first routing","description":"Routes to lower-cost models when pricing metadata is available.","tip1":"Ensure pricing coverage for all selected models.","tip2":"Keep a quality fallback for hard prompts.","tip3":"Use for batch/background jobs where cost is the main KPI."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"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","responsesDesc":"OpenAI Responses API for Codex and advanced agentic workflows","listModelsDesc":"List all available models across all connected providers","settingsApiDesc":"Read and modify OmniRoute configuration via API","settingsApi":"Settings API","categoryCore":"API Teras","categoryMedia":"Media & Multi-Modal","categoryUtility":"Utiliti & Pengurusan","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}}","sectionTitle":"Integration Surface","sectionDescription":"OpenAI-compatible APIs and operational protocol endpoints","tabApis":"OpenAI-compatible APIs","tabProtocols":"Protocols","tabsAria":"Endpoint sections","protocolsTitle":"Protocols","protocolsDescription":"MCP and A2A are first-class endpoints with dedicated observability and controls.","mcpCardTitle":"MCP Server","mcpCardDescription":"Model Context Protocol over stdio","a2aCardTitle":"A2A Server","a2aCardDescription":"Agent2Agent JSON-RPC endpoint","protocolToolsLabel":"Tools","protocolTasksLabel":"Tasks","protocolActiveStreamsLabel":"Aliran aktif","protocolLastActivity":"Aktiviti terakhir","quickStart":"Mula Pantas","openMcpDashboard":"Buka pengurusan MCP","openA2aDashboard":"Buka pengurusan A2A","mcpQuickStartTitle":"MCP Quick Start","mcpQuickStartStep1":"Jalankan pelayan MCP melalui `omniroute --mcp`.","mcpQuickStartStep2":"Konfigurasikan klien MCP anda untuk menyambung melalui pengangkutan stdio.","mcpQuickStartStep3":"Panggil alatan seperti `omniroute_get_health` dan `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Mula Pantas","a2aQuickStartStep1":"Temui kad ejen di `/.well-known/agent.json`.","a2aQuickStartStep2":"Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.","a2aQuickStartStep3":"Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`.","completionsLegacy":"Completions (Legacy)","completionsLegacyDesc":"Legacy OpenAI text completions — accepts both prompt string and messages array format","categorySearch":"Search & Discovery","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected."},"mcpDashboard":{"loading":"Loading MCP dashboard...","activate":"aktifkan","deactivate":"deactivate","confirmSwitchCombo":"Confirm {action} combo \\"{combo}\\"?","switchComboFailed":"Failed to switch combo state.","switchComboSuccess":"Combo \\"{combo}\\" updated.","confirmApplyProfile":"Apply resilience profile \\"{profile}\\"?","applyProfileFailed":"Failed to apply resilience profile.","applyProfileSuccess":"Profile \\"{profile}\\" applied.","confirmResetBreakers":"Reset all circuit breakers?","resetBreakersFailed":"Failed to reset circuit breakers.","resetBreakersSuccess":"Circuit breakers reset.","processStatus":"Process status","online":"Online","offline":"Offline","pid":"PID","sessionUptime":"Session uptime","lastHeartbeat":"Last heartbeat","activity24h":"Activity (24h)","totalCalls":"Total calls","successRate":"Success rate","avgLatency":"Avg latency","topTools":"Top tools","noToolCalls24h":"No tool calls in the last 24 hours.","runtimeDetails":"Runtime details","transport":"Transport","scopesEnforced":"Scopes enforced","yes":"yes","no":"no","lastCall":"Last call","heartbeatPath":"Heartbeat path","operationalControls":"Operational controls","switchCombo":"Switch combo","inactive":"inactive","active":"active","activateCombo":"Activate combo","deactivateCombo":"Deactivate combo","applyResilienceProfile":"Apply resilience profile","profileAggressive":"aggressive","profileBalanced":"balanced","profileConservative":"conservative","applyProfile":"Apply profile","resetCircuitBreakers":"Reset circuit breakers","resetCircuitBreakersHelp":"Clears current breaker state and failure counters for providers.","resetAllBreakers":"Reset all breakers","toolsAndScopes":"Tools and scopes","tableTool":"Tool","tableScopes":"Scopes","tablePhase":"Phase","tableAudit":"Audit","auditLog":"Audit log","auditSummary":"Calls: {total} | page {page} of {totalPages}","allTools":"All tools","allResults":"All results","success":"Success","failure":"Failure","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Loading audit entries...","noAuditEntriesForFilters":"No audit entries found for current filters.","tableTimestamp":"Timestamp","tableDuration":"Duration","tableResult":"Result","tableApiKey":"API key","failed":"failed","previous":"Previous","next":"Next"},"a2aDashboard":{"loading":"Loading A2A dashboard...","confirmCancelTask":"Cancel task {taskId}?","cancelTaskFailed":"Failed to cancel task.","cancelTaskSuccess":"Task {taskId} cancelled.","smokeSendFailed":"message/send smoke test failed.","smokeSendSuccessWithTask":"message/send ok (task {taskId}).","smokeSendSuccess":"message/send ok.","smokeStreamFailed":"message/stream smoke test failed.","smokeStreamSuccessWithTask":"message/stream ok (task {taskId}{stateSuffix}).","smokeStreamNoTaskId":"message/stream finished without task id.","health":"Health","ok":"ok","totalTasks":"Total tasks","activeStreams":"Aliran aktif","lastTask":"Last task","taskStateOverview":"Task state overview","state":{"submitted":"submitted","working":"working","completed":"completed","failed":"failed","cancelled":"cancelled"},"agentCard":"Agent card","version":"Version","url":"URL","capabilities":"Capabilities","agentCardNotAvailable":"Agent card not available.","quickValidation":"Quick validation","quickValidationDescription":"Executes smoke calls through the live `/a2a` endpoint.","runMessageSend":"Run message/send","runMessageStream":"Run message/stream","taskManagement":"Task management","taskSummary":"{total} tasks | page {page} of {totalPages}","allStates":"all","allSkills":"all skills","loadingTasks":"Loading tasks...","noTasksForFilters":"No tasks found for current filters.","tableTask":"Task","tableSkill":"Skill","tableState":"State","tableUpdated":"Updated","tableActions":"Actions","view":"View","cancel":"Cancel","previous":"Previous","next":"Next","taskDetail":"Task detail","close":"Close","metadata":"Metadata","events":"Events","artifacts":"Artifacts"},"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}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Dikonfigurasikan dalam papan pemuka","configuredProvidersHint":"Pembekal dengan bukti kelayakan disimpan dalam /papan pemuka/penyedia, tanpa mengira keadaan masa jalan.","activeProvidersHint":"Penyedia yang dikonfigurasikan pada masa ini didayakan untuk permintaan penghalaan.","monitoredProvidersHint":"Pembekal kini dijejaki oleh pemantau kesihatan pemutus litar."},"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","clearAllModels":"Kosongkan Semua Model","clearAllModelsConfirm":"Adakah anda pasti mahu mengalih keluar semua model untuk pembekal ini? Ini tidak boleh dibuat asal.","clearAllModelsSuccess":"Semua model dibersihkan","clearAllModelsFailed":"Gagal mengosongkan model","addConnectionToImport":"Tambahkan sambungan untuk mendayakan pengimportan.","noModelsConfigured":"Tiada model yang dikonfigurasikan","connectionCount":"{count} sambungan","fetchingModels":"Mengambil model yang tersedia...","failedFetchModels":"Gagal mengambil model","noModelsFound":"Tiada model ditemui","importFailed":"Import gagal","noNewModelsAdded":"Tiada model baharu ditambahkan.","adding":"Menambah...","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.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Gagal menguji sambungan","failed":"gagal","leaveBlankKeepCurrentApiKey":"Biarkan kosong untuk mengekalkan kunci API semasa.","editCompatibleTitle":"Edit {type} Serasi","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Kunci API (untuk Semakan)","compatibleProdPlaceholder":"{type} Serasi (Prod)","providerTestTimeout":"Provider test timed out — too many connections to test at once","advancedSettings":"Advanced Settings","chatPathLabel":"Chat Endpoint Path","chatPathPlaceholder":"/chat/completions","chatPathHint":"Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)","modelsPathLabel":"Models Endpoint Path","modelsPathPlaceholder":"/models","modelsPathHint":"Custom models path for validation (e.g. /v4/models)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","autoSync":"Auto-Segerak","autoSyncTooltip":"Muat semula senarai model secara automatik setiap 24j (boleh dikonfigurasikan melalui MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Autosegerak didayakan — model akan dimuat semula secara berkala","autoSyncDisabled":"Autosegerak dilumpuhkan","autoSyncToggleFailed":"Gagal untuk menogol autosegerak","allModelsAlreadyImported":"Semua model sudah diimport","noNewModelsToImport":"Tiada model baru untuk diimport — semua model sudah ada dalam registri atau senarai model tersuai","skippingExistingModels":"Melangkau {count} model sedia ada"},"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","themeAccent":"Warna tema","themeAccentDesc":"Pilih warna pratetap atau cipta tema anda sendiri dengan satu warna","themeCreate":"Cipta tema","themeCustom":"Tema tersuai","themeBlue":"Biru","themeRed":"Merah","themeGreen":"Hijau","themeViolet":"Ungu","themeOrange":"Oren","themeCyan":"Sian","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","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Had Melekit","stickyLimitDesc":"Panggilan setiap akaun sebelum bertukar","modelAliases":"Alias Model","modelAliasesTitle":"Alias Model","modelAliasesDesc":"Corak kad liar untuk memetakan semula nama model • Gunakan * dan ?","addCustomAlias":"Tambah Alias Tersuai","deprecatedModelId":"ID model yang ditamatkan","newModelId":"ID model baharu","customAliases":"Alias Tersuai","builtInAliases":"Alias Terbina Dalam","backgroundDegradationTitle":"Degradasi Tugas Latar Belakang","backgroundDegradationDesc":"Kesan tugas latar belakang secara automatik (tajuk, ringkasan) dan halakan ke model yang lebih murah","enableDegradation":"Dayakan Degradasi Latar Belakang","enableDegradationHint":"Apabila diaktifkan, tugas latar belakang seperti penjanaan tajuk dan ringkasan dihalakan ke model yang lebih murah secara automatik","tasksDetected":"Tugas dikesan","degradationMap":"Peta Degradasi Model","premiumModel":"Model premium","cheapModel":"Model murah","detectionPatterns":"Corak Pengesanan","newPattern":"cth. \\"jana tajuk\\"","aliasPatternPlaceholder":"claude-sonnet-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"Corak","targetModel":"Model Sasaran","add":"+ Tambah","session":"Sesi","sessionDetailsAria":"Butiran sesi","status":"Status","authenticated":"Disahkan","guest":"tetamu","loginTime":"Masa Log Masuk","sessionAge":"Umur Sesi","browser":"pelayar","clearLocalData":"Kosongkan Data Tempatan","logout":"Log keluar","clearLocalDataConfirm":"Kosongkan semua data setempat? Ini akan menetapkan semula pilihan anda.","unknown":"Tidak diketahui","systemActor":"sistem","ipAccessControl":"Kawalan Capaian IP","ipAccessControlDesc":"Sekat atau benarkan alamat IP tertentu","ipModeDisabled":"Dilumpuhkan","ipModeBlacklist":"Senarai hitam","ipModeWhitelist":"Senarai putih","ipModeWhitelistPriority":"Keutamaan WL","addIpAddress":"Tambah Alamat IP","ipAddressPlaceholder":"192.168.1.0/24 atau 10.0.*.*","block":"+ Sekat","allow":"+ Benarkan","blocked":"Disekat ({count})","allowed":"Dibenarkan ({count})","temporaryBans":"Larangan Sementara ({count})","minLeft":"{min}m lagi","auditLog":"Log Audit","searchAuditLogs":"Cari log audit...","failedLoadAuditLog":"Gagal memuatkan log audit","noAuditEvents":"Tiada acara audit ditemui","action":"Tindakan","actor":"pelakon","details":"Butiran","time":"Masa","fallbackChainsTitle":"Rantai Fallback","fallbackChainsDesc":"Tentukan pesanan sandaran pembekal bagi setiap model","addChain":"+ Tambah Rantaian","modelName":"Nama Model","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Penyedia (dipisahkan koma, dalam susunan keutamaan)","providersCommaSeparatedPlaceholder":"antropik, openai, gemini","createChain":"Buat Rantaian","noFallbackChains":"Tiada Rantai Fallback","noFallbackChainsDesc":"Buat rantaian untuk menentukan pesanan sandaran pembekal untuk model.","loadingFallbackChains":"Memuatkan rantaian sandaran...","deleteChainConfirm":"Padamkan rantaian sandaran untuk \\"{model}\\"?","chainCreated":"Rantaian dibuat untuk {model}","chainDeleted":"Rantaian dipadamkan untuk {model}","failedCreateChain":"Gagal membuat rantaian","failedDeleteChain":"Gagal memadamkan rantai","deleteChain":"Padamkan rantai","fillModelAndProviders":"Sila isi nama model dan pembekal","addAtLeastOneProvider":"Tambah sekurang-kurangnya satu pembekal","comboDefaultsTitle":"Kombo Lalai","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","themeCoral":"Koral","cliFingerprint":"CLI Fingerprint Matching","cliFingerprintDesc":"Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.","cliFingerprintEnabled":"{count} provider(s) with CLI fingerprint active","enableFingerprintTitle":"Enable fingerprint for {provider}","disableFingerprintTitle":"Disable fingerprint for {provider}","routingAdvancedGuideTitle":"Panduan laluan lanjutan","routingAdvancedGuideHint1":"Gunakan Fill First untuk keutamaan yang boleh diramal, Round Robin untuk keadilan dan P2C untuk daya tahan latensi.","routingAdvancedGuideHint2":"Jika pembekal berbeza dalam kualiti/kos, mulakan dengan Pilihan Kos untuk kerja latar belakang dan Paling Kurang Digunakan untuk pemakaian seimbang.","comboDefaultsGuideTitle":"Bagaimana untuk menala lalai kombo","comboDefaultsGuideHint1":"Pastikan percubaan semula rendah dalam aliran kependaman rendah; tambahkan tamat masa hanya untuk tugas generasi panjang.","comboDefaultsGuideHint2":"Gunakan penggantian pembekal apabila satu pembekal memerlukan gelagat tamat masa/cuba semula yang berbeza daripada lalai global."},"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","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Tiada data kuota tersedia","noAccountsForTierFilter":"Tiada akaun ditemui untuk penapis peringkat","tierAll":"Semua","tierEnterprise":"Perusahaan","tierTeam":"Pasukan","tierBusiness":"Perniagaan","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Tambahan pula","tierFree":"Percuma","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?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Keizinan","Content-Disposition":"Kandungan-Pelupusan","waitingForAuthorization":"Menunggu kebenaran...","waitingForGoogleAuthorization":"Menunggu kebenaran Google...","waitingForOpenAIAuthorization":"Menunggu kebenaran OpenAI...","waitingForAntigravityAuthorization":"Menunggu kebenaran Antigraviti...","waitingForIFlowAuthorization":"Menunggu kebenaran iFlow...","exchangingCodeForTokens":"Bertukar kod untuk token..."},"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","protocolsToc":"Protocols","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.","protocolsTitle":"Protocols: MCP & A2A","protocolsDescription":"OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.","protocolMcpStep1":"Start MCP transport with `omniroute --mcp`.","protocolMcpStep2":"Point your MCP client to stdio transport.","protocolMcpStep3":"Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.","protocolA2aStep1":"Read `/.well-known/agent.json` for agent discovery.","protocolA2aStep2":"Send `message/send` or `message/stream` requests to `POST /a2a`.","protocolA2aStep3":"Manage task lifecycle with `tasks/get` and `tasks/cancel`.","protocolTroubleshootingTitle":"Protocol Troubleshooting","protocolTroubleshooting1":"If MCP status is offline, verify the stdio process is running and heartbeat file is updating.","protocolTroubleshooting2":"If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.","protocolTroubleshooting3":"Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.","endpointChatNote":"Titik akhir sembang serasi OpenAI (lalai).","endpointResponsesNote":"Titik akhir API Respons (Codex, o-siri).","endpointModelsNote":"Katalog model untuk semua pembekal yang disambungkan.","endpointAudioNote":"Transkripsi audio (Deepgram, AssemblyAI).","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.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","endpointSpeechNote":"Penjanaan teks ke pertuturan (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Penjanaan pembenaman teks (OpenAI, Cohere, Voyage)."},"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."},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"API Endpoints","apiEndpointsTitle":"API Endpoints","apiEndpointsDescription":"Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.","comingSoon":"Coming Soon","plannedFeatures":"Planned Features","featureRestApi":"REST API endpoint catalog with interactive documentation","featureWebhooks":"Webhook configuration and event subscriptions","featureSwagger":"OpenAPI / Swagger spec auto-generation","featureAuth":"API key and OAuth scope management per endpoint"},"agents":{"title":"CLI Agents","description":"Discover installed CLI agents on your system. Add custom agents for auto-detection.","refresh":"Refresh","installed":"Installed","notFound":"Not Found","builtIn":"Built-in","custom":"Custom","remove":"Remove","addCustomAgent":"Add Custom Agent","addCustomAgentDesc":"Register any CLI tool for detection. It will be scanned automatically on refresh.","agentName":"Agent Name","binaryName":"Binary Name","versionCommand":"Version Command","spawnArgs":"Spawn Args","addAgent":"Add Agent","scanning":"Scanning system for CLI agents...","opencodeIntegration":"OpenCode Integration","opencodeDetected":"opencode {version} detected","opencodeDesc":"Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.","downloadConfig":"Download {file}","downloaded":"Downloaded!","setupGuideTitle":"Setup guide","openCliTools":"Open CLI Tools","setupGuideDetectCliTitle":"Detect installed CLIs","setupGuideDetectCliDesc":"Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.","setupGuideCustomAgentTitle":"Register custom binary","setupGuideCustomAgentDesc":"Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.","setupGuideCommandMissingTitle":"Fix \'command not found\'","setupGuideCommandMissingDesc":"Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error"},"templateNames":{"simple-chat":"Sembang Mudah","streaming":"Penstriman","system-prompt":"Gesaan Sistem","thinking":"Berfikir","tool-calling":"Alat Panggilan","multi-turn":"Pelbagai pusingan"},"templateDescriptions":{"simple-chat":"Templat sembang asas dengan mesej sistem","streaming":"Templat untuk respons penstriman","system-prompt":"Templat dengan gesaan sistem tersuai","thinking":"Templat dengan bajet penaakulan/pemikiran","tool-calling":"Templat untuk panggilan alat/fungsi","multi-turn":"Templat untuk perbualan berbilang pusingan"},"templatePayloads":{"simpleChat":{"system":"Anda seorang pembantu AI yang membantu.","userGreeting":"hello! Bagaimana saya boleh membantu anda hari ini?"},"streaming":{"prompt":"Tulis cerita tentang"},"systemPrompt":{"question":"Apakah erti kehidupan?","systemInstruction":"Berikan jawapan yang bernas dan berfalsafah."},"thinking":{"question":"Terangkan pengkomputeran kuantum"},"toolCalling":{"cityNameDescription":"Nama bandar untuk mendapatkan cuaca","toolDescription":"Dapatkan cuaca semasa untuk lokasi","userWeather":"Bagaimanakah cuaca di Tokyo?"},"multiTurn":{"system":"Anda seorang pembantu yang membantu.","assistantExample":"Saya berbesar hati untuk membantu anda dengan itu.","userInitial":"Saya perlukan bantuan","userFollowUp":"Bolehkah anda menghuraikan perkara itu?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
1
+ module.exports=[82800,a=>{a.v(JSON.parse('{"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","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Terima","accountId":"ID Akaun","alias":"Alias","apiKeyId":"ID Kunci API","apiKeyName":"Nama Kunci API","apiKeySecret":"Rahsia Kunci API","authorization":"Keizinan","content-type":"Jenis Kandungan","content-length":"Panjang Kandungan","cookie":"Kuki","file":"Fail","host":"hos","id":"ID","import":"Import","limit":"had","offset":"Offset","open":"Buka","origin":"asal usul","promptTokens":"Token Gesaan","completionTokens":"Token Penyiapan","totalTokens":"Jumlah Token","rawModel":"Model Mentah","scope":"Skop","skill":"Kemahiran","sortBy":"Isih Mengikut","sortOrder":"Susun Susunan","tab":"Tab","text":"Teks","textarea":"Textarea","tool":"alat","toolId":"ID alat","web":"Web","whereUsed":"Di mana Digunakan","whitelist":"Senarai putih","blacklist":"Senarai hitam","resolve":"Selesaikan","force":"Paksa","base64url":"URL Base64","hex":"Hex","range":"Julat","component":"Komponen","redirect_uri":"Ubah hala URI","idempotency-key":"Kunci Idepotency","error_description":"Penerangan Ralat","code":"Kod","compatible":"serasi","chat-completions":"Selesai Sembang","oauth":"OAuth","auth_token":"Token Pengesahan","crypto":"Kripto","hours":"jam","selfsigned":"Ditandatangani sendiri","proxy_id":"ID proksi","proxyId":"ID proksi","connectionId":"ID Sambungan","resolveConnectionId":"Selesaikan ID Sambungan","resolve_connection_id":"Selesaikan ID Sambungan","scope_id":"ID Skop","scopeId":"ID Skop","jwtSecret":"Rahsia JWT","keytar":"Keytar","better-sqlite3":"lebih baik-sqlite3","undici":"undici","builder-id":"ID Pembina","musicDesc":"Penerangan Muzik","musicGeneration":"Penjanaan Muzik","idc":"IDC","cloud-status-changed":"Status awan berubah","where_used":"Di mana Digunakan","windowMs":"Tetingkap (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Senarai Benarkan Alat","TOOL_DENYLIST":"Senarai Penafian Alat","Failed to save pricing":"Gagal menyimpan harga","Failed to reset pricing":"Gagal menetapkan semula harga","apikey":"Kunci API","http":"HTTP"},"sidebar":{"home":"Rumah","dashboard":"Papan pemuka","providers":"Pembekal","combos":"Kombo","usage":"Penggunaan","analytics":"Analitis","costs":"Kos","health":"Kesihatan","limits":"Had & Kuota","cliTools":"Alat CLI","media":"Media","settings":"tetapan","translator":"Penterjemah","docs":"Dokumen","issues":"Isu","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","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Red","themeGreen":"Green","themeViolet":"Violet","themeOrange":"Orange","themeCyan":"Cyan","endpoints":"Titik Akhir","playground":"Playground","agents":"Ejen","cliToolsShort":"Alat","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Choose a preset theme or create your own with a single color","presetColors":"Popular colors","customTheme":"Custom theme","customThemeDesc":"Click create theme and pick one color","createTheme":"Create theme","activePreset":"Active theme"},"header":{"logout":"Log keluar","language":"Bahasa","providers":"Pembekal","providerDescription":"Urus sambungan pembekal AI anda","combos":"Kombo","comboDescription":"Gabungan model dengan sandaran","usage":"Penggunaan & Analitis","usageDescription":"Pantau penggunaan API anda, penggunaan token dan log permintaan","analytics":"Analitis","analyticsDescription":"Carta, arah aliran dan cerapan penilaian","cliTools":"Alat CLI","cliToolsDescription":"Konfigurasikan alatan CLI","home":"Rumah","homeDescription":"Selamat datang ke OmniRoute","endpoint":"Endpoints","endpointDescription":"Manage proxy endpoints, MCP, A2A, and API endpoints","settings":"tetapan","settingsDescription":"Urus pilihan anda","openaiCompatible":"Serasi OpenAI","anthropicCompatible":"Serasi Anthropic","media":"Media","mediaDescription":"Generate images, videos, and music","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"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","updateNow":"Kemas kini Sekarang","updating":"Mengemas kini...","updateAvailableDesc":"Versi baharu tersedia. Klik untuk mengemas kini.","updateStarted":"Kemas kini bermula..."},"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","autoResolve":"Auto-Resolve","autoResolveDesc":"Auto-resolve ambiguous model names to native provider for this API key.","keyActive":"Key Active","keyActiveDesc":"Enable or disable this API key. Disabled keys are immediately rejected with 403.","accessSchedule":"Access Schedule","accessScheduleDesc":"Restrict access to specific hours and days of the week.","scheduleFrom":"From","scheduleUntil":"Until","scheduleDays":"Days","scheduleTimezone":"Timezone","scheduleTimezoneHint":"Use IANA timezone names, e.g. America/New_York, Europe/Berlin","scheduleActive":"Schedule","disabled":"Disabled","daySun":"Sun","dayMon":"Mon","dayTue":"Tue","dayWed":"Wed","dayThu":"Thu","dayFri":"Fri","daySat":"Sat","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"auditLog":{"title":"Log Audit","searchPlaceholder":"Tindakan carian...","action":"Tindakan","actor":"pelakon","target":"Sasaran","ipAddress":"Alamat IP","timestamp":"Cap masa","noEntries":"Tiada entri audit ditemui","filterByAction":"Tapis mengikut tindakan...","filterByActor":"Tapis mengikut pelakon...","filterEntriesAria":"Tapis entri log audit","filterByActionTypeAria":"Tapis mengikut jenis tindakan","filterByActorAria":"Tapis mengikut pelakon","refreshAuditLogAria":"Muat semula log audit","tableAria":"Entri log audit","failedFetchAuditLog":"Gagal mengambil log audit","notAvailable":"—","description":"Tindakan pentadbiran dan acara keselamatan","showing":"Menunjukkan entri {count} (mengimbangi {offset})","previous":"Sebelumnya"},"media":{"title":"Ruang Media","subtitle":"Jana imej, video dan muzik","model":"Model","prompt":"Prompt","generate":"Jana","generating":"Generating...","loadingModels":"Loading available models...","noModels":"No models available. Configure providers with media capabilities first.","error":"Generation Failed","result":"Result","imageDescription":"Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.","videoDescription":"Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.","musicDescription":"Compose music using Stable Audio Open or MusicGen via ComfyUI."},"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","opencode":"OpenCode AI coding agent (Terminal)","kiro":"Amazon Kiro — AI-powered IDE","windsurf":"Windsurf AI Code Editor","copilot":"GitHub Copilot 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:"}},"notes":{"0":"Teruskan menggunakan fail konfigurasi JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"}},"notes":{"0":"OpenCode memerlukan konfigurasi kunci API.","1":"Tetapkan URL asas kepada titik akhir OmniRoute anda."}},"kiro":{"steps":{"1":{"title":"Open Kiro Settings","desc":"Go to Settings → AI Provider"},"2":{"title":"Base URL","desc":"Paste your OmniRoute endpoint URL"},"3":{"title":"API Key"},"4":{"title":"Select Model"}},"notes":{"0":"Kiro memerlukan akaun Amazon."}}},"mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","whenToUseLabel":"Bila nak guna","openToolDocs":"Buka dokumen alat","toolUseCases":{"claude":"Gunakan apabila anda mahukan aliran kerja perancangan yang kukuh dan refactor berbilang fail panjang dengan Kod Claude.","codex":"Gunakan apabila pasukan anda diseragamkan pada aliran OpenAI Codex CLI dan pengesahan berasaskan profil.","droid":"Gunakan apabila anda memerlukan ejen terminal ringan yang menumpukan pada pengekodan pantas dan gelung pelaksanaan perintah.","openclaw":"Gunakan apabila anda mahukan ejen pengekodan gaya Open Claw tetapi dihalakan melalui dasar OmniRoute.","cline":"Gunakan apabila anda mengkonfigurasi ejen pengekodan dalam editor dan mahukan persediaan berpandu dengan model OmniRoute.","kilo":"Gunakan apabila aliran kerja anda bergantung pada arahan Kilo Code dan pengeditan berulang yang pantas.","cursor":"Gunakan semasa pengekodan dalam Kursor dan anda memerlukan model serasi OpenAI tersuai melalui OmniRoute.","continue":"Gunakan semasa menjalankan Teruskan dalam IDE dan anda memerlukan konfigurasi pembekal berasaskan JSON mudah alih.","opencode":"Gunakan apabila anda lebih suka ejen terminal-native run dan automasi skrip melalui OpenCode.","kiro":"Gunakan apabila menyepadukan Kiro dan mengawal penghalaan model secara berpusat daripada OmniRoute.","antigravity":"Gunakan apabila trafik Antigraviti/Kiro mesti dipintas melalui MITM dan dihalakan ke OmniRoute.","copilot":"Gunakan apabila anda mahu Copilot gaya sembang UX sambil menguatkuasakan kekunci OmniRoute dan peraturan penghalaan."}},"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","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each model once before reshuffling","models":"model","autoBalance":"Imbangan automatik","advancedSettings":"Tetapan Lanjutan","retryDelay":"Cuba Semula Kelewatan (ms)","concurrencyPerModel":"Concurrency / Model","queueTimeout":"Waktu Beratur (ms)","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","strategyGuideTitle":"How to use this strategy","strategyGuideWhen":"When to use","strategyGuideAvoid":"Avoid when","strategyGuideExample":"Example","strategyGuide":{"priority":{"when":"You have one preferred model and only want fallback on failure.","avoid":"You need request distribution across models.","example":"Primary coding model with cheaper backup for outages."},"weighted":{"when":"You need controlled traffic split across models.","avoid":"You cannot maintain accurate weights over time.","example":"80% stable model + 20% canary model rollout."},"round-robin":{"when":"You want predictable and even distribution.","avoid":"Models differ too much in latency or cost.","example":"Same model on multiple accounts to spread throughput."},"random":{"when":"You want simple distribution with minimal setup.","avoid":"You need strict traffic guarantees.","example":"Quick prototyping with equivalent models."},"least-used":{"when":"You want adaptive balancing based on live demand.","avoid":"Traffic is too low to benefit from usage balancing.","example":"Mixed workloads where one model often gets overloaded."},"cost-optimized":{"when":"Cost reduction is your top priority.","avoid":"Pricing data is missing or outdated.","example":"Background or batch jobs where lower cost is preferred."}},"advancedHelp":{"maxRetries":"How many retries are attempted before failing a request.","retryDelay":"Initial wait between retries. Higher values reduce burst pressure.","timeout":"Maximum request duration before aborting.","healthcheck":"Skips unhealthy models/providers from routing decisions.","concurrencyPerModel":"Max simultaneous requests allowed per model in round-robin.","queueTimeout":"How long a request can wait in queue before timing out."},"templatesTitle":"Quick templates","templatesDescription":"Apply a starting profile, then adjust models and config.","templateApply":"Apply template","templateHighAvailability":"High availability","templateHighAvailabilityDesc":"Priority routing with health checks and safe retries.","templateCostSaver":"Cost saver","templateCostSaverDesc":"Cost-optimized routing for budget-first workloads.","templateBalanced":"Balanced load","templateBalancedDesc":"Least-used routing to spread demand over time.","usageGuideHide":"Hide","usageGuideDontShowAgain":"Don\'t show again","usageGuideShow":"Show guide","quickTestTitle":"Combo ready to validate","quickTestDescription":"Run a test now to confirm fallback and latency behavior.","testNow":"Test now","pricingCoverage":"Pricing coverage","pricingCoverageHint":"Cost-optimized works best when all combo models have pricing.","pricingAvailable":"Pricing available","pricingMissing":"No pricing","pricingAvailableShort":"priced","pricingMissingShort":"no-price","warningRoundRobinSingleModel":"Round-robin is most useful with at least 2 models.","warningCostOptimizedPartialPricing":"Only {priced} of {total} models have pricing. Routing may be partially cost-aware.","warningCostOptimizedNoPricing":"No pricing data found for this combo. Cost-optimized may route unexpectedly.","readinessTitle":"Bersedia untuk menyimpan?","readinessDescription":"Semak senarai semak sebelum membuat atau mengemas kini kombo ini.","readinessCheckName":"Nama kombo adalah sah","readinessCheckModels":"Sekurang-kurangnya satu model dipilih","readinessCheckWeights":"Jumlah wajaran ialah 100%","readinessCheckWeightsOptional":"Peraturan berat tidak diperlukan","readinessCheckPricing":"Data harga tersedia","readinessCheckPricingOptional":"Peraturan harga tidak diperlukan","saveBlockedTitle":"Simpan disekat sehingga item berikut diperbaiki:","saveBlockName":"Tentukan nama kombo.","saveBlockModels":"Tambah sekurang-kurangnya satu model.","saveBlockWeighted":"Tetapkan berat kepada 100% (semasa: {total}%).","saveBlockPricing":"Tambahkan harga untuk sekurang-kurangnya satu model atau pilih strategi lain.","recommendationsLabel":"Recommended setup","applyRecommendations":"Apply recommendations","recommendationsUpdated":"Recommendations updated for {strategy}.","recommendationsApplied":"Recommendations applied to this combo.","strategyRecommendations":{"priority":{"title":"Fail-safe baseline","description":"Use one primary model and keep fallback chain short and reliable.","tip1":"Put your most reliable model first.","tip2":"Keep 1-2 backup models with similar quality.","tip3":"Use safe retries to absorb transient provider failures."},"weighted":{"title":"Controlled traffic split","description":"Great for canary rollouts and gradual migration between models.","tip1":"Start with conservative split like 90/10.","tip2":"Keep the total at 100% and auto-balance after changes.","tip3":"Monitor success and latency before increasing canary weight."},"round-robin":{"title":"Predictable load sharing","description":"Best when models are equivalent and you need smooth distribution.","tip1":"Use at least 2 models.","tip2":"Set concurrency limits to avoid burst overload.","tip3":"Use queue timeout to fail fast under saturation."},"random":{"title":"Quick spread with low setup","description":"Use when you need simple distribution without strict guarantees.","tip1":"Use models with similar latency profiles.","tip2":"Keep retries enabled to absorb random misses.","tip3":"Prefer this for experimentation, not strict SLAs."},"least-used":{"title":"Adaptive balancing","description":"Routes to less-used models to reduce hotspots over time.","tip1":"Works better under continuous traffic.","tip2":"Combine with health checks for safer balancing.","tip3":"Track per-model usage to validate distribution gains."},"cost-optimized":{"title":"Budget-first routing","description":"Routes to lower-cost models when pricing metadata is available.","tip1":"Ensure pricing coverage for all selected models.","tip2":"Keep a quality fallback for hard prompts.","tip3":"Use for batch/background jobs where cost is the main KPI."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"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","responsesDesc":"OpenAI Responses API for Codex and advanced agentic workflows","listModelsDesc":"List all available models across all connected providers","settingsApiDesc":"Read and modify OmniRoute configuration via API","settingsApi":"Settings API","categoryCore":"API Teras","categoryMedia":"Media & Multi-Modal","categoryUtility":"Utiliti & Pengurusan","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}}","sectionTitle":"Integration Surface","sectionDescription":"OpenAI-compatible APIs and operational protocol endpoints","tabApis":"OpenAI-compatible APIs","tabProtocols":"Protocols","tabsAria":"Endpoint sections","protocolsTitle":"Protocols","protocolsDescription":"MCP and A2A are first-class endpoints with dedicated observability and controls.","mcpCardTitle":"MCP Server","mcpCardDescription":"Model Context Protocol over stdio","a2aCardTitle":"A2A Server","a2aCardDescription":"Agent2Agent JSON-RPC endpoint","protocolToolsLabel":"Tools","protocolTasksLabel":"Tasks","protocolActiveStreamsLabel":"Aliran aktif","protocolLastActivity":"Aktiviti terakhir","quickStart":"Mula Pantas","openMcpDashboard":"Buka pengurusan MCP","openA2aDashboard":"Buka pengurusan A2A","mcpQuickStartTitle":"MCP Quick Start","mcpQuickStartStep1":"Jalankan pelayan MCP melalui `omniroute --mcp`.","mcpQuickStartStep2":"Konfigurasikan klien MCP anda untuk menyambung melalui pengangkutan stdio.","mcpQuickStartStep3":"Panggil alatan seperti `omniroute_get_health` dan `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Mula Pantas","a2aQuickStartStep1":"Temui kad ejen di `/.well-known/agent.json`.","a2aQuickStartStep2":"Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.","a2aQuickStartStep3":"Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`.","completionsLegacy":"Completions (Legacy)","completionsLegacyDesc":"Legacy OpenAI text completions — accepts both prompt string and messages array format","categorySearch":"Search & Discovery","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.","cloudflaredUrlNotice":"Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."},"mcpDashboard":{"loading":"Loading MCP dashboard...","activate":"aktifkan","deactivate":"deactivate","confirmSwitchCombo":"Confirm {action} combo \\"{combo}\\"?","switchComboFailed":"Failed to switch combo state.","switchComboSuccess":"Combo \\"{combo}\\" updated.","confirmApplyProfile":"Apply resilience profile \\"{profile}\\"?","applyProfileFailed":"Failed to apply resilience profile.","applyProfileSuccess":"Profile \\"{profile}\\" applied.","confirmResetBreakers":"Reset all circuit breakers?","resetBreakersFailed":"Failed to reset circuit breakers.","resetBreakersSuccess":"Circuit breakers reset.","processStatus":"Process status","online":"Online","offline":"Offline","pid":"PID","sessionUptime":"Session uptime","lastHeartbeat":"Last heartbeat","activity24h":"Activity (24h)","totalCalls":"Total calls","successRate":"Success rate","avgLatency":"Avg latency","topTools":"Top tools","noToolCalls24h":"No tool calls in the last 24 hours.","runtimeDetails":"Runtime details","transport":"Transport","scopesEnforced":"Scopes enforced","yes":"yes","no":"no","lastCall":"Last call","heartbeatPath":"Heartbeat path","operationalControls":"Operational controls","switchCombo":"Switch combo","inactive":"inactive","active":"active","activateCombo":"Activate combo","deactivateCombo":"Deactivate combo","applyResilienceProfile":"Apply resilience profile","profileAggressive":"aggressive","profileBalanced":"balanced","profileConservative":"conservative","applyProfile":"Apply profile","resetCircuitBreakers":"Reset circuit breakers","resetCircuitBreakersHelp":"Clears current breaker state and failure counters for providers.","resetAllBreakers":"Reset all breakers","toolsAndScopes":"Tools and scopes","tableTool":"Tool","tableScopes":"Scopes","tablePhase":"Phase","tableAudit":"Audit","auditLog":"Audit log","auditSummary":"Calls: {total} | page {page} of {totalPages}","allTools":"All tools","allResults":"All results","success":"Success","failure":"Failure","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Loading audit entries...","noAuditEntriesForFilters":"No audit entries found for current filters.","tableTimestamp":"Timestamp","tableDuration":"Duration","tableResult":"Result","tableApiKey":"API key","failed":"failed","previous":"Previous","next":"Next"},"a2aDashboard":{"loading":"Loading A2A dashboard...","confirmCancelTask":"Cancel task {taskId}?","cancelTaskFailed":"Failed to cancel task.","cancelTaskSuccess":"Task {taskId} cancelled.","smokeSendFailed":"message/send smoke test failed.","smokeSendSuccessWithTask":"message/send ok (task {taskId}).","smokeSendSuccess":"message/send ok.","smokeStreamFailed":"message/stream smoke test failed.","smokeStreamSuccessWithTask":"message/stream ok (task {taskId}{stateSuffix}).","smokeStreamNoTaskId":"message/stream finished without task id.","health":"Health","ok":"ok","totalTasks":"Total tasks","activeStreams":"Aliran aktif","lastTask":"Last task","taskStateOverview":"Task state overview","state":{"submitted":"submitted","working":"working","completed":"completed","failed":"failed","cancelled":"cancelled"},"agentCard":"Agent card","version":"Version","url":"URL","capabilities":"Capabilities","agentCardNotAvailable":"Agent card not available.","quickValidation":"Quick validation","quickValidationDescription":"Executes smoke calls through the live `/a2a` endpoint.","runMessageSend":"Run message/send","runMessageStream":"Run message/stream","taskManagement":"Task management","taskSummary":"{total} tasks | page {page} of {totalPages}","allStates":"all","allSkills":"all skills","loadingTasks":"Loading tasks...","noTasksForFilters":"No tasks found for current filters.","tableTask":"Task","tableSkill":"Skill","tableState":"State","tableUpdated":"Updated","tableActions":"Actions","view":"View","cancel":"Cancel","previous":"Previous","next":"Next","taskDetail":"Task detail","close":"Close","metadata":"Metadata","events":"Events","artifacts":"Artifacts"},"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}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Dikonfigurasikan dalam papan pemuka","configuredProvidersHint":"Pembekal dengan bukti kelayakan disimpan dalam /papan pemuka/penyedia, tanpa mengira keadaan masa jalan.","activeProvidersHint":"Penyedia yang dikonfigurasikan pada masa ini didayakan untuk permintaan penghalaan.","monitoredProvidersHint":"Pembekal kini dijejaki oleh pemantau kesihatan pemutus litar."},"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","clearAllModels":"Kosongkan Semua Model","clearAllModelsConfirm":"Adakah anda pasti mahu mengalih keluar semua model untuk pembekal ini? Ini tidak boleh dibuat asal.","clearAllModelsSuccess":"Semua model dibersihkan","clearAllModelsFailed":"Gagal mengosongkan model","addConnectionToImport":"Tambahkan sambungan untuk mendayakan pengimportan.","noModelsConfigured":"Tiada model yang dikonfigurasikan","connectionCount":"{count} sambungan","fetchingModels":"Mengambil model yang tersedia...","failedFetchModels":"Gagal mengambil model","noModelsFound":"Tiada model ditemui","importFailed":"Import gagal","noNewModelsAdded":"Tiada model baharu ditambahkan.","adding":"Menambah...","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.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Gagal menguji sambungan","failed":"gagal","leaveBlankKeepCurrentApiKey":"Biarkan kosong untuk mengekalkan kunci API semasa.","editCompatibleTitle":"Edit {type} Serasi","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Kunci API (untuk Semakan)","compatibleProdPlaceholder":"{type} Serasi (Prod)","providerTestTimeout":"Provider test timed out — too many connections to test at once","advancedSettings":"Advanced Settings","chatPathLabel":"Chat Endpoint Path","chatPathPlaceholder":"/chat/completions","chatPathHint":"Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)","modelsPathLabel":"Models Endpoint Path","modelsPathPlaceholder":"/models","modelsPathHint":"Custom models path for validation (e.g. /v4/models)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","autoSync":"Auto-Segerak","autoSyncTooltip":"Muat semula senarai model secara automatik setiap 24j (boleh dikonfigurasikan melalui MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Autosegerak didayakan — model akan dimuat semula secara berkala","autoSyncDisabled":"Autosegerak dilumpuhkan","autoSyncToggleFailed":"Gagal untuk menogol autosegerak","allModelsAlreadyImported":"Semua model sudah diimport","noNewModelsToImport":"Tiada model baru untuk diimport — semua model sudah ada dalam registri atau senarai model tersuai","skippingExistingModels":"Melangkau {count} model sedia ada"},"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","themeAccent":"Warna tema","themeAccentDesc":"Pilih warna pratetap atau cipta tema anda sendiri dengan satu warna","themeCreate":"Cipta tema","themeCustom":"Tema tersuai","themeBlue":"Biru","themeRed":"Merah","themeGreen":"Hijau","themeViolet":"Ungu","themeOrange":"Oren","themeCyan":"Sian","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","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Had Melekit","stickyLimitDesc":"Panggilan setiap akaun sebelum bertukar","modelAliases":"Alias Model","modelAliasesTitle":"Alias Model","modelAliasesDesc":"Corak kad liar untuk memetakan semula nama model • Gunakan * dan ?","addCustomAlias":"Tambah Alias Tersuai","deprecatedModelId":"ID model yang ditamatkan","newModelId":"ID model baharu","customAliases":"Alias Tersuai","builtInAliases":"Alias Terbina Dalam","backgroundDegradationTitle":"Degradasi Tugas Latar Belakang","backgroundDegradationDesc":"Kesan tugas latar belakang secara automatik (tajuk, ringkasan) dan halakan ke model yang lebih murah","enableDegradation":"Dayakan Degradasi Latar Belakang","enableDegradationHint":"Apabila diaktifkan, tugas latar belakang seperti penjanaan tajuk dan ringkasan dihalakan ke model yang lebih murah secara automatik","tasksDetected":"Tugas dikesan","degradationMap":"Peta Degradasi Model","premiumModel":"Model premium","cheapModel":"Model murah","detectionPatterns":"Corak Pengesanan","newPattern":"cth. \\"jana tajuk\\"","aliasPatternPlaceholder":"claude-sonnet-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"Corak","targetModel":"Model Sasaran","add":"+ Tambah","session":"Sesi","sessionDetailsAria":"Butiran sesi","status":"Status","authenticated":"Disahkan","guest":"tetamu","loginTime":"Masa Log Masuk","sessionAge":"Umur Sesi","browser":"pelayar","clearLocalData":"Kosongkan Data Tempatan","logout":"Log keluar","clearLocalDataConfirm":"Kosongkan semua data setempat? Ini akan menetapkan semula pilihan anda.","unknown":"Tidak diketahui","systemActor":"sistem","ipAccessControl":"Kawalan Capaian IP","ipAccessControlDesc":"Sekat atau benarkan alamat IP tertentu","ipModeDisabled":"Dilumpuhkan","ipModeBlacklist":"Senarai hitam","ipModeWhitelist":"Senarai putih","ipModeWhitelistPriority":"Keutamaan WL","addIpAddress":"Tambah Alamat IP","ipAddressPlaceholder":"192.168.1.0/24 atau 10.0.*.*","block":"+ Sekat","allow":"+ Benarkan","blocked":"Disekat ({count})","allowed":"Dibenarkan ({count})","temporaryBans":"Larangan Sementara ({count})","minLeft":"{min}m lagi","auditLog":"Log Audit","searchAuditLogs":"Cari log audit...","failedLoadAuditLog":"Gagal memuatkan log audit","noAuditEvents":"Tiada acara audit ditemui","action":"Tindakan","actor":"pelakon","details":"Butiran","time":"Masa","fallbackChainsTitle":"Rantai Fallback","fallbackChainsDesc":"Tentukan pesanan sandaran pembekal bagi setiap model","addChain":"+ Tambah Rantaian","modelName":"Nama Model","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Penyedia (dipisahkan koma, dalam susunan keutamaan)","providersCommaSeparatedPlaceholder":"antropik, openai, gemini","createChain":"Buat Rantaian","noFallbackChains":"Tiada Rantai Fallback","noFallbackChainsDesc":"Buat rantaian untuk menentukan pesanan sandaran pembekal untuk model.","loadingFallbackChains":"Memuatkan rantaian sandaran...","deleteChainConfirm":"Padamkan rantaian sandaran untuk \\"{model}\\"?","chainCreated":"Rantaian dibuat untuk {model}","chainDeleted":"Rantaian dipadamkan untuk {model}","failedCreateChain":"Gagal membuat rantaian","failedDeleteChain":"Gagal memadamkan rantai","deleteChain":"Padamkan rantai","fillModelAndProviders":"Sila isi nama model dan pembekal","addAtLeastOneProvider":"Tambah sekurang-kurangnya satu pembekal","comboDefaultsTitle":"Kombo Lalai","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","themeCoral":"Koral","cliFingerprint":"CLI Fingerprint Matching","cliFingerprintDesc":"Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.","cliFingerprintEnabled":"{count} provider(s) with CLI fingerprint active","enableFingerprintTitle":"Enable fingerprint for {provider}","disableFingerprintTitle":"Disable fingerprint for {provider}","routingAdvancedGuideTitle":"Panduan laluan lanjutan","routingAdvancedGuideHint1":"Gunakan Fill First untuk keutamaan yang boleh diramal, Round Robin untuk keadilan dan P2C untuk daya tahan latensi.","routingAdvancedGuideHint2":"Jika pembekal berbeza dalam kualiti/kos, mulakan dengan Pilihan Kos untuk kerja latar belakang dan Paling Kurang Digunakan untuk pemakaian seimbang.","comboDefaultsGuideTitle":"Bagaimana untuk menala lalai kombo","comboDefaultsGuideHint1":"Pastikan percubaan semula rendah dalam aliran kependaman rendah; tambahkan tamat masa hanya untuk tugas generasi panjang.","comboDefaultsGuideHint2":"Gunakan penggantian pembekal apabila satu pembekal memerlukan gelagat tamat masa/cuba semula yang berbeza daripada lalai global."},"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","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Tiada data kuota tersedia","noAccountsForTierFilter":"Tiada akaun ditemui untuk penapis peringkat","tierAll":"Semua","tierEnterprise":"Perusahaan","tierTeam":"Pasukan","tierBusiness":"Perniagaan","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Tambahan pula","tierFree":"Percuma","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?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Keizinan","Content-Disposition":"Kandungan-Pelupusan","waitingForAuthorization":"Menunggu kebenaran...","waitingForGoogleAuthorization":"Menunggu kebenaran Google...","waitingForOpenAIAuthorization":"Menunggu kebenaran OpenAI...","waitingForAntigravityAuthorization":"Menunggu kebenaran Antigraviti...","waitingForIFlowAuthorization":"Menunggu kebenaran iFlow...","exchangingCodeForTokens":"Bertukar kod untuk token..."},"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","protocolsToc":"Protocols","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.","protocolsTitle":"Protocols: MCP & A2A","protocolsDescription":"OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.","protocolMcpStep1":"Start MCP transport with `omniroute --mcp`.","protocolMcpStep2":"Point your MCP client to stdio transport.","protocolMcpStep3":"Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.","protocolA2aStep1":"Read `/.well-known/agent.json` for agent discovery.","protocolA2aStep2":"Send `message/send` or `message/stream` requests to `POST /a2a`.","protocolA2aStep3":"Manage task lifecycle with `tasks/get` and `tasks/cancel`.","protocolTroubleshootingTitle":"Protocol Troubleshooting","protocolTroubleshooting1":"If MCP status is offline, verify the stdio process is running and heartbeat file is updating.","protocolTroubleshooting2":"If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.","protocolTroubleshooting3":"Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.","endpointChatNote":"Titik akhir sembang serasi OpenAI (lalai).","endpointResponsesNote":"Titik akhir API Respons (Codex, o-siri).","endpointModelsNote":"Katalog model untuk semua pembekal yang disambungkan.","endpointAudioNote":"Transkripsi audio (Deepgram, AssemblyAI).","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.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","endpointSpeechNote":"Penjanaan teks ke pertuturan (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Penjanaan pembenaman teks (OpenAI, Cohere, Voyage)."},"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."},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"API Endpoints","apiEndpointsTitle":"API Endpoints","apiEndpointsDescription":"Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.","comingSoon":"Coming Soon","plannedFeatures":"Planned Features","featureRestApi":"REST API endpoint catalog with interactive documentation","featureWebhooks":"Webhook configuration and event subscriptions","featureSwagger":"OpenAPI / Swagger spec auto-generation","featureAuth":"API key and OAuth scope management per endpoint"},"agents":{"title":"CLI Agents","description":"Discover installed CLI agents on your system. Add custom agents for auto-detection.","refresh":"Refresh","installed":"Installed","notFound":"Not Found","builtIn":"Built-in","custom":"Custom","remove":"Remove","addCustomAgent":"Add Custom Agent","addCustomAgentDesc":"Register any CLI tool for detection. It will be scanned automatically on refresh.","agentName":"Agent Name","binaryName":"Binary Name","versionCommand":"Version Command","spawnArgs":"Spawn Args","addAgent":"Add Agent","scanning":"Scanning system for CLI agents...","opencodeIntegration":"OpenCode Integration","opencodeDetected":"opencode {version} detected","opencodeDesc":"Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.","downloadConfig":"Download {file}","downloaded":"Downloaded!","setupGuideTitle":"Setup guide","openCliTools":"Open CLI Tools","setupGuideDetectCliTitle":"Detect installed CLIs","setupGuideDetectCliDesc":"Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.","setupGuideCustomAgentTitle":"Register custom binary","setupGuideCustomAgentDesc":"Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.","setupGuideCommandMissingTitle":"Fix \'command not found\'","setupGuideCommandMissingDesc":"Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error"},"templateNames":{"simple-chat":"Sembang Mudah","streaming":"Penstriman","system-prompt":"Gesaan Sistem","thinking":"Berfikir","tool-calling":"Alat Panggilan","multi-turn":"Pelbagai pusingan"},"templateDescriptions":{"simple-chat":"Templat sembang asas dengan mesej sistem","streaming":"Templat untuk respons penstriman","system-prompt":"Templat dengan gesaan sistem tersuai","thinking":"Templat dengan bajet penaakulan/pemikiran","tool-calling":"Templat untuk panggilan alat/fungsi","multi-turn":"Templat untuk perbualan berbilang pusingan"},"templatePayloads":{"simpleChat":{"system":"Anda seorang pembantu AI yang membantu.","userGreeting":"hello! Bagaimana saya boleh membantu anda hari ini?"},"streaming":{"prompt":"Tulis cerita tentang"},"systemPrompt":{"question":"Apakah erti kehidupan?","systemInstruction":"Berikan jawapan yang bernas dan berfalsafah."},"thinking":{"question":"Terangkan pengkomputeran kuantum"},"toolCalling":{"cityNameDescription":"Nama bandar untuk mendapatkan cuaca","toolDescription":"Dapatkan cuaca semasa untuk lokasi","userWeather":"Bagaimanakah cuaca di Tokyo?"},"multiTurn":{"system":"Anda seorang pembantu yang membantu.","assistantExample":"Saya berbesar hati untuk membantu anda dengan itu.","userInitial":"Saya perlukan bantuan","userFollowUp":"Bolehkah anda menghuraikan perkara itu?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
2
2
 
3
3
  //# sourceMappingURL=src_i18n_messages_ms_json_610df819._.js.map