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=[963154,a=>{a.v(JSON.parse('{"common":{"save":"Tallenna","cancel":"Peruuta","delete":"Poista","loading":"Ladataan...","error":"Tapahtui virhe","success":"Menestystä","confirm":"Oletko varma?","refresh":"Päivitä","close":"Sulje","add":"Lisää","edit":"Muokkaa","search":"Etsi","back":"Takaisin","next":"Seuraavaksi","submit":"Lähetä","reset":"Nollaa","copy":"Kopioi","copied":"Kopioitu!","enabled":"Käytössä","disabled":"Ei käytössä","active":"Aktiivinen","inactive":"Ei-aktiivinen","noData":"Tietoja ei ole saatavilla","configure":"Määritä","manage":"Hallitse","name":"Nimi","actions":"Toiminnot","status":"Tila","type":"Kirjoita","model":"Malli","models":"mallit","provider":"Palveluntarjoaja","account":"Tili","time":"Aika","details":"Yksityiskohdat","created":"Luotu","lastUsed":"Viimeksi käytetty","loadMore":"Lataa lisää","noResults":"Tuloksia ei löytynyt","reloadPage":"Lataa sivu uudelleen","connected":"Yhdistetty","disconnected":"Yhteys katkaistu","notConfigured":"Ei määritetty","testConnection":"Testaa yhteys","enable":"Ota käyttöön","disable":"Poista käytöstä","columns":"Sarakkeet","newest":"Uusin","oldest":"Vanhin","all":"Kaikki","none":"Ei mitään","yes":"Kyllä","no":"Ei","warning":"Varoitus","note":"Huom","free":"Ilmainen","skipToContent":"Siirry sisältöön","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Hyväksy","accountId":"Tilin tunnus","alias":"Alias","apiKeyId":"API-avaimen tunnus","apiKeyName":"API-avaimen nimi","apiKeySecret":"API-avaimen salaisuus","authorization":"Valtuutus","content-type":"Sisältötyyppi","content-length":"Sisällön pituus","cookie":"Eväste","file":"Tiedosto","host":"Isäntä","id":"ID","import":"Tuo","limit":"Raja","offset":"Offset","open":"Avaa","origin":"Alkuperä","promptTokens":"Kehotusmerkit","completionTokens":"Päättymismerkit","totalTokens":"Tokeneja yhteensä","rawModel":"Raaka malli","scope":"Laajuus","skill":"Taito","sortBy":"Lajitteluperuste","sortOrder":"Lajittelujärjestys","tab":"Tab","text":"Teksti","textarea":"Textarea","tool":"Työkalu","toolId":"Työkalun tunnus","web":"Web","whereUsed":"Missä käytetty","whitelist":"Valkoinen lista","blacklist":"Musta lista","resolve":"Ratkaise","force":"Voimaa","base64url":"Base64 URL","hex":"Hex","range":"Alue","component":"Komponentti","redirect_uri":"Uudelleenohjaus URI","idempotency-key":"Idempotenssiavain","error_description":"Virheen kuvaus","code":"Koodi","compatible":"Yhteensopiva","chat-completions":"Chatin loppuun saattaminen","oauth":"OAuth","auth_token":"Auth Token","crypto":"Krypto","hours":"Tuntia","selfsigned":"Itse allekirjoitettu","proxy_id":"Välityspalvelimen tunnus","proxyId":"Välityspalvelimen tunnus","connectionId":"Yhteystunnus","resolveConnectionId":"Ratkaise yhteystunnus","resolve_connection_id":"Ratkaise yhteystunnus","scope_id":"Laajuustunnus","scopeId":"Laajuustunnus","jwtSecret":"JWT Secret","keytar":"Keytar","better-sqlite3":"parempi-sqlite3","undici":"undici","builder-id":"Rakentajan tunnus","musicDesc":"Musiikki Kuvaus","musicGeneration":"Musiikin sukupolvi","idc":"IDC","cloud-status-changed":"Pilven tila muuttunut","where_used":"Missä käytetty","windowMs":"Ikkuna (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Työkalujen sallittu luettelo","TOOL_DENYLIST":"Tool Denylist","Failed to save pricing":"Hinnoittelun tallentaminen epäonnistui","Failed to reset pricing":"Hinnoittelun nollaaminen epäonnistui","apikey":"API-avain","http":"HTTP"},"sidebar":{"home":"Kotiin","dashboard":"Kojelauta","providers":"Palveluntarjoajat","combos":"Yhdistelmät","usage":"Käyttö","analytics":"Analytics","costs":"Kustannukset","health":"Terveys","limits":"Rajoitukset ja kiintiöt","cliTools":"CLI-työkalut","media":"Media","settings":"Asetukset","translator":"Kääntäjä","docs":"Asiakirjat","issues":"Ongelmat","apiManager":"API Manager","logs":"Lokit","auditLog":"Tarkastusloki","shutdown":"Sammutus","restart":"Käynnistä uudelleen","shutdownConfirm":"Suljetaanko OmniRoute?","restartConfirm":"Käynnistetäänkö OmniRoute uudelleen?","version":"v{version}","debug":"Debug","system":"Järjestelmä","help":"Apua","serverDisconnected":"Palvelin yhteys katkaistu","serverDisconnectedMsg":"Välityspalvelin on pysäytetty tai käynnistyy uudelleen.","expandSidebar":"Laajenna sivupalkki","collapseSidebar":"Tiivistä sivupalkki","themes":"Teemat","presetColors":"Suosittuja värejä","createTheme":"Luo teema","chooseColor":"Valitse yksi väri","themeCoral":"koralli","themeBlue":"Sininen","themeRed":"Punainen","themeGreen":"Vihreä","themeViolet":"Violetti","themeOrange":"Oranssi","themeCyan":"Syaani","endpoints":"Päätepisteet","playground":"Leikkipaikka","agents":"Agentit","cliToolsShort":"Työkalut","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Teemat","description":"Valitse esiasetettu teema tai luo oma yhdellä värillä","presetColors":"Suosittuja värejä","customTheme":"Mukautettu teema","customThemeDesc":"Napsauta Luo teema ja valitse yksi väri","createTheme":"Luo teema","activePreset":"Aktiivinen teema"},"header":{"logout":"Kirjaudu ulos","language":"Kieli","providers":"Palveluntarjoajat","providerDescription":"Hallinnoi AI-palveluntarjoajan yhteyksiä","combos":"Yhdistelmät","comboDescription":"Malliyhdistelmät varaosilla","usage":"Käyttö ja analytiikka","usageDescription":"Valvo API-käyttöäsi, tunnuksesi kulutusta ja pyyntölokeja","analytics":"Analytics","analyticsDescription":"Kaavioita, trendejä ja arviointitietoja","cliTools":"CLI-työkalut","cliToolsDescription":"Määritä CLI-työkalut","home":"Kotiin","homeDescription":"Tervetuloa OmniRouteen","endpoint":"Endpoints","endpointDescription":"Manage proxy endpoints, MCP, A2A, and API endpoints","settings":"Asetukset","settingsDescription":"Hallinnoi asetuksiasi","openaiCompatible":"OpenAI-yhteensopiva","anthropicCompatible":"Antrooppinen yhteensopiva","media":"Media","mediaDescription":"Luo kuvia, videoita ja musiikkia","themes":"Teemat","themesDescription":"Valitse väriteema koko kojelautapaneelille","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"home":{"quickStart":"Pika-aloitus","quickStartDesc":"Pääset liikkeelle neljässä vaiheessa. Yhdistä palveluntarjoajat, reittimallit, tarkkaile kaikkea.","fullDocs":"Täydelliset asiakirjat","step1Title":"1. Luo API-avain","step1Desc":"Siirry kohtaan <endpoint>Endpoint</endpoint> -> Rekisteröidyt avaimet. Luo yksi avain ympäristöä kohden.","step2Title":"2. Yhdistä palveluntarjoajat","step2Desc":"Lisää tilejä palveluun <providers>Providers</providers>. Tukee OAuthia, API-avainta ja ilmaisia ​​tasoja.","step3Title":"3. Osoita asiakkaasi","step3Desc":"Aseta perus-URL-osoitteeksi {url} IDE- tai API-asiakkaassasi.","step4Title":"4. Valvo ja optimoi","step4Desc":"Seuraa tunnuksia, kustannuksia ja virheitä <logs>Pyyntölokeissa</logs> ja <analytics>Analytics</analytics>.","providersOverview":"Palveluntarjoajien yleiskatsaus","configuredOf":"{configured} määritetty {total} käytettävissä olevasta palveluntarjoajasta","noModelsAvailable":"Tälle tarjoajalle ei ole saatavilla malleja.","configureFirst":"Määritä yhteys ensin kohteessa {providers}","configureProvider":"Määritä Provider","modelAvailable":"{count} malli saatavilla","modelsAvailable":"{count} malleja saatavilla","connectionsActive":"{count} yhteys aktiivinen","connectionsActivePlural":"{count} yhteydet aktiivisia","copyModelName":"Kopioi mallin nimi","documentation":"Dokumentaatio","healthMonitor":"Terveysmittari","reportIssue":"Ilmoita ongelmasta","activeError":"{active} aktiivinen · {errors} virhe","oauthLabel":"OAuth","apiKeyLabel":"API-avain","requestsShort":"{count} vaatimus","providerModelsTitle":"{provider} - Mallit","copiedModel":"Kopioitu: {model}","aliasLabel":"alias","updateNow":"Päivitä nyt","updating":"Päivitetään...","updateAvailableDesc":"Uusi versio on saatavilla. Päivitä napsauttamalla.","updateStarted":"Päivitys aloitettu..."},"analytics":{"title":"Analytics","overviewDescription":"Tarkkaile sovellusliittymän käyttötapoja, tunnuksen kulutusta, kustannuksia ja toimintatrendejä kaikilla palveluntarjoajilla ja malleilla.","evalsDescription":"Testaa ja vahvista LLM-päätepisteesi suorittamalla arviointipaketteja. Vertaile mallin laatua, havaitse regressiot ja vertaile viivettä.","overview":"Yleiskatsaus","evals":"Evals"},"apiManager":{"title":"API-avaimet","createKey":"Luo API-avain","key":"Avain","revokeKey":"Peruuta avain","revokeConfirm":"Haluatko varmasti peruuttaa tämän API-avaimen?","noKeys":"Ei vielä API-avaimia","noKeysDesc":"Luo ensimmäinen API-avain päätepisteellesi tulevien pyyntöjen todentamiseksi","keyLabel":"Avaimen etiketti","permissions":"Käyttöoikeudet","expiresAt":"Vanhenee","never":"Ei koskaan","revoke":"Peruuta","showKey":"Näytä avain","hideKey":"Piilota avain","copyKey":"Kopioi API-avain","allModels":"Kaikki mallit","selectedModels":"Valitut mallit","readOnly":"Vain luku","fullAccess":"Täysi pääsy","keyManagement":"API-avainten hallinta","keyManagementDesc":"Luo ja hallitse API-avaimia päätepisteesi pyyntöjen todentamiseksi","totalKeys":"Avaimet yhteensä","restricted":"Rajoitettu","totalRequests":"Pyyntöjä yhteensä","modelsAvailable":"Mallit saatavilla","registeredKeys":"Rekisteröity avaimet","keysRegistered":"{count} avaimet rekisteröity","keyRegistered":"{count} avain rekisteröity","keysSecurityNote":"Jokainen avain eristää käytön seurannan ja voidaan peruuttaa itsenäisesti. Avaimet peitetään luomisen jälkeen turvallisuuden vuoksi.","createFirstKey":"Luo ensimmäinen avaimesi","name":"Nimi","usage":"Käyttö","created":"Luotu","actions":"Toiminnot","reqs":"vaatimukset","neverUsed":"Ei koskaan käytetty","deleteConfirm":"Poistetaanko tämä API-avain?","usageTips":"Käyttövinkkejä","tipAuth":"Käytä API-avaimia Authorization-otsikossa siirtotienä YOUR_KEY","tipSecure":"Avaimet näkyvät vain kerran luomisen aikana – säilytä ne turvallisesti","tipSeparate":"Luo erilliset avaimet eri asiakkaille tai ympäristöille","tipRestrict":"Rajoita avaimet tiettyihin malleihin parantaaksesi turvallisuutta ja kustannusten hallintaa","keyName":"Avaimen nimi","keyNamePlaceholder":"esim. tuotantoavain, kehitysavain","keyNameDesc":"Valitse kuvaava nimi tämän avaimen tarkoituksen tunnistamiseksi","keyCreated":"API-avain luotu","keyCreatedSuccess":"Avain luotu onnistuneesti!","keyCreatedNote":"Kopioi ja tallenna tämä avain nyt – sitä ei näytetä uudelleen.","done":"Valmis","savePermissions":"Tallenna käyttöoikeudet","allowAll":"Salli kaikki","restrict":"Rajoita","allowAllInfo":"Tällä avaimella pääsee kaikkiin saatavilla oleviin malleihin.","restrictInfo":"Tällä avaimella voi käyttää {selected}/{total} mallia.","selected":"{count} valittu","all":"Kaikki","clear":"Selkeä","searchModels":"Hae malleja nimen tai toimittajan mukaan...","noModelsFound":"Malleja ei löytynyt","keyNameRequired":"Avaimen nimi vaaditaan","keyNameTooLong":"Avaimen nimessä saa olla enintään {max} merkkiä","keyNameInvalid":"Avaimen nimi voi sisältää vain kirjaimia, numeroita, välilyöntejä, yhdysmerkkejä ja alaviivoja","invalidKeyName":"Virheellinen avaimen nimi","failedCreateKey":"Avaimen luominen epäonnistui","failedCreateKeyRetry":"Avaimen luominen epäonnistui. Yritä uudelleen.","invalidKeyId":"Virheellinen avaintunnus","failedDeleteKey":"Avaimen poistaminen epäonnistui","failedDeleteKeyRetry":"Avaimen poistaminen epäonnistui. Yritä uudelleen.","invalidModelsSelection":"Virheellinen mallivalinta","cannotSelectMoreThanModels":"Ei voi valita enempää kuin {max} mallia","failedUpdatePermissions":"Käyttöoikeuksien päivittäminen epäonnistui","failedUpdatePermissionsRetry":"Käyttöoikeuksien päivittäminen epäonnistui. Yritä uudelleen.","unknownProvider":"tuntematon","copyMaskedKey":"Kopioi peitetty avain","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Viimeisin: {date}","editPermissions":"Muokkaa käyttöoikeuksia","deleteKey":"Poista avain","model":"{count} malli","models":"{count} mallit","permissionsTitle":"Luvat: {name}","allowAllDesc":"Tällä avaimella pääsee kaikkiin saatavilla oleviin malleihin.","restrictDesc":"Tällä avaimella voi käyttää {selectedCount}/{totalModels} mallia.","selectedCount":"{count} valittu","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":"Tarkastusloki","searchPlaceholder":"Hakutoiminnot...","action":"Toiminta","actor":"näyttelijä","target":"Kohde","ipAddress":"IP-osoite","timestamp":"Aikaleima","noEntries":"Tarkastusmerkintöjä ei löytynyt","filterByAction":"Suodata toiminnon mukaan...","filterByActor":"Suodata näyttelijän mukaan...","filterEntriesAria":"Suodata tarkastuslokin merkinnät","filterByActionTypeAria":"Suodata toimintotyypin mukaan","filterByActorAria":"Suodata näyttelijän mukaan","refreshAuditLogAria":"Päivitä tarkastusloki","tableAria":"Tarkastuslokimerkinnät","failedFetchAuditLog":"Valvontalokin nouto epäonnistui","notAvailable":"—","description":"Hallinnolliset toimet ja turvallisuustapahtumat","showing":"Näytetään {count} merkintää (poikkeama {offset})","previous":"Edellinen"},"media":{"title":"Mediatyöpaja","subtitle":"Luo kuvia, videoita ja musiikkia","model":"Model","prompt":"Prompt","generate":"Luo","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":"CLI-työkalut","noActiveProviders":"Ei aktiivisia palveluntarjoajia","noActiveProvidersDesc":"Lisää ja yhdistä ensin palveluntarjoajat määrittääksesi CLI-työkalut.","mapModels":"Karttamallit","testConnection":"Testaa yhteys","connectionStatus":"Yhteyden tila","configureEndpoint":"Määritä päätepiste","instructions":"Ohjeet","modelMapping":"Mallin kartoitus","baseUrl":"Perus-URL-osoite","apiKey":"API-avain","configured":"Määritetty","notConfigured":"Ei määritetty","notInstalled":"Ei asennettu","custom":"Mukautettu","unknown":"Tuntematon","lastSavedAt":"Viimeksi tallennettu: {date}","never":"Ei koskaan","justNow":"juuri nyt","minutesAgoShort":"{count}min sitten","hoursAgoShort":"{count}h sitten","daysAgoShort":"{count}pv sitten","monthsAgoShort":"{count}kk sitten","yearsAgoShort":"{count}v sitten","runtimeCheckFailed":"Ajonaikainen tarkistus epäonnistui","yourApiKeyPlaceholder":"sinun-api-avain","modelPlaceholder":"toimittaja/mallitunnus","configurationSaved":"Määritykset tallennettu onnistuneesti.","failedToSave":"Määrityksen tallentaminen epäonnistui.","noApiKeysCreateOne":"Ei API-avaimia – Luo yksi Avaimet-sivulla","defaultOmnirouteKey":"sk_omniroute (oletus)","selectModel":"Valitse Malli","selectModelForAlias":"Valitse malli kohteelle {alias}","selectModelForTool":"Valitse malli kohteelle {tool}","select":"Valitse","clear":"Selkeä","comingSoon":"Tulossa pian","checkingRuntime":"Tarkistetaan ajonaikaista tilaa...","guideOnlyIntegration":"Vain ohjeellinen integrointi (ei vaadi paikallista suoritusaikaa)","cliRuntimeDetected":"CLI-ajoaika havaittu ja valmis","cliFoundNotRunnable":"CLI löytyi, mutta ei ajettavissa{reason}","cliRuntimeNotDetected":"CLI-ajoaikaa ei havaittu","binary":"Binääri","configPath":"Konfigurointipolku","configPathShort":"Konfig","failedCheckRuntimeStatus":"Ajonaikaisen tilan tarkistaminen epäonnistui.","copy":"Kopioi","copied":"Kopioitu","copyConfig":"Kopioi kokoonpano","saveConfig":"Tallenna kokoonpano","selectionSaved":"Valinta tallennettu","guide":"Opas","detected":"Havaittu","notReady":"Ei valmis","active":"Aktiivinen","inactive":"Ei-aktiivinen","startMitm":"Käynnistä MITM","stopMitm":"Lopeta MITM","mitmStarted":"MITM alkoi onnistuneesti!","mitmStopped":"MITM pysähtyi onnistuneesti!","failedStart":"MITM:n käynnistäminen epäonnistui","failedStop":"MITM:n pysäyttäminen epäonnistui","saveMappings":"Tallenna kartoitukset","mappingsSaved":"Kartaukset tallennettu!","failedSaveMappings":"Kartoitusten tallentaminen epäonnistui","howItWorks":"Miten se toimii:","antigravityHowWorksDesc":"Antigravity lähettää pyyntöjä Googlen päätepisteeseen. MITM sieppaa ja ohjaa ne OmniRouteen.","antigravityStep1":"1. Käynnistä MITM reitittääksesi pyynnöt OmniRouten kautta.","antigravityStep2Prefix":"2. Lisää","antigravityStep2Suffix":"hosts-tiedostoon muodossa 127.0.0.1.","antigravityStep3":"3. Avaa Antigravity ja pyynnöt välitetään.","sudoPasswordRequiredTitle":"Sudo-salasana vaaditaan","sudoPasswordHint":"Järjestelmänvalvojan salasana tarvitaan hosts-tiedoston ja järjestelmän välityspalvelimen asetusten muokkaamiseen.","enterSudoPassword":"Anna sudo-salasana","sudoPasswordRequiredError":"Sudo-salasana vaaditaan.","cancel":"Peruuta","confirm":"Vahvista","settingsApplied":"Asetukset otettu käyttöön onnistuneesti!","failedApplySettings":"Asetusten käyttöönotto epäonnistui","settingsReset":"Asetusten nollaus onnistui!","failedResetSettings":"Asetusten nollaus epäonnistui","backupRestored":"Varmuuskopio palautettu!","failedRestore":"Palauttaminen epäonnistui","checkingCli":"Tarkistetaan {tool} CLI...","cliNotRunnable":"{tool} CLI asennettu, mutta ei ajettavissa","cliNotInstalled":"{tool} CLI:tä ei ole asennettu","cliNotDetected":"{tool} CLI:tä ei havaittu","cliDetectedReady":"{tool} CLI havaittu ja valmis","cliFoundFailedHealthcheck":"{tool} CLI löydettiin, mutta ajonaikainen kuntotarkastus epäonnistui{reason}.","installCliPrompt":"Asenna {tool} CLI käyttääksesi tätä ominaisuutta.","installCodexPrompt":"Asenna Codex CLI käyttääksesi automaattista käyttöönottoa.","hide":"Piilota","howToInstall":"Kuinka asentaa","installationGuide":"Asennusopas","platforms":"macOS / Linux / Windows:","afterInstallationRun":"Suorita asennuksen jälkeen","toVerify":"varmistaaksesi.","current":"Nykyinen","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Palauta oletusarvo","providerModelPlaceholder":"toimittaja/mallitunnus","apply":"Käytä","reset":"Nollaa","manualConfig":"Manuaalinen konfigurointi","backups":"Varmuuskopiot","configBackups":"Määritysten varmuuskopiot","noBackupsYet":"Ei vielä varmuuskopioita. Varmuuskopiot luodaan automaattisesti ennen jokaista käyttöönottoa tai nollausta.","restore":"Palauta","backupRestoredReloading":"Varmuuskopio palautettu! Ladataan tilaa uudelleen...","failedRestoreBackup":"Varmuuskopion palauttaminen epäonnistui","applied":"Sovellettu!","failed":"Epäonnistui","resetDone":"Nollaa!","omnirouteConfiguredOpenAiCompatible":"OmniRoute on määritetty OpenAI-yhteensopivaksi palveluntarjoajaksi","provider":"Palveluntarjoaja","model":"Malli","providers":"Palveluntarjoajat","auth":"Tod","noApiKeysAvailable":"API-avaimia ei ole saatavilla","usingDefaultOmniroute":"Oletuksena: sk_omniroute","updateConfig":"Päivitä Config","applyConfig":"Käytä konfiguraatiota","noBackupsAvailable":"Varmuuskopioita ei ole saatavilla.","profileSaved":"Profiili \\"{name}\\" tallennettu!","failedSaveProfile":"Profiilin tallennus epäonnistui","profileActivated":"Profiili aktivoitu!","failedActivateProfile":"Profiilin aktivointi epäonnistui","profiles":"Profiilit","savedProfiles":"Tallennetut profiilit","noProfilesYet":"Ei vielä tallennettuja profiileja. Tallenna nykyinen konfiguraatio alla olevaksi profiiliksi.","activate":"Aktivoi","deleteProfile":"Poista profiili","profileNamePlaceholder":"Profiilin nimi (esim. henkilökohtainen tili)","saveCurrent":"Tallenna nykyinen","codexAuthNotePrefix":"Codex käyttää","codexAuthNoteMiddle":"kanssa","codexAuthNoteSuffix":"Napsauta \\"Käytä\\" määrittääksesi automaattisesti.","claudeManualConfiguration":"Claude CLI - Manuaalinen konfigurointi","codexManualConfiguration":"Codex CLI - Manuaalinen konfigurointi","droidManualConfiguration":"Tehdasdroidi - manuaalinen konfigurointi","openClawManualConfiguration":"Open Claw - Manuaalinen konfigurointi","clineManualConfiguration":"Cline Manuaalinen konfigurointi","kiloManualConfiguration":"Kilo Code Manuaalinen konfigurointi","toolDescriptions":{"antigravity":"Google Antigravity IDE ja MITM","claude":"Antrooppinen Claude Code CLI","codex":"OpenAI Codex CLI","droid":"Tehdas Droid AI Assistant","openclaw":"Avaa Claw AI Assistant","cline":"Cline AI Coding Assistant CLI","kilo":"Kilo Code AI Assistant CLI","cursor":"Cursor AI Code Editor","continue":"Jatka AI Assistantia","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":"Tämän ominaisuuden käyttäminen vaatii Cursor Pro -tilin.","1":"Kohdistin reitittää pyynnöt oman palvelimensa kautta, joten paikallista päätepistettä ei tueta. Ota Cloud Endpoint käyttöön asetuksista."},"steps":{"1":{"title":"Avaa Asetukset","desc":"Siirry kohtaan Asetukset -> Mallit"},"2":{"title":"Ota OpenAI API käyttöön","desc":"Ota käyttöön \\"OpenAI API-avain\\" -vaihtoehto"},"3":{"title":"Perus-URL-osoite"},"4":{"title":"API-avain"},"5":{"title":"Lisää mukautettu malli","desc":"Napsauta \\"Näytä kaikki mallit\\" -> \\"Lisää mukautettu malli\\""},"6":{"title":"Valitse Malli"}}},"continue":{"steps":{"1":{"title":"Avaa Config","desc":"Avaa Jatka määritystiedosto"},"2":{"title":"API-avain"},"3":{"title":"Valitse Malli"},"4":{"title":"Lisää mallin kokoonpano","desc":"Lisää seuraavat kokoonpanot mallien matriisiisi:"}},"notes":{"0":"Jatka käyttää JSON-määritystiedostoa."}},"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 vaatii API-avaimen määrityksen.","1":"Aseta perus-URL-osoite OmniRoute-päätepisteellesi."}},"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 vaatii Amazon-tilin."}}},"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":"Milloin käyttää","openToolDocs":"Avaa työkaludokumentit","toolUseCases":{"claude":"Käytä, kun haluat vahvoja suunnittelutyönkulkuja ja pitkiä monitiedostoisia refraktoreita Claude Coden avulla.","codex":"Käytä, kun tiimisi on standardoitu OpenAI Codex CLI -virtojen ja profiilipohjaisen todennuksen kanssa.","droid":"Käytä, kun tarvitset kevyen pääteagentin, joka keskittyy nopeaan koodaukseen ja komentojen suoritussilmukoihin.","openclaw":"Käytä, kun haluat Open Claw -tyyppisen koodausagentin, mutta reititetyn OmniRoute-käytäntöjen kautta.","cline":"Käytä, kun määrität koodausagentteja editorien sisällä ja haluat ohjatun asennuksen OmniRoute-malleilla.","kilo":"Käytä, kun työnkulkusi riippuu Kilo Code -komennoista ja nopeista iteratiivisista muokkauksista.","cursor":"Käytä koodattaessa Cursorissa ja tarvitset mukautettuja OpenAI-yhteensopivia malleja OmniRouten kautta.","continue":"Käytä, kun käytät Continuea IDE:issä ja tarvitset kannettavan JSON-pohjaisen palveluntarjoajan määrityksen.","opencode":"Käytä, kun haluat käyttää päätealustaisia ​​agentteja ja komentosarjottua automaatiota OpenCoden kautta.","kiro":"Käytä integroitaessa Kiroa ja ohjattaessa mallin reititystä keskitetysti OmniRoutesta.","antigravity":"Käytä, kun Antigravity/Kiro-liikenne on siepattava MITM:n kautta ja ohjattava OmniRouteen.","copilot":"Käytä, kun haluat Copilot-chat-tyylisen UX:n ja pakota OmniRoute-avaimia ja reitityssääntöjä."}},"combos":{"title":"Yhdistelmät","description":"Luo mallikomboja painotetulla reitityksellä ja varatuella","createCombo":"Luo yhdistelmä","editCombo":"Muokkaa yhdistelmää","deleteCombo":"Poista yhdistelmä","noModels":"Ei malleja","noModelsYet":"Malleja ei ole vielä lisätty","addModel":"Lisää malli","addModelToCombo":"Lisää malli yhdistelmään","routingStrategy":"Reititysstrategia","maxRetries":"Max Uudelleenyritykset","timeout":"Aikakatkaisu (ms)","healthcheck":"Terveystarkastus","priority":"Prioriteetti","fallback":"Varaa","roundRobin":"Round Robin","random":"Satunnainen","leastLatency":"Pienin latenssi","comboName":"Yhdistelmänimi","comboNamePlaceholder":"minun yhdistelmäni","deleteConfirm":"Poistetaanko tämä yhdistelmä?","noCombosYet":"Ei komboja vielä","comboCreated":"Yhdistelmä luotiin onnistuneesti","comboUpdated":"Yhdistelmän päivitys onnistui","comboDeleted":"Yhdistelmä poistettu","failedCreate":"Yhdistelmän luominen epäonnistui","failedUpdate":"Yhdistelmän päivittäminen epäonnistui","errorCreating":"Virhe yhdistelmän luomisessa","errorUpdating":"Virhe yhdistelmän päivityksessä","errorDeleting":"Virhe yhdistelmän poistamisessa","testFailed":"Testipyyntö epäonnistui","failedToggle":"Yhdistelmän vaihto epäonnistui","testResults":"Testitulokset – {name}","resolvedBy":"Ratkaisi:","more":"+{count} lisää","reqs":"vaatimukset","success":"menestystä","proxyConfigured":"Välityspalvelin määritetty","copyComboName":"Kopioi yhdistelmänimi","enableCombo":"Ota yhdistelmä käyttöön","disableCombo":"Poista yhdistelmä käytöstä","testCombo":"Testiyhdistelmä","duplicate":"Kopioi","proxyConfig":"Välityspalvelimen määritys","nameRequired":"Nimi vaaditaan","nameInvalid":"Vain kirjaimet, numerot, -, _, / ja . sallittu","nameHint":"Kirjaimet, numerot, -, _, / ja . sallittu","priorityDesc":"Peräkkäinen palautus: kokeilee ensin mallia 1, sitten 2 jne.","weightedDesc":"Jakaa liikenteen painoprosentin mukaan varauksella","roundRobinDesc":"Pyöreä jakelu: jokainen pyyntö siirtyy seuraavaan kiertoon malliin","randomDesc":"Yhtenäinen satunnainen valinta, sitten takaisin muihin malleihin","leastUsedDesc":"Valitsee mallin, jolla on vähiten pyyntöjä ja tasapainottaa kuormitusta ajan myötä","costOptimizedDesc":"Reitit edullisimpaan malliin ensin hinnoittelun perusteella","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each model once before reshuffling","models":"Mallit","autoBalance":"Automaattinen tasapainotus","advancedSettings":"Lisäasetukset","retryDelay":"Uudelleenyrityksen viive (ms)","concurrencyPerModel":"Samanaikaisuus / malli","queueTimeout":"Jonon aikakatkaisu (ms)","advancedHint":"Jätä tyhjäksi, jos haluat käyttää yleisiä oletusasetuksia. Nämä ohittavat palveluntarjoajakohtaiset asetukset.","moveUp":"Siirrä ylös","moveDown":"Siirry alas","removeModel":"Poista","saving":"Tallennetaan...","weighted":"Painotettu","leastUsed":"Vähiten käytetty","costOpt":"Kustannus-opt","strategyGuideTitle":"Kuinka käyttää tätä strategiaa","strategyGuideWhen":"Milloin käyttää","strategyGuideAvoid":"Vältä milloin","strategyGuideExample":"Esimerkki","strategyGuide":{"priority":{"when":"Sinulla on yksi ensisijainen malli ja haluat varautua vain epäonnistumisen yhteydessä.","avoid":"Tarvitset pyynnön jakelun eri malleihin.","example":"Ensisijainen koodausmalli, jossa on halvempi varmuuskopio katkosten varalta."},"weighted":{"when":"Tarvitset ohjattua liikennettä jaettuna malleihin.","avoid":"Et voi säilyttää tarkkoja painoja ajan mittaan.","example":"80% vakaa malli + 20% kanarian mallin käyttöönotto."},"round-robin":{"when":"Haluat ennakoitavan ja tasaisen jakelun.","avoid":"Mallit eroavat liikaa latenssista tai hinnasta.","example":"Sama malli useilla tileillä suorituskyvyn levittämiseksi."},"random":{"when":"Haluat yksinkertaisen jakelun minimaalisella asennuksella.","avoid":"Tarvitset tiukat liikennetakuut.","example":"Nopea prototyyppien tekeminen vastaavilla malleilla."},"least-used":{"when":"Haluat mukautuvan tasapainotuksen live-kysynnän perusteella.","avoid":"Liikenne on liian vähäistä hyötyäkseen käytön tasapainotuksesta.","example":"Sekalaiset työmäärät, joissa yksi malli usein ylikuormitetaan."},"cost-optimized":{"when":"Kustannusten vähentäminen on tärkein prioriteettisi.","avoid":"Hinnoittelutiedot puuttuvat tai ovat vanhentuneet.","example":"Tausta- tai erätyöt, joissa edullisemmat kustannukset ovat paremmat."}},"advancedHelp":{"maxRetries":"Kuinka monta uudelleenyritystä yritetään ennen kuin pyyntö epäonnistuu.","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":"Vähiten käytetty reititys kysynnän hajauttamiseksi ajan mittaan.","usageGuideHide":"Piilottaa","usageGuideDontShowAgain":"Älä näytä uudelleen","usageGuideShow":"Näytä opas","quickTestTitle":"Yhdistelmä valmis tarkistettavaksi","quickTestDescription":"Suorita testi nyt varmistaaksesi vara- ja latenssitoiminnan.","testNow":"Testaa nyt","pricingCoverage":"Hinnoittelun kattavuus","pricingCoverageHint":"Kustannusoptimointi toimii parhaiten, kun kaikissa yhdistelmämalleissa on hinnoittelu.","pricingAvailable":"Hinnoittelu saatavilla","pricingMissing":"Ei hinnoittelua","pricingAvailableShort":"hinnoiteltu","pricingMissingShort":"ei-hintaa","warningRoundRobinSingleModel":"Round-robin on hyödyllisin vähintään kahdella mallilla.","warningCostOptimizedPartialPricing":"Vain {priced} {total}-malleista on hinnoiteltu. Reititys voi olla osittain kustannustietoinen.","warningCostOptimizedNoPricing":"Tälle yhdistelmälle ei löytynyt hintatietoja. Kustannusoptimoitu voi reitittää odottamatta.","readinessTitle":"Oletko valmis säästämään?","readinessDescription":"Tarkista tarkistuslista ennen tämän yhdistelmän luomista tai päivittämistä.","readinessCheckName":"Yhdistelmänimi on kelvollinen","readinessCheckModels":"Ainakin yksi malli on valittu","readinessCheckWeights":"Painotettu kokonaismäärä on 100 %","readinessCheckWeightsOptional":"Painosääntöä ei vaadita","readinessCheckPricing":"Hintatiedot ovat saatavilla","readinessCheckPricingOptional":"Hinnoittelusääntöä ei vaadita","saveBlockedTitle":"Tallennus on estetty, kunnes seuraavat kohteet on korjattu:","saveBlockName":"Määritä yhdistelmänimi.","saveBlockModels":"Lisää vähintään yksi malli.","saveBlockWeighted":"Aseta painot 100 %:iin (nykyinen: {total}%).","saveBlockPricing":"Lisää hinnoittelu vähintään yhdelle mallille tai valitse toinen strategia.","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":"Kustannukset","budget":"Budjetti","totalCost":"Kokonaiskustannukset","breakdown":"Kustannusten erittely","noData":"Ei hintatietoja","byModel":"Mallin mukaan","byProvider":"Palveluntarjoajan toimesta"},"endpoint":{"title":"API-päätepiste","available":"Käytettävissä olevat päätepisteet","cloudProxy":"Pilvivälityspalvelin","disableConfirm":"Haluatko varmasti poistaa pilvivälityspalvelimen käytöstä?","baseUrl":"Perus-URL-osoite","apiKeyLabel":"API-avain","registeredKeys":"Rekisteröity avaimet","chatCompletions":"Chatin loppuun saattaminen","responses":"Vastaukset","listModels":"Listaa mallit","usingCloudProxy":"Cloud Proxyn käyttäminen","usingLocalServer":"Paikallisen palvelimen käyttö","machineId":"Koneen tunnus: {id}...","disableCloud":"Poista Cloud käytöstä","enableCloud":"Ota Cloud käyttöön","modelsAcrossEndpoints":"{models} mallit {endpoints} päätepisteen välillä","chatDesc":"Suoratoisto ja ei-striimaus chat kaikkien palveluntarjoajien kanssa","embeddings":"Upotukset","embeddingsDesc":"Tekstin upotukset haku- ja RAG-putkistoja varten","imageGeneration":"Kuvan luominen","imageDesc":"Luo kuvia tekstikehotteista","rerank":"Järjestä uudelleen","rerankDesc":"Järjestä asiakirjat uudelleen kyselyn osuvuuden mukaan","audioTranscription":"Äänen transkriptio","audioTranscriptionDesc":"Literoi äänitiedostot tekstiksi (kuiskaus)","textToSpeech":"Tekstistä puheeksi","textToSpeechDesc":"Muunna teksti luonnolliselta kuulostavaksi puheeksi","moderations":"Moderaatiot","moderationsDesc":"Sisällön moderointi ja turvallisuusluokitus","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":"Ydin-API:t","categoryMedia":"Media & Monimuotoinen","categoryUtility":"Apuohjelmat & Hallinta","enableCloudTitle":"Ota Cloud Proxy käyttöön","whatYouGet":"Mitä saat","cloudBenefitAccess":"Käytä sovellusliittymääsi mistä päin maailmaa tahansa","cloudBenefitShare":"Jaa päätepiste tiimisi kanssa helposti","cloudBenefitPorts":"Ei tarvitse avata portteja tai määrittää palomuuria","cloudBenefitEdge":"Nopea maailmanlaajuinen reunaverkko","cloudSessionNote":"Cloud säilyttää todennusistunnon 1 päivän ajan. Jos sitä ei käytetä, se poistetaan automaattisesti.","cloudUnstableNote":"Pilvi on tällä hetkellä epävakaa Claude Code OAuthin kanssa joissakin tapauksissa.","cloudConnected":"Cloud Proxy yhdistetty!","connectingToCloud":"Yhdistetään pilveen...","verifyingConnection":"Vahvistetaan yhteyttä...","connecting":"Yhdistetään...","verifying":"Vahvistetaan...","connected":"Yhdistetty!","disableCloudTitle":"Poista Cloud Proxy käytöstä","disableWarning":"Kaikki todennusistunnot poistetaan pilvestä.","syncingData":"Synkronoidaan uusimpia tietoja...","disablingCloud":"Poistetaan pilvi käytöstä...","syncing":"Synkronoidaan...","disabling":"Poistetaan käytöstä...","cloudConnectedVerified":"Cloud Proxy yhdistetty ja vahvistettu!","connectedVerificationPending":"Yhdistetty — vahvistus odottaa","connectedVerificationPendingWithError":"Yhdistetty – vahvistus odottaa: {error}","cloudDisabledSuccess":"Pilvi poistettu käytöstä onnistuneesti","syncedSuccess":"Synkronointi onnistui","failedDisable":"Pilven poistaminen käytöstä epäonnistui","failedEnable":"Pilven käyttöönotto epäonnistui","cloudRequestTimeout":"Pilvipyynnön aikakatkaisu","cloudRequestFailed":"Pilvipyyntö epäonnistui","cloudWorkerUnreachable":"Pilvityöntekijää ei tavoitettu. Varmista, että pilvipalvelu on käynnissä (npm run dev in /cloud).","connectionFailed":"Yhteys epäonnistui","syncFailed":"Pilvitietojen synkronointi epäonnistui","providerModelsTitle":"{provider} – Mallit","noModelsForProvider":"Tälle tarjoajalle ei ole saatavilla malleja.","chat":"Chat","embedding":"Upottaminen","image":"Kuva","custom":"mukautettu","modelsCount":"{count, plural, one {# model} other {# models}}","sectionTitle":"Integrointipinta","sectionDescription":"OpenAI-yhteensopivat API:t ja toimintaprotokollan päätepisteet","tabApis":"OpenAI-yhteensopivat sovellusliittymät","tabProtocols":"Protokollat","tabsAria":"Päätepisteen osat","protocolsTitle":"Protokollat","protocolsDescription":"MCP ja A2A ovat ensiluokkaisia päätepisteitä, joissa on omistettu tarkkailtavuus ja hallinta.","mcpCardTitle":"MCP-palvelin","mcpCardDescription":"Model Context Protocol over stdio","a2aCardTitle":"A2A palvelin","a2aCardDescription":"Agent2Agent JSON-RPC -päätepiste","protocolToolsLabel":"Työkalut","protocolTasksLabel":"Tehtävät","protocolActiveStreamsLabel":"Aktiiviset streamit","protocolLastActivity":"Last activity","quickStart":"Pika-aloitus","openMcpDashboard":"Avaa MCP-hallinta","openA2aDashboard":"Avaa A2A-hallinta","mcpQuickStartTitle":"MCP Quick Start","mcpQuickStartStep1":"Suorita MCP-palvelin `omniroute --mcp`:n kautta.","mcpQuickStartStep2":"Määritä MCP-asiakas muodostamaan yhteys stdio-siirron kautta.","mcpQuickStartStep3":"Kutsu työkaluja, kuten `omniroute_get_health` ja `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Pikaopas","a2aQuickStartStep1":"Tutustu agenttikorttiin osoitteessa `/.well-known/agent.json`.","a2aQuickStartStep2":"Lähetä JSON-RPC-pyynnöt osoitteeseen `POST /a2a` käyttämällä `message/send` tai `message/stream`.","a2aQuickStartStep3":"Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `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":"Ladataan MCP-hallintapaneelia...","activate":"aktivoida","deactivate":"deaktivoida","confirmSwitchCombo":"Vahvista {action}-yhdistelmä \\"{combo}\\"?","switchComboFailed":"Yhdistelmätilan vaihtaminen epäonnistui.","switchComboSuccess":"Yhdistelmä \\"{combo}\\" päivitetty.","confirmApplyProfile":"Otetaanko joustavuusprofiili käyttöön \\"{profile}\\"?","applyProfileFailed":"Resilienssiprofiilin käyttäminen epäonnistui.","applyProfileSuccess":"Profiilia \\"{profile}\\" on käytetty.","confirmResetBreakers":"Nollataanko kaikki katkaisijat?","resetBreakersFailed":"Katkaisijoiden nollaus epäonnistui.","resetBreakersSuccess":"Katkaisijat nollattu.","processStatus":"Prosessin tila","online":"verkossa","offline":"Offline-tilassa","pid":"PID","sessionUptime":"Istunnon käyttöaika","lastHeartbeat":"Viimeinen sydämenlyönti","activity24h":"Aktiviteetti (24h)","totalCalls":"Puhelut yhteensä","successRate":"Menestysprosentti","avgLatency":"Keskimääräinen viive","topTools":"Huipputyökalut","noToolCalls24h":"Ei työkalukutsuja viimeisen 24 tunnin aikana.","runtimeDetails":"Kestoajan tiedot","transport":"Kuljetus","scopesEnforced":"Laajuudet pannaan täytäntöön","yes":"kyllä","no":"ei","lastCall":"Viimeinen puhelu","heartbeatPath":"Sydämen sykkeen polku","operationalControls":"Toiminnalliset ohjaimet","switchCombo":"Kytkinyhdistelmä","inactive":"ei-aktiivinen","active":"aktiivinen","activateCombo":"Aktivoi yhdistelmä","deactivateCombo":"Poista yhdistelmä käytöstä","applyResilienceProfile":"Käytä joustavuusprofiilia","profileAggressive":"aggressive","profileBalanced":"tasapainoinen","profileConservative":"konservatiivinen","applyProfile":"Käytä profiilia","resetCircuitBreakers":"Nollaa katkaisijat","resetCircuitBreakersHelp":"Tyhjentää nykyisen katkaisijatilan ja palveluntarjoajien vikalaskurin.","resetAllBreakers":"Nollaa kaikki katkaisijat","toolsAndScopes":"Työkaluja ja tähtäimet","tableTool":"Työkalu","tableScopes":"Soveltamisalat","tablePhase":"Vaihe","tableAudit":"Audit","auditLog":"Tarkastusloki","auditSummary":"Puhelut: {total} | sivu {page} / {totalPages}","allTools":"Kaikki työkalut","allResults":"Kaikki tulokset","success":"Menestystä","failure":"Epäonnistuminen","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Ladataan tarkastusmerkintöjä...","noAuditEntriesForFilters":"Nykyisille suodattimille ei löytynyt tarkastusmerkintöjä.","tableTimestamp":"Aikaleima","tableDuration":"Kesto","tableResult":"Tulos","tableApiKey":"API-avain","failed":"epäonnistunut","previous":"Edellinen","next":"Seuraavaksi"},"a2aDashboard":{"loading":"Ladataan A2A-hallintapaneelia...","confirmCancelTask":"Peruutetaanko tehtävä {taskId}?","cancelTaskFailed":"Tehtävän peruuttaminen epäonnistui.","cancelTaskSuccess":"Tehtävä {taskId} peruutettu.","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":"Aktiiviset streamit","lastTask":"Last task","taskStateOverview":"Task state overview","state":{"submitted":"submitted","working":"working","completed":"valmiiksi","failed":"epäonnistunut","cancelled":"peruutettu"},"agentCard":"Agenttikortti","version":"Versio","url":"URL-osoite","capabilities":"Ominaisuudet","agentCardNotAvailable":"Agenttikorttia ei ole saatavilla.","quickValidation":"Nopea vahvistus","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":"Päivitetty","tableActions":"Toiminnot","view":"Näytä","cancel":"Peruuttaa","previous":"Edellinen","next":"Seuraavaksi","taskDetail":"Tehtävän yksityiskohdat","close":"Lähellä","metadata":"Metatiedot","events":"Tapahtumat","artifacts":"Artefaktit"},"health":{"title":"Järjestelmän terveys","description":"OmniRoute-instanssisi reaaliaikainen seuranta","healthy":"Terve","degraded":"Heikentynyt","down":"Alas","uptime":"Päällä","memory":"Muisti","memoryRss":"Muisti (RSS)","heap":"Kasa","cpu":"CPU","database":"Tietokanta","version":"Versio","lastCheck":"Viimeinen tarkistus","providerHealth":"Palveluntarjoajan terveys","systemMetrics":"Järjestelmän mittarit","tokenHealth":"Token Health","refreshAll":"Päivitä kaikki","checkNow":"Tarkista nyt","loadingHealth":"Ladataan terveystietoja…","failedToLoad":"Terveystietojen lataaminen epäonnistui: {error}","retry":"Yritä uudelleen","allOperational":"Kaikki järjestelmät toimivat","issuesDetected":"Järjestelmäongelmia havaittu","updatedAt":"Päivitetty {time}","latency":"Latenssi","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Pyyntöjä yhteensä","noDataYet":"Ei vielä dataa","promptCache":"Kehotusvälimuisti","entries":"merkinnät","hitRate":"Osumaprosentti","hitsMisses":"Osumat / Miss","signatureCache":"Allekirjoitusvälimuisti","signatureDefaults":"Oletukset","signatureTool":"Työkalu","signatureFamily":"Perhe","signatureSession":"Istunto","recovering":"Toipumassa","noCBData":"Katkaisijatietoja ei ole saatavilla. Tee ensin pyyntöjä.","providerHealthStatusAria":"Palveluntarjoajan terveydentila","issuesLabel":"Ongelmia havaittu","operational":"Toiminnassa","providers":"Palveluntarjoajat","healthyCount":"{count} terve","nodeVersion":"Solmu {version}","failures":"{count} virhe","failuresPlural":"{count} virheitä","lastFailure":"Viimeinen","rateLimitStatus":"Rate Limit Status","activeLimiters":"{count} aktiivinen rajoitin","activeLimitersPlural":"{count} aktiiviset rajoittimet","queued":"Jonossa","queuedCount":"{count} jonossa","running":"käynnissä","runningCount":"{count} käynnissä","ok":"OK","activeLockouts":"Aktiiviset lukitukset","resetConfirm":"Nollataanko kaikki katkaisijat terveeseen tilaan? Tämä tyhjentää kaikki virhemäärät ja palauttaa kaikki palveluntarjoajat toimintatilaan.","resetAllTitle":"Palauta kaikki katkaisijat terveeseen tilaan","resetting":"Nollataan...","resetAll":"Nollaa kaikki","until":"{time} asti","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Konfiguroitu kojelaudassa","configuredProvidersHint":"Palveluntarjoajat, joiden valtuustiedot on tallennettu kansioon /dashboard/providers, suorituksen tilasta riippumatta.","activeProvidersHint":"Määritetyt palveluntarjoajat, jotka ovat tällä hetkellä käytössä reitityspyyntöjä varten.","monitoredProvidersHint":"Palveluntarjoajat, joita tällä hetkellä seurataan katkaisijoiden kuntovalvojien avulla."},"limits":{"title":"Rajoitukset ja kiintiöt","rateLimit":"Rate Limit","remaining":"Jäljellä","requestsPerMinute":"Pyynnöt/min","tokensPerMinute":"Tokenit/min","dailyLimit":"Päivittäinen raja"},"logs":{"title":"Lokit","requestLogs":"Pyydä lokit","proxyLogs":"Välityspalvelimen lokit","auditLog":"Tarkastusloki","console":"konsoli","auditLogDesc":"Hallinnolliset toimet ja turvallisuustapahtumat","loading":"Ladataan...","refresh":"Päivitä","filterByAction":"Suodata toiminnon mukaan...","filterByActor":"Suodata näyttelijän mukaan...","filterEntriesAria":"Suodata tarkastuslokin merkinnät","filterByActionTypeAria":"Suodata toimintotyypin mukaan","filterByActorAria":"Suodata näyttelijän mukaan","refreshAuditLogAria":"Päivitä tarkastusloki","tableAria":"Tarkastuslokimerkinnät","failedFetchAuditLog":"Valvontalokin nouto epäonnistui","showing":"Näytetään {count} merkintää (poikkeama {offset})","search":"Etsi","timestamp":"Aikaleima","action":"Toiminta","actor":"näyttelijä","target":"Kohde","details":"Yksityiskohdat","ipAddress":"IP-osoite","notAvailable":"—","noEntries":"Tarkastuslokimerkintöjä ei löytynyt","previous":"Edellinen","next":"Seuraavaksi"},"onboarding":{"welcome":"Tervetuloa","security":"Turvallisuus","test":"Testaa","ready":"Valmis!","setPassword":"Aseta salasana","addProvider":"Lisää ensimmäinen palveluntarjoajasi","getStarted":"Aloita","skip":"Ohita","skipWizard":"Ohita ohjattu toiminto kokonaan","skipPassword":"Ohita salasanan asetus","skipAndContinue":"Ohita ja jatka","passwordLabel":"Salasana","confirmPassword":"Vahvista salasana","enterPassword":"Anna salasana","confirmPasswordPlaceholder":"Vahvista salasana","passwordsMismatch":"Salasanat eivät täsmää","setupComplete":"Asennus valmis!","goToDashboard":"Siirry kohtaan Dashboard →","welcomeDesc":"OmniRoute on paikallinen AI API -välityspalvelin. Se reitittää pyynnöt useille tekoälypalveluntarjoajille kuormituksen tasapainottamisen, vikasietoisuuden ja käytön seurannan avulla.","multiProvider":"Multi-Provider","usageTracking":"Käytön seuranta","apiKeyMgmt":"API-avainhallinta","securityDesc":"Aseta salasana kojelautasi suojaamiseksi tai ohita toistaiseksi.","providerDesc":"Yhdistä ensimmäinen AI-palveluntarjoajasi. Voit lisätä myöhemmin lisää.","apiKeyRequired":"API-avain (pakollinen)","customUrlOptional":"Muokattu URL-osoite (valinnainen)","testDesc":"Varmistetaan, että palveluntarjoajayhteytesi toimii.","runTest":"Suorita yhteystesti","testingConnection":"Testataan yhteyttä...","connectionSuccessful":"Yhteys onnistui! Palveluntarjoajasi on valmis.","noProviderFound":"Palveluntarjoajaa ei löydy. Voit lisätä sellaisen hallintapaneelista myöhemmin.","testFailed":"Testi epäonnistui, mutta voit määrittää tämän myöhemmin.","couldNotTest":"Ei pystynyt testaamaan juuri nyt. Voit testata kojelaudalta.","doneDesc":"Kaikki on valmista! OmniRoute-esiintymäsi on määritetty ja valmis välittämään AI-pyyntöjä.","yourEndpoint":"Päätepisteesi:","continue":"Jatka","retry":"Yritä uudelleen","failedSetPassword":"Salasanan asettaminen epäonnistui. Yritä uudelleen.","failedAddProvider":"Palveluntarjoajan lisääminen epäonnistui. Yritä uudelleen.","connectionError":"Yhteysvirhe. Yritä uudelleen.","provider":"Palveluntarjoaja"},"providers":{"title":"Palveluntarjoajat","addProvider":"Lisää palveluntarjoaja","editProvider":"Muokkaa toimittajaa","deleteProvider":"Poista palveluntarjoaja","noProviders":"Palveluntarjoajia ei ole määritetty","modelAvailability":"Mallin saatavuus","accounts":"Tilit","newAccount":"Uusi tili","deleteConfirm":"Haluatko varmasti poistaa tämän palveluntarjoajan?","testing":"Testataan...","testConnection":"Testaa yhteys","testSuccess":"Yhteys onnistui","testFailed":"Yhteys epäonnistui","available":"Saatavilla","cooldown":"Jäähdytys","unavailable":"Ei saatavilla","unknown":"Tuntematon","oauthLabel":"OAuth","compatibleLabel":"Yhteensopiva","chat":"Chat","responses":"Vastaukset","messages":"Viestit","oauthProviders":"OAuth-palveluntarjoajat","freeProviders":"Ilmaiset palveluntarjoajat","apiKeyProviders":"API-avainten tarjoajat","compatibleProviders":"API Key -yhteensopivat palveluntarjoajat","testAll":"Testaa kaikki","testAllOAuth":"Testaa kaikki OAuth-yhteydet","testAllFree":"Testaa kaikki ilmaiset yhteydet","testAllApiKey":"Testaa kaikki API-avainyhteydet","testAllCompatible":"Testaa kaikki yhteensopivat liitännät","connected":"{count} Yhdistetty","errorCount":"{count} Virhe ({code})","errorCountNoCode":"{count} Virhe","noConnections":"Ei yhteyksiä","disabled":"Ei käytössä","enableProvider":"Ota palveluntarjoaja käyttöön","disableProvider":"Poista palveluntarjoaja käytöstä","testResults":"Testitulokset","noCompatibleYet":"Yhteensopivia palveluntarjoajia ei ole vielä lisätty","compatibleHint":"Käytä yllä olevia painikkeita lisätäksesi OpenAI- tai Anthropic-yhteensopivia päätepisteitä","addOpenAICompatible":"Lisää OpenAI-yhteensopiva","addAnthropicCompatible":"Lisää Anthropic Compatible","addNewProvider":"Lisää uusi toimittaja","backToProviders":"Takaisin palveluntarjoajiin","configureNewProvider":"Määritä uusi AI-palveluntarjoaja käytettäväksi sovelluksissasi.","providerLabel":"Palveluntarjoaja","selectProvider":"Valitse palveluntarjoaja","selectedProvider":"Valittu palveluntarjoaja","authMethod":"Todennusmenetelmä","apiKeyLabel":"API-avain","apiKeyRequired":"API-avain vaaditaan","selectProviderRequired":"Valitse palveluntarjoaja","enterApiKey":"Anna API-avaimesi","apiKeySecure":"API-avaimesi salataan ja tallennetaan turvallisesti.","oauth2Connect":"Yhdistä OAuth2:een","oauth2Label":"OAuth2","oauth2Desc":"Yhdistä tilisi OAuth2-todennusta käyttämällä.","displayName":"Näyttönimi","displayNamePlaceholder":"esim. Production API, Dev Environment","displayNameHint":"Valinnainen. Ystävällinen nimi tämän kokoonpanon tunnistamiseksi.","active":"Aktiivinen","activeDescription":"Ota tämä palveluntarjoaja käyttöön sovelluksissasi","cancel":"Peruuta","createProvider":"Luo palveluntarjoaja","failedCreate":"Palveluntarjoajan luominen epäonnistui","errorOccurred":"Tapahtui virhe. Yritä uudelleen.","modelStatus":"Mallin tila","allModelsOperational":"Kaikki mallit toimivat","modelsWithIssues":"{count} malli(t), joissa on ongelmia","allModelsNormal":"Kaikki mallit reagoivat normaalisti.","cooldownCleared":"Jäähdytys tyhjennetty kohteelle {model}","failedClearCooldown":"Jäähdytyksen tyhjennys epäonnistui","loadingAvailability":"Ladataan mallin saatavuutta...","clearCooldown":"Selkeä","clearing":"Tyhjennetään...","until":"{time} asti","providerTestFailed":"Palveluntarjoajan testi epäonnistui","modeTest":"{mode} Testi","passedCount":"{count} hyväksytty","failedCount":"{count} epäonnistui","testedCount":"{count} testattu","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"VIRHE","noActiveConnectionsInGroup":"Tälle ryhmälle ei löytynyt aktiivisia yhteyksiä.","allTestsPassed":"Kaikki {total} testit läpäisty","testSummary":"{passed}/{total} hyväksytty, {failed} epäonnistui","nameLabel":"Nimi","prefixLabel":"Etuliite","baseUrlLabel":"Perus-URL-osoite","apiTypeLabel":"API-tyyppi","prefixHint":"Pakollinen. Ainutlaatuinen etuliite mallien nimille.","nameHint":"Pakollinen. Ystävällinen etiketti tälle solmulle.","baseUrlHint":"Pakollinen.  Palveluntarjoajan API-perus-URL-osoite.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Vahvista yhteys","validating":"Vahvistetaan...","connectionValid":"Yhteys on voimassa!","connectionFailed":"Yhteys epäonnistui. Tarkista URL-osoite ja avain.","testKeyLabel":"Testaa API-avain","testKeyPlaceholder":"sk-... (vain vahvistusta varten)","providerNotFound":"Palveluntarjoajaa ei löydy","deleteConnectionConfirm":"Poistetaanko tämä yhteys?","failedSetAlias":"Aliaksen asettaminen epäonnistui","failedSaveConnection":"Yhteyden tallentaminen epäonnistui","failedSaveConnectionRetry":"Yhteyden tallentaminen epäonnistui. Yritä uudelleen.","failedRetestConnection":"Yhteyden uudelleentestaus epäonnistui","deleteCompatibleNodeConfirm":"Poistetaanko tämä {type} Yhteensopiva solmu?","anthropicCompatibleDetails":"Anthropic-yhteensopivat yksityiskohdat","openaiCompatibleDetails":"OpenAI-yhteensopivat tiedot","messagesApi":"Viestit API","responsesApi":"Responses API","chatCompletions":"Chatin loppuun saattaminen","importingModels":"Tuodaan...","importFromModels":"Tuo / mallit","clearAllModels":"Tyhjennä kaikki mallit","clearAllModelsConfirm":"Haluatko varmasti poistaa kaikki tämän palveluntarjoajan mallit? Tätä ei voi kumota.","clearAllModelsSuccess":"Kaikki mallit tyhjennetty","clearAllModelsFailed":"Mallien tyhjennys epäonnistui","addConnectionToImport":"Lisää yhteys ottaaksesi tuonnin käyttöön.","noModelsConfigured":"Ei malleja määritetty","connectionCount":"{count} yhteyttä","fetchingModels":"Haetaan saatavilla olevia malleja...","failedFetchModels":"Mallien nouto epäonnistui","noModelsFound":"Malleja ei löytynyt","importFailed":"Tuonti epäonnistui","noNewModelsAdded":"Uusia malleja ei lisätty.","adding":"Lisätään...","importingModelsTitle":"Mallien tuonti","copyModel":"Kopioi malli","removeModel":"Poista malli","rateLimitProtected":"Suojattu","rateLimitUnprotected":"Suojaamaton","enableRateLimitProtection":"Ota nopeusrajoitussuoja käyttöön napsauttamalla","disableRateLimitProtection":"Napsauta poistaaksesi nopeusrajoituksen suojauksen","productionKey":"Tuotantoavain","enterNewApiKey":"Anna uusi API-avain","optional":"Valinnainen","anthropicCompatibleName":"Antrooppinen yhteensopiva","openaiCompatibleName":"OpenAI-yhteensopiva","failedImportModels":"Mallien tuonti epäonnistui","noModelsReturnedFromEndpoint":"Ei malleja palautettu /models-päätepisteestä.","importingModelsProgress":"Tuodaan {current}/{total} mallia...","foundModelsStartingImport":"Löytyi {count} mallia. Aloitetaan tuontia...","importingModelById":"Tuodaan {modelId}...","importSuccessCount":"{count, plural, one {# model} other {# models}} tuotu onnistuneesti!","noNewModelsAddedExisting":"Uusia malleja ei lisätty (kaikki on jo olemassa).","importDoneCount":"✓ Valmis! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"Tapahtui odottamaton virhe","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"viestejä","responsesPath":"vastaukset","chatCompletionsPath":"chat / täydennykset","add":"Lisää","edit":"Muokkaa","delete":"Poista","anthropic":"Antrooppinen","openai":"OpenAI","singleConnectionPerCompatible":"Vain yksi yhteys on sallittu yhteensopivaa solmua kohden. Lisää toinen solmu, jos tarvitset lisää yhteyksiä.","connections":"Liitännät","providerProxyTitleConfigured":"Palveluntarjoajan välityspalvelin: {host}","configured":"määritetty","providerProxyConfigureHint":"Määritä välityspalvelin kaikille tämän palveluntarjoajan yhteyksille","providerProxy":"Palveluntarjoajan välityspalvelin","noConnectionsYet":"Ei yhteyksiä vielä","addFirstConnectionHint":"Aloita lisäämällä ensimmäinen yhteys","addConnection":"Lisää yhteys","availableModels":"Saatavilla olevat mallit","pageAutoRefresh":"Sivu päivittyy automaattisesti...","statusDisabled":"pois käytöstä","statusConnected":"yhdistetty","statusRuntimeIssue":"ajonaikainen ongelma","statusAuthFailed":"todennus epäonnistui","statusRateLimited":"hinta rajoitettu","statusNetworkIssue":"verkko-ongelma","statusTestUnsupported":"testiä ei tueta","statusUnavailable":"ei ole saatavilla","statusFailed":"epäonnistunut","statusError":"virhe","oauthAccount":"OAuth-tili","errorTypeRuntime":"Paikallinen suoritusaika","errorTypeUpstreamAuth":"Varsinainen todennus","errorTypeMissingCredential":"Tunnustus puuttuu","errorTypeRefreshFailed":"Päivitys epäonnistui","errorTypeTokenExpired":"Tunnus on vanhentunut","errorTypeRateLimited":"Hinta rajoitettu","errorTypeUpstreamUnavailable":"Upstream ei saatavilla","errorTypeNetworkError":"Verkkovirhe","errorTypeTestUnsupported":"Testiä ei tueta","errorTypeUpstreamError":"Virhe ylävirtaan","proxySourceGlobal":"Maailmanlaajuinen","proxySourceProvider":"Palveluntarjoaja","proxySourceKey":"Avain","proxyConfiguredBySource":"Välityspalvelin ({source}): {host}","autoPriority":"Automaattinen: {priority}","proxy":"Välityspalvelin","retestAuthentication":"Testaa todennus uudelleen","retest":"Testaa uudelleen","disableConnection":"Poista yhteys käytöstä","enableConnection":"Ota yhteys käyttöön","reauthenticateConnection":"Todenna tämä yhteys uudelleen","proxyConfig":"Välityspalvelimen konfigurointi","aliasExistsAlert":"Alias \\"{alias}\\" on jo olemassa. Käytä toista mallia tai muokkaa olemassa olevaa aliasta.","openRouterAnyModelHint":"OpenRouter tukee mitä tahansa mallia. Lisää malleja ja luo aliaksia nopeaa käyttöä varten.","modelIdFromOpenRouter":"Mallin tunnus (OpenRouterista)","openRouterModelPlaceholder":"antrooppinen/claude-3-opus","customModels":"Mukautetut mallit","customModelsHint":"Lisää mallitunnukset, jotka eivät ole oletusluettelossa. Nämä ovat käytettävissä reititystä varten.","modelId":"Mallin tunnus","customModelPlaceholder":"esim. gpt-4.5-turbo","loading":"Ladataan...","removeCustomModel":"Poista mukautettu malli","noCustomModels":"Mukautettuja malleja ei ole vielä lisätty.","allSuggestedAliasesExist":"Kaikki ehdotetut aliakset ovat jo olemassa. Valitse toinen malli tai poista ristiriitaiset aliakset.","failedSaveCustomModel":"Muokatun mallin tallentaminen epäonnistui","modelAddedSuccess":"Malli {modelId} lisättiin onnistuneesti","failedAddModelTryAgain":"Mallin lisääminen epäonnistui. Yritä uudelleen.","failedSaveImportedModel":"Tuodun mallin tallentaminen mukautettuun tietokantaan epäonnistui","failedImportModelsTryAgain":"Mallien tuonti epäonnistui. Yritä uudelleen.","failedRemoveModelFromDatabase":"Mallin poistaminen tietokannasta epäonnistui","modelRemovedSuccess":"Mallin poistaminen onnistui","failedDeleteModelTryAgain":"Mallin poistaminen epäonnistui. Yritä uudelleen.","compatibleModelsDescription":"Lisää {type}-yhteensopivia malleja manuaalisesti tai tuo ne /models-päätepisteestä.","anthropicCompatibleModelPlaceholder":"claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"API-avaimen vahvistus epäonnistui. Tarkista avaimesi ja yritä uudelleen.","addProviderApiKeyTitle":"Lisää {provider} API-avain","checking":"Tarkistetaan...","check":"Tarkista","valid":"Voimassa","invalid":"Virheellinen","creating":"Luodaan...","validationChecksAnthropicCompatible":"Vahvistus tarkistaa {provider} vahvistamalla API-avaimen.","validationChecksOpenAiCompatible":"Vahvistus tarkistaa {provider} /models-osoitteen kautta perus-URL-osoitteessasi.","priorityLabel":"Prioriteetti","saving":"Tallennetaan...","save":"Tallenna","editConnection":"Muokkaa yhteyttä","accountName":"Tilin nimi","email":"Sähköposti","healthCheckMinutes":"Terveystarkastus (min)","healthCheckHint":"Ennakoiva tunnuksen päivitysväli. 0 = pois käytöstä.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Yhteyden testaus epäonnistui","failed":"Epäonnistui","leaveBlankKeepCurrentApiKey":"Jätä tyhjäksi, jos haluat säilyttää nykyisen API-avaimen.","editCompatibleTitle":"Muokkaa {type} Yhteensopiva","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"API-avain (tarkistusta varten)","compatibleProdPlaceholder":"{type} Yhteensopiva (tuote)","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":"Automaattinen synkronointi","autoSyncTooltip":"Päivitä malliluettelo automaattisesti 24 tunnin välein (konfiguroitavissa kohdassa MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Automaattinen synkronointi käytössä – mallit päivittyvät säännöllisesti","autoSyncDisabled":"Automaattinen synkronointi poistettu käytöstä","autoSyncToggleFailed":"Automaattisen synkronoinnin vaihtaminen epäonnistui","allModelsAlreadyImported":"Kaikki mallit on jo tuotu","noNewModelsToImport":"Ei uusia malleja tuotavaksi — kaikki mallit ovat jo rekisterissä tai mukautetulla mallilistalla","skippingExistingModels":"Ohitetaan {count} olemassa olevaa mallia"},"settings":{"title":"Asetukset","general":"Kenraali","security":"Turvallisuus","appearance":"Ulkonäkö","routing":"Reititys","cache":"Välimuisti","resilience":"Joustavuus","systemPrompt":"Järjestelmäkehote","thinkingBudget":"Miettivä budjetti","proxy":"Välityspalvelin","pricing":"Hinnoittelu","storage":"Varastointi","policies":"Käytännöt","ipFilter":"IP-suodatin","comboDefaults":"Yhdistelmän oletukset","fallbackChains":"Varaketjut","changePassword":"Vaihda salasana","enablePassword":"Ota salasana käyttöön","darkMode":"Tumma tila","lightMode":"Valotila","systemTheme":"Järjestelmän teema","enableCache":"Ota välimuisti käyttöön","cacheTTL":"Välimuisti TTL","maxCacheSize":"Välimuistin enimmäiskoko","clearCache":"Tyhjennä välimuisti","cacheHits":"Välimuistin osumia","cacheMisses":"Välimuisti puuttuu","hitRate":"Osumaprosentti","cacheEntries":"Välimuistin merkinnät","circuitBreaker":"Katkaisija","retryPolicy":"Yritä uudelleen -käytäntö","maxRetries":"Max Uudelleenyritykset","retryDelay":"Yritä uudelleen Viive","timeoutMs":"Aikakatkaisu (ms)","enableSystemPrompt":"Ota järjestelmäkehote käyttöön","systemPromptText":"Järjestelmäkehoteteksti","enableThinking":"Ota ajattelu käyttöön","maxThinkingTokens":"Max Thinking Tokens","enableProxy":"Ota välityspalvelin käyttöön","proxyUrl":"Välityspalvelimen URL-osoite","pricingRates":"Hinnoitteluhinnastomuoto","currentPricing":"Nykyisen hinnoittelun yleiskatsaus","loadingPricing":"Ladataan hintatietoja...","noPricing":"Hintatietoja ei ole saatavilla","input":"Syöte","output":"Lähtö","cached":"Välimuistissa","reasoning":"Päättely","cacheCreation":"Välimuistin luominen","customPricing":"Mukautettu hinnoittelu","databaseSize":"Tietokannan koko","backupDb":"Varmuuskopiointitietokanta","restoreDb":"Palauta tietokanta","exportData":"Vie tiedot","importData":"Tuo tiedot","clearData":"Tyhjennä kaikki tiedot","clearDataConfirm":"Tämä poistaa pysyvästi kaikki tiedot. Oletko varma?","enableRequestLogs":"Ota pyyntölokit käyttöön","logRetention":"Lokin säilyttäminen","ipWhitelist":"IP valkoinen lista","ipBlacklist":"IP musta lista","addIP":"Lisää IP","savedSuccessfully":"Asetukset tallennettu onnistuneesti","ai":"AI","advanced":"Edistynyt","localMode":"Paikallinen tila — Kaikki laitteellesi tallennetut tiedot","settingsSectionsAria":"Asetukset-osiot","switchThemes":"Vaihda vaaleiden ja tummien teemojen välillä","themeSelectionAria":"Teeman valinta","themeLight":"Kevyt","themeDark":"Tumma","themeSystem":"Järjestelmä","hideHealthLogs":"Piilota kuntotarkastuslokit","hideHealthLogsDesc":"Kun PÄÄLLÄ, estä [HealthCheck]-viestit palvelinkonsolissa","themeAccent":"Teeman väri","themeAccentDesc":"Valitse valmis väri tai luo oma teemasi yhdellä värillä","themeCreate":"Luo teema","themeCustom":"Mukautettu teema","themeBlue":"Sininen","themeRed":"Punainen","themeGreen":"Vihreä","themeViolet":"Violetti","themeOrange":"Oranssi","themeCyan":"Syaani","promptCache":"Kehotusvälimuisti","flushCache":"Tyhjennä välimuisti","flushing":"Huuhdellaan…","size":"Koko","hits":"Osumat","evictions":"Häädöt","loadingCacheStats":"Ladataan välimuistin tilastoja…","globalProxy":"Globaali välityspalvelin","globalProxyDesc":"Määritä yleinen lähtevä välityspalvelin kaikille API-kutsuille. Yksittäiset palveluntarjoajat, yhdistelmät ja avaimet voivat ohittaa tämän.","noGlobalProxy":"Globaalia välityspalvelinta ei ole määritetty","globalLabel":"Maailmanlaajuinen","configure":"Määritä","globalSystemPrompt":"Globaali järjestelmäkehote","systemPromptDesc":"Lisätään kaikkiin välityspalvelintason pyyntöihin","saved":"Tallennettu","systemPromptPlaceholder":"Anna järjestelmäkehote lisätäksesi kaikkiin pyyntöihin...","systemPromptHint":"Tämä kehote liitetään jokaisen pyynnön järjestelmäviestiin. Käytä yleisiä ohjeita, turvallisuusohjeita tai vastausten muotoilusääntöjä varten.","chars":"{count} merkkiä","thinkingBudgetTitle":"Miettivä budjetti","thinkingBudgetDesc":"Hallitse tekoälyn päättelytunnuksen käyttöä kaikissa pyynnöissä","passthrough":"Läpivienti","passthroughDesc":"Ei muutoksia – asiakas hallitsee ajattelubudjettia","auto":"Auto","autoDesc":"Poista kaikki ajatellut asetukset – anna palveluntarjoajan päättää","custom":"Mukautettu","customDesc":"Aseta kiinteä tunnusbudjetti kaikille pyynnöille","adaptive":"Mukautuva","adaptiveDesc":"Skaalaa budjetti pyynnön monimutkaisuuden perusteella","effortNone":"Ei mitään (0 merkkiä)","effortLow":"Matala (1 000 tokenia)","effortMedium":"Keskikokoinen (10 000 merkkiä)","effortHigh":"High (128 000 tokenia)","tokenBudget":"Token-budjetti","tokens":"rahakkeita","baseEffortLevel":"Perusponnistuksen taso","adaptiveHint":"Mukautuva tila skaalautuu tältä perustasolta viestimäärän, työkalun käytön ja kehotteen pituuden perusteella.","requireLogin":"Vaadi kirjautumista","requireLoginDesc":"Kun PÄÄLLÄ, kojelauta vaatii salasanan. Kun POIS PÄÄLTÄ, käytä ilman kirjautumista.","currentPassword":"Nykyinen salasana","enterCurrentPassword":"Anna nykyinen salasana","newPassword":"Uusi salasana","enterNewPassword":"Syötä uusi salasana","confirmPassword":"Vahvista uusi salasana","confirmPasswordPlaceholder":"Vahvista uusi salasana","passwordsNoMatch":"Salasanat eivät täsmää","passwordUpdated":"Salasana päivitetty onnistuneesti","failedUpdatePassword":"Salasanan päivitys epäonnistui","errorOccurred":"Tapahtui virhe","updatePassword":"Päivitä salasana","setPassword":"Aseta salasana","apiEndpointProtection":"API Endpoint Protection","requireAuthModels":"Vaadi API-avain /mallille","requireAuthModelsDesc":"Kun PÄÄLLÄ, /v1/models-päätepiste palauttaa 404 todentamattomille pyynnöille. Estää valtuuttamattomien käyttäjien mallin löytämisen.","blockedProviders":"Estetyt palveluntarjoajat","blockedProvidersDesc":"Piilota tietyt toimittajat /v1/models-vastauksesta. Estetyt palveluntarjoajat eivät näy malliluetteloissa.","providersBlocked":"{count} toimittaja(t) estetty /modelsista","blockProviderTitle":"Estä {provider}","unblockProviderTitle":"Kumoa esto {provider}","routingStrategy":"Reititysstrategia","fillFirst":"Täytä ensin","fillFirstDesc":"Käytä tilejä tärkeysjärjestyksessä","roundRobin":"Round Robin","roundRobinDesc":"Selaa kaikki tilit läpi","p2c":"P2C","p2cDesc":"Valitse 2 satunnaista, käytä terveellisempää","random":"Satunnainen","randomDesc":"Satunnainen tili jokainen pyyntö","leastUsed":"Vähiten käytetty","leastUsedDesc":"Valitse vähiten käytetty tili","costOpt":"Kustannusopt","costOptDesc":"Valitse halvin saatavilla oleva tili","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Sticky Limit","stickyLimitDesc":"Puhelut tilikohtaisesti ennen vaihtamista","modelAliases":"Mallin aliakset","modelAliasesTitle":"Mallialias","modelAliasesDesc":"Jokerimerkkikuviot mallien nimien yhdistämiseen • Käytä * ja ?","addCustomAlias":"Lisää Mukautettu Alias","deprecatedModelId":"Vanhentunut malli-ID","newModelId":"Uusi malli-ID","customAliases":"Mukautetut Aliakset","builtInAliases":"Sisäänrakennetut Aliakset","backgroundDegradationTitle":"Taustatyö Degradointi","backgroundDegradationDesc":"Tunnistaa automaattisesti taustatyöt (otsikot, yhteenvedot) ja ohjaa halvempiin malleihin","enableDegradation":"Ota Taustadegraadointi Käyttöön","enableDegradationHint":"Kun käytössä, taustatyöt kuten otsikoiden luominen ja yhteenvedot ohjataan automaattisesti halvempiin malleihin","tasksDetected":"Tehtävät tunnistettu","degradationMap":"Mallin Degradaatiokartta","premiumModel":"Premium-malli","cheapModel":"Halpa malli","detectionPatterns":"Tunnistusmallit","newPattern":"esim. \\"luo otsikko\\"","aliasPatternPlaceholder":"claude-sonett-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"kuvio","targetModel":"Kohdemalli","add":"+ Lisää","session":"Istunto","sessionDetailsAria":"Istunnon tiedot","status":"Tila","authenticated":"Todennettu","guest":"Vieras","loginTime":"Kirjautumisaika","sessionAge":"Istunnon ikä","browser":"Selain","clearLocalData":"Tyhjennä paikalliset tiedot","logout":"Kirjaudu ulos","clearLocalDataConfirm":"Poistetaanko kaikki paikalliset tiedot? Tämä nollaa asetuksesi.","unknown":"Tuntematon","systemActor":"järjestelmä","ipAccessControl":"IP Access Control","ipAccessControlDesc":"Estä tai salli tietyt IP-osoitteet","ipModeDisabled":"Ei käytössä","ipModeBlacklist":"Musta lista","ipModeWhitelist":"Valkoinen lista","ipModeWhitelistPriority":"WL-prioriteetti","addIpAddress":"Lisää IP-osoite","ipAddressPlaceholder":"192.168.1.0/24 tai 10.0.*.*","block":"+ Estä","allow":"+ Salli","blocked":"Estetty ({count})","allowed":"Sallittu ({count})","temporaryBans":"Väliaikaiset kiellot ({count})","minLeft":"{min}m jäljellä","auditLog":"Tarkastusloki","searchAuditLogs":"Hae valvontalokeja...","failedLoadAuditLog":"Tarkastuslokin lataaminen epäonnistui","noAuditEvents":"Tarkastustapahtumia ei löytynyt","action":"Toiminta","actor":"näyttelijä","details":"Yksityiskohdat","time":"Aika","fallbackChainsTitle":"Varaketjut","fallbackChainsDesc":"Määritä toimittajan varatilaus mallikohtaisesti","addChain":"+ Lisää ketju","modelName":"Mallin nimi","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Palveluntarjoajat (pilkuilla erotettuna, tärkeysjärjestyksessä)","providersCommaSeparatedPlaceholder":"antrooppinen, openai, kaksoset","createChain":"Luo ketju","noFallbackChains":"Ei varaketjuja","noFallbackChainsDesc":"Luo ketju toimittajan varatilauksen määrittämiseksi mallille.","loadingFallbackChains":"Ladataan varaketjuja...","deleteChainConfirm":"Poistetaanko varaketju kohteelle \\"{model}\\"?","chainCreated":"Ketju luotu kohteelle {model}","chainDeleted":"Ketju poistettu {model}","failedCreateChain":"Ketjun luominen epäonnistui","failedDeleteChain":"Ketjun poistaminen epäonnistui","deleteChain":"Poista ketju","fillModelAndProviders":"Täytä mallin nimi ja toimittajat","addAtLeastOneProvider":"Lisää vähintään yksi palveluntarjoaja","comboDefaultsTitle":"Yhdistelmän oletukset","globalComboConfig":"Globaali yhdistelmäkokoonpano","defaultStrategy":"Oletusstrategia","defaultStrategyDesc":"Sovelletaan uusiin komboihin ilman selkeää strategiaa","comboStrategyAria":"Yhdistelmästrategia","priority":"Prioriteetti","weighted":"Painotettu","maxRetriesLabel":"Max Uudelleenyritykset","retryDelayLabel":"Uudelleenyrityksen viive (ms)","timeoutLabel":"Aikakatkaisu (ms)","healthCheck":"Terveystarkastus","healthCheckDesc":"Tarkista palveluntarjoajan saatavuus etukäteen","trackMetrics":"Seuraa mittareita","trackMetricsDesc":"Tallenna yhdistelmäkohtaiset pyyntötiedot","providerOverrides":"Palveluntarjoajan ohitukset","providerOverridesDesc":"Ohita aikakatkaisu ja yritä uudelleen palveluntarjoajan mukaan. Palveluntarjoajan asetukset ohittavat yleiset oletukset.","providerMaxRetriesAria":"{provider} enintään uudelleenyritystä","providerTimeoutAria":"{provider} aikakatkaisu ms","removeProviderOverrideAria":"Poista {provider} ohitus","newProviderNamePlaceholder":"esim. google, avaa...","newProviderNameAria":"Uusi palveluntarjoajan nimi","retries":"yrittää uudelleen","ms":"ms","saveComboDefaults":"Tallenna yhdistelmän oletusasetukset","maxNestingDepth":"Suurin pesintäsyvyys","concurrencyPerModel":"Samanaikaisuus / malli","queueTimeout":"Jonon aikakatkaisu (ms)","providerProfiles":"Palveluntarjoajan profiilit","providerProfilesDesc":"Erilliset joustavuusasetukset OAuth- (istuntopohjainen) ja API-avaimen (mittari) tarjoajille. OAuth-palveluntarjoajilla on tiukemmat kynnykset alhaisempien nopeusrajojen vuoksi.","oauthProviders":"OAuth-palveluntarjoajat","apiKeyProviders":"API-avainten tarjoajat","transientCooldown":"Ohimenevä jäähtyminen","rateLimitCooldown":"Rate Limit Cooldown","maxBackoffLevel":"Maksimitaso","cbThreshold":"CB-kynnys","cbResetTime":"CB-nollausaika","rateLimiting":"Rate Limiting","rateLimitingDesc":"API-avainten tarjoajat ovat automaattisesti nopeudeltaan rajoitettuja turvallisilla oletusasetuksilla. Rajat opitaan vastausotsikoista ja mukautuvat ajan myötä.","defaultSafetyNet":"Oletusturvaverkko","rpm":"RPM","minGap":"Min Gap","maxConcurrent":"Max Samanaikainen","activeLimiters":"Aktiiviset rajoittimet","noActiveLimiters":"Ei vielä aktiivisia nopeudenrajoittimia.","reservoir":"Säiliö","running":"Juoksemassa","queued":"Jonossa","circuitBreakers":"Katkaisijat","breakerStateClosed":"Suljettu","breakerStateOpen":"Avaa","breakerStateHalfOpen":"Puoliavoin","tripped":"{count} lauennut","healthy":"{count} terve","resetAll":"Nollaa kaikki","noCircuitBreakers":"Katkaisijat eivät ole vielä aktiivisia. Ne luodaan automaattisesti, kun pyynnöt kulkevat yhdistelmäputkilinjan läpi.","failures":"{count} virhe(ä)","policiesLocked":"Käytännöt ja lukitut tunnisteet","allOperational":"Kaikki järjestelmät toimivat – ei lukituksia tai lauenneita katkaisijoita","loadingPolicies":"Ladataan käytäntöjä...","lockedIdentifiers":"Lukitut tunnisteet","unlockedIdentifier":"Avattu: {identifier}","sinceDate":"alkaen {date}","forceUnlock":"Pakota lukitus","unlocking":"Avataan...","failedUnlock":"Lukituksen avaaminen epäonnistui","failedLoadWithStatus":"Lataus epäonnistui: {status}","failedLoadResilience":"Resilienssitilan lataaminen epäonnistui","saveFailed":"Tallennus epäonnistui","resetFailed":"Nollaus epäonnistui","loadingResilience":"Ladataan joustavuuden tilaa...","retry":"Yritä uudelleen","systemStorage":"Järjestelmä ja tallennustila","allDataLocal":"Kaikki tiedot on tallennettu paikallisesti koneellesi","databasePath":"Tietokannan polku","exportDatabase":"Vie tietokanta","exportAll":"Vie kaikki (.tar.gz)","importDatabase":"Tuo tietokanta","confirmDbImport":"Vahvista tietokannan tuonti","confirmDbImportDesc":"Tämä korvaa kaikki nykyiset tiedot kohteen {file} sisällöllä. Varmuuskopio luodaan automaattisesti ennen tuontia.","yesImport":"Kyllä, tuonti","lastBackup":"Viimeinen varmuuskopio","noBackupYet":"Ei vielä varmuuskopiota","backupNow":"Varmuuskopioi nyt","backupRestore":"Varmuuskopiointi ja palautus","viewBackups":"Näytä varmuuskopiot","hide":"Piilota","backupRetentionDesc":"Tietokannan tilannevedokset luodaan automaattisesti ennen palautusta ja 15 minuutin välein tietojen muuttuessa. Säilytys: 24 tunnin välein + 30 päivittäistä varmuuskopiota älykkäällä kierrolla.","loadingBackups":"Ladataan varmuuskopioita...","noBackupsYet":"Varmuuskopioita ei ole vielä saatavilla. Varmuuskopiot luodaan automaattisesti, kun tiedot muuttuvat.","backupsAvailable":"{count} varmuuskopio(t) saatavilla","refresh":"Päivitä","confirm":"Vahvista?","yes":"Kyllä","no":"Ei","restore":"Palauta","invalidFileType":"Virheellinen tiedostotyyppi. Vain .sqlite-tiedostot hyväksytään.","exportFailed":"Vienti epäonnistui","exportFailedWithError":"Vienti epäonnistui: {error}","fullExportFailedWithError":"Täysi vienti epäonnistui: {error}","backupCreated":"Varmuuskopio luotu: {file}","restoreSuccess":"Palautettu! {connections} yhteydet, {nodes} solmut, {combos} yhdistelmät, {apiKeys} API-avaimet.","importSuccess":"Tietokanta tuotu! {connections} yhteydet, {nodes} solmut, {combos} yhdistelmät, {apiKeys} API-avaimet.","justNow":"juuri nyt","minutesAgo":"{count}min sitten","hoursAgo":"{count}h sitten","daysAgo":"{count}pv sitten","backupReasonManual":"manuaalinen","backupReasonPreRestore":"esipalautus","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"Ei muutoksia edellisen varmuuskopioinnin jälkeen","backupFailed":"Varmuuskopiointi epäonnistui","restoreFailed":"Palautus epäonnistui","importFailed":"Tuonti epäonnistui","errorDuringRestore":"Palautuksen aikana tapahtui virhe","errorDuringImport":"Tuonnin aikana tapahtui virhe","modelPricing":"Mallin hinnoittelu","modelPricingDesc":"Määritä mallikohtaiset hintahinnat • Kaikki hinnat $/1M tunnuksissa","providers":"Palveluntarjoajat","registry":"Rekisteri","priced":"hinnoiteltu","searchProvidersModels":"Hae palveluntarjoajia tai malleja...","showAll":"Näytä kaikki","noProvidersMatch":"Yksikään palveluntarjoaja ei vastaa hakuasi.","howPricingWorks":"Kuinka hinnoittelu toimii","cacheWrite":"Välimuistin kirjoitus","unsaved":"tallentamaton","resetDefaults":"Palauta oletukset","saveProvider":"Tallenna palveluntarjoaja","saving":"Tallennetaan...","model":"Malli","models":"mallit","moreProviders":"{count} lisää palveluntarjoajia","withPricing":"hinnoittelu määritettynä","policiesCircuitBreakers":"Käytännöt ja katkaisijat","activeIssuesDetected":"Aktiivisia ongelmia havaittu","off":"Pois päältä","resetPricingConfirm":"Palautetaanko kaikki kohteen {provider} hinnat oletusasetuksiin?","pricingDescInput":"Syöte: mallille lähetetyt tunnukset","pricingDescOutput":"Tulos: luotuja merkkejä","pricingDescCached":"Välimuistissa: uudelleen käytetty syöttö (~50 % syöttönopeudesta)","pricingDescReasoning":"Päättely: ajattelumerkit (palautuu ulostuloon)","pricingDescCacheWrite":"Välimuistin kirjoitus: välimuistin merkintöjen luominen (palautuu syötteeseen)","pricingDescFormula":"Kustannukset = (syöttö × syöttönopeus) + (tuotos × lähtönopeus) + (välimuisti × välimuistin_nopeus) miljoonaa merkkiä kohden.","pricingSettingsTitle":"Hinnoitteluasetukset","totalModels":"Mallit yhteensä","active":"Aktiivinen","costCalculation":"Kustannuslaskenta","costCalculationDesc":"Kustannukset lasketaan kullekin mallille määritettyjen tunnuksen käytön ja hinnoittelun perusteella.","pricingFormat":"Hinnoittelumuoto","pricingFormatDesc":"Kaikki hinnat ovat $/1M tokeneita (dollaria per miljoonaa rahaketta).","tokenTypes":"Token-tyypit","inputTokenDesc":"Vakiokehotetunnukset","outputTokenDesc":"Täydennys-/vastaustunnukset","cachedTokenDesc":"Välimuistissa olevat syöttötunnukset (yleensä 50 % syöttönopeudesta)","reasoningTokenDesc":"Erityiset päättely-/ajattelutunnisteet (varaustulosta)","cacheCreationTokenDesc":"Välimuistimerkintöjen luomiseen käytetyt tunnukset (varausarvo syöttönopeuteen)","customPricingNote":"Voit ohittaa tiettyjen mallien oletushinnoittelun. Mukautetut ohitukset ovat etusijalla automaattisesti tunnistettuihin hinnoitteluun nähden.","editPricing":"Muokkaa hinnoittelua","viewFullDetails":"Näytä täydelliset tiedot","themeCoral":"Koralli","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":"Edistynyt reititysopastus","routingAdvancedGuideHint1":"Käytä Täytä ensin ennustettavaa prioriteettia varten, Round Robinia oikeudenmukaisuuden varmistamiseksi ja P2C:tä latenssin kestävyyteen.","routingAdvancedGuideHint2":"Jos palveluntarjoajat vaihtelevat laadultaan/kustannuksiltaan, aloita Cost Opt -vaihtoehdolla taustatyössä ja Vähiten käytetyllä tasapainoiseen kulumiseen.","comboDefaultsGuideTitle":"Kuinka virittää yhdistelmäoletusasetukset","comboDefaultsGuideHint1":"Pidä uudelleenyritykset alhaisena matalan viiveen virroissa; lisää aikakatkaisua vain pitkiä sukupolvitehtäviä varten.","comboDefaultsGuideHint2":"Käytä palveluntarjoajan ohituksia, kun yksi palveluntarjoaja tarvitsee erilaista aikakatkaisu-/uudelleenyritystoimintaa kuin yleiset oletusasetukset."},"translator":{"title":"Kääntäjä","metaTitle":"Kääntäjä leikkikenttä | OmniRoute","metaDescription":"Tee virheenkorjaus, testaa ja visualisoi API-muotojen käännökset palveluntarjoajien välillä","playgroundTitle":"Kääntäjä leikkikenttä","playground":"Leikkipaikka","realtime":"Reaaliaikainen käännöstoiminta","chatTester":"Chatin testaaja","testBench":"Testipenkki","liveMonitor":"Live Monitor","modeDescriptionPlayground":"Liitä mikä tahansa API-pyynnön runko ja katso, kuinka OmniRoute kääntää sen toimittajamuotojen välillä (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)","modeDescriptionChatTester":"Lähetä todellisia chat-pyyntöjä OmniRouten kautta ja tarkasta koko meno-paluu: syöttö, käännetty pyyntö, palveluntarjoajan vastaus ja käännetty tulos.","modeDescriptionTestBench":"Suorita ennalta määritettyjä skenaarioita ja vertaile toimittajien ja mallien yhteensopivuutta.","modeDescriptionLiveMonitor":"Katso käännöstapahtumia reaaliajassa, kun pyynnöt kulkevat OmniRouten kautta.","modeDescriptionFallback":"Tee virheenkorjaus, testaa ja visualisoi, kuinka OmniRoute kääntää API-pyynnöt palveluntarjoajien välillä.","recentTranslations":"Viimeaikaiset käännökset","noTranslations":"Ei vielä käännöksiä","source":"lähde","target":"Kohde","time":"Aika","model":"Malli","status":"Tila","latency":"Latenssi","totalTranslations":"Yhteensä käännöksiä","successful":"Onnistunut","errors":"Virheet","avgLatency":"Keskimääräinen viive","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Live - automaattinen päivitys","paused":"Keskeytetty","eventsAppearHint":"Käännöstapahtumat näkyvät täällä, kun pyynnöt kulkevat OmniRouten kautta. Käytä mitä tahansa näistä menetelmistä tapahtumien luomiseen:","chatTesterTab":"Chat Tester -välilehti","testBenchTab":"Testipenkki-välilehti","externalApiCalls":"Ulkoiset API-kutsut","ideCliIntegrations":"IDE/CLI-integraatiot","inMemoryNote":"Huomautus: Tapahtumat tallennetaan muistiin ja nollataan, kun palvelin käynnistyy uudelleen.","ok":"OK","errorShort":"ERR","formatConverter":"Format Converter","formatConverterDescription":"Liitä tai kirjoita JSON-pyynnön leipäteksti. Kääntäjä tunnistaa automaattisesti lähdemuodon ja muuntaa sen kohdemuotoon. Käytä tätä virheenkorjaukseen, kuinka OmniRoute kääntää pyynnöt muotojen välillä (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).","input":"Syöte","output":"Lähtö","auto":"Auto","swapFormats":"Vaihda formaatteja","translateAction":"Käännä","clear":"Selkeä","inputPlaceholder":"Liitä pyynnön teksti tähän tai valitse malli alta...","exampleTemplates":"Esimerkkimalleja","exampleTemplatesHint":"- Napsauta ladataksesi","templateLoadHint":"Malli lataa pyynnön muodossa {format}. Muuta lähdemuotoa ladataksesi eri muodossa.","compatibilityTester":"Yhteensopivuuden testaaja","compatibilityReport":"Yhteensopivuusraportti","testBenchDescription":"Suorita ennalta määritettyjä skenaarioita (Simple Chat, Tool Calling jne.) varmistaaksesi käännöksen ja palveluntarjoajan yhteensopivuuden. Valitse lähdemuoto ja kohdetoimittaja ja suorita sitten kaikki testit nähdäksesi yhteensopivuusprosentti. Käytä tätä selvittääksesi, mitkä ominaisuudet toimivat eri palveluntarjoajien välillä.","targetProvider":"Kohdetoimittaja","runAllTests":"Suorita kaikki testit","runTest":"Suorita testi","reRun":"Suorita uudelleen","running":"Juoksemassa...","passed":"läpäissyt","failed":"epäonnistunut","passedIconLabel":"✅ Läpäisty","chunks":"paloina","scenarioSimpleChat":"Yksinkertainen chat","scenarioToolCalling":"Työkalun kutsuminen","scenarioMultiTurn":"Monikierros","scenarioThinking":"Ajatteleminen","scenarioSystemPrompt":"Järjestelmäkehote","scenarioStreaming":"Suoratoisto","templateNames":{"simple-chat":"Yksinkertainen chat","tool-calling":"Työkalun kutsuminen","multi-turn":"Monikierros","thinking":"Ajatteleminen","system-prompt":"Järjestelmäkehote","streaming":"Suoratoisto"},"templateDescriptions":{"simple-chat":"Perustekstiviesti","tool-calling":"Toiminnon/työkalun kutsuminen","multi-turn":"Keskustelua historian kanssa","thinking":"Laajennettu ajattelu/päättely","system-prompt":"Monimutkaiset järjestelmäohjeet","streaming":"SSE-suoratoistopyyntö"},"templatePayloads":{"simpleChat":{"system":"Olet avulias avustaja.","userGreeting":"Hei! Miten voit tänään?"},"toolCalling":{"userWeather":"Millainen sää on São Paulossa?","toolDescription":"Hanki nykyisen sijainnin sää","cityNameDescription":"Kaupungin nimi"},"multiTurn":{"system":"Olet koodausassistentti.","userInitial":"Kirjoita funktio taulukon lajittelemiseksi Pythonissa.","assistantExample":"Tässä on yksinkertainen lajittelutoiminto:\\n\\n``` python\\ndef sort_array(arr):\\n palautus lajiteltuna(arr)\\n```","userFollowUp":"Järjestä se nyt laskevaan järjestykseen."},"thinking":{"question":"Mikä on 100 ensimmäisen alkuluvun summa?"},"systemPrompt":{"systemInstruction":"Olet hajautettuihin järjestelmiin erikoistunut vanhempi ohjelmistosuunnittelija. Vastaa kysymyksiin ytimekkäästi käyttämällä alan parhaita käytäntöjä. Anna aina koodiesimerkkejä tarvittaessa. Muotoile vastauksesi käyttämällä markdownia.","question":"Kuinka otan käyttöön katkaisijakuvion?"},"streaming":{"prompt":"Kerro minulle lyhyt tarina robotista, joka oppii maalaamaan."}},"openaiCompatibleLabel":"OpenAI-yhteensopiva","anthropicCompatibleLabel":"Antrooppinen yhteensopiva","noTemplateForFormat":"Ei mallia tälle muodolle","translationFailed":"Käännös epäonnistui: {error}","pipelineDebugger":"Pipeline Debugger","translationPipeline":"Käännösputki","pipelineVisualization":"Putkilinjan visualisointi","pipelineVisualizationHint":"Lähetä viesti nähdäksesi, kuinka pyyntösi etenee tunnistuksen → käännös → palveluntarjoajan puhelun kautta.","chatTesterDescription":"Lähetä viestejä tietyssä asiakasmuodossa ja tarkista käännösputken jokainen vaihe.","chatTesterFlow":"Asiakaspyyntö → muodon tunnistus → OpenAI-välitaso → tarjoajan muoto → vastaus","clickStepToInspect":"Napsauta mitä tahansa vaihetta tarkistaaksesi tiedot siinä vaiheessa.","clientFormat":"Asiakasmuoto","provider":"Palveluntarjoaja","modelPlaceholder":"Valitse tai kirjoita mallin nimi...","sendMessageToSeePipeline":"Lähetä viesti nähdäksesi käännösputken","chatMessageHintPrefix":"Viestisi muotoillaan muodossa a","chatMessageHintSuffix":"pyyntö, käännetään putken kautta ja lähetetään valitulle palveluntarjoajalle.","youWithFormat":"Sinä ({format})","assistant":"Assistant","typeMessage":"Kirjoita viesti...","send":"Lähetä","clientRequest":"Asiakaspyyntö","clientRequestDescription":"Pyynnön elin sellaisena kuin asiakkaasi sen lähettäisi","formatDetected":"Muoto havaittu","formatDetectedDescription":"OmniRoute tunnistaa automaattisesti API-muodon pyyntörakenteesta","openaiIntermediate":"OpenAI Intermediate","openaiIntermediateDescription":"Kaikki muodot normalisoidaan ensin OpenAI-muotoon (yleinen silta)","providerFormat":"Tarjoajan muoto","providerFormatDescription":"OpenAI-muoto käännetään palveluntarjoajan alkuperäiseen muotoon","providerResponse":"Palveluntarjoajan vastaus","providerResponseRawDescription":"Raaka vastaus palveluntarjoajan API:lta","providerResponseSseDescription":"Raaka SSE-stream palveluntarjoajan sovellusliittymästä","unexpectedError":"Tapahtui odottamaton virhe","error":"Virhe","errorMessage":"Virhe: {message}","requestFailed":"Pyyntö epäonnistui","noTextExtracted":"(Ei tekstiä poimittu)","liveMonitorDescriptionPrefix":"Näyttää käännöstapahtumat, kun API-kutsut kulkevat OmniRouten kautta. Tapahtumat tulevat muistin puskurista (palautuu uudelleenkäynnistyksen yhteydessä). Käytä","liveMonitorDescriptionSuffix":"tai ulkoisia API-kutsuja tapahtumien luomiseksi."},"usage":{"title":"Käyttö","loggerTab":"Kirjaaja","proxyTab":"Välityspalvelin","budgetManagement":"Budjetin hallinta","budgetSaved":"Budjettirajat tallennettu","budgetSaveFailed":"Budjetin säästäminen epäonnistui","loadingBudgetData":"Ladataan budjettitietoja...","noApiKeysTitle":"Ei API-avaimia","noApiKeysDescription":"Lisää ensin API-avaimet budjettirajojen määrittämiseksi.","apiKey":"API-avain","todaysSpend":"Päivän kulutus","thisMonth":"Tässä kuussa","setLimits":"Aseta rajat","dailyLimitUsd":"Päivittäinen raja (USD)","monthlyLimitUsd":"Kuukausiraja (USD)","warningThresholdPercent":"Varoituskynnys (%)","dailyLimitPlaceholder":"esim. 5.00","monthlyLimitPlaceholder":"esim. 50.00","warningThresholdPlaceholder":"80","saveLimits":"Tallenna rajoitukset","budgetOk":"Budjetti OK – {remaining} jäljellä","budgetExceeded":"Budjetti ylitetty – pyynnöt voidaan estää","totalRequests":"Pyyntöjä yhteensä","noDataYet":"Ei vielä dataa","latency":"Latenssi","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Kehotusvälimuisti","systemHealth":"Järjestelmän terveys","entries":"merkinnät","activeCount":"{count} aktiivinen","openCircuitBreakersDetected":"Katkaisijat havaittu","hitRate":"Osumaprosentti","hitsMisses":"Osumat / Miss","circuitBreakers":"Katkaisijat","lockedIPs":"Lukitut IP:t","lockoutsAutoRefreshHint":"Mallikohtaiset nopeusrajoitukset • Automaattinen päivitys 10s","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} jäljellä","howItWorks":"Miten se toimii","howItWorksSubtitle":"Opi kuinka arvioinnit vahvistavat LLM-vastauksesi","define":"Määritä","defineStepDescription":"Luo testitapauksia, joissa on syöttökehotteita ja odotettuja tulosehtoja käyttämällä strategioita, kuten sisältää, regex tai tarkka vastaavuus.","run":"Juokse","runStepDescription":"Suorita testitapauksia LLM-päätepisteitäsi vastaan OmniRouten kautta. Jokainen tapaus lähetetään todellisena API-pyyntönä.","evaluate":"Arvioi","evaluateStepDescription":"Vastauksia verrataan odotettuihin kriteereihin. Katso kunkin tapauksen hyväksyntä/hylkäys viivemittareiden ja yksityiskohtaisen palautteen avulla.","evalSuites":"Arviointisviitit","evalSuitesHint":"Napsauta sarjaa tarkastellaksesi testitapauksia ja suorita sitten LLM-päätepisteiden arvioiminen","evalsLoading":"Ladataan eval-sviittejä...","noEvalSuitesFound":"Eval Suitesta ei löytynyt","noEvalSuitesDescription":"Eval-sarjat voidaan määrittää API:n kautta tai koodilla. He testaavat mallin tuloksia odotettujen tulosten kanssa käyttämällä strategioita, kuten sisältää, regex, tarkka vastaavuus ja mukautetut funktiot.","columnCase":"Asia","columnStatus":"Tila","columnLatency":"Latenssi","columnDetails":"Yksityiskohdat","columnModel":"Malli","columnStrategy":"strategia","columnExpected":"Odotettu","statsSuites":"Sviitit","statsTestCases":"Testitapaukset","statsModels":"Mallit","statsCoverage":"Kattavuus","statsStrategiesCount":"{count} strategioita","evaluationStrategies":"Arviointistrategiat","modelsUnderTest":"Mallit testattavana","searchSuitesPlaceholder":"Etsi sviittejä...","passSuffix":"pass","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Juokse Eval","runningProgress":"Käynnissä {current}/{total}...","passRate":"läpäisyaste","summaryBreakdown":"{passed} hyväksytty · {failed} epäonnistui · {total} yhteensä","passedIconLabel":"✅ Läpäisty","failedIconLabel":"❌ Epäonnistui","detailsContains":"Sisältää: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Odotettu: \\"{expected}\\"","noResultsYet":"Ei tuloksia vielä","testCasesCount":"Testitapaukset ({count})","noTestCasesDefined":"Testitapauksia ei ole määritelty","runEvalHint":"Napsauta \\"Suorita Eval\\" suorittaaksesi kaikki tapaukset LLM-päätepisteellesi. Jokainen testi lähettää oikean pyynnön OmniRouten kautta.","notifyNoTestCases":"Tälle sarjalle ei ole määritetty testitapauksia","notifyAllCasesPassed":"Kaikki {total} tapausta ohitettu ✅","notifySomeCasesFailed":"{passed}/{total} hyväksytty, {failed} epäonnistui","notifyEvalRunFailed":"Eval-juoksu epäonnistui","notifyEvalTitle":"Arvosana: {name}","modelEvals":"Mallin arvioinnit","evalsHeroDescription":"Testaa ja vahvista LLM-päätepisteesi suorittamalla ennalta määritettyjä arviointipaketteja. Jokainen sarja sisältää testitapauksia, jotka lähettävät todellisia kehotteita OmniRouten kautta ja vertaavat vastauksia odotettuihin kriteereihin – auttaen sinua havaitsemaan regressioita, vertailla malleja ja varmistamaan vastausten laadun eri tarjoajien välillä.","qualityValidation":"Laadun validointi","modelComparison":"Mallin vertailu","regressionDetection":"Regression havaitseminen","latencyBenchmarks":"Viiveen vertailuarvot","modelLockouts":"Mallin lukitukset","noLockouts":"Tällä hetkellä ei ole lukittuja malleja","activeSessions":"Aktiiviset istunnot","noSessions":"Ei aktiivisia istuntoja","sessionsHint":"Istunnot näkyvät välityspalvelimen kautta kulkevien pyyntöjen aikana","sessionsTrackedHint":"Seurataan sormenjälkien pyytämisellä • Automaattinen päivitys 5s","session":"Istunto","age":"Ikä","requests":"Pyynnöt","connection":"Yhteys","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value}m","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Palveluntarjoajan rajoitukset","noProviders":"Ei yhdistettyjä palveluntarjoajia","connectProvidersForQuota":"Muodosta yhteys palveluntarjoajiin OAuthin avulla seurataksesi API-kiintiörajoja ja käyttöä.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(suodatettu kohteesta {count})","autoRefresh":"Automaattinen päivitys","refreshAll":"Päivitä kaikki","loadingQuotas":"Ladataan...","account":"Tili","modelQuotas":"Mallikiintiöt","lastUsed":"Viimeksi käytetty","actions":"Toiminnot","refreshQuota":"Päivitä kiintiö","today":"Tänään","tomorrow":"Huomenna","dayTimeFormat":"{day}, {time}","inDuration":"kohteessa {duration}","notApplicable":"Ei käytössä","rawPlanWithValue":"Raakasuunnitelma: {plan}","noPlanFromProvider":"Ei suunnitelmaa palveluntarjoajalta","noQuotaData":"Ei kiintiötietoja","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Kiintiötietoja ei ole saatavilla","noAccountsForTierFilter":"Tasosuodattimelle ei löytynyt tilejä","tierAll":"Kaikki","tierEnterprise":"Yritys","tierTeam":"Joukkue","tierBusiness":"Business","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Plus","tierFree":"Ilmainen","tierUnknown":"Tuntematon"},"modals":{"waitingAuth":"Odotetaan valtuutusta","verificationUrl":"Vahvistus-URL","yourCode":"Koodisi","remoteAccess":"Etäkäyttö:","connectedSuccess":"Yhdistetty onnistuneesti!","connectionFailed":"Yhteys epäonnistui","chooseAuthMethod":"Valitse todennustapasi:","awsBuilderId":"AWS Builder ID","awsIamIdentity":"AWS IAM Identity Center","googleAccount":"Google-tili","githubAccount":"GitHub-tili","importToken":"Tuo tunnus","pasteToken":"Liitä päivitystunnus Kiro IDE:stä.","awsRegion":"AWS-alue","autoDetecting":"Tunnistetaan automaattisesti...","readingFromCache":"Lukee AWS SSO -välimuistista","readingFromCursor":"Lukeminen Cursor IDE -tietokannasta","initializing":"Alustetaan...","pricingConfig":"Hinnoitteluasetukset","loadingPricing":"Ladataan hintatietoja...","pricingRatesFormat":"Hinnoitteluhinnastomuoto","noPricingData":"Hintatietoja ei ole saatavilla","noModelsFound":"Malleja ei löytynyt"},"loggers":{"allProviders":"Kaikki palveluntarjoajat","allModels":"Kaikki mallit","allAccounts":"Kaikki tilit","allApiKeys":"Kaikki API-avaimet","allTypes":"Kaikki tyypit","allLevels":"Kaikki tasot","modelAZ":"Malli A-Z","modelZA":"Malli Z-A","loadingLogs":"Ladataan lokeja...","loadingProxyLogs":"Ladataan välityspalvelimen lokeja...","noLogEntries":"Lokimerkintöjä ei löytynyt","noPayloadData":"Tälle lokimerkinnälle ei ole saatavilla hyötykuormatietoja.","proxyEvent":"Välityspalvelintapahtuma","proxy":"Välityspalvelin","level":"Taso","directNative":"Suora (natiivi)","combo":"Yhdistelmä","inputTokens":"Minä:","outputTokens":"O:"},"stats":{"usageOverview":"Käyttökatsaus","outputTokens":"Tulostustunnukset","totalCost":"Kokonaiskustannukset","usageByModel":"Käyttö mallin mukaan","usageByAccount":"Käyttö tilikohtaisesti","failedToLoad":"Käyttötilastojen lataaminen epäonnistui.","tokenHealth":"Token Health","totalOAuth":"Yhteensä OAuth","healthy":"Terve","warning":"Varoitus","errored":"Virheellinen","lastCheck":"Viimeinen tarkistus","noData":"Ei dataa","share":"Jaa","unableToLoad":"Järjestelmän mittareita ei voi ladata","product":"Tuote","resources":"Resurssit","company":"Yritys"},"auth":{"welcome":"Tervetuloa","signIn":"Kirjaudu sisään","enterPassword":"Anna salasanasi jatkaaksesi","password":"Salasana","unifiedProxy":"Unified AI API Proxy","unifiedAiApiProxy":"Unified AI API Proxy","unifiedAiApiProxyDesc":"Reititä pyynnöt useille tekoälypalveluntarjoajille yhden päätepisteen kautta. Kuormituksen tasapainotus, vikasieto ja käytön seuranta sisäänrakennettu.","passwordNotEnabled":"Salasanasuojaus ei ole käytössä","loading":"Ladataan...","invalidPassword":"Virheellinen salasana","errorOccurredRetry":"Tapahtui virhe. Yritä uudelleen.","configureInstance":"Määritetään OmniRoute-esiintymäsi","runOnboardingWizard":"Määritä salasanasi ja yhdistä ensimmäinen tekoälypalveluntarjoajasi suorittamalla ohjattu käyttöönottotoiminto.","startOnboarding":"Aloita perehtyminen","secureYourInstance":"Suojaa tapauksesi","setPasswordDescription":"Aseta salasana suojataksesi kojelautaasi ja suojataksesi API-päätepisteesi luvattomalta käytöltä.","configurePassword":"Määritä salasana","continue":"Jatka","windowWillClose":"Tämä ikkuna sulkeutuu automaattisesti...","closeTabNow":"Voit sulkea tämän välilehden nyt.","copyUrlManual":"Kopioi URL-osoite osoitepalkista ja liitä se sovellukseen.","accessDeniedDescription":"Sinulla ei ole lupaa käyttää tätä resurssia. Tarkista API-avaimesi tai ota yhteyttä järjestelmänvalvojaan.","goToDashboard":"Siirry Dashboardiin","featureMultiProviderTitle":"Multi-Provider","featureMultiProviderDesc":"OpenAI, Anthropic, Google ja paljon muuta","featureLoadBalancingTitle":"Kuorman tasapainotus","featureLoadBalancingDesc":"Jaa pyynnöt älykkäästi","featureUsageTrackingTitle":"Käytön seuranta","featureUsageTrackingDesc":"Valvo kustannuksia ja tokeneja","resetPassword":"Palauta salasana","resetDescription":"Valitse menetelmä hallintapaneelin käyttöoikeuden palauttamiseksi","stopServer":"Pysäytä OmniRoute-palvelin","processing":"Käsitellään...","pleaseWait":"Odota, kun saamme valtuutuksen valmiiksi.","authSuccess":"Valtuutus onnistui!","copyUrl":"Kopioi tämä URL-osoite","accessDenied":"Pääsy kielletty","methodCliTitle":"Tapa 1: CLI-nollaus","methodCliDescription":"Suorita seuraava komento palvelimella, jossa OmniRoute on käynnissä:","methodCliHint":"Tämä kehottaa sinua asettamaan uuden salasanan. Palvelin on ensin pysäytettävä.","methodManualTitle":"Tapa 2: Manuaalinen nollaus","methodManualDescription":"Poista salasana tietokannasta ja aseta uusi salasana käynnistyksen yhteydessä:","setPasswordInYour":"Aseta uusi salasana omaan","fileLabelSuffix":"tiedosto:","newPasswordPlaceholder":"your_new_password","deleteSettingsFile":"Poista","orRemovePasswordHashField":"tai poista salasanaHash-kenttä","restartServerWithNewPassword":"Käynnistä palvelin uudelleen - se käyttää uutta salasanaa","backToLogin":"Takaisin kirjautumiseen","forgotPassword":"Unohditko salasanan?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Valtuutus","Content-Disposition":"Sisältö-sijoittelu","waitingForAuthorization":"Odotetaan valtuutusta...","waitingForGoogleAuthorization":"Odotetaan Googlen valtuutusta...","waitingForOpenAIAuthorization":"Odotetaan OpenAI-valtuutusta...","waitingForAntigravityAuthorization":"Odotetaan antigravitaatiovaltuutusta...","waitingForIFlowAuthorization":"Odotetaan iFlow-valtuutusta...","exchangingCodeForTokens":"Vaihdetaan koodia tokeneihin..."},"landing":{"brandName":"OmniRoute","navigateHome":"Navigoi kotiin","toggleMenu":"Vaihda valikkoa","featuresLink":"Ominaisuudet","docsLink":"Asiakirjat","github":"GitHub","versionLive":"v1.0 on nyt julkaistu","oneEndpoint":"Yksi päätepiste","allProviders":"Kaikki AI-palveluntarjoajat","heroDescription":"AI-päätepisteen välityspalvelin web-hallintapaneelilla – CLIProxyAPI:n JavaScript-portti. Toimii saumattomasti Claude Coden, OpenAI Codexin, Clinen, RooCoden ja muiden CLI-työkalujen kanssa.","getStarted":"Aloita","viewOnGithub":"Katso GitHubissa","powerfulFeatures":"Tehokkaat ominaisuudet","featuresSubtitle":"Kaikki mitä tarvitset AI-infrastruktuurin hallintaan yhdessä paikassa, mittakaavassa rakennettu.","featureUnifiedEndpointTitle":"Yhtenäinen päätepiste","featureUnifiedEndpointDesc":"Pääset kaikkiin palveluntarjoajiin yhden standardin API-URL-osoitteen kautta.","featureEasySetupTitle":"Helppo asennus","featureEasySetupDesc":"Pääset käyntiin muutamassa minuutissa npx-komennolla.","featureModelFallbackTitle":"Mallin takaisku","featureModelFallbackDesc":"Vaihda automaattisesti palveluntarjoajaa vikatilanteen tai korkean viiveen sattuessa.","featureUsageTrackingTitle":"Käytön seuranta","featureUsageTrackingDesc":"Yksityiskohtainen analytiikka ja kustannusseuranta kaikissa malleissa.","featureOAuthApiKeysTitle":"OAuth- ja API-avaimet","featureOAuthApiKeysDesc":"Hallitse tunnistetietoja turvallisesti yhdessä holvissa.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncDesc":"Synkronoi määritykset eri laitteiden välillä välittömästi.","featureCliSupportTitle":"CLI-tuki","featureCliSupportDesc":"Toimii Claude Coden, Codexin, Clinen, Cursorin ja muiden kanssa.","featureDashboardTitle":"Kojelauta","featureDashboardDesc":"Visuaalinen kojelauta reaaliaikaista liikenneanalyysiä varten.","howItWorks":"Kuinka OmniRoute toimii","howItWorksDescription":"Tiedot kulkevat saumattomasti sovelluksestasi älykkään reitityskerroksen kautta työsi parhaalle toimittajalle.","howItWorksStep1Title":"1. CLI ja SDK:t","howItWorksStep1Description":"Pyyntösi alkavat suosikkityökaluistasi tai yhdistetystä SDK:sta. Vaihda vain perus-URL-osoite.","howItWorksStep2Title":"2. OmniRoute Hub","howItWorksStep2Description":"Moottorimme analysoi kehotteen, tarkistaa palveluntarjoajan kunnon ja reitit pienimmän viiveen tai kustannusten varalta.","howItWorksStep3Title":"3. AI-palveluntarjoajat","howItWorksStep3Description":"OpenAI, Anthropic, Gemini tai muut täyttävät pyynnön välittömästi.","getStartedIn30Seconds":"Aloita 30 sekunnissa","getStartedDescription":"Asenna OmniRoute, määritä palveluntarjoajasi web-hallintapaneelin kautta ja aloita AI-pyyntöjen reitittäminen.","installOmniRoute":"Asenna OmniRoute","installStepDescription":"Suorita npx-komento käynnistääksesi palvelimen välittömästi","openDashboard":"Avaa Dashboard","openDashboardStepDescription":"Määritä palveluntarjoajat ja API-avaimet verkkokäyttöliittymän kautta","routeRequests":"Reittipyynnöt","routeRequestsStepDescription":"Osoita CLI-työkalusi osoitteeseen {endpoint}","terminal":"terminaali","copy":"Kopioi","copied":"✓ Kopioitu","startingOmniRoute":"OmniRoute aloitetaan...","serverRunningOnLabel":"Palvelin käynnissä","dashboardLabel":"Kojelauta","readyToRoute":"Valmiina reittiin! ✓","configureProvidersNote":"📝 Määritä palveluntarjoajat kojelaudassa tai käytä ympäristömuuttujia","dataLocation":"Tietojen sijainti:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"Tuote","dashboardLink":"Kojelauta","changelog":"Muutosloki","resources":"Resurssit","documentation":"Dokumentaatio","npm":"NPM","legal":"Laillinen","mitLicense":"MIT-lisenssi","footerTagline":"Tekoälyn sukupolven yhtenäinen päätepiste. Yhdistä, reititä ja hallitse tekoälypalveluntarjoajiasi helposti.","copyright":"© {year} OmniRoute. Kaikki oikeudet pidätetään.","flowToolClaudeCode":"Claude Code","flowToolOpenAICodex":"OpenAI Codex","flowToolCline":"Cline","flowToolCursor":"Kursori","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Antrooppinen","flowProviderGemini":"Kaksoset","flowProviderGithubCopilot":"GitHub Copilot","interactiveDiagram":"Interaktiivinen kaavio näkyy työpöydällä","ctaTitle":"Oletko valmis yksinkertaistamaan tekoäly-infrastruktuuriasi?","ctaDescription":"Liity kehittäjien joukkoon, jotka virtaviivaistavat tekoälyintegraatiotaan OmniRouten avulla. Avoin lähdekoodi ja ilmainen aloittaa.","startFree":"Aloita ilmaiseksi","readDocumentation":"Lue dokumentaatio"},"docs":{"title":"Dokumentaatio","quickStart":"Pika-aloitus","features":"Ominaisuudet","supportedProviders":"Tuetut palveluntarjoajat","supportedProvidersToc":"Palveluntarjoajat","commonUseCases":"Yleiset käyttötapaukset","clientCompatibility":"Asiakasyhteensopivuus","protocolsToc":"Protokollat","apiReference":"API-viite","method":"menetelmä","path":"Polku","notes":"Huomautuksia","modelPrefixes":"Mallin etuliitteet","prefix":"Etuliite","troubleshooting":"Vianetsintä","supportsChat":"Tukee sekä chat- että vastauspäätepisteitä.","oauthAutoRefresh":"OAuth-yhteys automaattisella tunnuksen päivityksellä.","fullStreaming":"Täysi suoratoistotuki kaikille malleille.","docsLabel":"Asiakirjat","docsHeroDescription":"Tekoälyyhdyskäytävä usean palveluntarjoajan LLM:ille. Yksi päätepiste OpenAI:lle, Anthropicille, Geminille, GitHub Copilotille, Claude Codelle, Cursorille ja yli 20 muulle palveluntarjoajalle.","openDashboard":"Avaa Dashboard","endpointPage":"Päätepistesivu","github":"GitHub","reportIssue":"Ilmoita ongelmasta","onThisPage":"Tällä sivulla","documentationVersion":"Dokumentaatio - v{version}","quickStartStep1Title":"1. Asenna ja suorita","quickStartStep1Prefix":"Juokse","quickStartStep1Middle":"tai kloonaa GitHubista ja aja","quickStartStep2Title":"2. Luo API-avain","quickStartStep2Text":"Siirry kohtaan Päätepiste -> Rekisteröidyt avaimet. Luo yksi avain ympäristöä kohden.","quickStartStep3Title":"3. Yhdistä palveluntarjoajat","quickStartStep3Text":"Lisää palveluntarjoajan tilejä OAuth-kirjautumisen, API-avaimen tai vapaan tason automaattisen yhteyden avulla.","quickStartStep4Title":"4. Aseta asiakaskannan URL-osoite","quickStartStep4Prefix":"Osoita IDE- tai API-asiakkaasi","quickStartStep4Suffix":"Käytä esimerkiksi palveluntarjoajan etuliitettä","featureRoutingTitle":"Usean palveluntarjoajan reititys","featureRoutingText":"Reititä pyynnöt yli 30 tekoälypalveluntarjoajalle yhden OpenAI-yhteensopivan päätepisteen kautta. Tukee chat-, vastaus-, ääni- ja kuvasovellusliittymiä.","featureCombosTitle":"Yhdistelmät ja tasapainotus","featureCombosText":"Luo mallikomboja varaketjuilla ja tasapainotusstrategioilla: round-robin, prioriteetti, satunnainen, vähiten käytetty ja kustannusoptimoitu.","featureUsageTitle":"Käytön ja kustannusten seuranta","featureUsageText":"Reaaliaikainen tunnuksen laskenta, kustannuslaskenta palveluntarjoaja-/mallikohtaisesti ja yksityiskohtainen käyttöerittely API-avaimen ja tilin mukaan.","featureAnalyticsTitle":"Analyticsin hallintapaneeli","featureAnalyticsText":"Visuaalinen analytiikka, jossa on kaavioita pyynnöistä, tunnuksista, virheistä, viiveestä, kustannuksista ja mallin suosiosta ajan mittaan.","featureHealthTitle":"Terveyden seuranta","featureHealthText":"Live-terveystarkastukset, palveluntarjoajan tila, katkaisijatilat ja automaattinen nopeusrajan tunnistus eksponentiaalisella perääntymisellä.","featureCliTitle":"CLI-työkalut","featureCliText":"Hallitse IDE-määrityksiä, vie/tuo varmuuskopioita, etsi koodeksiprofiileja ja määritä asetuksia kojelaudalta.","featureSecurityTitle":"Turvallisuus ja käytännöt","featureSecurityText":"API-avaimen todennus, IP-suodatus, pikasyöttösuoja, toimialueen käytännöt, istunnon hallinta ja tarkastusloki.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncText":"Synkronoi kokoonpanosi Cloudflare Workersin kanssa, jotta voit käyttää etäkäyttöä salatuilla tunnistetiedoilla ja automaattisella virheensiirrolla.","providersAcrossConnectionTypes":"{count} palveluntarjoajia kolmessa yhteystyypissä.","manageProviders":"Hallinnoi palveluntarjoajia","providersCount":"{count} palveluntarjoajat","providerTypeFree":"Ilmainen taso","providerTypeOAuth":"OAuth","providerTypeApiKey":"API-avain","useCaseSingleEndpointTitle":"Yksi päätepiste useille palveluntarjoajille","useCaseSingleEndpointText":"Osoita asiakkaat yhteen perus-URL-osoitteeseen ja reititä mallien etuliite (esimerkiksi: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Vara- ja mallinvaihto komboilla","useCaseFallbackText":"Luo yhdistelmämalleja Dashboardissa ja pidä asiakkaan kokoonpano vakaana, kun toimittajat vaihtuvat sisäisesti.","useCaseUsageVisibilityTitle":"Käyttö, hinta ja virheenkorjauksen näkyvyys","useCaseUsageVisibilityText":"Seuraa tunnuksia ja kustannuksia palveluntarjoajan, tilin ja API-avaimen mukaan Käyttö- ja Analytics-välilehdillä.","clientCherryStudioTitle":"Cherry Studio","baseUrlLabel":"Perus-URL-osoite","chatEndpointLabel":"Keskustelun päätepiste","modelRecommendationLabel":"Mallisuositus: selkeä etuliite","clientCodexTitle":"Codex / GitHub Copilot -mallit","clientCodexBullet1":"Käytä mallitunnuksia kanssa","clientCodexBullet2":"Codex-perheen mallit reitittävät automaattisesti kohteeseen","clientCodexBullet3":"Ei-Codex-mallit jatkavat toimintaansa","clientCursorTitle":"Kohdistin IDE","clientCursorBullet1":"Käytä","clientCursorBullet1Suffix":"etuliite kohdistinmalleille.","clientCursorBullet2":"OAuth-yhteys - kirjaudu sisään Palveluntarjoajat-sivulta.","clientClaudeTitle":"Claude Code / Antigravitaatio","clientClaudeBullet1Prefix":"Käytä","clientClaudeBullet1Middle":"(Claude) tai","clientClaudeBullet1Suffix":"(Antigravity) etuliite.","protocolsTitle":"Protokollat: MCP & A2A","protocolsDescription":"OmniRoute paljastaa kaksi toimintaprotokollaa OpenAI-yhteensopivien sovellusliittymien lisäksi: MCP työkalujen suorittamiseen ja A2A agenttien välisiin työnkulkuihin.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Käytä MCP over stdio -palvelua, jotta asiakkaat voivat löytää ja kutsua OmniRoute-työkaluja tarkastuksen näkyvyydellä.","protocolMcpStep1":"Aloita MCP-siirto `omniroute --mcp`:lla.","protocolMcpStep2":"Osoita MCP-asiakkaasi stdio-kuljetukseen.","protocolMcpStep3":"Vahvista yhteys soittamalla `omniroute_get_health` ja `omniroute_list_combos`.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Käytä A2A JSON-RPC:tä tehtävien lähettämiseen synkronisesti tai SSE-suoratoiston kautta.","protocolA2aStep1":"Lue `/.well-known/agent.json` agentin löytämiseksi.","protocolA2aStep2":"Lähetä `message/send` tai `message/stream` pyynnöt osoitteeseen `POST /a2a`.","protocolA2aStep3":"Hallitse tehtävän elinkaarta `tasks/get`- ja `tasks/cancel`-toiminnolla.","protocolTroubleshootingTitle":"Protokollan vianmääritys","protocolTroubleshooting1":"Jos MCP-tila on offline-tilassa, varmista, että stdio-prosessi on käynnissä ja heartbeat-tiedosto päivittyy.","protocolTroubleshooting2":"Jos A2A-tehtävät pysyvät `working`, tarkista `/api/a2a/tasks/:id` ja suoratoista tapahtumat päätteen tilasta.","protocolTroubleshooting3":"Käytä `/dashboard/mcp` ja `/dashboard/a2a` toiminnan ohjaamiseen ja tarkastuksen näkyvyyteen.","endpointChatNote":"OpenAI-yhteensopiva chat-päätepiste (oletus).","endpointResponsesNote":"Responses API-päätepiste (Codex, o-sarja).","endpointModelsNote":"Malliluettelo kaikille liitetyille palveluntarjoajille.","endpointAudioNote":"Äänen transkriptio (Deepgram, AssemblyAI).","endpointImagesNote":"Kuvan luominen (NanoBanana).","endpointRewriteChatNote":"Uudelleenkirjoitusapuohjelma asiakkaille ilman /v1.","endpointRewriteResponsesNote":"Uudelleenkirjoitusapuohjelma vastauksille ilman /v1.","endpointRewriteModelsNote":"Uudelleenkirjoitusapuohjelma mallin etsinnässä ilman /v1:tä.","modelPrefixesDescriptionStart":"Käytä toimittajan etuliitettä ennen mallin nimeä reitittääksesi tietylle toimittajalle. Esimerkki:","modelPrefixesDescriptionEnd":"reitit GitHub Copilotiin.","provider":"Palveluntarjoaja","type":"Kirjoita","troubleshootingModelRouting":"Jos asiakas epäonnistuu mallin reitityksessä, käytä nimenomaista tarjoaja/malli (esimerkiksi: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Jos saat epäselviä mallivirheitä, valitse toimittajan etuliite paljaan mallitunnuksen sijaan.","troubleshootingCodexFamily":"Säilytä GitHub Codex -perheen mallien mallina muodossa gh/codex-model; reititin valitsee / vastaa automaattisesti.","troubleshootingTestConnection":"Käytä Dashboard > Providers > Test Connection ennen testaamista IDE:istä tai ulkoisista asiakkaista.","troubleshootingCircuitBreaker":"Jos palveluntarjoaja näyttää katkaisijan auki, odota jäähtymistä tai katso lisätietoja Terveys-sivulta.","troubleshootingOAuth":"OAuth-palveluntarjoajat todenna uudelleen, jos tunnukset vanhenevat. Tarkista palveluntarjoajan kortin tilailmaisin.","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":"Tekstistä puheeksi luominen (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Tekstin upottaminen (OpenAI, Cohere, Voyage)."},"legal":{"privacyPolicy":"Tietosuojakäytäntö","termsOfService":"Palveluehdot","providerConfigurations":"Palveluntarjoajan määritykset","apiKeys":"API-avaimet","usageLogs":"Käyttölokit","applicationSettings":"Sovellusasetukset","viewExportAnalytics":"Tarkastele ja vie käyttöanalytiikkaa","clearHistory":"Tyhjennä käyttöhistoria milloin tahansa","configureRetention":"Määritä lokin säilytyskäytännöt","backupRestore":"Varmuuskopioi ja palauta tietokanta","privacyMetadataTitle":"Tietosuojakäytäntö | OmniRoute","privacyMetadataDescription":"OmniRoute AI API -välityspalvelimen reitittimen tietosuojakäytäntö.","termsMetadataTitle":"Palveluehdot | OmniRoute","termsMetadataDescription":"OmniRoute AI API -välityspalvelimen reitittimen käyttöehdot.","backToHome":"Takaisin kotiin","lastUpdated":"Viimeksi päivitetty: {date}","policyLastUpdatedDate":"13. helmikuuta 2026","listSeparator":"-","questionsVisit":"Kysymyksiä? Vieraile meillä","githubRepository":"GitHub-arkisto","privacySection1Title":"1. Local-First Architecture","privacySection1Text":"OmniRoute on suunniteltu paikalliseksi sovellukseksi. Kaikki tietojen käsittely ja tallennus tapahtuu kokonaan koneessasi. Ei ole keskitettyä palvelinta, joka kerää tietojasi.","privacySection2Title":"2. Tallentamamme tiedot","privacyDataStoredIn":"Seuraavat tiedot on tallennettu paikallisesti","privacyDataProviderConfigurationsDesc":"yhteyden URL-osoitteet, palveluntarjoajan tyypit ja prioriteettiasetukset","privacyDataApiKeysDesc":"salattu ja tallennettu paikallisesti AI-palveluntarjoajien todennusta varten","privacyDataUsageLogsDesc":"pyyntöjen määrät, tunnuksen käyttö, mallien nimet, aikaleimat ja vastausajat","privacyDataApplicationSettingsDesc":"teemaasetukset, reititysstrategia ja yhdistelmäkokoonpanot","privacySection3Title":"3. Ei telemetriaa","privacySection3Text":"OmniRoute ei kerää telemetria-, analytiikka- tai virheraportteja. Tietoja ei lähetetä meille tai millekään kolmannelle osapuolelle. Käyttömallisi, API-kutsusi ja kokoonpanosi pysyvät täysin yksityisinä.","privacySection4Title":"4. Kolmannen osapuolen tekoälypalveluntarjoajat","privacySection4Text":"Kun soitat API-kutsuja OmniRouten kautta, pyyntösi välitetään määrittämillesi tekoälypalveluntarjoajille (esimerkiksi OpenAI, Anthropic, Google). Näillä palveluntarjoajilla on omat tietosuojakäytäntönsä, jotka säätelevät, kuinka he käsittelevät tietojasi. Tarkista:","privacyOpenAiPolicy":"OpenAI:n tietosuojakäytäntö","privacyAnthropicPolicy":"Antrooppinen tietosuojakäytäntö","privacyGooglePolicy":"Googlen tietosuojakäytäntö","privacySection5Title":"5. Cloud Sync (valinnainen)","privacySection5Text":"Jos otat valinnaisen pilvisynkronointiominaisuuden käyttöön, palveluntarjoajan määritykset ja API-avaimet voidaan lähettää määritettyyn pilvipäätepisteeseen. Tämä ominaisuus on oletuksena pois käytöstä ja vaatii nimenomaisen osallistumisen.","privacySection6Title":"6. Kirjautuminen","privacyLoggingIntro":"Pyyntölokit voidaan määrittää kojelaudan asetuksista. Voit:","privacySection7Title":"7. Sinun oikeutesi","privacySection7TextStart":"Koska kaikki tiedot tallennetaan paikallisesti, sinulla on täysi hallinta. Voit poistaa tietosi milloin tahansa poistamalla","privacySection7TextEnd":"hakemistosta tai käyttämällä tietokannan varmuuskopiointi- ja palautustoimintoja kojelaudassa.","termsSection1Title":"1. Yleiskatsaus","termsSection1Text":"OmniRoute on paikallinen ensimmäinen AI API -välityspalvelin, joka toimii kokonaan koneessasi. Se reitittää pyynnöt useille tekoälypalveluntarjoajille kuormituksen tasapainottamisen, vikasietoisuuden ja käytön seurannan avulla.","termsSection2Title":"2. Käyttäjän velvollisuudet","termsResponsibilityApiKeys":"Olet yksin vastuussa omien API-avainten ja valtuustietojen hallinnasta kolmannen osapuolen AI-palveluntarjoajille (OpenAI, Anthropic, Google jne.).","termsResponsibilityCompliance":"Sinun on noudatettava jokaisen tekoälyn palveluntarjoajan, jonka API:ta käytät OmniRouten kautta, käyttöehtoja.","termsResponsibilitySecurity":"Olet vastuussa paikallisen OmniRoute-asennuksesi turvallisuudesta, mukaan lukien salasanan asettamisesta ja verkkoon pääsyn rajoittamisesta.","termsSection3Title":"3. Kuinka se toimii","termsSection3Text":"OmniRoute toimii välittäjänä. OmniRouteen lähetetyt API-kutsut käännetään ja välitetään määritetyille tekoälypalveluntarjoajille. OmniRoute ei muuta pyyntöjesi tai vastaustesi sisältöä tarvittavan protokollan käännöksen lisäksi.","termsSection4Title":"4. Tietojen käsittely","termsDataStoredLocally":"Kaikki tiedot tallennetaan paikallisesti koneellesi SQLite-tietokantaan.","termsNoTransmission":"OmniRoute ei lähetä mitään tietoja ulkoisille palvelimille, ellet ota pilvisynkronointiominaisuuksia erikseen käyttöön.","termsDataLocationText":"Käyttölokit, API-avaimet ja määritykset tallennetaan","termsSection5Title":"5. Vastuuvapauslauseke","termsSection5Text":"OmniRoute toimitetaan \\"sellaisenaan\\" ilman minkäänlaista takuuta. Emme ole vastuussa kustannuksista, jotka aiheutuvat API:n käytöstä, palveluhäiriöistä tai tietojen katoamisesta. Pidä aina varmuuskopiot asetuksistasi.","termsSection6Title":"6. Avoin lähdekoodi","termsSection6Text":"OmniRoute on avoimen lähdekoodin ohjelmisto. Voit vapaasti tarkastaa, muokata ja jakaa sitä sen lisenssiehtojen mukaisesti."},"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":"Yksinkertainen chat","streaming":"Suoratoisto","system-prompt":"Järjestelmäkehote","thinking":"Ajatteleminen","tool-calling":"Työkalun kutsuminen","multi-turn":"Monikierros"},"templateDescriptions":{"simple-chat":"Peruskeskustelumalli järjestelmäviestillä","streaming":"Malli vastausten suoratoistoon","system-prompt":"Malli mukautetulla järjestelmäkehotteella","thinking":"Malli perustelulla/ajattelulla","tool-calling":"Malli työkalun/toiminnon kutsumiseen","multi-turn":"Malli usean käännöksen keskusteluille"},"templatePayloads":{"simpleChat":{"system":"Olet avulias AI-avustaja.","userGreeting":"Hei! Kuinka voin auttaa sinua tänään?"},"streaming":{"prompt":"Kirjoita tarina aiheesta"},"systemPrompt":{"question":"Mikä on elämän tarkoitus?","systemInstruction":"Anna harkittu, filosofinen vastaus."},"thinking":{"question":"Selitä kvanttilaskenta"},"toolCalling":{"cityNameDescription":"Kaupungin nimi, jolle sää haetaan","toolDescription":"Hanki sijainnin nykyinen sää","userWeather":"Millainen sää on Tokiossa?"},"multiTurn":{"system":"Olet avulias avustaja.","assistantExample":"Autan sinua siinä mielelläni.","userInitial":"Tarvitsen apua","userFollowUp":"Voitko tarkentaa sitä?"}},"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=[963154,a=>{a.v(JSON.parse('{"common":{"save":"Tallenna","cancel":"Peruuta","delete":"Poista","loading":"Ladataan...","error":"Tapahtui virhe","success":"Menestystä","confirm":"Oletko varma?","refresh":"Päivitä","close":"Sulje","add":"Lisää","edit":"Muokkaa","search":"Etsi","back":"Takaisin","next":"Seuraavaksi","submit":"Lähetä","reset":"Nollaa","copy":"Kopioi","copied":"Kopioitu!","enabled":"Käytössä","disabled":"Ei käytössä","active":"Aktiivinen","inactive":"Ei-aktiivinen","noData":"Tietoja ei ole saatavilla","configure":"Määritä","manage":"Hallitse","name":"Nimi","actions":"Toiminnot","status":"Tila","type":"Kirjoita","model":"Malli","models":"mallit","provider":"Palveluntarjoaja","account":"Tili","time":"Aika","details":"Yksityiskohdat","created":"Luotu","lastUsed":"Viimeksi käytetty","loadMore":"Lataa lisää","noResults":"Tuloksia ei löytynyt","reloadPage":"Lataa sivu uudelleen","connected":"Yhdistetty","disconnected":"Yhteys katkaistu","notConfigured":"Ei määritetty","testConnection":"Testaa yhteys","enable":"Ota käyttöön","disable":"Poista käytöstä","columns":"Sarakkeet","newest":"Uusin","oldest":"Vanhin","all":"Kaikki","none":"Ei mitään","yes":"Kyllä","no":"Ei","warning":"Varoitus","note":"Huom","free":"Ilmainen","skipToContent":"Siirry sisältöön","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Hyväksy","accountId":"Tilin tunnus","alias":"Alias","apiKeyId":"API-avaimen tunnus","apiKeyName":"API-avaimen nimi","apiKeySecret":"API-avaimen salaisuus","authorization":"Valtuutus","content-type":"Sisältötyyppi","content-length":"Sisällön pituus","cookie":"Eväste","file":"Tiedosto","host":"Isäntä","id":"ID","import":"Tuo","limit":"Raja","offset":"Offset","open":"Avaa","origin":"Alkuperä","promptTokens":"Kehotusmerkit","completionTokens":"Päättymismerkit","totalTokens":"Tokeneja yhteensä","rawModel":"Raaka malli","scope":"Laajuus","skill":"Taito","sortBy":"Lajitteluperuste","sortOrder":"Lajittelujärjestys","tab":"Tab","text":"Teksti","textarea":"Textarea","tool":"Työkalu","toolId":"Työkalun tunnus","web":"Web","whereUsed":"Missä käytetty","whitelist":"Valkoinen lista","blacklist":"Musta lista","resolve":"Ratkaise","force":"Voimaa","base64url":"Base64 URL","hex":"Hex","range":"Alue","component":"Komponentti","redirect_uri":"Uudelleenohjaus URI","idempotency-key":"Idempotenssiavain","error_description":"Virheen kuvaus","code":"Koodi","compatible":"Yhteensopiva","chat-completions":"Chatin loppuun saattaminen","oauth":"OAuth","auth_token":"Auth Token","crypto":"Krypto","hours":"Tuntia","selfsigned":"Itse allekirjoitettu","proxy_id":"Välityspalvelimen tunnus","proxyId":"Välityspalvelimen tunnus","connectionId":"Yhteystunnus","resolveConnectionId":"Ratkaise yhteystunnus","resolve_connection_id":"Ratkaise yhteystunnus","scope_id":"Laajuustunnus","scopeId":"Laajuustunnus","jwtSecret":"JWT Secret","keytar":"Keytar","better-sqlite3":"parempi-sqlite3","undici":"undici","builder-id":"Rakentajan tunnus","musicDesc":"Musiikki Kuvaus","musicGeneration":"Musiikin sukupolvi","idc":"IDC","cloud-status-changed":"Pilven tila muuttunut","where_used":"Missä käytetty","windowMs":"Ikkuna (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Työkalujen sallittu luettelo","TOOL_DENYLIST":"Tool Denylist","Failed to save pricing":"Hinnoittelun tallentaminen epäonnistui","Failed to reset pricing":"Hinnoittelun nollaaminen epäonnistui","apikey":"API-avain","http":"HTTP"},"sidebar":{"home":"Kotiin","dashboard":"Kojelauta","providers":"Palveluntarjoajat","combos":"Yhdistelmät","usage":"Käyttö","analytics":"Analytics","costs":"Kustannukset","health":"Terveys","limits":"Rajoitukset ja kiintiöt","cliTools":"CLI-työkalut","media":"Media","settings":"Asetukset","translator":"Kääntäjä","docs":"Asiakirjat","issues":"Ongelmat","apiManager":"API Manager","logs":"Lokit","auditLog":"Tarkastusloki","shutdown":"Sammutus","restart":"Käynnistä uudelleen","shutdownConfirm":"Suljetaanko OmniRoute?","restartConfirm":"Käynnistetäänkö OmniRoute uudelleen?","version":"v{version}","debug":"Debug","system":"Järjestelmä","help":"Apua","serverDisconnected":"Palvelin yhteys katkaistu","serverDisconnectedMsg":"Välityspalvelin on pysäytetty tai käynnistyy uudelleen.","expandSidebar":"Laajenna sivupalkki","collapseSidebar":"Tiivistä sivupalkki","themes":"Teemat","presetColors":"Suosittuja värejä","createTheme":"Luo teema","chooseColor":"Valitse yksi väri","themeCoral":"koralli","themeBlue":"Sininen","themeRed":"Punainen","themeGreen":"Vihreä","themeViolet":"Violetti","themeOrange":"Oranssi","themeCyan":"Syaani","endpoints":"Päätepisteet","playground":"Leikkipaikka","agents":"Agentit","cliToolsShort":"Työkalut","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Teemat","description":"Valitse esiasetettu teema tai luo oma yhdellä värillä","presetColors":"Suosittuja värejä","customTheme":"Mukautettu teema","customThemeDesc":"Napsauta Luo teema ja valitse yksi väri","createTheme":"Luo teema","activePreset":"Aktiivinen teema"},"header":{"logout":"Kirjaudu ulos","language":"Kieli","providers":"Palveluntarjoajat","providerDescription":"Hallinnoi AI-palveluntarjoajan yhteyksiä","combos":"Yhdistelmät","comboDescription":"Malliyhdistelmät varaosilla","usage":"Käyttö ja analytiikka","usageDescription":"Valvo API-käyttöäsi, tunnuksesi kulutusta ja pyyntölokeja","analytics":"Analytics","analyticsDescription":"Kaavioita, trendejä ja arviointitietoja","cliTools":"CLI-työkalut","cliToolsDescription":"Määritä CLI-työkalut","home":"Kotiin","homeDescription":"Tervetuloa OmniRouteen","endpoint":"Endpoints","endpointDescription":"Manage proxy endpoints, MCP, A2A, and API endpoints","settings":"Asetukset","settingsDescription":"Hallinnoi asetuksiasi","openaiCompatible":"OpenAI-yhteensopiva","anthropicCompatible":"Antrooppinen yhteensopiva","media":"Media","mediaDescription":"Luo kuvia, videoita ja musiikkia","themes":"Teemat","themesDescription":"Valitse väriteema koko kojelautapaneelille","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"home":{"quickStart":"Pika-aloitus","quickStartDesc":"Pääset liikkeelle neljässä vaiheessa. Yhdistä palveluntarjoajat, reittimallit, tarkkaile kaikkea.","fullDocs":"Täydelliset asiakirjat","step1Title":"1. Luo API-avain","step1Desc":"Siirry kohtaan <endpoint>Endpoint</endpoint> -> Rekisteröidyt avaimet. Luo yksi avain ympäristöä kohden.","step2Title":"2. Yhdistä palveluntarjoajat","step2Desc":"Lisää tilejä palveluun <providers>Providers</providers>. Tukee OAuthia, API-avainta ja ilmaisia ​​tasoja.","step3Title":"3. Osoita asiakkaasi","step3Desc":"Aseta perus-URL-osoitteeksi {url} IDE- tai API-asiakkaassasi.","step4Title":"4. Valvo ja optimoi","step4Desc":"Seuraa tunnuksia, kustannuksia ja virheitä <logs>Pyyntölokeissa</logs> ja <analytics>Analytics</analytics>.","providersOverview":"Palveluntarjoajien yleiskatsaus","configuredOf":"{configured} määritetty {total} käytettävissä olevasta palveluntarjoajasta","noModelsAvailable":"Tälle tarjoajalle ei ole saatavilla malleja.","configureFirst":"Määritä yhteys ensin kohteessa {providers}","configureProvider":"Määritä Provider","modelAvailable":"{count} malli saatavilla","modelsAvailable":"{count} malleja saatavilla","connectionsActive":"{count} yhteys aktiivinen","connectionsActivePlural":"{count} yhteydet aktiivisia","copyModelName":"Kopioi mallin nimi","documentation":"Dokumentaatio","healthMonitor":"Terveysmittari","reportIssue":"Ilmoita ongelmasta","activeError":"{active} aktiivinen · {errors} virhe","oauthLabel":"OAuth","apiKeyLabel":"API-avain","requestsShort":"{count} vaatimus","providerModelsTitle":"{provider} - Mallit","copiedModel":"Kopioitu: {model}","aliasLabel":"alias","updateNow":"Päivitä nyt","updating":"Päivitetään...","updateAvailableDesc":"Uusi versio on saatavilla. Päivitä napsauttamalla.","updateStarted":"Päivitys aloitettu..."},"analytics":{"title":"Analytics","overviewDescription":"Tarkkaile sovellusliittymän käyttötapoja, tunnuksen kulutusta, kustannuksia ja toimintatrendejä kaikilla palveluntarjoajilla ja malleilla.","evalsDescription":"Testaa ja vahvista LLM-päätepisteesi suorittamalla arviointipaketteja. Vertaile mallin laatua, havaitse regressiot ja vertaile viivettä.","overview":"Yleiskatsaus","evals":"Evals"},"apiManager":{"title":"API-avaimet","createKey":"Luo API-avain","key":"Avain","revokeKey":"Peruuta avain","revokeConfirm":"Haluatko varmasti peruuttaa tämän API-avaimen?","noKeys":"Ei vielä API-avaimia","noKeysDesc":"Luo ensimmäinen API-avain päätepisteellesi tulevien pyyntöjen todentamiseksi","keyLabel":"Avaimen etiketti","permissions":"Käyttöoikeudet","expiresAt":"Vanhenee","never":"Ei koskaan","revoke":"Peruuta","showKey":"Näytä avain","hideKey":"Piilota avain","copyKey":"Kopioi API-avain","allModels":"Kaikki mallit","selectedModels":"Valitut mallit","readOnly":"Vain luku","fullAccess":"Täysi pääsy","keyManagement":"API-avainten hallinta","keyManagementDesc":"Luo ja hallitse API-avaimia päätepisteesi pyyntöjen todentamiseksi","totalKeys":"Avaimet yhteensä","restricted":"Rajoitettu","totalRequests":"Pyyntöjä yhteensä","modelsAvailable":"Mallit saatavilla","registeredKeys":"Rekisteröity avaimet","keysRegistered":"{count} avaimet rekisteröity","keyRegistered":"{count} avain rekisteröity","keysSecurityNote":"Jokainen avain eristää käytön seurannan ja voidaan peruuttaa itsenäisesti. Avaimet peitetään luomisen jälkeen turvallisuuden vuoksi.","createFirstKey":"Luo ensimmäinen avaimesi","name":"Nimi","usage":"Käyttö","created":"Luotu","actions":"Toiminnot","reqs":"vaatimukset","neverUsed":"Ei koskaan käytetty","deleteConfirm":"Poistetaanko tämä API-avain?","usageTips":"Käyttövinkkejä","tipAuth":"Käytä API-avaimia Authorization-otsikossa siirtotienä YOUR_KEY","tipSecure":"Avaimet näkyvät vain kerran luomisen aikana – säilytä ne turvallisesti","tipSeparate":"Luo erilliset avaimet eri asiakkaille tai ympäristöille","tipRestrict":"Rajoita avaimet tiettyihin malleihin parantaaksesi turvallisuutta ja kustannusten hallintaa","keyName":"Avaimen nimi","keyNamePlaceholder":"esim. tuotantoavain, kehitysavain","keyNameDesc":"Valitse kuvaava nimi tämän avaimen tarkoituksen tunnistamiseksi","keyCreated":"API-avain luotu","keyCreatedSuccess":"Avain luotu onnistuneesti!","keyCreatedNote":"Kopioi ja tallenna tämä avain nyt – sitä ei näytetä uudelleen.","done":"Valmis","savePermissions":"Tallenna käyttöoikeudet","allowAll":"Salli kaikki","restrict":"Rajoita","allowAllInfo":"Tällä avaimella pääsee kaikkiin saatavilla oleviin malleihin.","restrictInfo":"Tällä avaimella voi käyttää {selected}/{total} mallia.","selected":"{count} valittu","all":"Kaikki","clear":"Selkeä","searchModels":"Hae malleja nimen tai toimittajan mukaan...","noModelsFound":"Malleja ei löytynyt","keyNameRequired":"Avaimen nimi vaaditaan","keyNameTooLong":"Avaimen nimessä saa olla enintään {max} merkkiä","keyNameInvalid":"Avaimen nimi voi sisältää vain kirjaimia, numeroita, välilyöntejä, yhdysmerkkejä ja alaviivoja","invalidKeyName":"Virheellinen avaimen nimi","failedCreateKey":"Avaimen luominen epäonnistui","failedCreateKeyRetry":"Avaimen luominen epäonnistui. Yritä uudelleen.","invalidKeyId":"Virheellinen avaintunnus","failedDeleteKey":"Avaimen poistaminen epäonnistui","failedDeleteKeyRetry":"Avaimen poistaminen epäonnistui. Yritä uudelleen.","invalidModelsSelection":"Virheellinen mallivalinta","cannotSelectMoreThanModels":"Ei voi valita enempää kuin {max} mallia","failedUpdatePermissions":"Käyttöoikeuksien päivittäminen epäonnistui","failedUpdatePermissionsRetry":"Käyttöoikeuksien päivittäminen epäonnistui. Yritä uudelleen.","unknownProvider":"tuntematon","copyMaskedKey":"Kopioi peitetty avain","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Viimeisin: {date}","editPermissions":"Muokkaa käyttöoikeuksia","deleteKey":"Poista avain","model":"{count} malli","models":"{count} mallit","permissionsTitle":"Luvat: {name}","allowAllDesc":"Tällä avaimella pääsee kaikkiin saatavilla oleviin malleihin.","restrictDesc":"Tällä avaimella voi käyttää {selectedCount}/{totalModels} mallia.","selectedCount":"{count} valittu","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":"Tarkastusloki","searchPlaceholder":"Hakutoiminnot...","action":"Toiminta","actor":"näyttelijä","target":"Kohde","ipAddress":"IP-osoite","timestamp":"Aikaleima","noEntries":"Tarkastusmerkintöjä ei löytynyt","filterByAction":"Suodata toiminnon mukaan...","filterByActor":"Suodata näyttelijän mukaan...","filterEntriesAria":"Suodata tarkastuslokin merkinnät","filterByActionTypeAria":"Suodata toimintotyypin mukaan","filterByActorAria":"Suodata näyttelijän mukaan","refreshAuditLogAria":"Päivitä tarkastusloki","tableAria":"Tarkastuslokimerkinnät","failedFetchAuditLog":"Valvontalokin nouto epäonnistui","notAvailable":"—","description":"Hallinnolliset toimet ja turvallisuustapahtumat","showing":"Näytetään {count} merkintää (poikkeama {offset})","previous":"Edellinen"},"media":{"title":"Mediatyöpaja","subtitle":"Luo kuvia, videoita ja musiikkia","model":"Model","prompt":"Prompt","generate":"Luo","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":"CLI-työkalut","noActiveProviders":"Ei aktiivisia palveluntarjoajia","noActiveProvidersDesc":"Lisää ja yhdistä ensin palveluntarjoajat määrittääksesi CLI-työkalut.","mapModels":"Karttamallit","testConnection":"Testaa yhteys","connectionStatus":"Yhteyden tila","configureEndpoint":"Määritä päätepiste","instructions":"Ohjeet","modelMapping":"Mallin kartoitus","baseUrl":"Perus-URL-osoite","apiKey":"API-avain","configured":"Määritetty","notConfigured":"Ei määritetty","notInstalled":"Ei asennettu","custom":"Mukautettu","unknown":"Tuntematon","lastSavedAt":"Viimeksi tallennettu: {date}","never":"Ei koskaan","justNow":"juuri nyt","minutesAgoShort":"{count}min sitten","hoursAgoShort":"{count}h sitten","daysAgoShort":"{count}pv sitten","monthsAgoShort":"{count}kk sitten","yearsAgoShort":"{count}v sitten","runtimeCheckFailed":"Ajonaikainen tarkistus epäonnistui","yourApiKeyPlaceholder":"sinun-api-avain","modelPlaceholder":"toimittaja/mallitunnus","configurationSaved":"Määritykset tallennettu onnistuneesti.","failedToSave":"Määrityksen tallentaminen epäonnistui.","noApiKeysCreateOne":"Ei API-avaimia – Luo yksi Avaimet-sivulla","defaultOmnirouteKey":"sk_omniroute (oletus)","selectModel":"Valitse Malli","selectModelForAlias":"Valitse malli kohteelle {alias}","selectModelForTool":"Valitse malli kohteelle {tool}","select":"Valitse","clear":"Selkeä","comingSoon":"Tulossa pian","checkingRuntime":"Tarkistetaan ajonaikaista tilaa...","guideOnlyIntegration":"Vain ohjeellinen integrointi (ei vaadi paikallista suoritusaikaa)","cliRuntimeDetected":"CLI-ajoaika havaittu ja valmis","cliFoundNotRunnable":"CLI löytyi, mutta ei ajettavissa{reason}","cliRuntimeNotDetected":"CLI-ajoaikaa ei havaittu","binary":"Binääri","configPath":"Konfigurointipolku","configPathShort":"Konfig","failedCheckRuntimeStatus":"Ajonaikaisen tilan tarkistaminen epäonnistui.","copy":"Kopioi","copied":"Kopioitu","copyConfig":"Kopioi kokoonpano","saveConfig":"Tallenna kokoonpano","selectionSaved":"Valinta tallennettu","guide":"Opas","detected":"Havaittu","notReady":"Ei valmis","active":"Aktiivinen","inactive":"Ei-aktiivinen","startMitm":"Käynnistä MITM","stopMitm":"Lopeta MITM","mitmStarted":"MITM alkoi onnistuneesti!","mitmStopped":"MITM pysähtyi onnistuneesti!","failedStart":"MITM:n käynnistäminen epäonnistui","failedStop":"MITM:n pysäyttäminen epäonnistui","saveMappings":"Tallenna kartoitukset","mappingsSaved":"Kartaukset tallennettu!","failedSaveMappings":"Kartoitusten tallentaminen epäonnistui","howItWorks":"Miten se toimii:","antigravityHowWorksDesc":"Antigravity lähettää pyyntöjä Googlen päätepisteeseen. MITM sieppaa ja ohjaa ne OmniRouteen.","antigravityStep1":"1. Käynnistä MITM reitittääksesi pyynnöt OmniRouten kautta.","antigravityStep2Prefix":"2. Lisää","antigravityStep2Suffix":"hosts-tiedostoon muodossa 127.0.0.1.","antigravityStep3":"3. Avaa Antigravity ja pyynnöt välitetään.","sudoPasswordRequiredTitle":"Sudo-salasana vaaditaan","sudoPasswordHint":"Järjestelmänvalvojan salasana tarvitaan hosts-tiedoston ja järjestelmän välityspalvelimen asetusten muokkaamiseen.","enterSudoPassword":"Anna sudo-salasana","sudoPasswordRequiredError":"Sudo-salasana vaaditaan.","cancel":"Peruuta","confirm":"Vahvista","settingsApplied":"Asetukset otettu käyttöön onnistuneesti!","failedApplySettings":"Asetusten käyttöönotto epäonnistui","settingsReset":"Asetusten nollaus onnistui!","failedResetSettings":"Asetusten nollaus epäonnistui","backupRestored":"Varmuuskopio palautettu!","failedRestore":"Palauttaminen epäonnistui","checkingCli":"Tarkistetaan {tool} CLI...","cliNotRunnable":"{tool} CLI asennettu, mutta ei ajettavissa","cliNotInstalled":"{tool} CLI:tä ei ole asennettu","cliNotDetected":"{tool} CLI:tä ei havaittu","cliDetectedReady":"{tool} CLI havaittu ja valmis","cliFoundFailedHealthcheck":"{tool} CLI löydettiin, mutta ajonaikainen kuntotarkastus epäonnistui{reason}.","installCliPrompt":"Asenna {tool} CLI käyttääksesi tätä ominaisuutta.","installCodexPrompt":"Asenna Codex CLI käyttääksesi automaattista käyttöönottoa.","hide":"Piilota","howToInstall":"Kuinka asentaa","installationGuide":"Asennusopas","platforms":"macOS / Linux / Windows:","afterInstallationRun":"Suorita asennuksen jälkeen","toVerify":"varmistaaksesi.","current":"Nykyinen","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Palauta oletusarvo","providerModelPlaceholder":"toimittaja/mallitunnus","apply":"Käytä","reset":"Nollaa","manualConfig":"Manuaalinen konfigurointi","backups":"Varmuuskopiot","configBackups":"Määritysten varmuuskopiot","noBackupsYet":"Ei vielä varmuuskopioita. Varmuuskopiot luodaan automaattisesti ennen jokaista käyttöönottoa tai nollausta.","restore":"Palauta","backupRestoredReloading":"Varmuuskopio palautettu! Ladataan tilaa uudelleen...","failedRestoreBackup":"Varmuuskopion palauttaminen epäonnistui","applied":"Sovellettu!","failed":"Epäonnistui","resetDone":"Nollaa!","omnirouteConfiguredOpenAiCompatible":"OmniRoute on määritetty OpenAI-yhteensopivaksi palveluntarjoajaksi","provider":"Palveluntarjoaja","model":"Malli","providers":"Palveluntarjoajat","auth":"Tod","noApiKeysAvailable":"API-avaimia ei ole saatavilla","usingDefaultOmniroute":"Oletuksena: sk_omniroute","updateConfig":"Päivitä Config","applyConfig":"Käytä konfiguraatiota","noBackupsAvailable":"Varmuuskopioita ei ole saatavilla.","profileSaved":"Profiili \\"{name}\\" tallennettu!","failedSaveProfile":"Profiilin tallennus epäonnistui","profileActivated":"Profiili aktivoitu!","failedActivateProfile":"Profiilin aktivointi epäonnistui","profiles":"Profiilit","savedProfiles":"Tallennetut profiilit","noProfilesYet":"Ei vielä tallennettuja profiileja. Tallenna nykyinen konfiguraatio alla olevaksi profiiliksi.","activate":"Aktivoi","deleteProfile":"Poista profiili","profileNamePlaceholder":"Profiilin nimi (esim. henkilökohtainen tili)","saveCurrent":"Tallenna nykyinen","codexAuthNotePrefix":"Codex käyttää","codexAuthNoteMiddle":"kanssa","codexAuthNoteSuffix":"Napsauta \\"Käytä\\" määrittääksesi automaattisesti.","claudeManualConfiguration":"Claude CLI - Manuaalinen konfigurointi","codexManualConfiguration":"Codex CLI - Manuaalinen konfigurointi","droidManualConfiguration":"Tehdasdroidi - manuaalinen konfigurointi","openClawManualConfiguration":"Open Claw - Manuaalinen konfigurointi","clineManualConfiguration":"Cline Manuaalinen konfigurointi","kiloManualConfiguration":"Kilo Code Manuaalinen konfigurointi","toolDescriptions":{"antigravity":"Google Antigravity IDE ja MITM","claude":"Antrooppinen Claude Code CLI","codex":"OpenAI Codex CLI","droid":"Tehdas Droid AI Assistant","openclaw":"Avaa Claw AI Assistant","cline":"Cline AI Coding Assistant CLI","kilo":"Kilo Code AI Assistant CLI","cursor":"Cursor AI Code Editor","continue":"Jatka AI Assistantia","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":"Tämän ominaisuuden käyttäminen vaatii Cursor Pro -tilin.","1":"Kohdistin reitittää pyynnöt oman palvelimensa kautta, joten paikallista päätepistettä ei tueta. Ota Cloud Endpoint käyttöön asetuksista."},"steps":{"1":{"title":"Avaa Asetukset","desc":"Siirry kohtaan Asetukset -> Mallit"},"2":{"title":"Ota OpenAI API käyttöön","desc":"Ota käyttöön \\"OpenAI API-avain\\" -vaihtoehto"},"3":{"title":"Perus-URL-osoite"},"4":{"title":"API-avain"},"5":{"title":"Lisää mukautettu malli","desc":"Napsauta \\"Näytä kaikki mallit\\" -> \\"Lisää mukautettu malli\\""},"6":{"title":"Valitse Malli"}}},"continue":{"steps":{"1":{"title":"Avaa Config","desc":"Avaa Jatka määritystiedosto"},"2":{"title":"API-avain"},"3":{"title":"Valitse Malli"},"4":{"title":"Lisää mallin kokoonpano","desc":"Lisää seuraavat kokoonpanot mallien matriisiisi:"}},"notes":{"0":"Jatka käyttää JSON-määritystiedostoa."}},"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 vaatii API-avaimen määrityksen.","1":"Aseta perus-URL-osoite OmniRoute-päätepisteellesi."}},"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 vaatii Amazon-tilin."}}},"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":"Milloin käyttää","openToolDocs":"Avaa työkaludokumentit","toolUseCases":{"claude":"Käytä, kun haluat vahvoja suunnittelutyönkulkuja ja pitkiä monitiedostoisia refraktoreita Claude Coden avulla.","codex":"Käytä, kun tiimisi on standardoitu OpenAI Codex CLI -virtojen ja profiilipohjaisen todennuksen kanssa.","droid":"Käytä, kun tarvitset kevyen pääteagentin, joka keskittyy nopeaan koodaukseen ja komentojen suoritussilmukoihin.","openclaw":"Käytä, kun haluat Open Claw -tyyppisen koodausagentin, mutta reititetyn OmniRoute-käytäntöjen kautta.","cline":"Käytä, kun määrität koodausagentteja editorien sisällä ja haluat ohjatun asennuksen OmniRoute-malleilla.","kilo":"Käytä, kun työnkulkusi riippuu Kilo Code -komennoista ja nopeista iteratiivisista muokkauksista.","cursor":"Käytä koodattaessa Cursorissa ja tarvitset mukautettuja OpenAI-yhteensopivia malleja OmniRouten kautta.","continue":"Käytä, kun käytät Continuea IDE:issä ja tarvitset kannettavan JSON-pohjaisen palveluntarjoajan määrityksen.","opencode":"Käytä, kun haluat käyttää päätealustaisia ​​agentteja ja komentosarjottua automaatiota OpenCoden kautta.","kiro":"Käytä integroitaessa Kiroa ja ohjattaessa mallin reititystä keskitetysti OmniRoutesta.","antigravity":"Käytä, kun Antigravity/Kiro-liikenne on siepattava MITM:n kautta ja ohjattava OmniRouteen.","copilot":"Käytä, kun haluat Copilot-chat-tyylisen UX:n ja pakota OmniRoute-avaimia ja reitityssääntöjä."}},"combos":{"title":"Yhdistelmät","description":"Luo mallikomboja painotetulla reitityksellä ja varatuella","createCombo":"Luo yhdistelmä","editCombo":"Muokkaa yhdistelmää","deleteCombo":"Poista yhdistelmä","noModels":"Ei malleja","noModelsYet":"Malleja ei ole vielä lisätty","addModel":"Lisää malli","addModelToCombo":"Lisää malli yhdistelmään","routingStrategy":"Reititysstrategia","maxRetries":"Max Uudelleenyritykset","timeout":"Aikakatkaisu (ms)","healthcheck":"Terveystarkastus","priority":"Prioriteetti","fallback":"Varaa","roundRobin":"Round Robin","random":"Satunnainen","leastLatency":"Pienin latenssi","comboName":"Yhdistelmänimi","comboNamePlaceholder":"minun yhdistelmäni","deleteConfirm":"Poistetaanko tämä yhdistelmä?","noCombosYet":"Ei komboja vielä","comboCreated":"Yhdistelmä luotiin onnistuneesti","comboUpdated":"Yhdistelmän päivitys onnistui","comboDeleted":"Yhdistelmä poistettu","failedCreate":"Yhdistelmän luominen epäonnistui","failedUpdate":"Yhdistelmän päivittäminen epäonnistui","errorCreating":"Virhe yhdistelmän luomisessa","errorUpdating":"Virhe yhdistelmän päivityksessä","errorDeleting":"Virhe yhdistelmän poistamisessa","testFailed":"Testipyyntö epäonnistui","failedToggle":"Yhdistelmän vaihto epäonnistui","testResults":"Testitulokset – {name}","resolvedBy":"Ratkaisi:","more":"+{count} lisää","reqs":"vaatimukset","success":"menestystä","proxyConfigured":"Välityspalvelin määritetty","copyComboName":"Kopioi yhdistelmänimi","enableCombo":"Ota yhdistelmä käyttöön","disableCombo":"Poista yhdistelmä käytöstä","testCombo":"Testiyhdistelmä","duplicate":"Kopioi","proxyConfig":"Välityspalvelimen määritys","nameRequired":"Nimi vaaditaan","nameInvalid":"Vain kirjaimet, numerot, -, _, / ja . sallittu","nameHint":"Kirjaimet, numerot, -, _, / ja . sallittu","priorityDesc":"Peräkkäinen palautus: kokeilee ensin mallia 1, sitten 2 jne.","weightedDesc":"Jakaa liikenteen painoprosentin mukaan varauksella","roundRobinDesc":"Pyöreä jakelu: jokainen pyyntö siirtyy seuraavaan kiertoon malliin","randomDesc":"Yhtenäinen satunnainen valinta, sitten takaisin muihin malleihin","leastUsedDesc":"Valitsee mallin, jolla on vähiten pyyntöjä ja tasapainottaa kuormitusta ajan myötä","costOptimizedDesc":"Reitit edullisimpaan malliin ensin hinnoittelun perusteella","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each model once before reshuffling","models":"Mallit","autoBalance":"Automaattinen tasapainotus","advancedSettings":"Lisäasetukset","retryDelay":"Uudelleenyrityksen viive (ms)","concurrencyPerModel":"Samanaikaisuus / malli","queueTimeout":"Jonon aikakatkaisu (ms)","advancedHint":"Jätä tyhjäksi, jos haluat käyttää yleisiä oletusasetuksia. Nämä ohittavat palveluntarjoajakohtaiset asetukset.","moveUp":"Siirrä ylös","moveDown":"Siirry alas","removeModel":"Poista","saving":"Tallennetaan...","weighted":"Painotettu","leastUsed":"Vähiten käytetty","costOpt":"Kustannus-opt","strategyGuideTitle":"Kuinka käyttää tätä strategiaa","strategyGuideWhen":"Milloin käyttää","strategyGuideAvoid":"Vältä milloin","strategyGuideExample":"Esimerkki","strategyGuide":{"priority":{"when":"Sinulla on yksi ensisijainen malli ja haluat varautua vain epäonnistumisen yhteydessä.","avoid":"Tarvitset pyynnön jakelun eri malleihin.","example":"Ensisijainen koodausmalli, jossa on halvempi varmuuskopio katkosten varalta."},"weighted":{"when":"Tarvitset ohjattua liikennettä jaettuna malleihin.","avoid":"Et voi säilyttää tarkkoja painoja ajan mittaan.","example":"80% vakaa malli + 20% kanarian mallin käyttöönotto."},"round-robin":{"when":"Haluat ennakoitavan ja tasaisen jakelun.","avoid":"Mallit eroavat liikaa latenssista tai hinnasta.","example":"Sama malli useilla tileillä suorituskyvyn levittämiseksi."},"random":{"when":"Haluat yksinkertaisen jakelun minimaalisella asennuksella.","avoid":"Tarvitset tiukat liikennetakuut.","example":"Nopea prototyyppien tekeminen vastaavilla malleilla."},"least-used":{"when":"Haluat mukautuvan tasapainotuksen live-kysynnän perusteella.","avoid":"Liikenne on liian vähäistä hyötyäkseen käytön tasapainotuksesta.","example":"Sekalaiset työmäärät, joissa yksi malli usein ylikuormitetaan."},"cost-optimized":{"when":"Kustannusten vähentäminen on tärkein prioriteettisi.","avoid":"Hinnoittelutiedot puuttuvat tai ovat vanhentuneet.","example":"Tausta- tai erätyöt, joissa edullisemmat kustannukset ovat paremmat."}},"advancedHelp":{"maxRetries":"Kuinka monta uudelleenyritystä yritetään ennen kuin pyyntö epäonnistuu.","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":"Vähiten käytetty reititys kysynnän hajauttamiseksi ajan mittaan.","usageGuideHide":"Piilottaa","usageGuideDontShowAgain":"Älä näytä uudelleen","usageGuideShow":"Näytä opas","quickTestTitle":"Yhdistelmä valmis tarkistettavaksi","quickTestDescription":"Suorita testi nyt varmistaaksesi vara- ja latenssitoiminnan.","testNow":"Testaa nyt","pricingCoverage":"Hinnoittelun kattavuus","pricingCoverageHint":"Kustannusoptimointi toimii parhaiten, kun kaikissa yhdistelmämalleissa on hinnoittelu.","pricingAvailable":"Hinnoittelu saatavilla","pricingMissing":"Ei hinnoittelua","pricingAvailableShort":"hinnoiteltu","pricingMissingShort":"ei-hintaa","warningRoundRobinSingleModel":"Round-robin on hyödyllisin vähintään kahdella mallilla.","warningCostOptimizedPartialPricing":"Vain {priced} {total}-malleista on hinnoiteltu. Reititys voi olla osittain kustannustietoinen.","warningCostOptimizedNoPricing":"Tälle yhdistelmälle ei löytynyt hintatietoja. Kustannusoptimoitu voi reitittää odottamatta.","readinessTitle":"Oletko valmis säästämään?","readinessDescription":"Tarkista tarkistuslista ennen tämän yhdistelmän luomista tai päivittämistä.","readinessCheckName":"Yhdistelmänimi on kelvollinen","readinessCheckModels":"Ainakin yksi malli on valittu","readinessCheckWeights":"Painotettu kokonaismäärä on 100 %","readinessCheckWeightsOptional":"Painosääntöä ei vaadita","readinessCheckPricing":"Hintatiedot ovat saatavilla","readinessCheckPricingOptional":"Hinnoittelusääntöä ei vaadita","saveBlockedTitle":"Tallennus on estetty, kunnes seuraavat kohteet on korjattu:","saveBlockName":"Määritä yhdistelmänimi.","saveBlockModels":"Lisää vähintään yksi malli.","saveBlockWeighted":"Aseta painot 100 %:iin (nykyinen: {total}%).","saveBlockPricing":"Lisää hinnoittelu vähintään yhdelle mallille tai valitse toinen strategia.","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":"Kustannukset","budget":"Budjetti","totalCost":"Kokonaiskustannukset","breakdown":"Kustannusten erittely","noData":"Ei hintatietoja","byModel":"Mallin mukaan","byProvider":"Palveluntarjoajan toimesta"},"endpoint":{"title":"API-päätepiste","available":"Käytettävissä olevat päätepisteet","cloudProxy":"Pilvivälityspalvelin","disableConfirm":"Haluatko varmasti poistaa pilvivälityspalvelimen käytöstä?","baseUrl":"Perus-URL-osoite","apiKeyLabel":"API-avain","registeredKeys":"Rekisteröity avaimet","chatCompletions":"Chatin loppuun saattaminen","responses":"Vastaukset","listModels":"Listaa mallit","usingCloudProxy":"Cloud Proxyn käyttäminen","usingLocalServer":"Paikallisen palvelimen käyttö","machineId":"Koneen tunnus: {id}...","disableCloud":"Poista Cloud käytöstä","enableCloud":"Ota Cloud käyttöön","modelsAcrossEndpoints":"{models} mallit {endpoints} päätepisteen välillä","chatDesc":"Suoratoisto ja ei-striimaus chat kaikkien palveluntarjoajien kanssa","embeddings":"Upotukset","embeddingsDesc":"Tekstin upotukset haku- ja RAG-putkistoja varten","imageGeneration":"Kuvan luominen","imageDesc":"Luo kuvia tekstikehotteista","rerank":"Järjestä uudelleen","rerankDesc":"Järjestä asiakirjat uudelleen kyselyn osuvuuden mukaan","audioTranscription":"Äänen transkriptio","audioTranscriptionDesc":"Literoi äänitiedostot tekstiksi (kuiskaus)","textToSpeech":"Tekstistä puheeksi","textToSpeechDesc":"Muunna teksti luonnolliselta kuulostavaksi puheeksi","moderations":"Moderaatiot","moderationsDesc":"Sisällön moderointi ja turvallisuusluokitus","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":"Ydin-API:t","categoryMedia":"Media & Monimuotoinen","categoryUtility":"Apuohjelmat & Hallinta","enableCloudTitle":"Ota Cloud Proxy käyttöön","whatYouGet":"Mitä saat","cloudBenefitAccess":"Käytä sovellusliittymääsi mistä päin maailmaa tahansa","cloudBenefitShare":"Jaa päätepiste tiimisi kanssa helposti","cloudBenefitPorts":"Ei tarvitse avata portteja tai määrittää palomuuria","cloudBenefitEdge":"Nopea maailmanlaajuinen reunaverkko","cloudSessionNote":"Cloud säilyttää todennusistunnon 1 päivän ajan. Jos sitä ei käytetä, se poistetaan automaattisesti.","cloudUnstableNote":"Pilvi on tällä hetkellä epävakaa Claude Code OAuthin kanssa joissakin tapauksissa.","cloudConnected":"Cloud Proxy yhdistetty!","connectingToCloud":"Yhdistetään pilveen...","verifyingConnection":"Vahvistetaan yhteyttä...","connecting":"Yhdistetään...","verifying":"Vahvistetaan...","connected":"Yhdistetty!","disableCloudTitle":"Poista Cloud Proxy käytöstä","disableWarning":"Kaikki todennusistunnot poistetaan pilvestä.","syncingData":"Synkronoidaan uusimpia tietoja...","disablingCloud":"Poistetaan pilvi käytöstä...","syncing":"Synkronoidaan...","disabling":"Poistetaan käytöstä...","cloudConnectedVerified":"Cloud Proxy yhdistetty ja vahvistettu!","connectedVerificationPending":"Yhdistetty — vahvistus odottaa","connectedVerificationPendingWithError":"Yhdistetty – vahvistus odottaa: {error}","cloudDisabledSuccess":"Pilvi poistettu käytöstä onnistuneesti","syncedSuccess":"Synkronointi onnistui","failedDisable":"Pilven poistaminen käytöstä epäonnistui","failedEnable":"Pilven käyttöönotto epäonnistui","cloudRequestTimeout":"Pilvipyynnön aikakatkaisu","cloudRequestFailed":"Pilvipyyntö epäonnistui","cloudWorkerUnreachable":"Pilvityöntekijää ei tavoitettu. Varmista, että pilvipalvelu on käynnissä (npm run dev in /cloud).","connectionFailed":"Yhteys epäonnistui","syncFailed":"Pilvitietojen synkronointi epäonnistui","providerModelsTitle":"{provider} – Mallit","noModelsForProvider":"Tälle tarjoajalle ei ole saatavilla malleja.","chat":"Chat","embedding":"Upottaminen","image":"Kuva","custom":"mukautettu","modelsCount":"{count, plural, one {# model} other {# models}}","sectionTitle":"Integrointipinta","sectionDescription":"OpenAI-yhteensopivat API:t ja toimintaprotokollan päätepisteet","tabApis":"OpenAI-yhteensopivat sovellusliittymät","tabProtocols":"Protokollat","tabsAria":"Päätepisteen osat","protocolsTitle":"Protokollat","protocolsDescription":"MCP ja A2A ovat ensiluokkaisia päätepisteitä, joissa on omistettu tarkkailtavuus ja hallinta.","mcpCardTitle":"MCP-palvelin","mcpCardDescription":"Model Context Protocol over stdio","a2aCardTitle":"A2A palvelin","a2aCardDescription":"Agent2Agent JSON-RPC -päätepiste","protocolToolsLabel":"Työkalut","protocolTasksLabel":"Tehtävät","protocolActiveStreamsLabel":"Aktiiviset streamit","protocolLastActivity":"Last activity","quickStart":"Pika-aloitus","openMcpDashboard":"Avaa MCP-hallinta","openA2aDashboard":"Avaa A2A-hallinta","mcpQuickStartTitle":"MCP Quick Start","mcpQuickStartStep1":"Suorita MCP-palvelin `omniroute --mcp`:n kautta.","mcpQuickStartStep2":"Määritä MCP-asiakas muodostamaan yhteys stdio-siirron kautta.","mcpQuickStartStep3":"Kutsu työkaluja, kuten `omniroute_get_health` ja `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Pikaopas","a2aQuickStartStep1":"Tutustu agenttikorttiin osoitteessa `/.well-known/agent.json`.","a2aQuickStartStep2":"Lähetä JSON-RPC-pyynnöt osoitteeseen `POST /a2a` käyttämällä `message/send` tai `message/stream`.","a2aQuickStartStep3":"Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `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":"Ladataan MCP-hallintapaneelia...","activate":"aktivoida","deactivate":"deaktivoida","confirmSwitchCombo":"Vahvista {action}-yhdistelmä \\"{combo}\\"?","switchComboFailed":"Yhdistelmätilan vaihtaminen epäonnistui.","switchComboSuccess":"Yhdistelmä \\"{combo}\\" päivitetty.","confirmApplyProfile":"Otetaanko joustavuusprofiili käyttöön \\"{profile}\\"?","applyProfileFailed":"Resilienssiprofiilin käyttäminen epäonnistui.","applyProfileSuccess":"Profiilia \\"{profile}\\" on käytetty.","confirmResetBreakers":"Nollataanko kaikki katkaisijat?","resetBreakersFailed":"Katkaisijoiden nollaus epäonnistui.","resetBreakersSuccess":"Katkaisijat nollattu.","processStatus":"Prosessin tila","online":"verkossa","offline":"Offline-tilassa","pid":"PID","sessionUptime":"Istunnon käyttöaika","lastHeartbeat":"Viimeinen sydämenlyönti","activity24h":"Aktiviteetti (24h)","totalCalls":"Puhelut yhteensä","successRate":"Menestysprosentti","avgLatency":"Keskimääräinen viive","topTools":"Huipputyökalut","noToolCalls24h":"Ei työkalukutsuja viimeisen 24 tunnin aikana.","runtimeDetails":"Kestoajan tiedot","transport":"Kuljetus","scopesEnforced":"Laajuudet pannaan täytäntöön","yes":"kyllä","no":"ei","lastCall":"Viimeinen puhelu","heartbeatPath":"Sydämen sykkeen polku","operationalControls":"Toiminnalliset ohjaimet","switchCombo":"Kytkinyhdistelmä","inactive":"ei-aktiivinen","active":"aktiivinen","activateCombo":"Aktivoi yhdistelmä","deactivateCombo":"Poista yhdistelmä käytöstä","applyResilienceProfile":"Käytä joustavuusprofiilia","profileAggressive":"aggressive","profileBalanced":"tasapainoinen","profileConservative":"konservatiivinen","applyProfile":"Käytä profiilia","resetCircuitBreakers":"Nollaa katkaisijat","resetCircuitBreakersHelp":"Tyhjentää nykyisen katkaisijatilan ja palveluntarjoajien vikalaskurin.","resetAllBreakers":"Nollaa kaikki katkaisijat","toolsAndScopes":"Työkaluja ja tähtäimet","tableTool":"Työkalu","tableScopes":"Soveltamisalat","tablePhase":"Vaihe","tableAudit":"Audit","auditLog":"Tarkastusloki","auditSummary":"Puhelut: {total} | sivu {page} / {totalPages}","allTools":"Kaikki työkalut","allResults":"Kaikki tulokset","success":"Menestystä","failure":"Epäonnistuminen","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Ladataan tarkastusmerkintöjä...","noAuditEntriesForFilters":"Nykyisille suodattimille ei löytynyt tarkastusmerkintöjä.","tableTimestamp":"Aikaleima","tableDuration":"Kesto","tableResult":"Tulos","tableApiKey":"API-avain","failed":"epäonnistunut","previous":"Edellinen","next":"Seuraavaksi"},"a2aDashboard":{"loading":"Ladataan A2A-hallintapaneelia...","confirmCancelTask":"Peruutetaanko tehtävä {taskId}?","cancelTaskFailed":"Tehtävän peruuttaminen epäonnistui.","cancelTaskSuccess":"Tehtävä {taskId} peruutettu.","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":"Aktiiviset streamit","lastTask":"Last task","taskStateOverview":"Task state overview","state":{"submitted":"submitted","working":"working","completed":"valmiiksi","failed":"epäonnistunut","cancelled":"peruutettu"},"agentCard":"Agenttikortti","version":"Versio","url":"URL-osoite","capabilities":"Ominaisuudet","agentCardNotAvailable":"Agenttikorttia ei ole saatavilla.","quickValidation":"Nopea vahvistus","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":"Päivitetty","tableActions":"Toiminnot","view":"Näytä","cancel":"Peruuttaa","previous":"Edellinen","next":"Seuraavaksi","taskDetail":"Tehtävän yksityiskohdat","close":"Lähellä","metadata":"Metatiedot","events":"Tapahtumat","artifacts":"Artefaktit"},"health":{"title":"Järjestelmän terveys","description":"OmniRoute-instanssisi reaaliaikainen seuranta","healthy":"Terve","degraded":"Heikentynyt","down":"Alas","uptime":"Päällä","memory":"Muisti","memoryRss":"Muisti (RSS)","heap":"Kasa","cpu":"CPU","database":"Tietokanta","version":"Versio","lastCheck":"Viimeinen tarkistus","providerHealth":"Palveluntarjoajan terveys","systemMetrics":"Järjestelmän mittarit","tokenHealth":"Token Health","refreshAll":"Päivitä kaikki","checkNow":"Tarkista nyt","loadingHealth":"Ladataan terveystietoja…","failedToLoad":"Terveystietojen lataaminen epäonnistui: {error}","retry":"Yritä uudelleen","allOperational":"Kaikki järjestelmät toimivat","issuesDetected":"Järjestelmäongelmia havaittu","updatedAt":"Päivitetty {time}","latency":"Latenssi","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Pyyntöjä yhteensä","noDataYet":"Ei vielä dataa","promptCache":"Kehotusvälimuisti","entries":"merkinnät","hitRate":"Osumaprosentti","hitsMisses":"Osumat / Miss","signatureCache":"Allekirjoitusvälimuisti","signatureDefaults":"Oletukset","signatureTool":"Työkalu","signatureFamily":"Perhe","signatureSession":"Istunto","recovering":"Toipumassa","noCBData":"Katkaisijatietoja ei ole saatavilla. Tee ensin pyyntöjä.","providerHealthStatusAria":"Palveluntarjoajan terveydentila","issuesLabel":"Ongelmia havaittu","operational":"Toiminnassa","providers":"Palveluntarjoajat","healthyCount":"{count} terve","nodeVersion":"Solmu {version}","failures":"{count} virhe","failuresPlural":"{count} virheitä","lastFailure":"Viimeinen","rateLimitStatus":"Rate Limit Status","activeLimiters":"{count} aktiivinen rajoitin","activeLimitersPlural":"{count} aktiiviset rajoittimet","queued":"Jonossa","queuedCount":"{count} jonossa","running":"käynnissä","runningCount":"{count} käynnissä","ok":"OK","activeLockouts":"Aktiiviset lukitukset","resetConfirm":"Nollataanko kaikki katkaisijat terveeseen tilaan? Tämä tyhjentää kaikki virhemäärät ja palauttaa kaikki palveluntarjoajat toimintatilaan.","resetAllTitle":"Palauta kaikki katkaisijat terveeseen tilaan","resetting":"Nollataan...","resetAll":"Nollaa kaikki","until":"{time} asti","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Konfiguroitu kojelaudassa","configuredProvidersHint":"Palveluntarjoajat, joiden valtuustiedot on tallennettu kansioon /dashboard/providers, suorituksen tilasta riippumatta.","activeProvidersHint":"Määritetyt palveluntarjoajat, jotka ovat tällä hetkellä käytössä reitityspyyntöjä varten.","monitoredProvidersHint":"Palveluntarjoajat, joita tällä hetkellä seurataan katkaisijoiden kuntovalvojien avulla."},"limits":{"title":"Rajoitukset ja kiintiöt","rateLimit":"Rate Limit","remaining":"Jäljellä","requestsPerMinute":"Pyynnöt/min","tokensPerMinute":"Tokenit/min","dailyLimit":"Päivittäinen raja"},"logs":{"title":"Lokit","requestLogs":"Pyydä lokit","proxyLogs":"Välityspalvelimen lokit","auditLog":"Tarkastusloki","console":"konsoli","auditLogDesc":"Hallinnolliset toimet ja turvallisuustapahtumat","loading":"Ladataan...","refresh":"Päivitä","filterByAction":"Suodata toiminnon mukaan...","filterByActor":"Suodata näyttelijän mukaan...","filterEntriesAria":"Suodata tarkastuslokin merkinnät","filterByActionTypeAria":"Suodata toimintotyypin mukaan","filterByActorAria":"Suodata näyttelijän mukaan","refreshAuditLogAria":"Päivitä tarkastusloki","tableAria":"Tarkastuslokimerkinnät","failedFetchAuditLog":"Valvontalokin nouto epäonnistui","showing":"Näytetään {count} merkintää (poikkeama {offset})","search":"Etsi","timestamp":"Aikaleima","action":"Toiminta","actor":"näyttelijä","target":"Kohde","details":"Yksityiskohdat","ipAddress":"IP-osoite","notAvailable":"—","noEntries":"Tarkastuslokimerkintöjä ei löytynyt","previous":"Edellinen","next":"Seuraavaksi"},"onboarding":{"welcome":"Tervetuloa","security":"Turvallisuus","test":"Testaa","ready":"Valmis!","setPassword":"Aseta salasana","addProvider":"Lisää ensimmäinen palveluntarjoajasi","getStarted":"Aloita","skip":"Ohita","skipWizard":"Ohita ohjattu toiminto kokonaan","skipPassword":"Ohita salasanan asetus","skipAndContinue":"Ohita ja jatka","passwordLabel":"Salasana","confirmPassword":"Vahvista salasana","enterPassword":"Anna salasana","confirmPasswordPlaceholder":"Vahvista salasana","passwordsMismatch":"Salasanat eivät täsmää","setupComplete":"Asennus valmis!","goToDashboard":"Siirry kohtaan Dashboard →","welcomeDesc":"OmniRoute on paikallinen AI API -välityspalvelin. Se reitittää pyynnöt useille tekoälypalveluntarjoajille kuormituksen tasapainottamisen, vikasietoisuuden ja käytön seurannan avulla.","multiProvider":"Multi-Provider","usageTracking":"Käytön seuranta","apiKeyMgmt":"API-avainhallinta","securityDesc":"Aseta salasana kojelautasi suojaamiseksi tai ohita toistaiseksi.","providerDesc":"Yhdistä ensimmäinen AI-palveluntarjoajasi. Voit lisätä myöhemmin lisää.","apiKeyRequired":"API-avain (pakollinen)","customUrlOptional":"Muokattu URL-osoite (valinnainen)","testDesc":"Varmistetaan, että palveluntarjoajayhteytesi toimii.","runTest":"Suorita yhteystesti","testingConnection":"Testataan yhteyttä...","connectionSuccessful":"Yhteys onnistui! Palveluntarjoajasi on valmis.","noProviderFound":"Palveluntarjoajaa ei löydy. Voit lisätä sellaisen hallintapaneelista myöhemmin.","testFailed":"Testi epäonnistui, mutta voit määrittää tämän myöhemmin.","couldNotTest":"Ei pystynyt testaamaan juuri nyt. Voit testata kojelaudalta.","doneDesc":"Kaikki on valmista! OmniRoute-esiintymäsi on määritetty ja valmis välittämään AI-pyyntöjä.","yourEndpoint":"Päätepisteesi:","continue":"Jatka","retry":"Yritä uudelleen","failedSetPassword":"Salasanan asettaminen epäonnistui. Yritä uudelleen.","failedAddProvider":"Palveluntarjoajan lisääminen epäonnistui. Yritä uudelleen.","connectionError":"Yhteysvirhe. Yritä uudelleen.","provider":"Palveluntarjoaja"},"providers":{"title":"Palveluntarjoajat","addProvider":"Lisää palveluntarjoaja","editProvider":"Muokkaa toimittajaa","deleteProvider":"Poista palveluntarjoaja","noProviders":"Palveluntarjoajia ei ole määritetty","modelAvailability":"Mallin saatavuus","accounts":"Tilit","newAccount":"Uusi tili","deleteConfirm":"Haluatko varmasti poistaa tämän palveluntarjoajan?","testing":"Testataan...","testConnection":"Testaa yhteys","testSuccess":"Yhteys onnistui","testFailed":"Yhteys epäonnistui","available":"Saatavilla","cooldown":"Jäähdytys","unavailable":"Ei saatavilla","unknown":"Tuntematon","oauthLabel":"OAuth","compatibleLabel":"Yhteensopiva","chat":"Chat","responses":"Vastaukset","messages":"Viestit","oauthProviders":"OAuth-palveluntarjoajat","freeProviders":"Ilmaiset palveluntarjoajat","apiKeyProviders":"API-avainten tarjoajat","compatibleProviders":"API Key -yhteensopivat palveluntarjoajat","testAll":"Testaa kaikki","testAllOAuth":"Testaa kaikki OAuth-yhteydet","testAllFree":"Testaa kaikki ilmaiset yhteydet","testAllApiKey":"Testaa kaikki API-avainyhteydet","testAllCompatible":"Testaa kaikki yhteensopivat liitännät","connected":"{count} Yhdistetty","errorCount":"{count} Virhe ({code})","errorCountNoCode":"{count} Virhe","noConnections":"Ei yhteyksiä","disabled":"Ei käytössä","enableProvider":"Ota palveluntarjoaja käyttöön","disableProvider":"Poista palveluntarjoaja käytöstä","testResults":"Testitulokset","noCompatibleYet":"Yhteensopivia palveluntarjoajia ei ole vielä lisätty","compatibleHint":"Käytä yllä olevia painikkeita lisätäksesi OpenAI- tai Anthropic-yhteensopivia päätepisteitä","addOpenAICompatible":"Lisää OpenAI-yhteensopiva","addAnthropicCompatible":"Lisää Anthropic Compatible","addNewProvider":"Lisää uusi toimittaja","backToProviders":"Takaisin palveluntarjoajiin","configureNewProvider":"Määritä uusi AI-palveluntarjoaja käytettäväksi sovelluksissasi.","providerLabel":"Palveluntarjoaja","selectProvider":"Valitse palveluntarjoaja","selectedProvider":"Valittu palveluntarjoaja","authMethod":"Todennusmenetelmä","apiKeyLabel":"API-avain","apiKeyRequired":"API-avain vaaditaan","selectProviderRequired":"Valitse palveluntarjoaja","enterApiKey":"Anna API-avaimesi","apiKeySecure":"API-avaimesi salataan ja tallennetaan turvallisesti.","oauth2Connect":"Yhdistä OAuth2:een","oauth2Label":"OAuth2","oauth2Desc":"Yhdistä tilisi OAuth2-todennusta käyttämällä.","displayName":"Näyttönimi","displayNamePlaceholder":"esim. Production API, Dev Environment","displayNameHint":"Valinnainen. Ystävällinen nimi tämän kokoonpanon tunnistamiseksi.","active":"Aktiivinen","activeDescription":"Ota tämä palveluntarjoaja käyttöön sovelluksissasi","cancel":"Peruuta","createProvider":"Luo palveluntarjoaja","failedCreate":"Palveluntarjoajan luominen epäonnistui","errorOccurred":"Tapahtui virhe. Yritä uudelleen.","modelStatus":"Mallin tila","allModelsOperational":"Kaikki mallit toimivat","modelsWithIssues":"{count} malli(t), joissa on ongelmia","allModelsNormal":"Kaikki mallit reagoivat normaalisti.","cooldownCleared":"Jäähdytys tyhjennetty kohteelle {model}","failedClearCooldown":"Jäähdytyksen tyhjennys epäonnistui","loadingAvailability":"Ladataan mallin saatavuutta...","clearCooldown":"Selkeä","clearing":"Tyhjennetään...","until":"{time} asti","providerTestFailed":"Palveluntarjoajan testi epäonnistui","modeTest":"{mode} Testi","passedCount":"{count} hyväksytty","failedCount":"{count} epäonnistui","testedCount":"{count} testattu","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"VIRHE","noActiveConnectionsInGroup":"Tälle ryhmälle ei löytynyt aktiivisia yhteyksiä.","allTestsPassed":"Kaikki {total} testit läpäisty","testSummary":"{passed}/{total} hyväksytty, {failed} epäonnistui","nameLabel":"Nimi","prefixLabel":"Etuliite","baseUrlLabel":"Perus-URL-osoite","apiTypeLabel":"API-tyyppi","prefixHint":"Pakollinen. Ainutlaatuinen etuliite mallien nimille.","nameHint":"Pakollinen. Ystävällinen etiketti tälle solmulle.","baseUrlHint":"Pakollinen.  Palveluntarjoajan API-perus-URL-osoite.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Vahvista yhteys","validating":"Vahvistetaan...","connectionValid":"Yhteys on voimassa!","connectionFailed":"Yhteys epäonnistui. Tarkista URL-osoite ja avain.","testKeyLabel":"Testaa API-avain","testKeyPlaceholder":"sk-... (vain vahvistusta varten)","providerNotFound":"Palveluntarjoajaa ei löydy","deleteConnectionConfirm":"Poistetaanko tämä yhteys?","failedSetAlias":"Aliaksen asettaminen epäonnistui","failedSaveConnection":"Yhteyden tallentaminen epäonnistui","failedSaveConnectionRetry":"Yhteyden tallentaminen epäonnistui. Yritä uudelleen.","failedRetestConnection":"Yhteyden uudelleentestaus epäonnistui","deleteCompatibleNodeConfirm":"Poistetaanko tämä {type} Yhteensopiva solmu?","anthropicCompatibleDetails":"Anthropic-yhteensopivat yksityiskohdat","openaiCompatibleDetails":"OpenAI-yhteensopivat tiedot","messagesApi":"Viestit API","responsesApi":"Responses API","chatCompletions":"Chatin loppuun saattaminen","importingModels":"Tuodaan...","importFromModels":"Tuo / mallit","clearAllModels":"Tyhjennä kaikki mallit","clearAllModelsConfirm":"Haluatko varmasti poistaa kaikki tämän palveluntarjoajan mallit? Tätä ei voi kumota.","clearAllModelsSuccess":"Kaikki mallit tyhjennetty","clearAllModelsFailed":"Mallien tyhjennys epäonnistui","addConnectionToImport":"Lisää yhteys ottaaksesi tuonnin käyttöön.","noModelsConfigured":"Ei malleja määritetty","connectionCount":"{count} yhteyttä","fetchingModels":"Haetaan saatavilla olevia malleja...","failedFetchModels":"Mallien nouto epäonnistui","noModelsFound":"Malleja ei löytynyt","importFailed":"Tuonti epäonnistui","noNewModelsAdded":"Uusia malleja ei lisätty.","adding":"Lisätään...","importingModelsTitle":"Mallien tuonti","copyModel":"Kopioi malli","removeModel":"Poista malli","rateLimitProtected":"Suojattu","rateLimitUnprotected":"Suojaamaton","enableRateLimitProtection":"Ota nopeusrajoitussuoja käyttöön napsauttamalla","disableRateLimitProtection":"Napsauta poistaaksesi nopeusrajoituksen suojauksen","productionKey":"Tuotantoavain","enterNewApiKey":"Anna uusi API-avain","optional":"Valinnainen","anthropicCompatibleName":"Antrooppinen yhteensopiva","openaiCompatibleName":"OpenAI-yhteensopiva","failedImportModels":"Mallien tuonti epäonnistui","noModelsReturnedFromEndpoint":"Ei malleja palautettu /models-päätepisteestä.","importingModelsProgress":"Tuodaan {current}/{total} mallia...","foundModelsStartingImport":"Löytyi {count} mallia. Aloitetaan tuontia...","importingModelById":"Tuodaan {modelId}...","importSuccessCount":"{count, plural, one {# model} other {# models}} tuotu onnistuneesti!","noNewModelsAddedExisting":"Uusia malleja ei lisätty (kaikki on jo olemassa).","importDoneCount":"✓ Valmis! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"Tapahtui odottamaton virhe","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"viestejä","responsesPath":"vastaukset","chatCompletionsPath":"chat / täydennykset","add":"Lisää","edit":"Muokkaa","delete":"Poista","anthropic":"Antrooppinen","openai":"OpenAI","singleConnectionPerCompatible":"Vain yksi yhteys on sallittu yhteensopivaa solmua kohden. Lisää toinen solmu, jos tarvitset lisää yhteyksiä.","connections":"Liitännät","providerProxyTitleConfigured":"Palveluntarjoajan välityspalvelin: {host}","configured":"määritetty","providerProxyConfigureHint":"Määritä välityspalvelin kaikille tämän palveluntarjoajan yhteyksille","providerProxy":"Palveluntarjoajan välityspalvelin","noConnectionsYet":"Ei yhteyksiä vielä","addFirstConnectionHint":"Aloita lisäämällä ensimmäinen yhteys","addConnection":"Lisää yhteys","availableModels":"Saatavilla olevat mallit","pageAutoRefresh":"Sivu päivittyy automaattisesti...","statusDisabled":"pois käytöstä","statusConnected":"yhdistetty","statusRuntimeIssue":"ajonaikainen ongelma","statusAuthFailed":"todennus epäonnistui","statusRateLimited":"hinta rajoitettu","statusNetworkIssue":"verkko-ongelma","statusTestUnsupported":"testiä ei tueta","statusUnavailable":"ei ole saatavilla","statusFailed":"epäonnistunut","statusError":"virhe","oauthAccount":"OAuth-tili","errorTypeRuntime":"Paikallinen suoritusaika","errorTypeUpstreamAuth":"Varsinainen todennus","errorTypeMissingCredential":"Tunnustus puuttuu","errorTypeRefreshFailed":"Päivitys epäonnistui","errorTypeTokenExpired":"Tunnus on vanhentunut","errorTypeRateLimited":"Hinta rajoitettu","errorTypeUpstreamUnavailable":"Upstream ei saatavilla","errorTypeNetworkError":"Verkkovirhe","errorTypeTestUnsupported":"Testiä ei tueta","errorTypeUpstreamError":"Virhe ylävirtaan","proxySourceGlobal":"Maailmanlaajuinen","proxySourceProvider":"Palveluntarjoaja","proxySourceKey":"Avain","proxyConfiguredBySource":"Välityspalvelin ({source}): {host}","autoPriority":"Automaattinen: {priority}","proxy":"Välityspalvelin","retestAuthentication":"Testaa todennus uudelleen","retest":"Testaa uudelleen","disableConnection":"Poista yhteys käytöstä","enableConnection":"Ota yhteys käyttöön","reauthenticateConnection":"Todenna tämä yhteys uudelleen","proxyConfig":"Välityspalvelimen konfigurointi","aliasExistsAlert":"Alias \\"{alias}\\" on jo olemassa. Käytä toista mallia tai muokkaa olemassa olevaa aliasta.","openRouterAnyModelHint":"OpenRouter tukee mitä tahansa mallia. Lisää malleja ja luo aliaksia nopeaa käyttöä varten.","modelIdFromOpenRouter":"Mallin tunnus (OpenRouterista)","openRouterModelPlaceholder":"antrooppinen/claude-3-opus","customModels":"Mukautetut mallit","customModelsHint":"Lisää mallitunnukset, jotka eivät ole oletusluettelossa. Nämä ovat käytettävissä reititystä varten.","modelId":"Mallin tunnus","customModelPlaceholder":"esim. gpt-4.5-turbo","loading":"Ladataan...","removeCustomModel":"Poista mukautettu malli","noCustomModels":"Mukautettuja malleja ei ole vielä lisätty.","allSuggestedAliasesExist":"Kaikki ehdotetut aliakset ovat jo olemassa. Valitse toinen malli tai poista ristiriitaiset aliakset.","failedSaveCustomModel":"Muokatun mallin tallentaminen epäonnistui","modelAddedSuccess":"Malli {modelId} lisättiin onnistuneesti","failedAddModelTryAgain":"Mallin lisääminen epäonnistui. Yritä uudelleen.","failedSaveImportedModel":"Tuodun mallin tallentaminen mukautettuun tietokantaan epäonnistui","failedImportModelsTryAgain":"Mallien tuonti epäonnistui. Yritä uudelleen.","failedRemoveModelFromDatabase":"Mallin poistaminen tietokannasta epäonnistui","modelRemovedSuccess":"Mallin poistaminen onnistui","failedDeleteModelTryAgain":"Mallin poistaminen epäonnistui. Yritä uudelleen.","compatibleModelsDescription":"Lisää {type}-yhteensopivia malleja manuaalisesti tai tuo ne /models-päätepisteestä.","anthropicCompatibleModelPlaceholder":"claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"API-avaimen vahvistus epäonnistui. Tarkista avaimesi ja yritä uudelleen.","addProviderApiKeyTitle":"Lisää {provider} API-avain","checking":"Tarkistetaan...","check":"Tarkista","valid":"Voimassa","invalid":"Virheellinen","creating":"Luodaan...","validationChecksAnthropicCompatible":"Vahvistus tarkistaa {provider} vahvistamalla API-avaimen.","validationChecksOpenAiCompatible":"Vahvistus tarkistaa {provider} /models-osoitteen kautta perus-URL-osoitteessasi.","priorityLabel":"Prioriteetti","saving":"Tallennetaan...","save":"Tallenna","editConnection":"Muokkaa yhteyttä","accountName":"Tilin nimi","email":"Sähköposti","healthCheckMinutes":"Terveystarkastus (min)","healthCheckHint":"Ennakoiva tunnuksen päivitysväli. 0 = pois käytöstä.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Yhteyden testaus epäonnistui","failed":"Epäonnistui","leaveBlankKeepCurrentApiKey":"Jätä tyhjäksi, jos haluat säilyttää nykyisen API-avaimen.","editCompatibleTitle":"Muokkaa {type} Yhteensopiva","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"API-avain (tarkistusta varten)","compatibleProdPlaceholder":"{type} Yhteensopiva (tuote)","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":"Automaattinen synkronointi","autoSyncTooltip":"Päivitä malliluettelo automaattisesti 24 tunnin välein (konfiguroitavissa kohdassa MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Automaattinen synkronointi käytössä – mallit päivittyvät säännöllisesti","autoSyncDisabled":"Automaattinen synkronointi poistettu käytöstä","autoSyncToggleFailed":"Automaattisen synkronoinnin vaihtaminen epäonnistui","allModelsAlreadyImported":"Kaikki mallit on jo tuotu","noNewModelsToImport":"Ei uusia malleja tuotavaksi — kaikki mallit ovat jo rekisterissä tai mukautetulla mallilistalla","skippingExistingModels":"Ohitetaan {count} olemassa olevaa mallia"},"settings":{"title":"Asetukset","general":"Kenraali","security":"Turvallisuus","appearance":"Ulkonäkö","routing":"Reititys","cache":"Välimuisti","resilience":"Joustavuus","systemPrompt":"Järjestelmäkehote","thinkingBudget":"Miettivä budjetti","proxy":"Välityspalvelin","pricing":"Hinnoittelu","storage":"Varastointi","policies":"Käytännöt","ipFilter":"IP-suodatin","comboDefaults":"Yhdistelmän oletukset","fallbackChains":"Varaketjut","changePassword":"Vaihda salasana","enablePassword":"Ota salasana käyttöön","darkMode":"Tumma tila","lightMode":"Valotila","systemTheme":"Järjestelmän teema","enableCache":"Ota välimuisti käyttöön","cacheTTL":"Välimuisti TTL","maxCacheSize":"Välimuistin enimmäiskoko","clearCache":"Tyhjennä välimuisti","cacheHits":"Välimuistin osumia","cacheMisses":"Välimuisti puuttuu","hitRate":"Osumaprosentti","cacheEntries":"Välimuistin merkinnät","circuitBreaker":"Katkaisija","retryPolicy":"Yritä uudelleen -käytäntö","maxRetries":"Max Uudelleenyritykset","retryDelay":"Yritä uudelleen Viive","timeoutMs":"Aikakatkaisu (ms)","enableSystemPrompt":"Ota järjestelmäkehote käyttöön","systemPromptText":"Järjestelmäkehoteteksti","enableThinking":"Ota ajattelu käyttöön","maxThinkingTokens":"Max Thinking Tokens","enableProxy":"Ota välityspalvelin käyttöön","proxyUrl":"Välityspalvelimen URL-osoite","pricingRates":"Hinnoitteluhinnastomuoto","currentPricing":"Nykyisen hinnoittelun yleiskatsaus","loadingPricing":"Ladataan hintatietoja...","noPricing":"Hintatietoja ei ole saatavilla","input":"Syöte","output":"Lähtö","cached":"Välimuistissa","reasoning":"Päättely","cacheCreation":"Välimuistin luominen","customPricing":"Mukautettu hinnoittelu","databaseSize":"Tietokannan koko","backupDb":"Varmuuskopiointitietokanta","restoreDb":"Palauta tietokanta","exportData":"Vie tiedot","importData":"Tuo tiedot","clearData":"Tyhjennä kaikki tiedot","clearDataConfirm":"Tämä poistaa pysyvästi kaikki tiedot. Oletko varma?","enableRequestLogs":"Ota pyyntölokit käyttöön","logRetention":"Lokin säilyttäminen","ipWhitelist":"IP valkoinen lista","ipBlacklist":"IP musta lista","addIP":"Lisää IP","savedSuccessfully":"Asetukset tallennettu onnistuneesti","ai":"AI","advanced":"Edistynyt","localMode":"Paikallinen tila — Kaikki laitteellesi tallennetut tiedot","settingsSectionsAria":"Asetukset-osiot","switchThemes":"Vaihda vaaleiden ja tummien teemojen välillä","themeSelectionAria":"Teeman valinta","themeLight":"Kevyt","themeDark":"Tumma","themeSystem":"Järjestelmä","hideHealthLogs":"Piilota kuntotarkastuslokit","hideHealthLogsDesc":"Kun PÄÄLLÄ, estä [HealthCheck]-viestit palvelinkonsolissa","themeAccent":"Teeman väri","themeAccentDesc":"Valitse valmis väri tai luo oma teemasi yhdellä värillä","themeCreate":"Luo teema","themeCustom":"Mukautettu teema","themeBlue":"Sininen","themeRed":"Punainen","themeGreen":"Vihreä","themeViolet":"Violetti","themeOrange":"Oranssi","themeCyan":"Syaani","promptCache":"Kehotusvälimuisti","flushCache":"Tyhjennä välimuisti","flushing":"Huuhdellaan…","size":"Koko","hits":"Osumat","evictions":"Häädöt","loadingCacheStats":"Ladataan välimuistin tilastoja…","globalProxy":"Globaali välityspalvelin","globalProxyDesc":"Määritä yleinen lähtevä välityspalvelin kaikille API-kutsuille. Yksittäiset palveluntarjoajat, yhdistelmät ja avaimet voivat ohittaa tämän.","noGlobalProxy":"Globaalia välityspalvelinta ei ole määritetty","globalLabel":"Maailmanlaajuinen","configure":"Määritä","globalSystemPrompt":"Globaali järjestelmäkehote","systemPromptDesc":"Lisätään kaikkiin välityspalvelintason pyyntöihin","saved":"Tallennettu","systemPromptPlaceholder":"Anna järjestelmäkehote lisätäksesi kaikkiin pyyntöihin...","systemPromptHint":"Tämä kehote liitetään jokaisen pyynnön järjestelmäviestiin. Käytä yleisiä ohjeita, turvallisuusohjeita tai vastausten muotoilusääntöjä varten.","chars":"{count} merkkiä","thinkingBudgetTitle":"Miettivä budjetti","thinkingBudgetDesc":"Hallitse tekoälyn päättelytunnuksen käyttöä kaikissa pyynnöissä","passthrough":"Läpivienti","passthroughDesc":"Ei muutoksia – asiakas hallitsee ajattelubudjettia","auto":"Auto","autoDesc":"Poista kaikki ajatellut asetukset – anna palveluntarjoajan päättää","custom":"Mukautettu","customDesc":"Aseta kiinteä tunnusbudjetti kaikille pyynnöille","adaptive":"Mukautuva","adaptiveDesc":"Skaalaa budjetti pyynnön monimutkaisuuden perusteella","effortNone":"Ei mitään (0 merkkiä)","effortLow":"Matala (1 000 tokenia)","effortMedium":"Keskikokoinen (10 000 merkkiä)","effortHigh":"High (128 000 tokenia)","tokenBudget":"Token-budjetti","tokens":"rahakkeita","baseEffortLevel":"Perusponnistuksen taso","adaptiveHint":"Mukautuva tila skaalautuu tältä perustasolta viestimäärän, työkalun käytön ja kehotteen pituuden perusteella.","requireLogin":"Vaadi kirjautumista","requireLoginDesc":"Kun PÄÄLLÄ, kojelauta vaatii salasanan. Kun POIS PÄÄLTÄ, käytä ilman kirjautumista.","currentPassword":"Nykyinen salasana","enterCurrentPassword":"Anna nykyinen salasana","newPassword":"Uusi salasana","enterNewPassword":"Syötä uusi salasana","confirmPassword":"Vahvista uusi salasana","confirmPasswordPlaceholder":"Vahvista uusi salasana","passwordsNoMatch":"Salasanat eivät täsmää","passwordUpdated":"Salasana päivitetty onnistuneesti","failedUpdatePassword":"Salasanan päivitys epäonnistui","errorOccurred":"Tapahtui virhe","updatePassword":"Päivitä salasana","setPassword":"Aseta salasana","apiEndpointProtection":"API Endpoint Protection","requireAuthModels":"Vaadi API-avain /mallille","requireAuthModelsDesc":"Kun PÄÄLLÄ, /v1/models-päätepiste palauttaa 404 todentamattomille pyynnöille. Estää valtuuttamattomien käyttäjien mallin löytämisen.","blockedProviders":"Estetyt palveluntarjoajat","blockedProvidersDesc":"Piilota tietyt toimittajat /v1/models-vastauksesta. Estetyt palveluntarjoajat eivät näy malliluetteloissa.","providersBlocked":"{count} toimittaja(t) estetty /modelsista","blockProviderTitle":"Estä {provider}","unblockProviderTitle":"Kumoa esto {provider}","routingStrategy":"Reititysstrategia","fillFirst":"Täytä ensin","fillFirstDesc":"Käytä tilejä tärkeysjärjestyksessä","roundRobin":"Round Robin","roundRobinDesc":"Selaa kaikki tilit läpi","p2c":"P2C","p2cDesc":"Valitse 2 satunnaista, käytä terveellisempää","random":"Satunnainen","randomDesc":"Satunnainen tili jokainen pyyntö","leastUsed":"Vähiten käytetty","leastUsedDesc":"Valitse vähiten käytetty tili","costOpt":"Kustannusopt","costOptDesc":"Valitse halvin saatavilla oleva tili","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Sticky Limit","stickyLimitDesc":"Puhelut tilikohtaisesti ennen vaihtamista","modelAliases":"Mallin aliakset","modelAliasesTitle":"Mallialias","modelAliasesDesc":"Jokerimerkkikuviot mallien nimien yhdistämiseen • Käytä * ja ?","addCustomAlias":"Lisää Mukautettu Alias","deprecatedModelId":"Vanhentunut malli-ID","newModelId":"Uusi malli-ID","customAliases":"Mukautetut Aliakset","builtInAliases":"Sisäänrakennetut Aliakset","backgroundDegradationTitle":"Taustatyö Degradointi","backgroundDegradationDesc":"Tunnistaa automaattisesti taustatyöt (otsikot, yhteenvedot) ja ohjaa halvempiin malleihin","enableDegradation":"Ota Taustadegraadointi Käyttöön","enableDegradationHint":"Kun käytössä, taustatyöt kuten otsikoiden luominen ja yhteenvedot ohjataan automaattisesti halvempiin malleihin","tasksDetected":"Tehtävät tunnistettu","degradationMap":"Mallin Degradaatiokartta","premiumModel":"Premium-malli","cheapModel":"Halpa malli","detectionPatterns":"Tunnistusmallit","newPattern":"esim. \\"luo otsikko\\"","aliasPatternPlaceholder":"claude-sonett-*","aliasTargetPlaceholder":"claude-sonnet-4-20250514","pattern":"kuvio","targetModel":"Kohdemalli","add":"+ Lisää","session":"Istunto","sessionDetailsAria":"Istunnon tiedot","status":"Tila","authenticated":"Todennettu","guest":"Vieras","loginTime":"Kirjautumisaika","sessionAge":"Istunnon ikä","browser":"Selain","clearLocalData":"Tyhjennä paikalliset tiedot","logout":"Kirjaudu ulos","clearLocalDataConfirm":"Poistetaanko kaikki paikalliset tiedot? Tämä nollaa asetuksesi.","unknown":"Tuntematon","systemActor":"järjestelmä","ipAccessControl":"IP Access Control","ipAccessControlDesc":"Estä tai salli tietyt IP-osoitteet","ipModeDisabled":"Ei käytössä","ipModeBlacklist":"Musta lista","ipModeWhitelist":"Valkoinen lista","ipModeWhitelistPriority":"WL-prioriteetti","addIpAddress":"Lisää IP-osoite","ipAddressPlaceholder":"192.168.1.0/24 tai 10.0.*.*","block":"+ Estä","allow":"+ Salli","blocked":"Estetty ({count})","allowed":"Sallittu ({count})","temporaryBans":"Väliaikaiset kiellot ({count})","minLeft":"{min}m jäljellä","auditLog":"Tarkastusloki","searchAuditLogs":"Hae valvontalokeja...","failedLoadAuditLog":"Tarkastuslokin lataaminen epäonnistui","noAuditEvents":"Tarkastustapahtumia ei löytynyt","action":"Toiminta","actor":"näyttelijä","details":"Yksityiskohdat","time":"Aika","fallbackChainsTitle":"Varaketjut","fallbackChainsDesc":"Määritä toimittajan varatilaus mallikohtaisesti","addChain":"+ Lisää ketju","modelName":"Mallin nimi","modelNamePlaceholder":"claude-sonnet-4-20250514","providersCommaSeparated":"Palveluntarjoajat (pilkuilla erotettuna, tärkeysjärjestyksessä)","providersCommaSeparatedPlaceholder":"antrooppinen, openai, kaksoset","createChain":"Luo ketju","noFallbackChains":"Ei varaketjuja","noFallbackChainsDesc":"Luo ketju toimittajan varatilauksen määrittämiseksi mallille.","loadingFallbackChains":"Ladataan varaketjuja...","deleteChainConfirm":"Poistetaanko varaketju kohteelle \\"{model}\\"?","chainCreated":"Ketju luotu kohteelle {model}","chainDeleted":"Ketju poistettu {model}","failedCreateChain":"Ketjun luominen epäonnistui","failedDeleteChain":"Ketjun poistaminen epäonnistui","deleteChain":"Poista ketju","fillModelAndProviders":"Täytä mallin nimi ja toimittajat","addAtLeastOneProvider":"Lisää vähintään yksi palveluntarjoaja","comboDefaultsTitle":"Yhdistelmän oletukset","globalComboConfig":"Globaali yhdistelmäkokoonpano","defaultStrategy":"Oletusstrategia","defaultStrategyDesc":"Sovelletaan uusiin komboihin ilman selkeää strategiaa","comboStrategyAria":"Yhdistelmästrategia","priority":"Prioriteetti","weighted":"Painotettu","maxRetriesLabel":"Max Uudelleenyritykset","retryDelayLabel":"Uudelleenyrityksen viive (ms)","timeoutLabel":"Aikakatkaisu (ms)","healthCheck":"Terveystarkastus","healthCheckDesc":"Tarkista palveluntarjoajan saatavuus etukäteen","trackMetrics":"Seuraa mittareita","trackMetricsDesc":"Tallenna yhdistelmäkohtaiset pyyntötiedot","providerOverrides":"Palveluntarjoajan ohitukset","providerOverridesDesc":"Ohita aikakatkaisu ja yritä uudelleen palveluntarjoajan mukaan. Palveluntarjoajan asetukset ohittavat yleiset oletukset.","providerMaxRetriesAria":"{provider} enintään uudelleenyritystä","providerTimeoutAria":"{provider} aikakatkaisu ms","removeProviderOverrideAria":"Poista {provider} ohitus","newProviderNamePlaceholder":"esim. google, avaa...","newProviderNameAria":"Uusi palveluntarjoajan nimi","retries":"yrittää uudelleen","ms":"ms","saveComboDefaults":"Tallenna yhdistelmän oletusasetukset","maxNestingDepth":"Suurin pesintäsyvyys","concurrencyPerModel":"Samanaikaisuus / malli","queueTimeout":"Jonon aikakatkaisu (ms)","providerProfiles":"Palveluntarjoajan profiilit","providerProfilesDesc":"Erilliset joustavuusasetukset OAuth- (istuntopohjainen) ja API-avaimen (mittari) tarjoajille. OAuth-palveluntarjoajilla on tiukemmat kynnykset alhaisempien nopeusrajojen vuoksi.","oauthProviders":"OAuth-palveluntarjoajat","apiKeyProviders":"API-avainten tarjoajat","transientCooldown":"Ohimenevä jäähtyminen","rateLimitCooldown":"Rate Limit Cooldown","maxBackoffLevel":"Maksimitaso","cbThreshold":"CB-kynnys","cbResetTime":"CB-nollausaika","rateLimiting":"Rate Limiting","rateLimitingDesc":"API-avainten tarjoajat ovat automaattisesti nopeudeltaan rajoitettuja turvallisilla oletusasetuksilla. Rajat opitaan vastausotsikoista ja mukautuvat ajan myötä.","defaultSafetyNet":"Oletusturvaverkko","rpm":"RPM","minGap":"Min Gap","maxConcurrent":"Max Samanaikainen","activeLimiters":"Aktiiviset rajoittimet","noActiveLimiters":"Ei vielä aktiivisia nopeudenrajoittimia.","reservoir":"Säiliö","running":"Juoksemassa","queued":"Jonossa","circuitBreakers":"Katkaisijat","breakerStateClosed":"Suljettu","breakerStateOpen":"Avaa","breakerStateHalfOpen":"Puoliavoin","tripped":"{count} lauennut","healthy":"{count} terve","resetAll":"Nollaa kaikki","noCircuitBreakers":"Katkaisijat eivät ole vielä aktiivisia. Ne luodaan automaattisesti, kun pyynnöt kulkevat yhdistelmäputkilinjan läpi.","failures":"{count} virhe(ä)","policiesLocked":"Käytännöt ja lukitut tunnisteet","allOperational":"Kaikki järjestelmät toimivat – ei lukituksia tai lauenneita katkaisijoita","loadingPolicies":"Ladataan käytäntöjä...","lockedIdentifiers":"Lukitut tunnisteet","unlockedIdentifier":"Avattu: {identifier}","sinceDate":"alkaen {date}","forceUnlock":"Pakota lukitus","unlocking":"Avataan...","failedUnlock":"Lukituksen avaaminen epäonnistui","failedLoadWithStatus":"Lataus epäonnistui: {status}","failedLoadResilience":"Resilienssitilan lataaminen epäonnistui","saveFailed":"Tallennus epäonnistui","resetFailed":"Nollaus epäonnistui","loadingResilience":"Ladataan joustavuuden tilaa...","retry":"Yritä uudelleen","systemStorage":"Järjestelmä ja tallennustila","allDataLocal":"Kaikki tiedot on tallennettu paikallisesti koneellesi","databasePath":"Tietokannan polku","exportDatabase":"Vie tietokanta","exportAll":"Vie kaikki (.tar.gz)","importDatabase":"Tuo tietokanta","confirmDbImport":"Vahvista tietokannan tuonti","confirmDbImportDesc":"Tämä korvaa kaikki nykyiset tiedot kohteen {file} sisällöllä. Varmuuskopio luodaan automaattisesti ennen tuontia.","yesImport":"Kyllä, tuonti","lastBackup":"Viimeinen varmuuskopio","noBackupYet":"Ei vielä varmuuskopiota","backupNow":"Varmuuskopioi nyt","backupRestore":"Varmuuskopiointi ja palautus","viewBackups":"Näytä varmuuskopiot","hide":"Piilota","backupRetentionDesc":"Tietokannan tilannevedokset luodaan automaattisesti ennen palautusta ja 15 minuutin välein tietojen muuttuessa. Säilytys: 24 tunnin välein + 30 päivittäistä varmuuskopiota älykkäällä kierrolla.","loadingBackups":"Ladataan varmuuskopioita...","noBackupsYet":"Varmuuskopioita ei ole vielä saatavilla. Varmuuskopiot luodaan automaattisesti, kun tiedot muuttuvat.","backupsAvailable":"{count} varmuuskopio(t) saatavilla","refresh":"Päivitä","confirm":"Vahvista?","yes":"Kyllä","no":"Ei","restore":"Palauta","invalidFileType":"Virheellinen tiedostotyyppi. Vain .sqlite-tiedostot hyväksytään.","exportFailed":"Vienti epäonnistui","exportFailedWithError":"Vienti epäonnistui: {error}","fullExportFailedWithError":"Täysi vienti epäonnistui: {error}","backupCreated":"Varmuuskopio luotu: {file}","restoreSuccess":"Palautettu! {connections} yhteydet, {nodes} solmut, {combos} yhdistelmät, {apiKeys} API-avaimet.","importSuccess":"Tietokanta tuotu! {connections} yhteydet, {nodes} solmut, {combos} yhdistelmät, {apiKeys} API-avaimet.","justNow":"juuri nyt","minutesAgo":"{count}min sitten","hoursAgo":"{count}h sitten","daysAgo":"{count}pv sitten","backupReasonManual":"manuaalinen","backupReasonPreRestore":"esipalautus","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"Ei muutoksia edellisen varmuuskopioinnin jälkeen","backupFailed":"Varmuuskopiointi epäonnistui","restoreFailed":"Palautus epäonnistui","importFailed":"Tuonti epäonnistui","errorDuringRestore":"Palautuksen aikana tapahtui virhe","errorDuringImport":"Tuonnin aikana tapahtui virhe","modelPricing":"Mallin hinnoittelu","modelPricingDesc":"Määritä mallikohtaiset hintahinnat • Kaikki hinnat $/1M tunnuksissa","providers":"Palveluntarjoajat","registry":"Rekisteri","priced":"hinnoiteltu","searchProvidersModels":"Hae palveluntarjoajia tai malleja...","showAll":"Näytä kaikki","noProvidersMatch":"Yksikään palveluntarjoaja ei vastaa hakuasi.","howPricingWorks":"Kuinka hinnoittelu toimii","cacheWrite":"Välimuistin kirjoitus","unsaved":"tallentamaton","resetDefaults":"Palauta oletukset","saveProvider":"Tallenna palveluntarjoaja","saving":"Tallennetaan...","model":"Malli","models":"mallit","moreProviders":"{count} lisää palveluntarjoajia","withPricing":"hinnoittelu määritettynä","policiesCircuitBreakers":"Käytännöt ja katkaisijat","activeIssuesDetected":"Aktiivisia ongelmia havaittu","off":"Pois päältä","resetPricingConfirm":"Palautetaanko kaikki kohteen {provider} hinnat oletusasetuksiin?","pricingDescInput":"Syöte: mallille lähetetyt tunnukset","pricingDescOutput":"Tulos: luotuja merkkejä","pricingDescCached":"Välimuistissa: uudelleen käytetty syöttö (~50 % syöttönopeudesta)","pricingDescReasoning":"Päättely: ajattelumerkit (palautuu ulostuloon)","pricingDescCacheWrite":"Välimuistin kirjoitus: välimuistin merkintöjen luominen (palautuu syötteeseen)","pricingDescFormula":"Kustannukset = (syöttö × syöttönopeus) + (tuotos × lähtönopeus) + (välimuisti × välimuistin_nopeus) miljoonaa merkkiä kohden.","pricingSettingsTitle":"Hinnoitteluasetukset","totalModels":"Mallit yhteensä","active":"Aktiivinen","costCalculation":"Kustannuslaskenta","costCalculationDesc":"Kustannukset lasketaan kullekin mallille määritettyjen tunnuksen käytön ja hinnoittelun perusteella.","pricingFormat":"Hinnoittelumuoto","pricingFormatDesc":"Kaikki hinnat ovat $/1M tokeneita (dollaria per miljoonaa rahaketta).","tokenTypes":"Token-tyypit","inputTokenDesc":"Vakiokehotetunnukset","outputTokenDesc":"Täydennys-/vastaustunnukset","cachedTokenDesc":"Välimuistissa olevat syöttötunnukset (yleensä 50 % syöttönopeudesta)","reasoningTokenDesc":"Erityiset päättely-/ajattelutunnisteet (varaustulosta)","cacheCreationTokenDesc":"Välimuistimerkintöjen luomiseen käytetyt tunnukset (varausarvo syöttönopeuteen)","customPricingNote":"Voit ohittaa tiettyjen mallien oletushinnoittelun. Mukautetut ohitukset ovat etusijalla automaattisesti tunnistettuihin hinnoitteluun nähden.","editPricing":"Muokkaa hinnoittelua","viewFullDetails":"Näytä täydelliset tiedot","themeCoral":"Koralli","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":"Edistynyt reititysopastus","routingAdvancedGuideHint1":"Käytä Täytä ensin ennustettavaa prioriteettia varten, Round Robinia oikeudenmukaisuuden varmistamiseksi ja P2C:tä latenssin kestävyyteen.","routingAdvancedGuideHint2":"Jos palveluntarjoajat vaihtelevat laadultaan/kustannuksiltaan, aloita Cost Opt -vaihtoehdolla taustatyössä ja Vähiten käytetyllä tasapainoiseen kulumiseen.","comboDefaultsGuideTitle":"Kuinka virittää yhdistelmäoletusasetukset","comboDefaultsGuideHint1":"Pidä uudelleenyritykset alhaisena matalan viiveen virroissa; lisää aikakatkaisua vain pitkiä sukupolvitehtäviä varten.","comboDefaultsGuideHint2":"Käytä palveluntarjoajan ohituksia, kun yksi palveluntarjoaja tarvitsee erilaista aikakatkaisu-/uudelleenyritystoimintaa kuin yleiset oletusasetukset."},"translator":{"title":"Kääntäjä","metaTitle":"Kääntäjä leikkikenttä | OmniRoute","metaDescription":"Tee virheenkorjaus, testaa ja visualisoi API-muotojen käännökset palveluntarjoajien välillä","playgroundTitle":"Kääntäjä leikkikenttä","playground":"Leikkipaikka","realtime":"Reaaliaikainen käännöstoiminta","chatTester":"Chatin testaaja","testBench":"Testipenkki","liveMonitor":"Live Monitor","modeDescriptionPlayground":"Liitä mikä tahansa API-pyynnön runko ja katso, kuinka OmniRoute kääntää sen toimittajamuotojen välillä (OpenAI ↔ Claude ↔ Gemini ↔ Responses API)","modeDescriptionChatTester":"Lähetä todellisia chat-pyyntöjä OmniRouten kautta ja tarkasta koko meno-paluu: syöttö, käännetty pyyntö, palveluntarjoajan vastaus ja käännetty tulos.","modeDescriptionTestBench":"Suorita ennalta määritettyjä skenaarioita ja vertaile toimittajien ja mallien yhteensopivuutta.","modeDescriptionLiveMonitor":"Katso käännöstapahtumia reaaliajassa, kun pyynnöt kulkevat OmniRouten kautta.","modeDescriptionFallback":"Tee virheenkorjaus, testaa ja visualisoi, kuinka OmniRoute kääntää API-pyynnöt palveluntarjoajien välillä.","recentTranslations":"Viimeaikaiset käännökset","noTranslations":"Ei vielä käännöksiä","source":"lähde","target":"Kohde","time":"Aika","model":"Malli","status":"Tila","latency":"Latenssi","totalTranslations":"Yhteensä käännöksiä","successful":"Onnistunut","errors":"Virheet","avgLatency":"Keskimääräinen viive","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Live - automaattinen päivitys","paused":"Keskeytetty","eventsAppearHint":"Käännöstapahtumat näkyvät täällä, kun pyynnöt kulkevat OmniRouten kautta. Käytä mitä tahansa näistä menetelmistä tapahtumien luomiseen:","chatTesterTab":"Chat Tester -välilehti","testBenchTab":"Testipenkki-välilehti","externalApiCalls":"Ulkoiset API-kutsut","ideCliIntegrations":"IDE/CLI-integraatiot","inMemoryNote":"Huomautus: Tapahtumat tallennetaan muistiin ja nollataan, kun palvelin käynnistyy uudelleen.","ok":"OK","errorShort":"ERR","formatConverter":"Format Converter","formatConverterDescription":"Liitä tai kirjoita JSON-pyynnön leipäteksti. Kääntäjä tunnistaa automaattisesti lähdemuodon ja muuntaa sen kohdemuotoon. Käytä tätä virheenkorjaukseen, kuinka OmniRoute kääntää pyynnöt muotojen välillä (OpenAI ↔ Claude ↔ Gemini ↔ Responses API).","input":"Syöte","output":"Lähtö","auto":"Auto","swapFormats":"Vaihda formaatteja","translateAction":"Käännä","clear":"Selkeä","inputPlaceholder":"Liitä pyynnön teksti tähän tai valitse malli alta...","exampleTemplates":"Esimerkkimalleja","exampleTemplatesHint":"- Napsauta ladataksesi","templateLoadHint":"Malli lataa pyynnön muodossa {format}. Muuta lähdemuotoa ladataksesi eri muodossa.","compatibilityTester":"Yhteensopivuuden testaaja","compatibilityReport":"Yhteensopivuusraportti","testBenchDescription":"Suorita ennalta määritettyjä skenaarioita (Simple Chat, Tool Calling jne.) varmistaaksesi käännöksen ja palveluntarjoajan yhteensopivuuden. Valitse lähdemuoto ja kohdetoimittaja ja suorita sitten kaikki testit nähdäksesi yhteensopivuusprosentti. Käytä tätä selvittääksesi, mitkä ominaisuudet toimivat eri palveluntarjoajien välillä.","targetProvider":"Kohdetoimittaja","runAllTests":"Suorita kaikki testit","runTest":"Suorita testi","reRun":"Suorita uudelleen","running":"Juoksemassa...","passed":"läpäissyt","failed":"epäonnistunut","passedIconLabel":"✅ Läpäisty","chunks":"paloina","scenarioSimpleChat":"Yksinkertainen chat","scenarioToolCalling":"Työkalun kutsuminen","scenarioMultiTurn":"Monikierros","scenarioThinking":"Ajatteleminen","scenarioSystemPrompt":"Järjestelmäkehote","scenarioStreaming":"Suoratoisto","templateNames":{"simple-chat":"Yksinkertainen chat","tool-calling":"Työkalun kutsuminen","multi-turn":"Monikierros","thinking":"Ajatteleminen","system-prompt":"Järjestelmäkehote","streaming":"Suoratoisto"},"templateDescriptions":{"simple-chat":"Perustekstiviesti","tool-calling":"Toiminnon/työkalun kutsuminen","multi-turn":"Keskustelua historian kanssa","thinking":"Laajennettu ajattelu/päättely","system-prompt":"Monimutkaiset järjestelmäohjeet","streaming":"SSE-suoratoistopyyntö"},"templatePayloads":{"simpleChat":{"system":"Olet avulias avustaja.","userGreeting":"Hei! Miten voit tänään?"},"toolCalling":{"userWeather":"Millainen sää on São Paulossa?","toolDescription":"Hanki nykyisen sijainnin sää","cityNameDescription":"Kaupungin nimi"},"multiTurn":{"system":"Olet koodausassistentti.","userInitial":"Kirjoita funktio taulukon lajittelemiseksi Pythonissa.","assistantExample":"Tässä on yksinkertainen lajittelutoiminto:\\n\\n``` python\\ndef sort_array(arr):\\n palautus lajiteltuna(arr)\\n```","userFollowUp":"Järjestä se nyt laskevaan järjestykseen."},"thinking":{"question":"Mikä on 100 ensimmäisen alkuluvun summa?"},"systemPrompt":{"systemInstruction":"Olet hajautettuihin järjestelmiin erikoistunut vanhempi ohjelmistosuunnittelija. Vastaa kysymyksiin ytimekkäästi käyttämällä alan parhaita käytäntöjä. Anna aina koodiesimerkkejä tarvittaessa. Muotoile vastauksesi käyttämällä markdownia.","question":"Kuinka otan käyttöön katkaisijakuvion?"},"streaming":{"prompt":"Kerro minulle lyhyt tarina robotista, joka oppii maalaamaan."}},"openaiCompatibleLabel":"OpenAI-yhteensopiva","anthropicCompatibleLabel":"Antrooppinen yhteensopiva","noTemplateForFormat":"Ei mallia tälle muodolle","translationFailed":"Käännös epäonnistui: {error}","pipelineDebugger":"Pipeline Debugger","translationPipeline":"Käännösputki","pipelineVisualization":"Putkilinjan visualisointi","pipelineVisualizationHint":"Lähetä viesti nähdäksesi, kuinka pyyntösi etenee tunnistuksen → käännös → palveluntarjoajan puhelun kautta.","chatTesterDescription":"Lähetä viestejä tietyssä asiakasmuodossa ja tarkista käännösputken jokainen vaihe.","chatTesterFlow":"Asiakaspyyntö → muodon tunnistus → OpenAI-välitaso → tarjoajan muoto → vastaus","clickStepToInspect":"Napsauta mitä tahansa vaihetta tarkistaaksesi tiedot siinä vaiheessa.","clientFormat":"Asiakasmuoto","provider":"Palveluntarjoaja","modelPlaceholder":"Valitse tai kirjoita mallin nimi...","sendMessageToSeePipeline":"Lähetä viesti nähdäksesi käännösputken","chatMessageHintPrefix":"Viestisi muotoillaan muodossa a","chatMessageHintSuffix":"pyyntö, käännetään putken kautta ja lähetetään valitulle palveluntarjoajalle.","youWithFormat":"Sinä ({format})","assistant":"Assistant","typeMessage":"Kirjoita viesti...","send":"Lähetä","clientRequest":"Asiakaspyyntö","clientRequestDescription":"Pyynnön elin sellaisena kuin asiakkaasi sen lähettäisi","formatDetected":"Muoto havaittu","formatDetectedDescription":"OmniRoute tunnistaa automaattisesti API-muodon pyyntörakenteesta","openaiIntermediate":"OpenAI Intermediate","openaiIntermediateDescription":"Kaikki muodot normalisoidaan ensin OpenAI-muotoon (yleinen silta)","providerFormat":"Tarjoajan muoto","providerFormatDescription":"OpenAI-muoto käännetään palveluntarjoajan alkuperäiseen muotoon","providerResponse":"Palveluntarjoajan vastaus","providerResponseRawDescription":"Raaka vastaus palveluntarjoajan API:lta","providerResponseSseDescription":"Raaka SSE-stream palveluntarjoajan sovellusliittymästä","unexpectedError":"Tapahtui odottamaton virhe","error":"Virhe","errorMessage":"Virhe: {message}","requestFailed":"Pyyntö epäonnistui","noTextExtracted":"(Ei tekstiä poimittu)","liveMonitorDescriptionPrefix":"Näyttää käännöstapahtumat, kun API-kutsut kulkevat OmniRouten kautta. Tapahtumat tulevat muistin puskurista (palautuu uudelleenkäynnistyksen yhteydessä). Käytä","liveMonitorDescriptionSuffix":"tai ulkoisia API-kutsuja tapahtumien luomiseksi."},"usage":{"title":"Käyttö","loggerTab":"Kirjaaja","proxyTab":"Välityspalvelin","budgetManagement":"Budjetin hallinta","budgetSaved":"Budjettirajat tallennettu","budgetSaveFailed":"Budjetin säästäminen epäonnistui","loadingBudgetData":"Ladataan budjettitietoja...","noApiKeysTitle":"Ei API-avaimia","noApiKeysDescription":"Lisää ensin API-avaimet budjettirajojen määrittämiseksi.","apiKey":"API-avain","todaysSpend":"Päivän kulutus","thisMonth":"Tässä kuussa","setLimits":"Aseta rajat","dailyLimitUsd":"Päivittäinen raja (USD)","monthlyLimitUsd":"Kuukausiraja (USD)","warningThresholdPercent":"Varoituskynnys (%)","dailyLimitPlaceholder":"esim. 5.00","monthlyLimitPlaceholder":"esim. 50.00","warningThresholdPlaceholder":"80","saveLimits":"Tallenna rajoitukset","budgetOk":"Budjetti OK – {remaining} jäljellä","budgetExceeded":"Budjetti ylitetty – pyynnöt voidaan estää","totalRequests":"Pyyntöjä yhteensä","noDataYet":"Ei vielä dataa","latency":"Latenssi","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Kehotusvälimuisti","systemHealth":"Järjestelmän terveys","entries":"merkinnät","activeCount":"{count} aktiivinen","openCircuitBreakersDetected":"Katkaisijat havaittu","hitRate":"Osumaprosentti","hitsMisses":"Osumat / Miss","circuitBreakers":"Katkaisijat","lockedIPs":"Lukitut IP:t","lockoutsAutoRefreshHint":"Mallikohtaiset nopeusrajoitukset • Automaattinen päivitys 10s","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} jäljellä","howItWorks":"Miten se toimii","howItWorksSubtitle":"Opi kuinka arvioinnit vahvistavat LLM-vastauksesi","define":"Määritä","defineStepDescription":"Luo testitapauksia, joissa on syöttökehotteita ja odotettuja tulosehtoja käyttämällä strategioita, kuten sisältää, regex tai tarkka vastaavuus.","run":"Juokse","runStepDescription":"Suorita testitapauksia LLM-päätepisteitäsi vastaan OmniRouten kautta. Jokainen tapaus lähetetään todellisena API-pyyntönä.","evaluate":"Arvioi","evaluateStepDescription":"Vastauksia verrataan odotettuihin kriteereihin. Katso kunkin tapauksen hyväksyntä/hylkäys viivemittareiden ja yksityiskohtaisen palautteen avulla.","evalSuites":"Arviointisviitit","evalSuitesHint":"Napsauta sarjaa tarkastellaksesi testitapauksia ja suorita sitten LLM-päätepisteiden arvioiminen","evalsLoading":"Ladataan eval-sviittejä...","noEvalSuitesFound":"Eval Suitesta ei löytynyt","noEvalSuitesDescription":"Eval-sarjat voidaan määrittää API:n kautta tai koodilla. He testaavat mallin tuloksia odotettujen tulosten kanssa käyttämällä strategioita, kuten sisältää, regex, tarkka vastaavuus ja mukautetut funktiot.","columnCase":"Asia","columnStatus":"Tila","columnLatency":"Latenssi","columnDetails":"Yksityiskohdat","columnModel":"Malli","columnStrategy":"strategia","columnExpected":"Odotettu","statsSuites":"Sviitit","statsTestCases":"Testitapaukset","statsModels":"Mallit","statsCoverage":"Kattavuus","statsStrategiesCount":"{count} strategioita","evaluationStrategies":"Arviointistrategiat","modelsUnderTest":"Mallit testattavana","searchSuitesPlaceholder":"Etsi sviittejä...","passSuffix":"pass","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Juokse Eval","runningProgress":"Käynnissä {current}/{total}...","passRate":"läpäisyaste","summaryBreakdown":"{passed} hyväksytty · {failed} epäonnistui · {total} yhteensä","passedIconLabel":"✅ Läpäisty","failedIconLabel":"❌ Epäonnistui","detailsContains":"Sisältää: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Odotettu: \\"{expected}\\"","noResultsYet":"Ei tuloksia vielä","testCasesCount":"Testitapaukset ({count})","noTestCasesDefined":"Testitapauksia ei ole määritelty","runEvalHint":"Napsauta \\"Suorita Eval\\" suorittaaksesi kaikki tapaukset LLM-päätepisteellesi. Jokainen testi lähettää oikean pyynnön OmniRouten kautta.","notifyNoTestCases":"Tälle sarjalle ei ole määritetty testitapauksia","notifyAllCasesPassed":"Kaikki {total} tapausta ohitettu ✅","notifySomeCasesFailed":"{passed}/{total} hyväksytty, {failed} epäonnistui","notifyEvalRunFailed":"Eval-juoksu epäonnistui","notifyEvalTitle":"Arvosana: {name}","modelEvals":"Mallin arvioinnit","evalsHeroDescription":"Testaa ja vahvista LLM-päätepisteesi suorittamalla ennalta määritettyjä arviointipaketteja. Jokainen sarja sisältää testitapauksia, jotka lähettävät todellisia kehotteita OmniRouten kautta ja vertaavat vastauksia odotettuihin kriteereihin – auttaen sinua havaitsemaan regressioita, vertailla malleja ja varmistamaan vastausten laadun eri tarjoajien välillä.","qualityValidation":"Laadun validointi","modelComparison":"Mallin vertailu","regressionDetection":"Regression havaitseminen","latencyBenchmarks":"Viiveen vertailuarvot","modelLockouts":"Mallin lukitukset","noLockouts":"Tällä hetkellä ei ole lukittuja malleja","activeSessions":"Aktiiviset istunnot","noSessions":"Ei aktiivisia istuntoja","sessionsHint":"Istunnot näkyvät välityspalvelimen kautta kulkevien pyyntöjen aikana","sessionsTrackedHint":"Seurataan sormenjälkien pyytämisellä • Automaattinen päivitys 5s","session":"Istunto","age":"Ikä","requests":"Pyynnöt","connection":"Yhteys","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value}m","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Palveluntarjoajan rajoitukset","noProviders":"Ei yhdistettyjä palveluntarjoajia","connectProvidersForQuota":"Muodosta yhteys palveluntarjoajiin OAuthin avulla seurataksesi API-kiintiörajoja ja käyttöä.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(suodatettu kohteesta {count})","autoRefresh":"Automaattinen päivitys","refreshAll":"Päivitä kaikki","loadingQuotas":"Ladataan...","account":"Tili","modelQuotas":"Mallikiintiöt","lastUsed":"Viimeksi käytetty","actions":"Toiminnot","refreshQuota":"Päivitä kiintiö","today":"Tänään","tomorrow":"Huomenna","dayTimeFormat":"{day}, {time}","inDuration":"kohteessa {duration}","notApplicable":"Ei käytössä","rawPlanWithValue":"Raakasuunnitelma: {plan}","noPlanFromProvider":"Ei suunnitelmaa palveluntarjoajalta","noQuotaData":"Ei kiintiötietoja","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Kiintiötietoja ei ole saatavilla","noAccountsForTierFilter":"Tasosuodattimelle ei löytynyt tilejä","tierAll":"Kaikki","tierEnterprise":"Yritys","tierTeam":"Joukkue","tierBusiness":"Business","tierUltra":"Ultra","tierPro":"Pro","tierPlus":"Plus","tierFree":"Ilmainen","tierUnknown":"Tuntematon"},"modals":{"waitingAuth":"Odotetaan valtuutusta","verificationUrl":"Vahvistus-URL","yourCode":"Koodisi","remoteAccess":"Etäkäyttö:","connectedSuccess":"Yhdistetty onnistuneesti!","connectionFailed":"Yhteys epäonnistui","chooseAuthMethod":"Valitse todennustapasi:","awsBuilderId":"AWS Builder ID","awsIamIdentity":"AWS IAM Identity Center","googleAccount":"Google-tili","githubAccount":"GitHub-tili","importToken":"Tuo tunnus","pasteToken":"Liitä päivitystunnus Kiro IDE:stä.","awsRegion":"AWS-alue","autoDetecting":"Tunnistetaan automaattisesti...","readingFromCache":"Lukee AWS SSO -välimuistista","readingFromCursor":"Lukeminen Cursor IDE -tietokannasta","initializing":"Alustetaan...","pricingConfig":"Hinnoitteluasetukset","loadingPricing":"Ladataan hintatietoja...","pricingRatesFormat":"Hinnoitteluhinnastomuoto","noPricingData":"Hintatietoja ei ole saatavilla","noModelsFound":"Malleja ei löytynyt"},"loggers":{"allProviders":"Kaikki palveluntarjoajat","allModels":"Kaikki mallit","allAccounts":"Kaikki tilit","allApiKeys":"Kaikki API-avaimet","allTypes":"Kaikki tyypit","allLevels":"Kaikki tasot","modelAZ":"Malli A-Z","modelZA":"Malli Z-A","loadingLogs":"Ladataan lokeja...","loadingProxyLogs":"Ladataan välityspalvelimen lokeja...","noLogEntries":"Lokimerkintöjä ei löytynyt","noPayloadData":"Tälle lokimerkinnälle ei ole saatavilla hyötykuormatietoja.","proxyEvent":"Välityspalvelintapahtuma","proxy":"Välityspalvelin","level":"Taso","directNative":"Suora (natiivi)","combo":"Yhdistelmä","inputTokens":"Minä:","outputTokens":"O:"},"stats":{"usageOverview":"Käyttökatsaus","outputTokens":"Tulostustunnukset","totalCost":"Kokonaiskustannukset","usageByModel":"Käyttö mallin mukaan","usageByAccount":"Käyttö tilikohtaisesti","failedToLoad":"Käyttötilastojen lataaminen epäonnistui.","tokenHealth":"Token Health","totalOAuth":"Yhteensä OAuth","healthy":"Terve","warning":"Varoitus","errored":"Virheellinen","lastCheck":"Viimeinen tarkistus","noData":"Ei dataa","share":"Jaa","unableToLoad":"Järjestelmän mittareita ei voi ladata","product":"Tuote","resources":"Resurssit","company":"Yritys"},"auth":{"welcome":"Tervetuloa","signIn":"Kirjaudu sisään","enterPassword":"Anna salasanasi jatkaaksesi","password":"Salasana","unifiedProxy":"Unified AI API Proxy","unifiedAiApiProxy":"Unified AI API Proxy","unifiedAiApiProxyDesc":"Reititä pyynnöt useille tekoälypalveluntarjoajille yhden päätepisteen kautta. Kuormituksen tasapainotus, vikasieto ja käytön seuranta sisäänrakennettu.","passwordNotEnabled":"Salasanasuojaus ei ole käytössä","loading":"Ladataan...","invalidPassword":"Virheellinen salasana","errorOccurredRetry":"Tapahtui virhe. Yritä uudelleen.","configureInstance":"Määritetään OmniRoute-esiintymäsi","runOnboardingWizard":"Määritä salasanasi ja yhdistä ensimmäinen tekoälypalveluntarjoajasi suorittamalla ohjattu käyttöönottotoiminto.","startOnboarding":"Aloita perehtyminen","secureYourInstance":"Suojaa tapauksesi","setPasswordDescription":"Aseta salasana suojataksesi kojelautaasi ja suojataksesi API-päätepisteesi luvattomalta käytöltä.","configurePassword":"Määritä salasana","continue":"Jatka","windowWillClose":"Tämä ikkuna sulkeutuu automaattisesti...","closeTabNow":"Voit sulkea tämän välilehden nyt.","copyUrlManual":"Kopioi URL-osoite osoitepalkista ja liitä se sovellukseen.","accessDeniedDescription":"Sinulla ei ole lupaa käyttää tätä resurssia. Tarkista API-avaimesi tai ota yhteyttä järjestelmänvalvojaan.","goToDashboard":"Siirry Dashboardiin","featureMultiProviderTitle":"Multi-Provider","featureMultiProviderDesc":"OpenAI, Anthropic, Google ja paljon muuta","featureLoadBalancingTitle":"Kuorman tasapainotus","featureLoadBalancingDesc":"Jaa pyynnöt älykkäästi","featureUsageTrackingTitle":"Käytön seuranta","featureUsageTrackingDesc":"Valvo kustannuksia ja tokeneja","resetPassword":"Palauta salasana","resetDescription":"Valitse menetelmä hallintapaneelin käyttöoikeuden palauttamiseksi","stopServer":"Pysäytä OmniRoute-palvelin","processing":"Käsitellään...","pleaseWait":"Odota, kun saamme valtuutuksen valmiiksi.","authSuccess":"Valtuutus onnistui!","copyUrl":"Kopioi tämä URL-osoite","accessDenied":"Pääsy kielletty","methodCliTitle":"Tapa 1: CLI-nollaus","methodCliDescription":"Suorita seuraava komento palvelimella, jossa OmniRoute on käynnissä:","methodCliHint":"Tämä kehottaa sinua asettamaan uuden salasanan. Palvelin on ensin pysäytettävä.","methodManualTitle":"Tapa 2: Manuaalinen nollaus","methodManualDescription":"Poista salasana tietokannasta ja aseta uusi salasana käynnistyksen yhteydessä:","setPasswordInYour":"Aseta uusi salasana omaan","fileLabelSuffix":"tiedosto:","newPasswordPlaceholder":"your_new_password","deleteSettingsFile":"Poista","orRemovePasswordHashField":"tai poista salasanaHash-kenttä","restartServerWithNewPassword":"Käynnistä palvelin uudelleen - se käyttää uutta salasanaa","backToLogin":"Takaisin kirjautumiseen","forgotPassword":"Unohditko salasanan?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Valtuutus","Content-Disposition":"Sisältö-sijoittelu","waitingForAuthorization":"Odotetaan valtuutusta...","waitingForGoogleAuthorization":"Odotetaan Googlen valtuutusta...","waitingForOpenAIAuthorization":"Odotetaan OpenAI-valtuutusta...","waitingForAntigravityAuthorization":"Odotetaan antigravitaatiovaltuutusta...","waitingForIFlowAuthorization":"Odotetaan iFlow-valtuutusta...","exchangingCodeForTokens":"Vaihdetaan koodia tokeneihin..."},"landing":{"brandName":"OmniRoute","navigateHome":"Navigoi kotiin","toggleMenu":"Vaihda valikkoa","featuresLink":"Ominaisuudet","docsLink":"Asiakirjat","github":"GitHub","versionLive":"v1.0 on nyt julkaistu","oneEndpoint":"Yksi päätepiste","allProviders":"Kaikki AI-palveluntarjoajat","heroDescription":"AI-päätepisteen välityspalvelin web-hallintapaneelilla – CLIProxyAPI:n JavaScript-portti. Toimii saumattomasti Claude Coden, OpenAI Codexin, Clinen, RooCoden ja muiden CLI-työkalujen kanssa.","getStarted":"Aloita","viewOnGithub":"Katso GitHubissa","powerfulFeatures":"Tehokkaat ominaisuudet","featuresSubtitle":"Kaikki mitä tarvitset AI-infrastruktuurin hallintaan yhdessä paikassa, mittakaavassa rakennettu.","featureUnifiedEndpointTitle":"Yhtenäinen päätepiste","featureUnifiedEndpointDesc":"Pääset kaikkiin palveluntarjoajiin yhden standardin API-URL-osoitteen kautta.","featureEasySetupTitle":"Helppo asennus","featureEasySetupDesc":"Pääset käyntiin muutamassa minuutissa npx-komennolla.","featureModelFallbackTitle":"Mallin takaisku","featureModelFallbackDesc":"Vaihda automaattisesti palveluntarjoajaa vikatilanteen tai korkean viiveen sattuessa.","featureUsageTrackingTitle":"Käytön seuranta","featureUsageTrackingDesc":"Yksityiskohtainen analytiikka ja kustannusseuranta kaikissa malleissa.","featureOAuthApiKeysTitle":"OAuth- ja API-avaimet","featureOAuthApiKeysDesc":"Hallitse tunnistetietoja turvallisesti yhdessä holvissa.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncDesc":"Synkronoi määritykset eri laitteiden välillä välittömästi.","featureCliSupportTitle":"CLI-tuki","featureCliSupportDesc":"Toimii Claude Coden, Codexin, Clinen, Cursorin ja muiden kanssa.","featureDashboardTitle":"Kojelauta","featureDashboardDesc":"Visuaalinen kojelauta reaaliaikaista liikenneanalyysiä varten.","howItWorks":"Kuinka OmniRoute toimii","howItWorksDescription":"Tiedot kulkevat saumattomasti sovelluksestasi älykkään reitityskerroksen kautta työsi parhaalle toimittajalle.","howItWorksStep1Title":"1. CLI ja SDK:t","howItWorksStep1Description":"Pyyntösi alkavat suosikkityökaluistasi tai yhdistetystä SDK:sta. Vaihda vain perus-URL-osoite.","howItWorksStep2Title":"2. OmniRoute Hub","howItWorksStep2Description":"Moottorimme analysoi kehotteen, tarkistaa palveluntarjoajan kunnon ja reitit pienimmän viiveen tai kustannusten varalta.","howItWorksStep3Title":"3. AI-palveluntarjoajat","howItWorksStep3Description":"OpenAI, Anthropic, Gemini tai muut täyttävät pyynnön välittömästi.","getStartedIn30Seconds":"Aloita 30 sekunnissa","getStartedDescription":"Asenna OmniRoute, määritä palveluntarjoajasi web-hallintapaneelin kautta ja aloita AI-pyyntöjen reitittäminen.","installOmniRoute":"Asenna OmniRoute","installStepDescription":"Suorita npx-komento käynnistääksesi palvelimen välittömästi","openDashboard":"Avaa Dashboard","openDashboardStepDescription":"Määritä palveluntarjoajat ja API-avaimet verkkokäyttöliittymän kautta","routeRequests":"Reittipyynnöt","routeRequestsStepDescription":"Osoita CLI-työkalusi osoitteeseen {endpoint}","terminal":"terminaali","copy":"Kopioi","copied":"✓ Kopioitu","startingOmniRoute":"OmniRoute aloitetaan...","serverRunningOnLabel":"Palvelin käynnissä","dashboardLabel":"Kojelauta","readyToRoute":"Valmiina reittiin! ✓","configureProvidersNote":"📝 Määritä palveluntarjoajat kojelaudassa tai käytä ympäristömuuttujia","dataLocation":"Tietojen sijainti:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"Tuote","dashboardLink":"Kojelauta","changelog":"Muutosloki","resources":"Resurssit","documentation":"Dokumentaatio","npm":"NPM","legal":"Laillinen","mitLicense":"MIT-lisenssi","footerTagline":"Tekoälyn sukupolven yhtenäinen päätepiste. Yhdistä, reititä ja hallitse tekoälypalveluntarjoajiasi helposti.","copyright":"© {year} OmniRoute. Kaikki oikeudet pidätetään.","flowToolClaudeCode":"Claude Code","flowToolOpenAICodex":"OpenAI Codex","flowToolCline":"Cline","flowToolCursor":"Kursori","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Antrooppinen","flowProviderGemini":"Kaksoset","flowProviderGithubCopilot":"GitHub Copilot","interactiveDiagram":"Interaktiivinen kaavio näkyy työpöydällä","ctaTitle":"Oletko valmis yksinkertaistamaan tekoäly-infrastruktuuriasi?","ctaDescription":"Liity kehittäjien joukkoon, jotka virtaviivaistavat tekoälyintegraatiotaan OmniRouten avulla. Avoin lähdekoodi ja ilmainen aloittaa.","startFree":"Aloita ilmaiseksi","readDocumentation":"Lue dokumentaatio"},"docs":{"title":"Dokumentaatio","quickStart":"Pika-aloitus","features":"Ominaisuudet","supportedProviders":"Tuetut palveluntarjoajat","supportedProvidersToc":"Palveluntarjoajat","commonUseCases":"Yleiset käyttötapaukset","clientCompatibility":"Asiakasyhteensopivuus","protocolsToc":"Protokollat","apiReference":"API-viite","method":"menetelmä","path":"Polku","notes":"Huomautuksia","modelPrefixes":"Mallin etuliitteet","prefix":"Etuliite","troubleshooting":"Vianetsintä","supportsChat":"Tukee sekä chat- että vastauspäätepisteitä.","oauthAutoRefresh":"OAuth-yhteys automaattisella tunnuksen päivityksellä.","fullStreaming":"Täysi suoratoistotuki kaikille malleille.","docsLabel":"Asiakirjat","docsHeroDescription":"Tekoälyyhdyskäytävä usean palveluntarjoajan LLM:ille. Yksi päätepiste OpenAI:lle, Anthropicille, Geminille, GitHub Copilotille, Claude Codelle, Cursorille ja yli 20 muulle palveluntarjoajalle.","openDashboard":"Avaa Dashboard","endpointPage":"Päätepistesivu","github":"GitHub","reportIssue":"Ilmoita ongelmasta","onThisPage":"Tällä sivulla","documentationVersion":"Dokumentaatio - v{version}","quickStartStep1Title":"1. Asenna ja suorita","quickStartStep1Prefix":"Juokse","quickStartStep1Middle":"tai kloonaa GitHubista ja aja","quickStartStep2Title":"2. Luo API-avain","quickStartStep2Text":"Siirry kohtaan Päätepiste -> Rekisteröidyt avaimet. Luo yksi avain ympäristöä kohden.","quickStartStep3Title":"3. Yhdistä palveluntarjoajat","quickStartStep3Text":"Lisää palveluntarjoajan tilejä OAuth-kirjautumisen, API-avaimen tai vapaan tason automaattisen yhteyden avulla.","quickStartStep4Title":"4. Aseta asiakaskannan URL-osoite","quickStartStep4Prefix":"Osoita IDE- tai API-asiakkaasi","quickStartStep4Suffix":"Käytä esimerkiksi palveluntarjoajan etuliitettä","featureRoutingTitle":"Usean palveluntarjoajan reititys","featureRoutingText":"Reititä pyynnöt yli 30 tekoälypalveluntarjoajalle yhden OpenAI-yhteensopivan päätepisteen kautta. Tukee chat-, vastaus-, ääni- ja kuvasovellusliittymiä.","featureCombosTitle":"Yhdistelmät ja tasapainotus","featureCombosText":"Luo mallikomboja varaketjuilla ja tasapainotusstrategioilla: round-robin, prioriteetti, satunnainen, vähiten käytetty ja kustannusoptimoitu.","featureUsageTitle":"Käytön ja kustannusten seuranta","featureUsageText":"Reaaliaikainen tunnuksen laskenta, kustannuslaskenta palveluntarjoaja-/mallikohtaisesti ja yksityiskohtainen käyttöerittely API-avaimen ja tilin mukaan.","featureAnalyticsTitle":"Analyticsin hallintapaneeli","featureAnalyticsText":"Visuaalinen analytiikka, jossa on kaavioita pyynnöistä, tunnuksista, virheistä, viiveestä, kustannuksista ja mallin suosiosta ajan mittaan.","featureHealthTitle":"Terveyden seuranta","featureHealthText":"Live-terveystarkastukset, palveluntarjoajan tila, katkaisijatilat ja automaattinen nopeusrajan tunnistus eksponentiaalisella perääntymisellä.","featureCliTitle":"CLI-työkalut","featureCliText":"Hallitse IDE-määrityksiä, vie/tuo varmuuskopioita, etsi koodeksiprofiileja ja määritä asetuksia kojelaudalta.","featureSecurityTitle":"Turvallisuus ja käytännöt","featureSecurityText":"API-avaimen todennus, IP-suodatus, pikasyöttösuoja, toimialueen käytännöt, istunnon hallinta ja tarkastusloki.","featureCloudSyncTitle":"Cloud Sync","featureCloudSyncText":"Synkronoi kokoonpanosi Cloudflare Workersin kanssa, jotta voit käyttää etäkäyttöä salatuilla tunnistetiedoilla ja automaattisella virheensiirrolla.","providersAcrossConnectionTypes":"{count} palveluntarjoajia kolmessa yhteystyypissä.","manageProviders":"Hallinnoi palveluntarjoajia","providersCount":"{count} palveluntarjoajat","providerTypeFree":"Ilmainen taso","providerTypeOAuth":"OAuth","providerTypeApiKey":"API-avain","useCaseSingleEndpointTitle":"Yksi päätepiste useille palveluntarjoajille","useCaseSingleEndpointText":"Osoita asiakkaat yhteen perus-URL-osoitteeseen ja reititä mallien etuliite (esimerkiksi: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Vara- ja mallinvaihto komboilla","useCaseFallbackText":"Luo yhdistelmämalleja Dashboardissa ja pidä asiakkaan kokoonpano vakaana, kun toimittajat vaihtuvat sisäisesti.","useCaseUsageVisibilityTitle":"Käyttö, hinta ja virheenkorjauksen näkyvyys","useCaseUsageVisibilityText":"Seuraa tunnuksia ja kustannuksia palveluntarjoajan, tilin ja API-avaimen mukaan Käyttö- ja Analytics-välilehdillä.","clientCherryStudioTitle":"Cherry Studio","baseUrlLabel":"Perus-URL-osoite","chatEndpointLabel":"Keskustelun päätepiste","modelRecommendationLabel":"Mallisuositus: selkeä etuliite","clientCodexTitle":"Codex / GitHub Copilot -mallit","clientCodexBullet1":"Käytä mallitunnuksia kanssa","clientCodexBullet2":"Codex-perheen mallit reitittävät automaattisesti kohteeseen","clientCodexBullet3":"Ei-Codex-mallit jatkavat toimintaansa","clientCursorTitle":"Kohdistin IDE","clientCursorBullet1":"Käytä","clientCursorBullet1Suffix":"etuliite kohdistinmalleille.","clientCursorBullet2":"OAuth-yhteys - kirjaudu sisään Palveluntarjoajat-sivulta.","clientClaudeTitle":"Claude Code / Antigravitaatio","clientClaudeBullet1Prefix":"Käytä","clientClaudeBullet1Middle":"(Claude) tai","clientClaudeBullet1Suffix":"(Antigravity) etuliite.","protocolsTitle":"Protokollat: MCP & A2A","protocolsDescription":"OmniRoute paljastaa kaksi toimintaprotokollaa OpenAI-yhteensopivien sovellusliittymien lisäksi: MCP työkalujen suorittamiseen ja A2A agenttien välisiin työnkulkuihin.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Käytä MCP over stdio -palvelua, jotta asiakkaat voivat löytää ja kutsua OmniRoute-työkaluja tarkastuksen näkyvyydellä.","protocolMcpStep1":"Aloita MCP-siirto `omniroute --mcp`:lla.","protocolMcpStep2":"Osoita MCP-asiakkaasi stdio-kuljetukseen.","protocolMcpStep3":"Vahvista yhteys soittamalla `omniroute_get_health` ja `omniroute_list_combos`.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Käytä A2A JSON-RPC:tä tehtävien lähettämiseen synkronisesti tai SSE-suoratoiston kautta.","protocolA2aStep1":"Lue `/.well-known/agent.json` agentin löytämiseksi.","protocolA2aStep2":"Lähetä `message/send` tai `message/stream` pyynnöt osoitteeseen `POST /a2a`.","protocolA2aStep3":"Hallitse tehtävän elinkaarta `tasks/get`- ja `tasks/cancel`-toiminnolla.","protocolTroubleshootingTitle":"Protokollan vianmääritys","protocolTroubleshooting1":"Jos MCP-tila on offline-tilassa, varmista, että stdio-prosessi on käynnissä ja heartbeat-tiedosto päivittyy.","protocolTroubleshooting2":"Jos A2A-tehtävät pysyvät `working`, tarkista `/api/a2a/tasks/:id` ja suoratoista tapahtumat päätteen tilasta.","protocolTroubleshooting3":"Käytä `/dashboard/mcp` ja `/dashboard/a2a` toiminnan ohjaamiseen ja tarkastuksen näkyvyyteen.","endpointChatNote":"OpenAI-yhteensopiva chat-päätepiste (oletus).","endpointResponsesNote":"Responses API-päätepiste (Codex, o-sarja).","endpointModelsNote":"Malliluettelo kaikille liitetyille palveluntarjoajille.","endpointAudioNote":"Äänen transkriptio (Deepgram, AssemblyAI).","endpointImagesNote":"Kuvan luominen (NanoBanana).","endpointRewriteChatNote":"Uudelleenkirjoitusapuohjelma asiakkaille ilman /v1.","endpointRewriteResponsesNote":"Uudelleenkirjoitusapuohjelma vastauksille ilman /v1.","endpointRewriteModelsNote":"Uudelleenkirjoitusapuohjelma mallin etsinnässä ilman /v1:tä.","modelPrefixesDescriptionStart":"Käytä toimittajan etuliitettä ennen mallin nimeä reitittääksesi tietylle toimittajalle. Esimerkki:","modelPrefixesDescriptionEnd":"reitit GitHub Copilotiin.","provider":"Palveluntarjoaja","type":"Kirjoita","troubleshootingModelRouting":"Jos asiakas epäonnistuu mallin reitityksessä, käytä nimenomaista tarjoaja/malli (esimerkiksi: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Jos saat epäselviä mallivirheitä, valitse toimittajan etuliite paljaan mallitunnuksen sijaan.","troubleshootingCodexFamily":"Säilytä GitHub Codex -perheen mallien mallina muodossa gh/codex-model; reititin valitsee / vastaa automaattisesti.","troubleshootingTestConnection":"Käytä Dashboard > Providers > Test Connection ennen testaamista IDE:istä tai ulkoisista asiakkaista.","troubleshootingCircuitBreaker":"Jos palveluntarjoaja näyttää katkaisijan auki, odota jäähtymistä tai katso lisätietoja Terveys-sivulta.","troubleshootingOAuth":"OAuth-palveluntarjoajat todenna uudelleen, jos tunnukset vanhenevat. Tarkista palveluntarjoajan kortin tilailmaisin.","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":"Tekstistä puheeksi luominen (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Tekstin upottaminen (OpenAI, Cohere, Voyage)."},"legal":{"privacyPolicy":"Tietosuojakäytäntö","termsOfService":"Palveluehdot","providerConfigurations":"Palveluntarjoajan määritykset","apiKeys":"API-avaimet","usageLogs":"Käyttölokit","applicationSettings":"Sovellusasetukset","viewExportAnalytics":"Tarkastele ja vie käyttöanalytiikkaa","clearHistory":"Tyhjennä käyttöhistoria milloin tahansa","configureRetention":"Määritä lokin säilytyskäytännöt","backupRestore":"Varmuuskopioi ja palauta tietokanta","privacyMetadataTitle":"Tietosuojakäytäntö | OmniRoute","privacyMetadataDescription":"OmniRoute AI API -välityspalvelimen reitittimen tietosuojakäytäntö.","termsMetadataTitle":"Palveluehdot | OmniRoute","termsMetadataDescription":"OmniRoute AI API -välityspalvelimen reitittimen käyttöehdot.","backToHome":"Takaisin kotiin","lastUpdated":"Viimeksi päivitetty: {date}","policyLastUpdatedDate":"13. helmikuuta 2026","listSeparator":"-","questionsVisit":"Kysymyksiä? Vieraile meillä","githubRepository":"GitHub-arkisto","privacySection1Title":"1. Local-First Architecture","privacySection1Text":"OmniRoute on suunniteltu paikalliseksi sovellukseksi. Kaikki tietojen käsittely ja tallennus tapahtuu kokonaan koneessasi. Ei ole keskitettyä palvelinta, joka kerää tietojasi.","privacySection2Title":"2. Tallentamamme tiedot","privacyDataStoredIn":"Seuraavat tiedot on tallennettu paikallisesti","privacyDataProviderConfigurationsDesc":"yhteyden URL-osoitteet, palveluntarjoajan tyypit ja prioriteettiasetukset","privacyDataApiKeysDesc":"salattu ja tallennettu paikallisesti AI-palveluntarjoajien todennusta varten","privacyDataUsageLogsDesc":"pyyntöjen määrät, tunnuksen käyttö, mallien nimet, aikaleimat ja vastausajat","privacyDataApplicationSettingsDesc":"teemaasetukset, reititysstrategia ja yhdistelmäkokoonpanot","privacySection3Title":"3. Ei telemetriaa","privacySection3Text":"OmniRoute ei kerää telemetria-, analytiikka- tai virheraportteja. Tietoja ei lähetetä meille tai millekään kolmannelle osapuolelle. Käyttömallisi, API-kutsusi ja kokoonpanosi pysyvät täysin yksityisinä.","privacySection4Title":"4. Kolmannen osapuolen tekoälypalveluntarjoajat","privacySection4Text":"Kun soitat API-kutsuja OmniRouten kautta, pyyntösi välitetään määrittämillesi tekoälypalveluntarjoajille (esimerkiksi OpenAI, Anthropic, Google). Näillä palveluntarjoajilla on omat tietosuojakäytäntönsä, jotka säätelevät, kuinka he käsittelevät tietojasi. Tarkista:","privacyOpenAiPolicy":"OpenAI:n tietosuojakäytäntö","privacyAnthropicPolicy":"Antrooppinen tietosuojakäytäntö","privacyGooglePolicy":"Googlen tietosuojakäytäntö","privacySection5Title":"5. Cloud Sync (valinnainen)","privacySection5Text":"Jos otat valinnaisen pilvisynkronointiominaisuuden käyttöön, palveluntarjoajan määritykset ja API-avaimet voidaan lähettää määritettyyn pilvipäätepisteeseen. Tämä ominaisuus on oletuksena pois käytöstä ja vaatii nimenomaisen osallistumisen.","privacySection6Title":"6. Kirjautuminen","privacyLoggingIntro":"Pyyntölokit voidaan määrittää kojelaudan asetuksista. Voit:","privacySection7Title":"7. Sinun oikeutesi","privacySection7TextStart":"Koska kaikki tiedot tallennetaan paikallisesti, sinulla on täysi hallinta. Voit poistaa tietosi milloin tahansa poistamalla","privacySection7TextEnd":"hakemistosta tai käyttämällä tietokannan varmuuskopiointi- ja palautustoimintoja kojelaudassa.","termsSection1Title":"1. Yleiskatsaus","termsSection1Text":"OmniRoute on paikallinen ensimmäinen AI API -välityspalvelin, joka toimii kokonaan koneessasi. Se reitittää pyynnöt useille tekoälypalveluntarjoajille kuormituksen tasapainottamisen, vikasietoisuuden ja käytön seurannan avulla.","termsSection2Title":"2. Käyttäjän velvollisuudet","termsResponsibilityApiKeys":"Olet yksin vastuussa omien API-avainten ja valtuustietojen hallinnasta kolmannen osapuolen AI-palveluntarjoajille (OpenAI, Anthropic, Google jne.).","termsResponsibilityCompliance":"Sinun on noudatettava jokaisen tekoälyn palveluntarjoajan, jonka API:ta käytät OmniRouten kautta, käyttöehtoja.","termsResponsibilitySecurity":"Olet vastuussa paikallisen OmniRoute-asennuksesi turvallisuudesta, mukaan lukien salasanan asettamisesta ja verkkoon pääsyn rajoittamisesta.","termsSection3Title":"3. Kuinka se toimii","termsSection3Text":"OmniRoute toimii välittäjänä. OmniRouteen lähetetyt API-kutsut käännetään ja välitetään määritetyille tekoälypalveluntarjoajille. OmniRoute ei muuta pyyntöjesi tai vastaustesi sisältöä tarvittavan protokollan käännöksen lisäksi.","termsSection4Title":"4. Tietojen käsittely","termsDataStoredLocally":"Kaikki tiedot tallennetaan paikallisesti koneellesi SQLite-tietokantaan.","termsNoTransmission":"OmniRoute ei lähetä mitään tietoja ulkoisille palvelimille, ellet ota pilvisynkronointiominaisuuksia erikseen käyttöön.","termsDataLocationText":"Käyttölokit, API-avaimet ja määritykset tallennetaan","termsSection5Title":"5. Vastuuvapauslauseke","termsSection5Text":"OmniRoute toimitetaan \\"sellaisenaan\\" ilman minkäänlaista takuuta. Emme ole vastuussa kustannuksista, jotka aiheutuvat API:n käytöstä, palveluhäiriöistä tai tietojen katoamisesta. Pidä aina varmuuskopiot asetuksistasi.","termsSection6Title":"6. Avoin lähdekoodi","termsSection6Text":"OmniRoute on avoimen lähdekoodin ohjelmisto. Voit vapaasti tarkastaa, muokata ja jakaa sitä sen lisenssiehtojen mukaisesti."},"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":"Yksinkertainen chat","streaming":"Suoratoisto","system-prompt":"Järjestelmäkehote","thinking":"Ajatteleminen","tool-calling":"Työkalun kutsuminen","multi-turn":"Monikierros"},"templateDescriptions":{"simple-chat":"Peruskeskustelumalli järjestelmäviestillä","streaming":"Malli vastausten suoratoistoon","system-prompt":"Malli mukautetulla järjestelmäkehotteella","thinking":"Malli perustelulla/ajattelulla","tool-calling":"Malli työkalun/toiminnon kutsumiseen","multi-turn":"Malli usean käännöksen keskusteluille"},"templatePayloads":{"simpleChat":{"system":"Olet avulias AI-avustaja.","userGreeting":"Hei! Kuinka voin auttaa sinua tänään?"},"streaming":{"prompt":"Kirjoita tarina aiheesta"},"systemPrompt":{"question":"Mikä on elämän tarkoitus?","systemInstruction":"Anna harkittu, filosofinen vastaus."},"thinking":{"question":"Selitä kvanttilaskenta"},"toolCalling":{"cityNameDescription":"Kaupungin nimi, jolle sää haetaan","toolDescription":"Hanki sijainnin nykyinen sää","userWeather":"Millainen sää on Tokiossa?"},"multiTurn":{"system":"Olet avulias avustaja.","assistantExample":"Autan sinua siinä mielelläni.","userInitial":"Tarvitsen apua","userFollowUp":"Voitko tarkentaa sitä?"}},"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_fi_json_dcc6745e._.js.map