omniroute 3.4.5 → 3.4.6

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 (249) hide show
  1. package/app/.next/BUILD_ID +1 -1
  2. package/app/.next/build-manifest.json +3 -3
  3. package/app/.next/prerender-manifest.json +3 -3
  4. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  5. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/cache/page.js.nft.json +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/skills/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/400/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/_global-error.html +1 -1
  41. package/app/.next/server/app/_global-error.rsc +1 -1
  42. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/api/monitoring/health/route.js +3 -3
  49. package/app/.next/server/app/api/provider-models/route.js +2 -2
  50. package/app/.next/server/app/api/provider-nodes/[id]/route.js +2 -2
  51. package/app/.next/server/app/api/provider-nodes/route.js +3 -3
  52. package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  53. package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
  54. package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  55. package/app/.next/server/app/api/providers/[id]/sync-models/route.js +3 -3
  56. package/app/.next/server/app/api/providers/[id]/sync-models/route.js.nft.json +1 -1
  57. package/app/.next/server/app/api/providers/[id]/test/route.js +6 -6
  58. package/app/.next/server/app/api/providers/route.js +4 -4
  59. package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
  60. package/app/.next/server/app/api/providers/test-batch/route.js +5 -5
  61. package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  62. package/app/.next/server/app/api/providers/validate/route.js +1 -1
  63. package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
  64. package/app/.next/server/app/api/usage/[connectionId]/route.js +2 -2
  65. package/app/.next/server/app/api/usage/provider-limits/route.js +5 -5
  66. package/app/.next/server/app/api/usage/provider-limits/route.js.nft.json +1 -1
  67. package/app/.next/server/app/api/v1/models/route.js +4 -4
  68. package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  69. package/app/.next/server/app/api/v1/route.js +4 -4
  70. package/app/.next/server/app/api/v1/route.js.nft.json +1 -1
  71. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  83. package/app/.next/server/chunks/[root-of-the-server]__0.7zz6j._.js +1 -1
  84. package/app/.next/server/chunks/[root-of-the-server]__0.lz97q._.js +1 -1
  85. package/app/.next/server/chunks/[root-of-the-server]__0.m9_5-._.js +1 -1
  86. package/app/.next/server/chunks/[root-of-the-server]__00-bzx_._.js +1 -1
  87. package/app/.next/server/chunks/[root-of-the-server]__00hsd7k._.js +1 -1
  88. package/app/.next/server/chunks/[root-of-the-server]__00i_ryi._.js +1 -1
  89. package/app/.next/server/chunks/[root-of-the-server]__01fudn9._.js +1 -1
  90. package/app/.next/server/chunks/[root-of-the-server]__024slax._.js +1 -1
  91. package/app/.next/server/chunks/[root-of-the-server]__030_-af._.js +2 -2
  92. package/app/.next/server/chunks/[root-of-the-server]__03gl9dh._.js +2 -2
  93. package/app/.next/server/chunks/[root-of-the-server]__03x69ll._.js +1 -1
  94. package/app/.next/server/chunks/[root-of-the-server]__047np0t._.js +2 -2
  95. package/app/.next/server/chunks/[root-of-the-server]__04lc9.m._.js +2 -2
  96. package/app/.next/server/chunks/[root-of-the-server]__05u48b-._.js +1 -1
  97. package/app/.next/server/chunks/[root-of-the-server]__06dr~pl._.js +1 -1
  98. package/app/.next/server/chunks/[root-of-the-server]__06hr_sx._.js +1 -1
  99. package/app/.next/server/chunks/[root-of-the-server]__06r5eje._.js +2 -2
  100. package/app/.next/server/chunks/[root-of-the-server]__07.ui7z._.js +1 -1
  101. package/app/.next/server/chunks/[root-of-the-server]__075j.5s._.js +1 -1
  102. package/app/.next/server/chunks/[root-of-the-server]__07ju0wx._.js +1 -1
  103. package/app/.next/server/chunks/[root-of-the-server]__07wj.c4._.js +1 -1
  104. package/app/.next/server/chunks/[root-of-the-server]__08-9vz.._.js +1 -1
  105. package/app/.next/server/chunks/[root-of-the-server]__0908q-_._.js +1 -1
  106. package/app/.next/server/chunks/[root-of-the-server]__09blmoy._.js +1 -1
  107. package/app/.next/server/chunks/[root-of-the-server]__09c50mp._.js +1 -1
  108. package/app/.next/server/chunks/[root-of-the-server]__0a.3c_r._.js +1 -1
  109. package/app/.next/server/chunks/[root-of-the-server]__0bkx9sd._.js +1 -1
  110. package/app/.next/server/chunks/[root-of-the-server]__0c4v_hg._.js +2 -2
  111. package/app/.next/server/chunks/[root-of-the-server]__0c5t729._.js +1 -1
  112. package/app/.next/server/chunks/[root-of-the-server]__0cem6i6._.js +1 -1
  113. package/app/.next/server/chunks/[root-of-the-server]__0d-qyrk._.js +2 -2
  114. package/app/.next/server/chunks/[root-of-the-server]__0d-rd-n._.js +1 -1
  115. package/app/.next/server/chunks/[root-of-the-server]__0djfz6n._.js +1 -1
  116. package/app/.next/server/chunks/[root-of-the-server]__0dmb7bd._.js +1 -1
  117. package/app/.next/server/chunks/[root-of-the-server]__0e7dp.z._.js +2 -2
  118. package/app/.next/server/chunks/[root-of-the-server]__0el_v65._.js +1 -1
  119. package/app/.next/server/chunks/[root-of-the-server]__0enebbv._.js +2 -2
  120. package/app/.next/server/chunks/[root-of-the-server]__0enecpa._.js +1 -1
  121. package/app/.next/server/chunks/[root-of-the-server]__0eps0zu._.js +1 -1
  122. package/app/.next/server/chunks/[root-of-the-server]__0fbv0zh._.js +1 -1
  123. package/app/.next/server/chunks/[root-of-the-server]__0fmf-tk._.js +1 -1
  124. package/app/.next/server/chunks/[root-of-the-server]__0fw0v5q._.js +2 -2
  125. package/app/.next/server/chunks/[root-of-the-server]__0g0b9au._.js +1 -1
  126. package/app/.next/server/chunks/[root-of-the-server]__0gukblk._.js +1 -1
  127. package/app/.next/server/chunks/[root-of-the-server]__0h-q5l0._.js +1 -1
  128. package/app/.next/server/chunks/[root-of-the-server]__0h1fgwr._.js +1 -1
  129. package/app/.next/server/chunks/[root-of-the-server]__0h86b7i._.js +1 -1
  130. package/app/.next/server/chunks/[root-of-the-server]__0h~a5f1._.js +1 -1
  131. package/app/.next/server/chunks/[root-of-the-server]__0irqapk._.js +1 -1
  132. package/app/.next/server/chunks/[root-of-the-server]__0j0ez8_._.js +2 -2
  133. package/app/.next/server/chunks/[root-of-the-server]__0jacr87._.js +1 -1
  134. package/app/.next/server/chunks/[root-of-the-server]__0jnihz9._.js +1 -1
  135. package/app/.next/server/chunks/[root-of-the-server]__0jp3yj4._.js +1 -1
  136. package/app/.next/server/chunks/[root-of-the-server]__0llqbda._.js +2 -2
  137. package/app/.next/server/chunks/[root-of-the-server]__0m-356c._.js +1 -1
  138. package/app/.next/server/chunks/[root-of-the-server]__0mj7x5~._.js +8 -8
  139. package/app/.next/server/chunks/[root-of-the-server]__0mpnloa._.js +1 -1
  140. package/app/.next/server/chunks/[root-of-the-server]__0n-~kvf._.js +1 -1
  141. package/app/.next/server/chunks/[root-of-the-server]__0n.gjo8._.js +2 -2
  142. package/app/.next/server/chunks/[root-of-the-server]__0n0nara._.js +1 -1
  143. package/app/.next/server/chunks/[root-of-the-server]__0ncz8xj._.js +1 -1
  144. package/app/.next/server/chunks/[root-of-the-server]__0oph175._.js +1 -1
  145. package/app/.next/server/chunks/[root-of-the-server]__0p3a7_l._.js +1 -1
  146. package/app/.next/server/chunks/[root-of-the-server]__0pl_899._.js +1 -1
  147. package/app/.next/server/chunks/[root-of-the-server]__0prott7._.js +2 -2
  148. package/app/.next/server/chunks/[root-of-the-server]__0pwiejj._.js +1 -1
  149. package/app/.next/server/chunks/[root-of-the-server]__0pxqo8v._.js +1 -1
  150. package/app/.next/server/chunks/[root-of-the-server]__0q04t~4._.js +1 -1
  151. package/app/.next/server/chunks/[root-of-the-server]__0q9h_5u._.js +1 -1
  152. package/app/.next/server/chunks/[root-of-the-server]__0qaruz-._.js +1 -1
  153. package/app/.next/server/chunks/[root-of-the-server]__0qka2s7._.js +1 -1
  154. package/app/.next/server/chunks/[root-of-the-server]__0rnvi83._.js +1 -1
  155. package/app/.next/server/chunks/[root-of-the-server]__0rpwwig._.js +1 -1
  156. package/app/.next/server/chunks/[root-of-the-server]__0rs2ec_._.js +1 -1
  157. package/app/.next/server/chunks/[root-of-the-server]__0s1dq3.._.js +1 -1
  158. package/app/.next/server/chunks/[root-of-the-server]__0s1ya.l._.js +5 -5
  159. package/app/.next/server/chunks/[root-of-the-server]__0svm~lc._.js +1 -1
  160. package/app/.next/server/chunks/[root-of-the-server]__0t83olx._.js +1 -1
  161. package/app/.next/server/chunks/[root-of-the-server]__0tsl88m._.js +1 -1
  162. package/app/.next/server/chunks/[root-of-the-server]__0uctzvq._.js +1 -1
  163. package/app/.next/server/chunks/[root-of-the-server]__0vkqjj1._.js +2 -2
  164. package/app/.next/server/chunks/[root-of-the-server]__0vwq47l._.js +1 -1
  165. package/app/.next/server/chunks/[root-of-the-server]__0vx1juw._.js +1 -1
  166. package/app/.next/server/chunks/[root-of-the-server]__0vzvfbd._.js +2 -2
  167. package/app/.next/server/chunks/[root-of-the-server]__0w39cdo._.js +1 -1
  168. package/app/.next/server/chunks/[root-of-the-server]__0wc__c~._.js +1 -1
  169. package/app/.next/server/chunks/[root-of-the-server]__0y2h760._.js +1 -1
  170. package/app/.next/server/chunks/[root-of-the-server]__0y_c7uk._.js +2 -2
  171. package/app/.next/server/chunks/[root-of-the-server]__0~8fltv._.js +1 -1
  172. package/app/.next/server/chunks/[root-of-the-server]__0~dj8ev._.js +2 -2
  173. package/app/.next/server/chunks/[root-of-the-server]__10.x-iq._.js +4 -4
  174. package/app/.next/server/chunks/[root-of-the-server]__10e1a_z._.js +2 -2
  175. package/app/.next/server/chunks/[root-of-the-server]__10o_k-p._.js +2 -2
  176. package/app/.next/server/chunks/[root-of-the-server]__10smy7g._.js +1 -1
  177. package/app/.next/server/chunks/[root-of-the-server]__11wa4b~._.js +1 -1
  178. package/app/.next/server/chunks/[root-of-the-server]__11xpr8u._.js +1 -1
  179. package/app/.next/server/chunks/[root-of-the-server]__122-jdl._.js +8 -8
  180. package/app/.next/server/chunks/[root-of-the-server]__12e9-l1._.js +1 -1
  181. package/app/.next/server/chunks/[root-of-the-server]__12gh.g1._.js +1 -1
  182. package/app/.next/server/chunks/[root-of-the-server]__136nal9._.js +1 -1
  183. package/app/.next/server/chunks/[root-of-the-server]__13_i443._.js +1 -1
  184. package/app/.next/server/chunks/[root-of-the-server]__13c-d_4._.js +2 -2
  185. package/app/.next/server/chunks/_0-jnvci._.js +1 -1
  186. package/app/.next/server/chunks/_0-~thzo._.js +1 -1
  187. package/app/.next/server/chunks/_00.pgsp._.js +1 -1
  188. package/app/.next/server/chunks/_013gowh._.js +1 -1
  189. package/app/.next/server/chunks/{_03c-j3o._.js → _02~yzex._.js} +2 -2
  190. package/app/.next/server/chunks/_036lxbr._.js +1 -1
  191. package/app/.next/server/chunks/_05reh6o._.js +1 -1
  192. package/app/.next/server/chunks/_0a3.3sc._.js +1 -1
  193. package/app/.next/server/chunks/_0c.abwr._.js +1 -1
  194. package/app/.next/server/chunks/_0due8oe._.js +2 -2
  195. package/app/.next/server/chunks/_0h-j8c2._.js +1 -1
  196. package/app/.next/server/chunks/_0k43pd6._.js +3 -3
  197. package/app/.next/server/chunks/_0vx-r0i._.js +2 -2
  198. package/app/.next/server/chunks/_10.rw9f._.js +1 -1
  199. package/app/.next/server/chunks/_13mo7j5._.js +1 -1
  200. package/app/.next/server/chunks/src_0f_le~m._.js +1 -1
  201. package/app/.next/server/chunks/ssr/_008ht2n._.js +2 -2
  202. package/app/.next/server/chunks/ssr/_0oo1f90._.js +2 -2
  203. package/app/.next/server/chunks/ssr/_0~laquj._.js +1 -1
  204. package/app/.next/server/chunks/ssr/src_04gjot1._.js +1 -1
  205. package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_cache_04_vca6._.js +1 -1
  206. package/app/.next/server/chunks/ssr/{src_app_(dashboard)_dashboard_settings_0ni3aus._.js → src_app_(dashboard)_dashboard_settings_09gq48u._.js} +2 -2
  207. package/app/.next/server/chunks/ssr/src_i18n_messages_en_json_[json]_cjs_13rg.m2._.js +1 -1
  208. package/app/.next/server/chunks/ssr/src_i18n_messages_pt-BR_json_[json]_cjs_01n5fvn._.js +1 -1
  209. package/app/.next/server/chunks/ssr/src_i18n_messages_pt_json_[json]_cjs_0fwb8p.._.js +1 -1
  210. package/app/.next/server/chunks/ssr/src_shared_0jy4djq._.js +3 -0
  211. package/app/.next/server/chunks/ssr/src_shared_components_0v5o286._.js +3 -0
  212. package/app/.next/server/middleware-build-manifest.js +3 -3
  213. package/app/.next/server/pages/500.html +1 -1
  214. package/app/.next/server/server-reference-manifest.js +1 -1
  215. package/app/.next/server/server-reference-manifest.json +1 -1
  216. package/app/.next/static/chunks/{03~_6b5~n101_.js → 0.ap2gsi3d-1e.js} +1 -1
  217. package/app/.next/static/chunks/08iujr48xci8k.js +1 -0
  218. package/app/.next/static/chunks/{0up_y.7qkqwxz.js → 08n6n76lz~vt6.js} +1 -1
  219. package/app/.next/static/chunks/{060zmf~qn1q6y.js → 0f611s~575pn8.js} +1 -1
  220. package/app/.next/static/chunks/0y5kx9rgeb6~_.js +1 -0
  221. package/app/.next/static/chunks/13xz-222deqiy.js +1 -0
  222. package/app/CHANGELOG.md +18 -0
  223. package/app/docs/openapi.yaml +1 -1
  224. package/app/llm.txt +2 -2
  225. package/app/open-sse/handlers/chatCore.ts +2 -2
  226. package/app/open-sse/package.json +1 -1
  227. package/app/open-sse/translator/request/claude-to-gemini.ts +17 -0
  228. package/app/open-sse/translator/request/openai-to-gemini.ts +14 -3
  229. package/app/open-sse/utils/stream.ts +2 -2
  230. package/app/package-lock.json +3 -3
  231. package/app/package.json +1 -1
  232. package/app/src/app/(dashboard)/dashboard/cache/components/CacheTrends.tsx +19 -12
  233. package/app/src/app/(dashboard)/dashboard/cache/page.tsx +0 -3
  234. package/app/src/app/(dashboard)/dashboard/memory/page.tsx +20 -20
  235. package/app/src/i18n/messages/en.json +55 -1
  236. package/app/src/i18n/messages/pt-BR.json +53 -0
  237. package/app/src/i18n/messages/pt.json +54 -1
  238. package/app/src/shared/constants/providers.ts +40 -0
  239. package/app/src/shared/constants/sidebarVisibility.ts +6 -0
  240. package/app/src/shared/utils/circuitBreaker.ts +14 -4
  241. package/package.json +1 -1
  242. package/app/.next/server/chunks/ssr/src_05ekey-._.js +0 -3
  243. package/app/.next/server/chunks/ssr/src_100xxow._.js +0 -3
  244. package/app/.next/static/chunks/05tcrkqknq.20.js +0 -1
  245. package/app/.next/static/chunks/0eng4c9gz1s4..js +0 -1
  246. package/app/.next/static/chunks/0go~kwn1zgxnd.js +0 -1
  247. /package/app/.next/static/{Dbb1D6OoD7WlyZuPBm3L6 → ImZm5czz4prt8gnJPx7vv}/_buildManifest.js +0 -0
  248. /package/app/.next/static/{Dbb1D6OoD7WlyZuPBm3L6 → ImZm5czz4prt8gnJPx7vv}/_clientMiddlewareManifest.js +0 -0
  249. /package/app/.next/static/{Dbb1D6OoD7WlyZuPBm3L6 → ImZm5czz4prt8gnJPx7vv}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[672983,(a,b,c)=>{b.exports=JSON.parse('{"common":{"save":"Salvar","cancel":"Cancelar","delete":"Excluir","loading":"Carregando...","error":"Ocorreu um erro","success":"Sucesso","confirm":"Você tem certeza?","refresh":"Atualizar","close":"Fechar","add":"Adicionar","edit":"Editar","search":"Pesquisar","back":"Voltar","next":"Próximo","submit":"Enviar","reset":"Redefinir","copy":"Copiar","copied":"Copiado!","enabled":"Habilitado","disabled":"Desativado","active":"Ativo","inactive":"Inativo","noData":"Não há dados disponíveis","configure":"Configurar","manage":"Gerenciar","name":"Nome","actions":"Ações","status":"Estado","type":"Tipo","model":"Modelo","models":"modelos","provider":"Provedor","account":"Conta","time":"Hora","details":"Detalhes","created":"Criado","lastUsed":"Last Refreshed","loadMore":"Carregar mais","noResults":"Nenhum resultado encontrado","reloadPage":"Recarregar página","connected":"Conectado","disconnected":"Desconectado","notConfigured":"Não configurado","testConnection":"Conexão de teste","enable":"Habilitar","disable":"Desativar","columns":"Colunas","newest":"Mais recente","oldest":"Mais antigo","all":"Todos","none":"Nenhum","yes":"Sim","no":"Não","warning":"Aviso","note":"Nota","free":"Grátis","skipToContent":"Pular para o conteúdo","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"accept","accountId":"accountId","alias":"alias","apiKeyId":"apiKeyId","apiKeyName":"apiKeyName","apiKeySecret":"apiKeySecret","authorization":"authorization","content-type":"content-type","content-length":"content-length","cookie":"cookie","file":"file","host":"host","id":"id","import":"import","limit":"limit","offset":"offset","open":"open","origin":"origin","promptTokens":"promptTokens","completionTokens":"completionTokens","totalTokens":"totalTokens","rawModel":"rawModel","scope":"scope","skill":"skill","sortBy":"sortBy","sortOrder":"sortOrder","tab":"tab","text":"text","textarea":"textarea","tool":"tool","toolId":"toolId","web":"web","whereUsed":"whereUsed","whitelist":"whitelist","blacklist":"blacklist","resolve":"resolve","force":"force","base64url":"base64url","hex":"hex","range":"range","component":"component","redirect_uri":"redirect_uri","idempotency-key":"idempotency-key","error_description":"error_description","code":"code","compatible":"compatible","chat-completions":"chat-completions","oauth":"oauth","auth_token":"auth_token","crypto":"crypto","hours":"hours","selfsigned":"selfsigned","proxy_id":"proxy_id","proxyId":"proxyId","connectionId":"connectionId","resolveConnectionId":"resolveConnectionId","resolve_connection_id":"resolve_connection_id","scope_id":"scope_id","scopeId":"scopeId","jwtSecret":"jwtSecret","keytar":"keytar","better-sqlite3":"better-sqlite3","undici":"undici","builder-id":"builder-id","musicDesc":"musicDesc","musicGeneration":"musicGeneration","idc":"idc","cloud-status-changed":"cloud-status-changed","where_used":"where_used","windowMs":"windowMs","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Lista de permissões de ferramentas","TOOL_DENYLIST":"Lista de bloqueios de ferramentas","Failed to save pricing":"Falha ao salvar o preço","Failed to reset pricing":"Falha ao redefinir o preço","apikey":"Chave de API","http":"HTTP"},"sidebar":{"home":"Página inicial","dashboard":"Painel","providers":"Provedores","combos":"Combos","autoCombo":"Auto Combo","usage":"Uso","analytics":"Análise","costs":"Custos","health":"Saúde","limits":"Limites e cotas","cliTools":"Ferramentas CLI","media":"Mídia","settings":"Configurações","translator":"Tradutor","playground":"Playground","searchTools":"Search Tools","agents":"Agentes","docs":"Documentos","issues":"Problemas","endpoints":"Endpoints","apiManager":"Gerenciador de APIs","logs":"Registros","auditLog":"Registro de auditoria","shutdown":"Desligamento","restart":"Reiniciar","shutdownConfirm":"Desligar o OmniRoute?","restartConfirm":"Reiniciar o OmniRoute?","version":"v{version}","debug":"Depurar","system":"Sistema","help":"Ajuda","primarySection":"Main","cliSection":"CLI","debugSection":"Debug","systemSection":"System","helpSection":"Help","serverDisconnected":"Servidor desconectado","serverDisconnectedMsg":"O servidor proxy foi interrompido ou está reiniciando.","expandSidebar":"Expandir barra lateral","collapseSidebar":"Recolher barra lateral","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Vermelho","themeGreen":"Verde","themeViolet":"Violeta","themeOrange":"Laranja","themeCyan":"Ciano","cliToolsShort":"Ferramentas","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Escolha um tema predefinido ou crie o seu próprio com uma única cor","presetColors":"Popular colors","customTheme":"Tema personalizado","customThemeDesc":"Clique em criar tema e escolha uma cor","createTheme":"Create theme","activePreset":"Tema ativo"},"header":{"logout":"Sair","language":"Idioma","providers":"Provedores","providerDescription":"Gerencie suas conexões de provedor de IA","combos":"Combos","comboDescription":"Combinações de modelos com substituto","usage":"Uso e análise","usageDescription":"Monitore o uso da API, o consumo de tokens e os registros de solicitação","analytics":"Análise","analyticsDescription":"Gráficos, tendências e insights de avaliação","cliTools":"Ferramentas CLI","cliToolsDescription":"Configurar ferramentas CLI","home":"Página inicial","homeDescription":"Bem-vindo ao OmniRoute","endpoint":"Endpoints","endpointDescription":"Gerenciar endpoints proxy, MCP, A2A e endpoints de API","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability","settings":"Configurações","settingsDescription":"Gerencie suas preferências","openaiCompatible":"Compatível com OpenAI","anthropicCompatible":"Compatível Antrópico","media":"Media","mediaDescription":"Generate images, videos, and music","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel"},"home":{"quickStart":"Início rápido","quickStartDesc":"Comece a trabalhar em 4 etapas. Conecte provedores, encaminhe modelos, monitore tudo.","fullDocs":"Documentos completos","step1Title":"1. Crie uma chave API","step1Desc":"Vá para <endpoint>Endpoint</endpoint> -> Chaves registradas. Gere uma chave por ambiente.","step2Title":"2. Conecte provedores","step2Desc":"Adicione contas em <providers>Providers</providers>. Suporta OAuth, chave de API e níveis gratuitos.","step3Title":"3. Aponte seu cliente","step3Desc":"Defina o URL base como {url} em seu IDE ou cliente API.","step4Title":"4. Monitore e otimize","step4Desc":"Rastreie tokens, custos e erros em <logs>Logs de solicitação</logs> e <analytics>Analytics</analytics>.","providersOverview":"Visão geral dos provedores","configuredOf":"{configured} configurado de {total} provedores disponíveis","noModelsAvailable":"Nenhum modelo disponível para este fornecedor.","configureFirst":"Configure uma conexão primeiro em {providers}","configureProvider":"Configurar provedor","modelAvailable":"Modelo {count} disponível","modelsAvailable":"{count} modelos disponíveis","connectionsActive":"{count} conexão ativa","connectionsActivePlural":"{count} conexões ativas","copyModelName":"Copiar nome do modelo","documentation":"Documentação","healthMonitor":"Monitor de Saúde","reportIssue":"Informar problema","activeError":"{active} ativo · Erro {errors}","oauthLabel":"OAuth","apiKeyLabel":"Chave de API","requestsShort":"{count} requisitos","providerModelsTitle":"{provider} - Modelos","copiedModel":"Copiado: {model}","aliasLabel":"apelido","updateNow":"Atualizar agora","updating":"Atualizando...","updateAvailableDesc":"Uma nova versão está disponível. Clique para atualizar.","updateStarted":"Atualização iniciada..."},"analytics":{"title":"Análise","overviewDescription":"Monitore seus padrões de uso de API, consumo de tokens, custos e tendências de atividades em todos os provedores e modelos.","evalsDescription":"Execute conjuntos de avaliação para testar e validar seus endpoints LLM. Compare a qualidade do modelo, detecte regressões e compare a latência.","overview":"Visão geral","evals":"Avaliações","utilization":"Utilização","utilizationDescription":"Tendências de uso de quota do provedor e rastreamento de limites de taxa","comboHealth":"Saúde do Combo","comboHealthDescription":"Quota ao nível do combo, distribuição de uso e métricas de desempenho"},"apiManager":{"title":"Chaves de API","createKey":"Criar chave de API","key":"Chave","revokeKey":"Revogar chave","revokeConfirm":"Tem certeza de que deseja revogar esta chave de API?","noKeys":"Ainda não há chaves de API","noKeysDesc":"Crie sua primeira chave de API para autenticar solicitações em seu endpoint","keyLabel":"Etiqueta-chave","permissions":"Permissões","expiresAt":"Expira","never":"Nunca","revoke":"Revogar","showKey":"Mostrar chave","hideKey":"Ocultar chave","copyKey":"Copiar chave de API","allModels":"Todos os modelos","selectedModels":"Modelos Selecionados","readOnly":"Somente leitura","fullAccess":"Acesso total","keyManagement":"Gerenciamento de chaves de API","keyManagementDesc":"Crie e gerencie chaves de API para autenticar solicitações em seu endpoint","totalKeys":"Total de chaves","restricted":"Restrito","totalRequests":"Total de solicitações","modelsAvailable":"Modelos Disponíveis","registeredKeys":"Chaves Registradas","keysRegistered":"{count} chaves registradas","keyRegistered":"{count} chave registrada","keysSecurityNote":"Cada chave isola o rastreamento de uso e pode ser revogada de forma independente. As chaves são mascaradas após a criação por segurança.","createFirstKey":"Crie sua primeira chave","name":"Nome","usage":"Uso","created":"Criado","actions":"Ações","reqs":"requisitos","neverUsed":"Nunca usado","deleteConfirm":"Excluir esta chave de API?","usageTips":"Dicas de uso","tipAuth":"Use chaves de API no cabeçalho de autorização como portador YOUR_KEY","tipSecure":"As chaves são mostradas apenas uma vez durante a criação – armazene-as com segurança","tipSeparate":"Crie chaves separadas para diferentes clientes ou ambientes","tipRestrict":"Restrinja chaves a modelos específicos para melhor segurança e controle de custos","keyName":"Nome da chave","keyNamePlaceholder":"por exemplo, chave de produção, chave de desenvolvimento","keyNameDesc":"Escolha um nome descritivo para identificar a finalidade desta chave","keyCreated":"Chave de API criada","keyCreatedSuccess":"Chave criada com sucesso!","keyCreatedNote":"Copie e armazene esta chave agora — ela não será mostrada novamente.","done":"Concluído","savePermissions":"Salvar permissões","autoResolve":"Auto-Resolve","autoResolveDesc":"Auto-resolve ambiguous model names to native provider for this API key.","keyActive":"Key Active","keyActiveDesc":"Enable or disable this API key. Disabled keys are immediately rejected with 403.","accessSchedule":"Access Schedule","accessScheduleDesc":"Restrict access to specific hours and days of the week.","scheduleFrom":"From","scheduleUntil":"Until","scheduleDays":"Days","scheduleTimezone":"Timezone","scheduleTimezoneHint":"Use IANA timezone names, e.g. America/New_York, Europe/Berlin","scheduleActive":"Schedule","disabled":"Disabled","daySun":"Sun","dayMon":"Mon","dayTue":"Tue","dayWed":"Wed","dayThu":"Thu","dayFri":"Fri","daySat":"Sat","allowAll":"Permitir tudo","restrict":"Restringir","allowAllInfo":"Esta chave pode acessar todos os modelos disponíveis.","restrictInfo":"Esta chave pode acessar {selected} de modelos {total}.","selected":"{count} selecionado","all":"Todos","clear":"Limpar","searchModels":"Pesquise modelos por nome ou fornecedor...","noModelsFound":"Nenhum modelo encontrado","keyNameRequired":"O nome da chave é obrigatório","keyNameTooLong":"O nome da chave deve ter {max} caracteres ou menos","keyNameInvalid":"O nome da chave só pode conter letras, números, espaços, hifens e sublinhados","invalidKeyName":"Nome de chave inválido","failedCreateKey":"Falha ao criar chave","failedCreateKeyRetry":"Falha ao criar chave. Por favor, tente novamente.","invalidKeyId":"ID de chave inválido","failedDeleteKey":"Falha ao excluir a chave","failedDeleteKeyRetry":"Falha ao excluir a chave. Por favor, tente novamente.","invalidModelsSelection":"Seleção de modelos inválidos","cannotSelectMoreThanModels":"Não é possível selecionar mais de {max} modelos","failedUpdatePermissions":"Falha ao atualizar as permissões","failedUpdatePermissionsRetry":"Falha ao atualizar as permissões. Por favor, tente novamente.","unknownProvider":"desconhecido","copyMaskedKey":"Copiar chave mascarada","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Último: {date}","editPermissions":"Editar permissões","deleteKey":"Excluir chave","model":"Modelo {count}","models":"{count} modelos","permissionsTitle":"Permissões: {name}","allowAllDesc":"Esta chave pode acessar todos os modelos disponíveis.","restrictDesc":"Esta chave pode acessar {selectedCount} de modelos {totalModels}.","selectedCount":"{count} selecionado"},"auditLog":{"title":"Registro de auditoria","searchPlaceholder":"Ações de pesquisa...","action":"Ação","actor":"Ator","target":"Alvo","ipAddress":"Endereço IP","timestamp":"Carimbo de data e hora","noEntries":"Nenhuma entrada de auditoria encontrada","filterByAction":"Filtrar por ação...","filterByActor":"Filtrar por ator...","filterEntriesAria":"Filtrar entradas de log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por ator","refreshAuditLogAria":"Atualizar registro de auditoria","tableAria":"Entradas de registro de auditoria","failedFetchAuditLog":"Falha ao buscar o log de auditoria","notAvailable":"—","description":"Ações administrativas e eventos de segurança","showing":"Mostrando entradas {count} (deslocamento {offset})","previous":"Anterior"},"media":{"title":"Playground de Mídia","subtitle":"Gere imagens, vídeos e música","model":"Model","prompt":"Prompt","generate":"Gerar","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."},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results"},"cliTools":{"title":"Ferramentas CLI","noActiveProviders":"Nenhum provedor ativo","noActiveProvidersDesc":"Adicione e conecte provedores primeiro para configurar as ferramentas CLI.","mapModels":"Modelos de mapas","testConnection":"Conexão de teste","connectionStatus":"Status da conexão","configureEndpoint":"Configurar ponto final","instructions":"Instruções","modelMapping":"Mapeamento de modelo","baseUrl":"URL base","apiKey":"Chave de API","configured":"Configurado","notConfigured":"Não configurado","notInstalled":"Não instalado","custom":"Personalizado","unknown":"Desconhecido","lastSavedAt":"Último salvo: {date}","never":"Nunca","justNow":"agora mesmo","minutesAgoShort":"{count}m atrás","hoursAgoShort":"{count}h atrás","daysAgoShort":"{count}d atrás","monthsAgoShort":"{count}mo atrás","yearsAgoShort":"{count}anos atrás","runtimeCheckFailed":"Falha na verificação de tempo de execução","yourApiKeyPlaceholder":"sua chave de API","modelPlaceholder":"provedor/id do modelo","configurationSaved":"Configuração salva com sucesso.","failedToSave":"Falha ao salvar a configuração.","noApiKeysCreateOne":"Nenhuma chave de API – Crie uma na página Chaves","defaultOmnirouteKey":"sk_omniroute (padrão)","selectModel":"Selecione o modelo","selectModelForAlias":"Selecione o modelo para {alias}","selectModelForTool":"Selecione o modelo para {tool}","select":"Selecione","clear":"Limpar","comingSoon":"Em breve","checkingRuntime":"Verificando o status do tempo de execução...","guideOnlyIntegration":"Integração somente guia (sem necessidade de tempo de execução local)","cliRuntimeDetected":"Tempo de execução CLI detectado e pronto","cliFoundNotRunnable":"CLI encontrada, mas não executável{reason}","cliRuntimeNotDetected":"Tempo de execução da CLI não detectado","binary":"Binário","configPath":"Caminho de configuração","configPathShort":"Configuração","failedCheckRuntimeStatus":"Falha ao verificar o status do tempo de execução.","copy":"Copiar","copied":"Copiado","copyConfig":"Copiar configuração","saveConfig":"Salvar configuração","selectionSaved":"Seleção salva","guide":"Guia","detected":"Detectado","notReady":"Não está pronto","active":"Ativo","inactive":"Inativo","startMitm":"Iniciar MITM","stopMitm":"Pare o MITM","mitmStarted":"MITM iniciado com sucesso!","mitmStopped":"MITM parou com sucesso!","failedStart":"Falha ao iniciar o MITM","failedStop":"Falha ao parar o MITM","saveMappings":"Salvar mapeamentos","mappingsSaved":"Mapeamentos salvos!","failedSaveMappings":"Falha ao salvar mapeamentos","howItWorks":"Como funciona:","antigravityHowWorksDesc":"A antigravidade envia solicitações ao endpoint do Google. O MITM os intercepta e os redireciona para o OmniRoute.","antigravityStep1":"1. Inicie o MITM para rotear solicitações por meio do OmniRoute.","antigravityStep2Prefix":"2. Adicionar","antigravityStep2Suffix":"ao seu arquivo hosts como 127.0.0.1.","antigravityStep3":"3. Abra o Antigravity e as solicitações serão proxy.","mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","sudoPasswordRequiredTitle":"Senha Sudo obrigatória","sudoPasswordHint":"A senha do administrador é necessária para modificar o arquivo hosts e as configurações de proxy do sistema.","enterSudoPassword":"Digite a senha do sudo","sudoPasswordRequiredError":"A senha Sudo é necessária.","cancel":"Cancelar","confirm":"Confirmar","settingsApplied":"Configurações aplicadas com sucesso!","failedApplySettings":"Falha ao aplicar configurações","settingsReset":"Configurações redefinidas com sucesso!","failedResetSettings":"Falha ao redefinir as configurações","backupRestored":"Cópia de segurança restaurada!","failedRestore":"Falha ao restaurar","checkingCli":"Verificando {tool} CLI...","cliNotRunnable":"{tool} CLI instalada, mas não executável","cliNotInstalled":"{tool} CLI não instalada","cliNotDetected":"{tool} CLI não detectada","cliDetectedReady":"{tool} CLI detectada e pronta","cliFoundFailedHealthcheck":"{tool} CLI foi encontrada, mas falhou na verificação de integridade do tempo de execução{reason}.","installCliPrompt":"Instale {tool} CLI para usar este recurso.","installCodexPrompt":"Instale o Codex CLI para usar o recurso de aplicação automática.","hide":"Esconder","howToInstall":"Como instalar","installationGuide":"Guia de instalação","platforms":"macOS/Linux/Windows:","afterInstallationRun":"Após a instalação, execute","toVerify":"para verificar.","current":"Atual","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Redefinir para o padrão","providerModelPlaceholder":"provedor/id do modelo","apply":"Aplicar","reset":"Redefinir","manualConfig":"Configuração manual","backups":"Cópias de segurança","configBackups":"Backups de configuração","noBackupsYet":"Ainda não há backups. Os backups são criados automaticamente antes de cada aplicação ou redefinição.","restore":"Restaurar","backupRestoredReloading":"Cópia de segurança restaurada! Recarregando status...","failedRestoreBackup":"Falha ao restaurar o backup","applied":"Aplicado!","failed":"Falha","resetDone":"Redefinir!","omnirouteConfiguredOpenAiCompatible":"OmniRoute está configurado como provedor compatível com OpenAI","provider":"Provedor","model":"Modelo","providers":"Provedores","auth":"Autenticação","noApiKeysAvailable":"Nenhuma chave de API disponível","usingDefaultOmniroute":"Usando o padrão: sk_omniroute","updateConfig":"Atualizar configuração","applyConfig":"Aplicar configuração","noBackupsAvailable":"Nenhum backup disponível.","profileSaved":"Perfil \\"{name}\\" salvo!","failedSaveProfile":"Falha ao salvar o perfil","profileActivated":"Perfil ativado!","failedActivateProfile":"Falha ao ativar o perfil","profiles":"Perfis","savedProfiles":"Perfis salvos","noProfilesYet":"Nenhum perfil salvo ainda. Salve a configuração atual como um perfil abaixo.","activate":"Ativar","deleteProfile":"Excluir perfil","profileNamePlaceholder":"Nome do perfil (por exemplo, conta pessoal)","saveCurrent":"Salvar atual","codexAuthNotePrefix":"Usos do Codex","codexAuthNoteMiddle":"com","codexAuthNoteSuffix":"Clique em \\"Aplicar\\" para configurar automaticamente.","claudeManualConfiguration":"Claude CLI - Configuração manual","codexManualConfiguration":"Codex CLI - Configuração manual","droidManualConfiguration":"Droid de fábrica - configuração manual","openClawManualConfiguration":"Garra Aberta - Configuração Manual","clineManualConfiguration":"Configuração Manual do Cline","kiloManualConfiguration":"Configuração Manual do Código Kilo","whenToUseLabel":"Quando usar","openToolDocs":"Abrir documentos de ferramentas","toolUseCases":{"claude":"Use quando desejar fluxos de trabalho de planejamento robustos e refatorações longas de vários arquivos com Claude Code.","codex":"Use quando sua equipe estiver padronizada em fluxos OpenAI Codex CLI e autenticação baseada em perfil.","droid":"Use quando precisar de um agente de terminal leve focado em codificação rápida e loops de execução de comandos.","openclaw":"Use quando desejar um agente de codificação no estilo Open Claw, mas roteado por meio de políticas OmniRoute.","cline":"Use quando você configura agentes de codificação dentro de editores e deseja configuração guiada com modelos OmniRoute.","kilo":"Use quando seu fluxo de trabalho depender de comandos Kilo Code e edições iterativas rápidas.","cursor":"Use ao codificar no Cursor e você precisar de modelos personalizados compatíveis com OpenAI por meio do OmniRoute.","continue":"Use ao executar Continue em IDEs e você precisar de uma configuração de provedor portátil baseada em JSON.","opencode":"Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.","kiro":"Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.","antigravity":"Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.","copilot":"Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento."},"toolDescriptions":{"antigravity":"IDE antigravidade do Google com MITM","claude":"CLI do Código Claude Antrópico","codex":"CLI do OpenAI Codex","droid":"Assistente de IA Droid de fábrica","openclaw":"Assistente de IA de garra aberta","cline":"CLI do assistente de codificação Cline AI","kilo":"CLI do assistente de IA do Kilo Code","cursor":"Editor de código do cursor AI","continue":"Continuar Assistente de IA","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":"Requer conta Cursor Pro para usar este recurso.","1":"O cursor roteia solicitações por meio de seu próprio servidor, portanto, o endpoint local não é compatível. Ative o Cloud Endpoint nas configurações."},"steps":{"1":{"title":"Abra Configurações","desc":"Vá para Configurações -> Modelos"},"2":{"title":"Habilitar API OpenAI","desc":"Habilite a opção \\"chave de API OpenAI\\""},"3":{"title":"URL base"},"4":{"title":"Chave de API"},"5":{"title":"Adicionar modelo personalizado","desc":"Clique em \\"Ver todos os modelos\\" -> \\"Adicionar modelo personalizado\\""},"6":{"title":"Selecione o modelo"}}},"continue":{"steps":{"1":{"title":"Abrir configuração","desc":"Abra o arquivo de configuração Continuar"},"2":{"title":"Chave de API"},"3":{"title":"Selecione o modelo"},"4":{"title":"Adicionar configuração de modelo","desc":"Adicione a seguinte configuração ao seu array de modelos:"}},"notes":{"0":"Continue usa um arquivo de configuração JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"},"5":{"title":"Use Thinking Variant","desc":"For thinking models, run with --variant high/low/max (example command below)."}},"notes":{"0":"OpenCode requer configuração de chave de API.","1":"Defina a URL base para seu endpoint OmniRoute."}},"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 requer conta Amazon."}},"windsurf":{"steps":{"1":{"title":"Open AI Settings","desc":"Click the AI Settings icon in Windsurf or go to Settings"},"2":{"title":"Add Custom Provider","desc":"Select \\"Add custom provider\\" (OpenAI-compatible)"},"3":{"title":"Base URL","desc":"http://127.0.0.1:20128/v1"},"4":{"title":"API Key","desc":"Select your OmniRoute API key"},"5":{"title":"Select Model","desc":"Choose a model from the dropdown"}}}}},"combos":{"title":"Combos","description":"Crie combinações de modelos com roteamento ponderado e suporte substituto","createCombo":"Criar combinação","editCombo":"Editar combinação","deleteCombo":"Excluir combinação","noModels":"Nenhum modelo","noModelsYet":"Nenhum modelo adicionado ainda","addModel":"Adicionar modelo","addModelToCombo":"Adicionar modelo ao combo","routingStrategy":"Estratégia de Roteamento","maxRetries":"Máximo de tentativas","timeout":"Tempo limite (ms)","healthcheck":"Verificação de integridade","priority":"Prioridade","fallback":"Alternativa","roundRobin":"Rodada Robin","random":"Aleatório","leastLatency":"Menor latência","comboName":"Nome do combo","comboNamePlaceholder":"meu-combo","deleteConfirm":"Excluir este combo?","noCombosYet":"Ainda não há combos","comboCreated":"Combo criado com sucesso","comboUpdated":"Combo atualizado com sucesso","comboDeleted":"Combinação excluída","failedCreate":"Falha ao criar combinação","failedUpdate":"Falha ao atualizar o combo","errorCreating":"Erro ao criar o combo","errorUpdating":"Erro ao atualizar o combo","errorDeleting":"Erro ao excluir o combo","testFailed":"Falha na solicitação de teste","failedToggle":"Falha ao alternar combinação","testResults":"Resultados do teste — {name}","resolvedBy":"Resolvido por:","more":"+{count} mais","reqs":"requisitos","success":"sucesso","proxyConfigured":"Proxy configurado","copyComboName":"Copiar nome do combo","enableCombo":"Ativar combinação","disableCombo":"Desativar combinação","testCombo":"Combinação de teste","duplicate":"Duplicar","proxyConfig":"Configuração de proxy","nameRequired":"O nome é obrigatório","nameInvalid":"Apenas letras, números, -, _, / e . permitido","nameHint":"Letras, números, -, _, / e . permitido","priorityDesc":"Fallback sequencial: tenta primeiro o modelo 1, depois o 2, etc.","weightedDesc":"Distribui o tráfego por porcentagem de peso com substituto","roundRobinDesc":"Distribuição circular: cada solicitação vai para o próximo modelo em rotação","randomDesc":"Seleção aleatória uniforme e, em seguida, retorno aos modelos restantes","leastUsedDesc":"Escolhe o modelo com menos solicitações, equilibrando a carga ao longo do tempo","costOptimizedDesc":"Rotas para o modelo mais barato primeiro com base no preço","strictRandom":"Aleatório Estrito","strictRandomDesc":"Baralho embaralhado — usa cada modelo uma vez antes de reembaralhar","models":"Modelos","autoBalance":"Equilíbrio automático","advancedSettings":"Configurações avançadas","retryDelay":"Atraso de nova tentativa (ms)","concurrencyPerModel":"Simultaneidade/Modelo","queueTimeout":"Tempo limite da fila (ms)","advancedHint":"Deixe em branco para usar padrões globais. Eles substituem as configurações por provedor.","moveUp":"Subir","moveDown":"Mover para baixo","removeModel":"Remover","saving":"Salvando...","weighted":"Ponderado","leastUsed":"Menos usado","costOpt":"Opção de custo","strategyGuideTitle":"How to use this strategy","strategyGuideWhen":"When to use","strategyGuideAvoid":"Avoid when","strategyGuideExample":"Example","strategyGuide":{"priority":{"when":"You have one preferred model and only want fallback on failure.","avoid":"You need request distribution across models.","example":"Primary coding model with cheaper backup for outages."},"weighted":{"when":"You need controlled traffic split across models.","avoid":"You cannot maintain accurate weights over time.","example":"80% stable model + 20% canary model rollout."},"round-robin":{"when":"You want predictable and even distribution.","avoid":"Models differ too much in latency or cost.","example":"Same model on multiple accounts to spread throughput."},"random":{"when":"You want simple distribution with minimal setup.","avoid":"You need strict traffic guarantees.","example":"Quick prototyping with equivalent models."},"least-used":{"when":"You want adaptive balancing based on live demand.","avoid":"Traffic is too low to benefit from usage balancing.","example":"Mixed workloads where one model often gets overloaded."},"cost-optimized":{"when":"Cost reduction is your top priority.","avoid":"Pricing data is missing or outdated.","example":"Background or batch jobs where lower cost is preferred."},"strict-random":{"when":"Use when you want perfectly even spread — each model used once before repeating.","avoid":"Avoid when models have different quality or latency and order matters.","example":"Example: Multiple accounts of the same model to distribute usage evenly."}},"advancedHelp":{"maxRetries":"How many retries are attempted before failing a request.","retryDelay":"Initial wait between retries. Higher values reduce burst pressure.","timeout":"Maximum request duration before aborting.","healthcheck":"Skips unhealthy models/providers from routing decisions.","concurrencyPerModel":"Max simultaneous requests allowed per model in round-robin.","queueTimeout":"How long a request can wait in queue before timing out."},"templatesTitle":"Quick templates","templatesDescription":"Apply a starting profile, then adjust models and config.","templateApply":"Apply template","templateHighAvailability":"High availability","templateHighAvailabilityDesc":"Priority routing with health checks and safe retries.","templateCostSaver":"Cost saver","templateCostSaverDesc":"Cost-optimized routing for budget-first workloads.","templateBalanced":"Balanced load","templateBalancedDesc":"Least-used routing to spread demand over time.","usageGuideHide":"Hide","usageGuideDontShowAgain":"Don\'t show again","usageGuideShow":"Show guide","quickTestTitle":"Combo ready to validate","quickTestDescription":"Run a test now to confirm fallback and latency behavior.","testNow":"Test now","pricingCoverage":"Pricing coverage","pricingCoverageHint":"Cost-optimized works best when all combo models have pricing.","pricingAvailable":"Pricing available","pricingMissing":"No pricing","pricingAvailableShort":"priced","pricingMissingShort":"no-price","warningRoundRobinSingleModel":"Round-robin is most useful with at least 2 models.","warningCostOptimizedPartialPricing":"Only {priced} of {total} models have pricing. Routing may be partially cost-aware.","warningCostOptimizedNoPricing":"No pricing data found for this combo. Cost-optimized may route unexpectedly.","readinessTitle":"Pronto para salvar?","readinessDescription":"Revise a lista de verificação antes de criar ou atualizar este combo.","readinessCheckName":"O nome do combo é válido","readinessCheckModels":"Pelo menos um modelo está selecionado","readinessCheckWeights":"O total dos pesos é 100%","readinessCheckWeightsOptional":"Regra de pesos não obrigatória","readinessCheckPricing":"Dados de preços disponíveis","readinessCheckPricingOptional":"Regra de preços não obrigatória","saveBlockedTitle":"O salvamento está bloqueado até corrigir os itens abaixo:","saveBlockName":"Defina um nome para o combo.","saveBlockModels":"Adicione pelo menos um modelo.","saveBlockWeighted":"Ajuste os pesos para 100% (atual: {total}%).","saveBlockPricing":"Adicione preço para pelo menos um modelo ou escolha outra estratégia.","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."},"strict-random":{"title":"Shuffle deck distribution","description":"Each model is used exactly once per cycle before reshuffling.","tip1":"Use at least 2 models for meaningful distribution.","tip2":"Works best with equivalent-performance models.","tip3":"Ideal for load balancing across multiple API accounts."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Custos","budget":"Orçamento","totalCost":"Custo total","breakdown":"Divisão de custos","noData":"Sem dados de custo","byModel":"Por modelo","byProvider":"Por provedor"},"endpoint":{"title":"Ponto final da API","available":"Terminais disponíveis","cloudProxy":"Proxy de nuvem","disableConfirm":"Tem certeza de que deseja desativar o proxy na nuvem?","baseUrl":"URL base","apiKeyLabel":"Chave de API","registeredKeys":"Chaves Registradas","chatCompletions":"Conclusões de bate-papo","responses":"Respostas","listModels":"Listar modelos","usingCloudProxy":"Usando o Cloud Proxy","usingLocalServer":"Usando servidor local","machineId":"ID da máquina: {id}...","disableCloud":"Desativar nuvem","enableCloud":"Habilitar nuvem","modelsAcrossEndpoints":"Modelos {models} em endpoints {endpoints}","chatDesc":"Bate-papo com e sem streaming com todos os provedores","embeddings":"Incorporações","embeddingsDesc":"Incorporações de texto para pipelines de pesquisa e RAG","imageGeneration":"Geração de imagem","imageDesc":"Gere imagens a partir de prompts de texto","rerank":"Reclassificar","rerankDesc":"Reclassificar documentos por relevância para uma consulta","audioTranscription":"Transcrição de áudio","audioTranscriptionDesc":"Transcrever arquivos de áudio para texto (Whisper)","textToSpeech":"Texto para fala","textToSpeechDesc":"Converta texto em fala com som natural","moderations":"Moderações","moderationsDesc":"Moderação de conteúdo e classificação de segurança","responsesDesc":"API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados","listModelsDesc":"Listar todos os modelos disponíveis em todos os fornecedores conectados","settingsApiDesc":"Ler e modificar a configuração do OmniRoute via API","settingsApi":"Settings API","categoryCore":"APIs Principais","categoryMedia":"Mídia e Multi-Modal","categorySearch":"Search & Discovery","categoryUtility":"Utilidades e Gestão","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.","enableCloudTitle":"Ativar proxy de nuvem","whatYouGet":"O que você receberá","cloudBenefitAccess":"Acesse sua API de qualquer lugar do mundo","cloudBenefitShare":"Compartilhe endpoint com sua equipe facilmente","cloudBenefitPorts":"Não há necessidade de abrir portas ou configurar firewall","cloudBenefitEdge":"Rede de borda global rápida","cloudSessionNote":"A nuvem manterá sua sessão de autenticação por 1 dia. Se não for usado, ele será excluído automaticamente.","cloudUnstableNote":"A nuvem está atualmente instável com Claude Code OAuth em alguns casos.","cloudConnected":"Cloud Proxy conectado!","connectingToCloud":"Conectando à nuvem...","verifyingConnection":"Verificando conexão...","connecting":"Conectando...","verifying":"Verificando...","connected":"Conectado!","disableCloudTitle":"Desativar proxy de nuvem","disableWarning":"Todas as sessões de autenticação serão excluídas da nuvem.","syncingData":"Sincronizando os dados mais recentes...","disablingCloud":"Desativando nuvem...","syncing":"Sincronizando...","disabling":"Desativando...","cloudConnectedVerified":"Cloud Proxy conectado e verificado!","connectedVerificationPending":"Conectado – verificação pendente","connectedVerificationPendingWithError":"Conectado – verificação pendente: {error}","cloudDisabledSuccess":"Nuvem desativada com sucesso","syncedSuccess":"Sincronizado com sucesso","failedDisable":"Falha ao desativar a nuvem","failedEnable":"Falha ao ativar a nuvem","cloudRequestTimeout":"Tempo limite de solicitação na nuvem","cloudRequestFailed":"Falha na solicitação de nuvem","cloudWorkerUnreachable":"Não foi possível entrar em contato com o trabalhador da nuvem. Certifique-se de que o serviço de nuvem esteja em execução (npm run dev in/cloud).","connectionFailed":"Falha na conexão","syncFailed":"Falha ao sincronizar dados na nuvem","cloudflaredTitle":"Cloudflare Quick Tunnel","cloudflaredDescription":"Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.","cloudflaredUrlNotice":"Creates a temporary Cloudflare Quick Tunnel. URLs change after restart.","cloudflaredEnable":"Enable Tunnel","cloudflaredInstallAndEnable":"Install & Enable","cloudflaredDisable":"Stop Tunnel","cloudflaredRunning":"Running","cloudflaredStarting":"Starting","cloudflaredStoppedState":"Stopped","cloudflaredNotInstalled":"Not installed","cloudflaredUnsupported":"Unsupported","cloudflaredError":"Error","cloudflaredStarted":"Cloudflare tunnel started","cloudflaredStopped":"Cloudflare tunnel stopped","cloudflaredRequestFailed":"Failed to update Cloudflare tunnel","cloudflaredTemporaryNote":"Quick Tunnel URLs are temporary and will change after restart.","cloudflaredUnsupportedNote":"This platform is not supported for managed installation.","cloudflaredIdleNote":"Create a temporary Cloudflare Quick Tunnel for this endpoint.","cloudflaredLastError":"Last error: {error}","providerModelsTitle":"{provider} — Modelos","noModelsForProvider":"Nenhum modelo disponível para este fornecedor.","chat":"Bate-papo","embedding":"Incorporação","image":"Imagem","custom":"personalizado","modelsCount":"{count, plural, one {# model} other {# models}}","sectionTitle":"Integration Surface","sectionDescription":"OpenAI-compatible APIs and operational protocol endpoints","tabApis":"OpenAI-compatible APIs","tabProtocols":"Protocols","tabsAria":"Endpoint sections","protocolsTitle":"Protocols","protocolsDescription":"MCP and A2A are first-class endpoints with dedicated observability and controls.","mcpCardTitle":"MCP Server","mcpCardDescription":"Model Context Protocol over stdio","a2aCardTitle":"A2A Server","a2aCardDescription":"Agent2Agent JSON-RPC endpoint","protocolToolsLabel":"Tools","protocolTasksLabel":"Tasks","protocolActiveStreamsLabel":"Active streams","protocolLastActivity":"Last activity","quickStart":"Quick Start","openMcpDashboard":"Open MCP management","openA2aDashboard":"Open A2A management","mcpQuickStartTitle":"MCP Quick Start","mcpQuickStartStep1":"Run the MCP server via `omniroute --mcp`.","mcpQuickStartStep2":"Configure your MCP client to connect over stdio transport.","mcpQuickStartStep3":"Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Quick Start","a2aQuickStartStep1":"Discover the agent card at `/.well-known/agent.json`.","a2aQuickStartStep2":"Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.","a2aQuickStartStep3":"Track and control tasks using `tasks/get` and `tasks/cancel`.","completionsLegacy":"Completions (Legacy)","completionsLegacyDesc":"Legacy OpenAI text completions — accepts both prompt string and messages array format"},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"Endpoints de API","apiEndpointsTitle":"Endpoints de API","apiEndpointsDescription":"Endpoints de API backend que podem ser consumidos por outras aplicações e serviços. Esta seção listará todas as APIs REST disponíveis com documentação e testes.","comingSoon":"Em Breve","plannedFeatures":"Funcionalidades Planejadas","featureRestApi":"Catálogo de endpoints REST API com documentação interativa","featureWebhooks":"Configuração de webhooks e assinaturas de eventos","featureSwagger":"Geração automática de specs OpenAPI / Swagger","featureAuth":"Gestão de chaves API e escopos OAuth por endpoint"},"mcpDashboard":{"loading":"Loading MCP dashboard...","activate":"activate","deactivate":"deactivate","confirmSwitchCombo":"Confirm {action} combo \\"{combo}\\"?","switchComboFailed":"Failed to switch combo state.","switchComboSuccess":"Combo \\"{combo}\\" updated.","confirmApplyProfile":"Apply resilience profile \\"{profile}\\"?","applyProfileFailed":"Failed to apply resilience profile.","applyProfileSuccess":"Profile \\"{profile}\\" applied.","confirmResetBreakers":"Reset all circuit breakers?","resetBreakersFailed":"Failed to reset circuit breakers.","resetBreakersSuccess":"Circuit breakers reset.","processStatus":"Process status","online":"Online","offline":"Offline","pid":"PID","sessionUptime":"Session uptime","lastHeartbeat":"Last heartbeat","activity24h":"Activity (24h)","totalCalls":"Total calls","successRate":"Success rate","avgLatency":"Avg latency","topTools":"Top tools","noToolCalls24h":"No tool calls in the last 24 hours.","runtimeDetails":"Runtime details","transport":"Transport","scopesEnforced":"Scopes enforced","yes":"yes","no":"no","lastCall":"Last call","heartbeatPath":"Heartbeat path","operationalControls":"Operational controls","switchCombo":"Switch combo","inactive":"inactive","active":"active","activateCombo":"Activate combo","deactivateCombo":"Deactivate combo","applyResilienceProfile":"Apply resilience profile","profileAggressive":"aggressive","profileBalanced":"balanced","profileConservative":"conservative","applyProfile":"Apply profile","resetCircuitBreakers":"Reset circuit breakers","resetCircuitBreakersHelp":"Clears current breaker state and failure counters for providers.","resetAllBreakers":"Reset all breakers","toolsAndScopes":"Tools and scopes","tableTool":"Tool","tableScopes":"Scopes","tablePhase":"Phase","tableAudit":"Audit","auditLog":"Audit log","auditSummary":"Calls: {total} | page {page} of {totalPages}","allTools":"All tools","allResults":"All results","success":"Success","failure":"Failure","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Loading audit entries...","noAuditEntriesForFilters":"No audit entries found for current filters.","tableTimestamp":"Timestamp","tableDuration":"Duration","tableResult":"Result","tableApiKey":"API key","failed":"failed","previous":"Previous","next":"Next"},"a2aDashboard":{"loading":"Loading A2A dashboard...","confirmCancelTask":"Cancel task {taskId}?","cancelTaskFailed":"Failed to cancel task.","cancelTaskSuccess":"Task {taskId} cancelled.","smokeSendFailed":"message/send smoke test failed.","smokeSendSuccessWithTask":"message/send ok (task {taskId}).","smokeSendSuccess":"message/send ok.","smokeStreamFailed":"message/stream smoke test failed.","smokeStreamSuccessWithTask":"message/stream ok (task {taskId}{stateSuffix}).","smokeStreamNoTaskId":"message/stream finished without task id.","health":"Health","ok":"ok","totalTasks":"Total tasks","activeStreams":"Active streams","lastTask":"Last task","taskStateOverview":"Task state overview","state":{"submitted":"submitted","working":"working","completed":"completed","failed":"failed","cancelled":"cancelled"},"agentCard":"Agent card","version":"Version","url":"URL","capabilities":"Capacidades","agentCardNotAvailable":"Cartão de agente não disponível.","quickValidation":"Validação rápida","quickValidationDescription":"Executa chamadas smoke através do endpoint `/a2a` ativo.","runMessageSend":"Run message/send","runMessageStream":"Run message/stream","taskManagement":"Gerenciamento de tarefas","taskSummary":"{total} tasks | page {page} of {totalPages}","allStates":"all","allSkills":"all skills","loadingTasks":"Loading tasks...","noTasksForFilters":"No tasks found for current filters.","tableTask":"Task","tableSkill":"Skill","tableState":"State","tableUpdated":"Updated","tableActions":"Actions","view":"View","cancel":"Cancel","previous":"Previous","next":"Next","taskDetail":"Task detail","close":"Close","metadata":"Metadata","events":"Events","artifacts":"Artifacts"},"health":{"title":"Saúde do sistema","description":"Monitoramento em tempo real da sua instância OmniRoute","healthy":"Saudável","degraded":"Degradado","down":"Para baixo","uptime":"Tempo de atividade","memory":"Memória","memoryRss":"Memória (RSS)","heap":"Pilha","cpu":"CPU","database":"Banco de dados","version":"Versão","lastCheck":"Última verificação","providerHealth":"Saúde do Provedor","systemMetrics":"Métricas do sistema","tokenHealth":"Saúde do token","refreshAll":"Atualizar tudo","checkNow":"Verifique agora","loadingHealth":"Carregando dados de saúde...","failedToLoad":"Falha ao carregar dados de integridade: {error}","retry":"Tentar novamente","allOperational":"Todos os sistemas operacionais","issuesDetected":"Problemas de sistema detectados","updatedAt":"{time} atualizado","latency":"Latência","latencyP50":"p50","latencyP95":"pág.95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Total de solicitações","noDataYet":"Ainda não há dados","promptCache":"Cache de prompt","entries":"Entradas","hitRate":"Taxa de acerto","hitsMisses":"Acertos / Erros","signatureCache":"Cache de Assinatura","signatureDefaults":"Padrões","signatureTool":"Ferramenta","signatureFamily":"Família","signatureSession":"Sessão","recovering":"Recuperando","noCBData":"Não há dados disponíveis sobre disjuntores. Faça alguns pedidos primeiro.","providerHealthStatusAria":"Estado de saúde do provedor","issuesLabel":"Problemas detectados","operational":"Operacional","providers":"Provedores","configuredProvidersLabel":"Configurado no painel","configuredProvidersHint":"Provedores com credenciais salvas em /dashboard/providers, independentemente do estado do tempo de execução.","activeProviders":"{count} active","activeProvidersHint":"Provedores configurados atualmente habilitados para solicitações de roteamento.","monitoredProviders":"{count} monitored","monitoredProvidersHint":"Provedores atualmente monitorados por monitores de integridade dos disjuntores.","healthyCount":"{count} íntegro","nodeVersion":"Nó {version}","failures":"{count} falha","failuresPlural":"{count} falhas","lastFailure":"Último","rateLimitStatus":"Status do limite de taxa","activeLimiters":"{count} limitador ativo","activeLimitersPlural":"{count} limitadores ativos","queued":"Na fila","queuedCount":"{count} na fila","running":"correndo","runningCount":"{count} em execução","ok":"OK","activeLockouts":"Bloqueios ativos","resetConfirm":"Redefinir todos os disjuntores para um estado íntegro? Isto limpará todas as contagens de falhas e restaurará todos os provedores ao status operacional.","resetAllTitle":"Reinicialize todos os disjuntores para um estado saudável","resetting":"Redefinindo...","resetAll":"Redefinir tudo","until":"Até {time}"},"limits":{"title":"Limites e cotas","rateLimit":"Limite de taxa","remaining":"Restante","requestsPerMinute":"Solicitações/min","tokensPerMinute":"Tokens/min","dailyLimit":"Limite Diário"},"logs":{"title":"Registros","requestLogs":"Solicitar registros","proxyLogs":"Registros de proxy","auditLog":"Registro de auditoria","console":"Consola","auditLogDesc":"Ações administrativas e eventos de segurança","loading":"Carregando...","refresh":"Atualizar","filterByAction":"Filtrar por ação...","filterByActor":"Filtrar por ator...","filterEntriesAria":"Filtrar entradas de log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por ator","refreshAuditLogAria":"Atualizar registro de auditoria","tableAria":"Entradas de registro de auditoria","failedFetchAuditLog":"Falha ao buscar o log de auditoria","showing":"Mostrando entradas {count} (deslocamento {offset})","search":"Pesquisar","timestamp":"Carimbo de data e hora","action":"Ação","actor":"Ator","target":"Alvo","details":"Detalhes","ipAddress":"Endereço IP","notAvailable":"—","noEntries":"Nenhuma entrada de registro de auditoria encontrada","previous":"Anterior","next":"Próximo"},"onboarding":{"welcome":"Bem vindo","security":"Segurança","test":"Teste","ready":"Pronto!","setPassword":"Definir senha","addProvider":"Adicione seu primeiro provedor","getStarted":"Comece","skip":"Pular","skipWizard":"Ignorar totalmente o assistente","skipPassword":"Ignorar configuração de senha","skipAndContinue":"Pular e continuar","passwordLabel":"Senha","confirmPassword":"Confirmar senha","enterPassword":"Digite a senha","confirmPasswordPlaceholder":"Confirmar senha","passwordsMismatch":"As senhas não coincidem","setupComplete":"Configuração concluída!","goToDashboard":"Vá para Painel →","welcomeDesc":"OmniRoute é o seu proxy local da API AI. Ele roteia solicitações para vários provedores de IA com balanceamento de carga, failover e rastreamento de uso.","multiProvider":"Multi-Provedor","usageTracking":"Rastreamento de uso","apiKeyMgmt":"Gerenciamento de chave de API","securityDesc":"Defina uma senha para proteger seu painel ou pule por enquanto.","providerDesc":"Conecte seu primeiro provedor de IA. Você pode adicionar mais posteriormente.","apiKeyRequired":"Chave API (obrigatória)","customUrlOptional":"URL personalizado (opcional)","testDesc":"Vamos verificar se a conexão do seu provedor funciona.","runTest":"Execute o teste de conexão","testingConnection":"Testando conexão...","connectionSuccessful":"Conexão bem-sucedida! Seu provedor está pronto.","noProviderFound":"Nenhum provedor encontrado. Você pode adicionar um do painel posteriormente.","testFailed":"O teste falhou, mas você pode configurar isso mais tarde.","couldNotTest":"Não foi possível testar agora. Você pode testar no painel.","doneDesc":"Está tudo pronto! Sua instância do OmniRoute está configurada e pronta para fazer proxy de solicitações de IA.","yourEndpoint":"Seu ponto final:","continue":"Continuar","retry":"Tentar novamente","failedSetPassword":"Falha ao definir a senha. Tente novamente.","failedAddProvider":"Falha ao adicionar provedor. Tente novamente.","connectionError":"Erro de conexão. Por favor, tente novamente.","provider":"Provedor"},"providers":{"title":"Provedores","addProvider":"Adicionar provedor","editProvider":"Editar provedor","deleteProvider":"Excluir provedor","noProviders":"Nenhum provedor configurado","modelAvailability":"Disponibilidade do modelo","accounts":"Contas","newAccount":"Nova conta","deleteConfirm":"Tem certeza de que deseja excluir este provedor?","testing":"Testando...","testConnection":"Conexão de teste","testSuccess":"Conexão bem-sucedida","testFailed":"Falha na conexão","available":"Disponível","cooldown":"Recarga","unavailable":"Indisponível","unknown":"Desconhecido","oauthLabel":"OAuth","compatibleLabel":"Compatível","chat":"Bate-papo","responses":"Respostas","messages":"Mensagens","oauthProviders":"Provedores OAuth","freeProviders":"Provedores Gratuitos","apiKeyProviders":"Provedores de chaves de API","compatibleProviders":"Provedores compatíveis com chave de API","testAll":"Teste tudo","testAllOAuth":"Teste todas as conexões OAuth","testAllFree":"Teste todas as conexões gratuitas","testAllApiKey":"Teste todas as conexões de chave de API","testAllCompatible":"Teste todas as conexões compatíveis","connected":"{count} Conectado","errorCount":"{count} Erro ({code})","errorCountNoCode":"{count} Erro","noConnections":"Sem conexões","disabled":"Desativado","enableProvider":"Habilitar provedor","disableProvider":"Desativar provedor","testResults":"Resultados do teste","noCompatibleYet":"Nenhum provedor compatível adicionado ainda","compatibleHint":"Use os botões acima para adicionar endpoints compatíveis com OpenAI ou Antrópico","addOpenAICompatible":"Adicionar compatível com OpenAI","addAnthropicCompatible":"Adicionar Compatível Antrópico","addNewProvider":"Adicionar novo provedor","backToProviders":"Voltar para Provedores","configureNewProvider":"Configure um novo provedor de IA para usar com seus aplicativos.","providerLabel":"Provedor","selectProvider":"Selecione um provedor","selectedProvider":"Provedor selecionado","authMethod":"Método de autenticação","apiKeyLabel":"Chave de API","apiKeyRequired":"A chave de API é obrigatória","selectProviderRequired":"Selecione um provedor","enterApiKey":"Insira sua chave API","apiKeySecure":"Sua chave API será criptografada e armazenada com segurança.","oauth2Connect":"Conecte-se com OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Conecte sua conta usando autenticação OAuth2.","displayName":"Nome de exibição","displayNamePlaceholder":"por exemplo, API de produção, ambiente de desenvolvimento","displayNameHint":"Opcional. Um nome amigável para identificar esta configuração.","active":"Ativo","activeDescription":"Habilite este provedor para uso em seus aplicativos","cancel":"Cancelar","createProvider":"Criar provedor","failedCreate":"Falha ao criar provedor","errorOccurred":"Ocorreu um erro. Por favor, tente novamente.","modelStatus":"Status do modelo","allModelsOperational":"Todos os modelos operacionais","modelsWithIssues":"{count} modelo(s) com problemas","allModelsNormal":"Todos os modelos estão respondendo normalmente.","cooldownCleared":"Tempo de espera liberado para {model}","failedClearCooldown":"Falha ao limpar o tempo de espera","loadingAvailability":"Carregando disponibilidade do modelo...","clearCooldown":"Limpar","clearing":"Limpando...","until":"Até {time}","providerTestFailed":"Falha no teste do provedor","providerTestTimeout":"Provider test timed out — too many connections to test at once","modeTest":"{mode} Teste","passedCount":"{count} aprovado","failedCount":"{count} falhou","testedCount":"{count} testado","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"ERRO","noActiveConnectionsInGroup":"Nenhuma conexão ativa encontrada para este grupo.","allTestsPassed":"Todos os testes {total} foram aprovados","testSummary":"{passed}/{total} aprovado, {failed} falhou","nameLabel":"Nome","prefixLabel":"Prefixo","baseUrlLabel":"URL base","apiTypeLabel":"Tipo de API","prefixHint":"Obrigatório. Prefixo exclusivo para nomes de modelos.","nameHint":"Obrigatório. Um rótulo amigável para este nó.","baseUrlHint":"Obrigatório.  URL base da API do provedor.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Validar conexão","validating":"Validando...","connectionValid":"A conexão é válida!","connectionFailed":"Falha na conexão. Verifique o URL e a chave.","testKeyLabel":"Chave de API de teste","testKeyPlaceholder":"sk-... (apenas para validação)","providerNotFound":"Provedor não encontrado","deleteConnectionConfirm":"Excluir esta conexão?","failedSetAlias":"Falha ao definir o alias","failedSaveConnection":"Falha ao salvar conexão","failedSaveConnectionRetry":"Falha ao salvar a conexão. Por favor, tente novamente.","failedRetestConnection":"Falha ao testar novamente a conexão","deleteCompatibleNodeConfirm":"Excluir este nó compatível com {type}?","anthropicCompatibleDetails":"Detalhes compatíveis com antrópicos","openaiCompatibleDetails":"Detalhes compatíveis com OpenAI","messagesApi":"API de mensagens","responsesApi":"API de respostas","chatCompletions":"Conclusões de bate-papo","importingModels":"Importando...","importFromModels":"Importar de /modelos","allModelsAlreadyImported":"Todos os modelos já foram importados","noNewModelsToImport":"Nenhum modelo novo para importar — todos os modelos já estão no registo ou na lista de modelos personalizados","skippingExistingModels":"A ignorar {count} modelos existentes","autoSync":"Sincronização automática","autoSyncTooltip":"Atualiza automaticamente a lista de modelos a cada 24 horas (configurável via MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Sincronização automática ativada — modelos serão atualizados periodicamente","autoSyncDisabled":"Sincronização automática desativada","autoSyncToggleFailed":"Falha ao alternar sincronização automática","clearAllModels":"Limpar todos os modelos","clearAllModelsConfirm":"Tem certeza que deseja remover todos os modelos deste provedor?","clearAllModelsSuccess":"Todos os modelos limpos","clearAllModelsFailed":"Falha ao limpar modelos","addConnectionToImport":"Adicione uma conexão para permitir a importação.","noModelsConfigured":"Nenhum modelo configurado","connectionCount":"{count} conexões","fetchingModels":"Buscando modelos disponíveis...","failedFetchModels":"Falha ao buscar modelos","noModelsFound":"Nenhum modelo encontrado","importFailed":"Falha na importação","noNewModelsAdded":"Nenhum novo modelo foi adicionado.","adding":"Adicionando...","importingModelsTitle":"Importando Modelos","copyModel":"Copiar modelo","removeModel":"Remover modelo","rateLimitProtected":"Protegido","rateLimitUnprotected":"Desprotegido","enableRateLimitProtection":"Clique para ativar a proteção de limite de taxa","disableRateLimitProtection":"Clique para desativar a proteção de limite de taxa","productionKey":"Chave de produção","enterNewApiKey":"Insira a nova chave de API","optional":"Opcional","anthropicCompatibleName":"Compatível Antrópico","openaiCompatibleName":"Compatível com OpenAI","failedImportModels":"Falha ao importar modelos","noModelsReturnedFromEndpoint":"Nenhum modelo foi retornado do endpoint /models.","importingModelsProgress":"Importando {current} de modelos {total}...","foundModelsStartingImport":"Modelos {count} encontrados. Iniciando importação...","importingModelById":"Importando {modelId}...","importSuccessCount":"{count, plural, one {# model} other {# models}} importado com sucesso!","noNewModelsAddedExisting":"Nenhum novo modelo foi adicionado (todos já existem).","importDoneCount":"✓ Pronto! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"Ocorreu um erro inesperado","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"mensagens","responsesPath":"respostas","chatCompletionsPath":"bate-papo/conclusões","add":"Adicionar","edit":"Editar","delete":"Excluir","anthropic":"Antrópico","openai":"OpenAI","singleConnectionPerCompatible":"Somente uma conexão é permitida por nó compatível. Adicione outro nó se precisar de mais conexões.","connections":"Conexões","providerProxyTitleConfigured":"Proxy do provedor: {host}","configured":"configurado","providerProxyConfigureHint":"Configure o proxy para todas as conexões deste provedor","providerProxy":"Proxy do provedor","noConnectionsYet":"Ainda não há conexões","addFirstConnectionHint":"Adicione sua primeira conexão para começar","addConnection":"Adicionar conexão","availableModels":"Modelos Disponíveis","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","pageAutoRefresh":"A página será atualizada automaticamente...","statusDisabled":"desativado","statusConnected":"conectado","statusRuntimeIssue":"problema de tempo de execução","statusAuthFailed":"falha na autenticação","statusRateLimited":"taxa limitada","statusNetworkIssue":"problema de rede","statusTestUnsupported":"teste sem suporte","statusUnavailable":"indisponível","statusFailed":"falhou","statusError":"erro","oauthAccount":"Conta OAuth","errorTypeRuntime":"Tempo de execução local","errorTypeUpstreamAuth":"Autenticação upstream","errorTypeMissingCredential":"Credencial ausente","errorTypeRefreshFailed":"Falha na atualização","errorTypeTokenExpired":"O token expirou","errorTypeRateLimited":"Taxa limitada","errorTypeUpstreamUnavailable":"Upstream indisponível","errorTypeNetworkError":"Erro de rede","errorTypeTestUnsupported":"Teste sem suporte","errorTypeUpstreamError":"Erro de envio","proxySourceGlobal":"Globais","proxySourceProvider":"Provedor","proxySourceKey":"Chave","proxyConfiguredBySource":"Proxy ({source}): {host}","autoPriority":"Automático: {priority}","proxy":"Procurador","retestAuthentication":"Testar novamente a autenticação","retest":"Teste novamente","disableConnection":"Desativar conexão","enableConnection":"Habilitar conexão","reauthenticateConnection":"Autentique novamente esta conexão","proxyConfig":"Configuração de proxy","aliasExistsAlert":"O alias \\"{alias}\\" já existe. Use um modelo diferente ou edite o alias existente.","openRouterAnyModelHint":"OpenRouter suporta qualquer modelo. Adicione modelos e crie aliases para acesso rápido.","modelIdFromOpenRouter":"ID do modelo (do OpenRouter)","openRouterModelPlaceholder":"antrópico/claude-3-opus","customModels":"Modelos personalizados","customModelsHint":"Adicione IDs de modelo que não estão na lista padrão. Eles estarão disponíveis para roteamento.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamAddRow":"Add header","compatUpstreamRemoveRow":"Remove row","compatBadgeUpstreamHeaders":"Headers","modelId":"ID do modelo","customModelPlaceholder":"por exemplo gpt-4.5-turbo","loading":"Carregando...","removeCustomModel":"Remover modelo personalizado","noCustomModels":"Nenhum modelo personalizado adicionado ainda.","allSuggestedAliasesExist":"Todos os aliases sugeridos já existem. Escolha um modelo diferente ou remova aliases conflitantes.","failedSaveCustomModel":"Falha ao salvar o modelo personalizado","modelAddedSuccess":"Modelo {modelId} adicionado com sucesso","failedAddModelTryAgain":"Falha ao adicionar modelo. Por favor, tente novamente.","failedSaveImportedModel":"Falha ao salvar o modelo importado no banco de dados personalizado","failedImportModelsTryAgain":"Falha ao importar modelos. Por favor, tente novamente.","failedRemoveModelFromDatabase":"Falha ao remover o modelo do banco de dados","modelRemovedSuccess":"Modelo removido com sucesso","failedDeleteModelTryAgain":"Falha ao excluir modelo. Por favor, tente novamente.","compatibleModelsDescription":"Adicione modelos compatíveis com {type} manualmente ou importe-os do endpoint /models.","anthropicCompatibleModelPlaceholder":"claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"Falha na validação da chave de API. Verifique sua chave e tente novamente.","addProviderApiKeyTitle":"Adicionar chave de API {provider}","checking":"Verificando...","check":"Verifique","valid":"Válido","invalid":"Inválido","creating":"Criando...","validationChecksAnthropicCompatible":"A validação verifica {provider} verificando a chave de API.","validationChecksOpenAiCompatible":"A validação verifica {provider} via /models em seu URL base.","priorityLabel":"Prioridade","saving":"Salvando...","save":"Salvar","editConnection":"Editar conexão","accountName":"Nome da conta","email":"E-mail","healthCheckMinutes":"Verificação de integridade (min)","healthCheckHint":"Intervalo de atualização de token proativo. 0 = desabilitado.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Falha ao testar a conexão","failed":"Falha","leaveBlankKeepCurrentApiKey":"Deixe em branco para manter a chave API atual.","editCompatibleTitle":"Editar {type} Compatível","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Chave API (para verificação)","compatibleProdPlaceholder":"{type} Compatível (Produção)","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","applyCodexAuthLocal":"Apply auth","exportCodexAuthFile":"Export auth","codexAuthAppliedLocal":"Codex auth.json applied locally","codexAuthApplyFailed":"Failed to apply Codex auth.json locally","codexAuthExported":"Codex auth.json exported","codexAuthExportFailed":"Failed to export Codex auth.json","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)"},"settings":{"title":"Configurações","general":"Geral","security":"Segurança","appearance":"Aparência","routing":"Roteamento","cache":"Cache","resilience":"Resiliência","systemPrompt":"Alerta do sistema","thinkingBudget":"Pensando no orçamento","proxy":"Procurador","pricing":"Preços","storage":"Armazenamento","policies":"Políticas","ipFilter":"Filtro IP","comboDefaults":"Padrões de combinação","fallbackChains":"Cadeias substitutas","changePassword":"Alterar senha","enablePassword":"Habilitar senha","darkMode":"Modo escuro","lightMode":"Modo claro","systemTheme":"Tema do sistema","debugToggle":"Enable Debug Mode","sidebarVisibilityToggle":"Show Sidebar Items","enableCache":"Habilitar cache","cacheTTL":"Cache TTL","maxCacheSize":"Tamanho máximo do cache","clearCache":"Limpar Cache","cacheHits":"Acessos de cache","cacheMisses":"Perdas de cache","hitRate":"Taxa de acerto","cacheEntries":"Entradas de cache","cacheSettings":"Cache Settings","semanticCache":"Semantic Cache","maxEntries":"Max Entries","ttlMinutes":"TTL (minutes)","promptCache":"Cache de prompt","strategy":"Strategy","preserveClientCache":"Preserve Client Cache","enabled":"Enabled","loading":"Loading...","saving":"Salvando...","save":"Save","circuitBreaker":"Disjuntor","retryPolicy":"Política de Nova Tentativa","maxRetries":"Máximo de tentativas","retryDelay":"Atraso na nova tentativa","timeoutMs":"Tempo limite (ms)","enableSystemPrompt":"Habilitar prompt do sistema","systemPromptText":"Texto de prompt do sistema","autoDisableBannedAccounts":"Auto-Disable Banned Accounts","autoDisableDescription":"Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 \'verify your account\'). This removes them from the combo rotation.","autoDisableThreshold":"Ban Threshold","autoDisableThresholdDesc":"Consecutive ban signals required before permanent deactivation.","enableThinking":"Habilite o pensamento","maxThinkingTokens":"Tokens de pensamento máximo","enableProxy":"Habilitar proxy","proxyUrl":"URL proxy","pricingRates":"Formato de taxas de preços","currentPricing":"Visão geral de preços atuais","loadingPricing":"Carregando dados de preços...","noPricing":"Não há dados de preços disponíveis","input":"Entrada","output":"Saída","cached":"Em cache","reasoning":"Raciocínio","cacheCreation":"Criação de Cache","customPricing":"Preço personalizado","databaseSize":"Tamanho do banco de dados","backupDb":"Banco de dados de backup","restoreDb":"Restaurar banco de dados","exportData":"Exportar dados","importData":"Importar dados","clearData":"Limpar todos os dados","clearDataConfirm":"Isso excluirá permanentemente todos os dados. Tem certeza?","enableRequestLogs":"Habilitar registros de solicitação","logRetention":"Retenção de registros","ipWhitelist":"Lista de permissões de IP","ipBlacklist":"Lista negra de IP","addIP":"Adicionar IP","savedSuccessfully":"Configurações salvas com sucesso","ai":"IA","advanced":"Avançado","localMode":"Modo Local — Todos os dados armazenados em sua máquina","settingsSectionsAria":"Seções de configurações","switchThemes":"Alternar entre temas claros e escuros","themeSelectionAria":"Seleção de tema","themeLight":"Luz","themeDark":"Escuro","themeSystem":"Sistema","sidebarVisibility":"Hide sidebar items","sidebarVisibilityDesc":"Hide any sidebar navigation entry to reduce visual clutter.","sidebarVisibilityHint":"Any sidebar section is hidden automatically when a...","hideHealthLogs":"Ocultar registros de verificação de integridade","hideHealthLogsDesc":"Quando ativado, suprime mensagens [HealthCheck] no console do servidor","themeAccent":"Cor do tema","themeAccentDesc":"Escolha uma cor predefinida ou crie seu próprio tema com uma cor","themeCreate":"Criar tema","themeCustom":"Tema personalizado","themeBlue":"Azul","themeRed":"Vermelho","themeGreen":"Verde","themeViolet":"Violeta","themeOrange":"Laranja","themeCyan":"Ciano","whitelabeling":"Branding","whitelabelingDesc":"Customize the application name and logo","appName":"Application Name","appNameDesc":"Display name shown in sidebar and browser tab","customLogo":"Custom Logo URL","customLogoDesc":"URL to your custom logo image","uploadLogo":"Upload Logo","resetLogo":"Reset to Default","logoPreview":"Preview","customFavicon":"Browser Favicon","customFaviconDesc":"URL to your custom favicon (shown in browser tab)","uploadFavicon":"Upload Favicon","resetFavicon":"Reset Favicon","faviconPreview":"Favicon Preview","flushCache":"Liberar cache","flushing":"Rubor…","size":"Tamanho","hits":"Acessos","evictions":"Despejos","loadingCacheStats":"Carregando estatísticas de cache…","globalProxy":"Procurador global","globalProxyDesc":"Configure um proxy de saída global para todas as chamadas de API. Provedores individuais, combos e chaves podem substituir isso.","noGlobalProxy":"Nenhum proxy global configurado","globalLabel":"Globais","configure":"Configurar","globalSystemPrompt":"Alerta do sistema global","systemPromptDesc":"Injetado em todas as solicitações no nível do proxy","saved":"Salvo","systemPromptPlaceholder":"Digite o prompt do sistema para injetar em todas as solicitações...","systemPromptHint":"Este prompt é anexado à mensagem do sistema de cada solicitação. Use para instruções globais, diretrizes de segurança ou regras de formatação de resposta.","chars":"{count} caracteres","thinkingBudgetTitle":"Pensando no orçamento","thinkingBudgetDesc":"Controle o uso do token de raciocínio de IA em todas as solicitações","passthrough":"Passagem","passthroughDesc":"Sem alterações – o cliente controla o orçamento pensado","auto":"Automático","autoDesc":"Remova todas as configurações de pensamento – deixe o provedor decidir","custom":"Personalizado","customDesc":"Defina um orçamento fixo de tokens para todas as solicitações","adaptive":"Adaptativo","adaptiveDesc":"Dimensione o orçamento com base na complexidade da solicitação","effortNone":"Nenhum (0 tokens)","effortLow":"Baixo (tokens de 1K)","effortMedium":"Médio (10 mil tokens)","effortHigh":"Alto (128 mil tokens)","tokenBudget":"Orçamento de token","tokens":"fichas","baseEffortLevel":"Nível de esforço básico","adaptiveHint":"O modo adaptativo é dimensionado a partir desse nível básico com base na contagem de mensagens, no uso da ferramenta e no comprimento do prompt.","requireLogin":"Exigir login","requireLoginDesc":"Quando LIGADO, o painel requer senha. Quando DESLIGADO, acesse sem login.","currentPassword":"Senha atual","enterCurrentPassword":"Digite a senha atual","newPassword":"Nova senha","enterNewPassword":"Digite a nova senha","confirmPassword":"Confirme a nova senha","confirmPasswordPlaceholder":"Confirme a nova senha","passwordsNoMatch":"As senhas não coincidem","passwordUpdated":"Senha atualizada com sucesso","failedUpdatePassword":"Falha ao atualizar a senha","errorOccurred":"Ocorreu um erro","updatePassword":"Atualizar senha","setPassword":"Definir senha","apiEndpointProtection":"Proteção de endpoint de API","requireAuthModels":"Exigir chave de API para /models","requireAuthModelsDesc":"Quando ativado, o endpoint /v1/models retorna 404 para solicitações não autenticadas. Impede a descoberta de modelos por usuários não autorizados.","blockedProviders":"Provedores bloqueados","blockedProvidersDesc":"Oculte provedores específicos da resposta /v1/models. Os provedores bloqueados não aparecerão nas listagens de modelos.","providersBlocked":"{count} provedor(es) bloqueado(s) em /models","blockProviderTitle":"Bloquear {provider}","unblockProviderTitle":"Desbloquear {provider}","cliFingerprint":"CLI Fingerprint Matching","cliFingerprintDesc":"Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.","cliFingerprintEnabled":"{count} provider(s) with CLI fingerprint active","enableFingerprintTitle":"Enable fingerprint for {provider}","disableFingerprintTitle":"Disable fingerprint for {provider}","routingStrategy":"Estratégia de Roteamento","routingAdvancedGuideTitle":"Orientação avançada de roteamento","routingAdvancedGuideHint1":"Use Fill First para prioridade previsível, Round Robin para justiça e P2C para resiliência de latência.","routingAdvancedGuideHint2":"Se os fornecedores variarem em qualidade/custo, comece com Opção de custo para trabalho em segundo plano e Menos usado para desgaste equilibrado.","fillFirst":"Preencha primeiro","fillFirstDesc":"Use contas em ordem de prioridade","roundRobin":"Rodada Robin","roundRobinDesc":"Percorrer todas as contas","p2c":"P2C","p2cDesc":"Escolha 2 aleatoriamente, use o mais saudável","random":"Aleatório","randomDesc":"Conta aleatória a cada solicitação","leastUsed":"Menos usado","leastUsedDesc":"Escolha a conta usada menos recentemente","costOpt":"Opção de custo","costOptDesc":"Prefira a conta mais barata disponível","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Limite pegajoso","stickyLimitDesc":"Chamadas por conta antes de mudar","modelAliases":"Aliases de modelo","modelAliasesTitle":"Aliases de Modelo","modelAliasesDesc":"Padrões curinga para remapear nomes de modelos • Use * e ?","addCustomAlias":"Adicionar Alias Personalizado","deprecatedModelId":"ID do modelo depreciado","newModelId":"Novo ID do modelo","customAliases":"Aliases Personalizados","builtInAliases":"Aliases Integrados","backgroundDegradationTitle":"Degradação de Tarefas em Background","backgroundDegradationDesc":"Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos","enableDegradation":"Ativar Degradação em Background","enableDegradationHint":"Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos","tasksDetected":"Tarefas detectadas","degradationMap":"Mapa de Degradação de Modelos","premiumModel":"Modelo premium","cheapModel":"Modelo barato","detectionPatterns":"Padrões de Deteção","newPattern":"ex: \\"gerar um título\\"","aliasPatternPlaceholder":"claude-soneto-*","aliasTargetPlaceholder":"claude-soneto-4-20250514","pattern":"Padrão","targetModel":"Modelo alvo","add":"+ Adicionar","session":"Sessão","sessionDetailsAria":"Detalhes da sessão","status":"Estado","authenticated":"Autenticado","guest":"Convidado","loginTime":"Hora de login","sessionAge":"Idade da sessão","browser":"Navegador","clearLocalData":"Limpar dados locais","logout":"Sair","clearLocalDataConfirm":"Limpar todos os dados locais? Isso redefinirá suas preferências.","unknown":"Desconhecido","systemActor":"sistema","ipAccessControl":"Controle de acesso IP","ipAccessControlDesc":"Bloquear ou permitir endereços IP específicos","ipModeDisabled":"Desativado","ipModeBlacklist":"Lista negra","ipModeWhitelist":"Lista de permissões","ipModeWhitelistPriority":"Prioridade WL","addIpAddress":"Adicionar endereço IP","ipAddressPlaceholder":"192.168.1.0/24 ou 10.0.*.*","block":"+ Bloquear","allow":"+ Permitir","blocked":"Bloqueado ({count})","allowed":"Permitido ({count})","temporaryBans":"Banimentos temporários ({count})","minLeft":"{min}m restantes","auditLog":"Registro de auditoria","searchAuditLogs":"Pesquisar registros de auditoria...","failedLoadAuditLog":"Falha ao carregar o log de auditoria","noAuditEvents":"Nenhum evento de auditoria encontrado","action":"Ação","actor":"Ator","details":"Detalhes","time":"Hora","fallbackChainsTitle":"Cadeias substitutas","fallbackChainsDesc":"Definir ordem de fallback do provedor por modelo","addChain":"+ Adicionar corrente","modelName":"Nome do modelo","modelNamePlaceholder":"claude-soneto-4-20250514","providersCommaSeparated":"Provedores (separados por vírgula, em ordem de prioridade)","providersCommaSeparatedPlaceholder":"antrópico, openai, gêmeos","createChain":"Criar cadeia","noFallbackChains":"Sem cadeias de fallback","noFallbackChainsDesc":"Crie uma cadeia para definir a ordem de fallback do provedor para um modelo.","loadingFallbackChains":"Carregando cadeias de fallback...","deleteChainConfirm":"Excluir cadeia substituta para \\"{model}\\"?","chainCreated":"Cadeia criada para {model}","chainDeleted":"Cadeia excluída para {model}","failedCreateChain":"Falha ao criar cadeia","failedDeleteChain":"Falha ao excluir a cadeia","deleteChain":"Excluir cadeia","fillModelAndProviders":"Preencha o nome do modelo e os fornecedores","addAtLeastOneProvider":"Adicione pelo menos um provedor","comboDefaultsTitle":"Padrões de combinação","comboDefaultsGuideTitle":"Como ajustar os padrões de combinação","comboDefaultsGuideHint1":"Mantenha as tentativas baixas em fluxos de baixa latência; aumente o tempo limite apenas para tarefas de geração longa.","comboDefaultsGuideHint2":"Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais.","globalComboConfig":"Configuração de combinação global","defaultStrategy":"Estratégia padrão","defaultStrategyDesc":"Aplicado a novos combos sem estratégia explícita","comboStrategyAria":"Estratégia combinada","priority":"Prioridade","weighted":"Ponderado","maxRetriesLabel":"Máximo de tentativas","retryDelayLabel":"Atraso de nova tentativa (ms)","timeoutLabel":"Tempo limite (ms)","healthCheck":"Verificação de saúde","healthCheckDesc":"Verifique previamente a disponibilidade do provedor","trackMetrics":"Rastrear métricas","trackMetricsDesc":"Registrar métricas de solicitação por combinação","providerOverrides":"Substituições de provedor","providerOverridesDesc":"Substitua o tempo limite e novas tentativas por provedor. As configurações do provedor substituem os padrões globais.","providerMaxRetriesAria":"{provider} máximo de novas tentativas","providerTimeoutAria":"{provider} tempo limite ms","removeProviderOverrideAria":"Remover substituição de {provider}","newProviderNamePlaceholder":"por exemplo google, abraai...","newProviderNameAria":"Novo nome do provedor","retries":"novas tentativas","ms":"senhora","saveComboDefaults":"Salvar padrões de combinação","maxNestingDepth":"Profundidade máxima de aninhamento","concurrencyPerModel":"Simultaneidade/Modelo","queueTimeout":"Tempo limite da fila (ms)","providerProfiles":"Perfis de Provedores","providerProfilesDesc":"Configurações de resiliência separadas para provedores OAuth (baseado em sessão) e chave de API (medida). Os provedores OAuth têm limites mais rígidos devido aos limites de taxas mais baixos.","oauthProviders":"Provedores OAuth","apiKeyProviders":"Provedores de chaves de API","transientCooldown":"Recarga transitória","rateLimitCooldown":"Recarga do Limite de Taxa","maxBackoffLevel":"Nível máximo de espera","cbThreshold":"Limite CB","cbResetTime":"Tempo de reinicialização do CB","rateLimiting":"Limitação de taxa","rateLimitingDesc":"Os provedores de chaves de API são automaticamente limitados por taxas com padrões seguros. Os limites são aprendidos nos cabeçalhos de resposta e se adaptam ao longo do tempo.","defaultSafetyNet":"Rede de segurança padrão","rpm":"RPM","minGap":"Intervalo mínimo","maxConcurrent":"Máximo simultâneo","activeLimiters":"Limitadores Ativos","noActiveLimiters":"Ainda não há limitadores de taxa ativos.","reservoir":"Reservatório","running":"Correndo","queued":"Na fila","circuitBreakers":"Disjuntores","breakerStateClosed":"Fechado","breakerStateOpen":"Abrir","breakerStateHalfOpen":"Meio aberto","tripped":"{count} tropeçou","healthy":"{count} íntegro","resetAll":"Redefinir tudo","noCircuitBreakers":"Nenhum disjuntor ativo ainda. Eles são criados automaticamente quando as solicitações fluem pelo pipeline combinado.","failures":"{count} falha(s)","policiesLocked":"Políticas e identificadores bloqueados","allOperational":"Todos os sistemas operacionais – sem bloqueios ou disjuntores desarmados","loadingPolicies":"Carregando políticas...","lockedIdentifiers":"Identificadores bloqueados","unlockedIdentifier":"Desbloqueado: {identifier}","sinceDate":"desde {date}","forceUnlock":"Forçar desbloqueio","unlocking":"Desbloqueando...","failedUnlock":"Falha ao desbloquear","failedLoadWithStatus":"Falha ao carregar: {status}","failedLoadResilience":"Falha ao carregar o status de resiliência","saveFailed":"Falha ao salvar","resetFailed":"Falha na redefinição","loadingResilience":"Carregando status de resiliência...","retry":"Tentar novamente","systemStorage":"Sistema e armazenamento","allDataLocal":"Todos os dados armazenados localmente em sua máquina","databasePath":"Caminho do banco de dados","exportDatabase":"Exportar banco de dados","exportAll":"Exportar tudo (.tar.gz)","importDatabase":"Importar banco de dados","confirmDbImport":"Confirmar importação do banco de dados","confirmDbImportDesc":"Isso substituirá todos os dados atuais pelo conteúdo de {file}. Um backup será criado automaticamente antes da importação.","yesImport":"Sim, importar","lastBackup":"Último backup","noBackupYet":"Ainda não há backup","backupNow":"Faça backup agora","backupRestore":"Backup e restauração","viewBackups":"Ver backups","hide":"Esconder","backupRetentionDesc":"Os instantâneos do banco de dados são criados automaticamente antes da restauração e a cada 15 minutos quando os dados são alterados. Retenção: 24 horas + 30 backups diários com rotação inteligente.","loadingBackups":"Carregando backups...","noBackupsYet":"Nenhum backup disponível ainda. Os backups serão criados automaticamente quando os dados forem alterados.","backupsAvailable":"{count} backup(s) disponíveis","refresh":"Atualizar","confirm":"Confirmar?","yes":"Sim","no":"Não","restore":"Restaurar","invalidFileType":"Tipo de arquivo inválido. Somente arquivos .sqlite são aceitos.","exportFailed":"Falha na exportação","exportFailedWithError":"Falha na exportação: {error}","fullExportFailedWithError":"Falha na exportação completa: {error}","backupCreated":"Backup criado: {file}","restoreSuccess":"Restaurado! {connections} conexões, {nodes} nós, {combos} combos, {apiKeys} chaves de API.","importSuccess":"Banco de dados importado! {connections} conexões, {nodes} nós, {combos} combos, {apiKeys} chaves de API.","justNow":"agora mesmo","minutesAgo":"{count}m atrás","hoursAgo":"{count}h atrás","daysAgo":"{count}d atrás","backupReasonManual":"manual","backupReasonPreRestore":"pré-restauração","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"Nenhuma alteração desde o último backup","backupFailed":"Falha no backup","restoreFailed":"Falha na restauração","importFailed":"Falha na importação","errorDuringRestore":"Ocorreu um erro durante a restauração","errorDuringImport":"Ocorreu um erro durante a importação","modelPricing":"Preço do modelo","modelPricingDesc":"Configurar taxas de custo por modelo • Todas as taxas em tokens de US$/1 milhão","providers":"Provedores","registry":"Registro","priced":"Preço","searchProvidersModels":"Pesquise fornecedores ou modelos...","showAll":"Mostrar tudo","noProvidersMatch":"Nenhum provedor corresponde à sua pesquisa.","howPricingWorks":"Como funciona o preço","cacheWrite":"Gravação em cache","unsaved":"não salvo","resetDefaults":"Redefinir padrões","saveProvider":"Salvar provedor","model":"Modelo","models":"modelos","moreProviders":"{count} mais provedores","withPricing":"com preços configurados","policiesCircuitBreakers":"Políticas e disjuntores","activeIssuesDetected":"Problemas ativos detectados","off":"Desligado","resetPricingConfirm":"Redefinir todos os preços de {provider} para os padrões?","pricingDescInput":"Entrada: tokens enviados ao modelo","pricingDescOutput":"Saída: tokens gerados","pricingDescCached":"Armazenado em cache: entrada reutilizada (~50% da taxa de entrada)","pricingDescReasoning":"Raciocínio: tokens de pensamento (volta para Saída)","pricingDescCacheWrite":"Cache Write: criando entradas de cache (volta para Input)","pricingDescFormula":"Custo = (entrada × taxa_de_entrada) + (saída × taxa_de_saída) + (em cache × taxa_de_cache) por milhão de tokens.","pricingSettingsTitle":"Configurações de preços","totalModels":"Modelos totais","active":"Ativo","costCalculation":"Cálculo de custos","costCalculationDesc":"Os custos são calculados com base no uso do token e nas taxas de preços configuradas para cada modelo.","pricingFormat":"Formato de preços","pricingFormatDesc":"Todas as taxas são em tokens de US$/1 milhão (dólares por milhão de tokens).","tokenTypes":"Tipos de token","inputTokenDesc":"Tokens de prompt padrão","outputTokenDesc":"Tokens de conclusão/resposta","cachedTokenDesc":"Tokens de entrada armazenados em cache (normalmente 50% da taxa de entrada)","reasoningTokenDesc":"Tokens especiais de raciocínio/pensamento (substituição para taxa de produção)","cacheCreationTokenDesc":"Tokens usados para criar entradas de cache (fallback para taxa de entrada)","customPricingNote":"Você pode substituir o preço padrão de modelos específicos. As substituições personalizadas têm prioridade sobre os preços detectados automaticamente.","editPricing":"Editar preços","viewFullDetails":"Ver detalhes completos","themeCoral":"Coral"},"translator":{"title":"Tradutor","metaTitle":"Parque do Tradutor | OmniRoute","metaDescription":"Depure, teste e visualize traduções de formatos de API entre provedores","playgroundTitle":"Parque do Tradutor","playground":"Parque infantil","realtime":"Atividade de tradução em tempo real","chatTester":"Testador de bate-papo","testBench":"Bancada de testes","liveMonitor":"Monitoramento ao vivo","modeDescriptionPlayground":"Cole qualquer corpo de solicitação de API e veja como o OmniRoute o traduz entre formatos de provedor (OpenAI ↔ Claude ↔ Gemini ↔ API de respostas)","modeDescriptionChatTester":"Envie solicitações de chat reais por meio do OmniRoute e inspecione todo o percurso: entrada, solicitação traduzida, resposta do provedor e saída traduzida.","modeDescriptionTestBench":"Execute cenários predefinidos e compare a compatibilidade entre provedores e modelos.","modeDescriptionLiveMonitor":"Assista a eventos de tradução em tempo real à medida que as solicitações fluem pelo OmniRoute.","modeDescriptionFallback":"Depure, teste e visualize como o OmniRoute traduz solicitações de API entre provedores.","recentTranslations":"Traduções recentes","noTranslations":"Ainda não há traduções","source":"Fonte","target":"Alvo","time":"Hora","model":"Modelo","status":"Estado","latency":"Latência","totalTranslations":"Total de traduções","successful":"Bem sucedido","errors":"Erros","avgLatency":"Latência média","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Ao vivo – atualização automática","paused":"Pausado","eventsAppearHint":"Os eventos de tradução aparecem aqui conforme as solicitações fluem pelo OmniRoute. Use qualquer um destes métodos para gerar eventos:","chatTesterTab":"Guia Testador de bate-papo","testBenchTab":"Aba Bancada de Teste","externalApiCalls":"Chamadas de API externas","ideCliIntegrations":"Integrações IDE/CLI","inMemoryNote":"Nota: Os eventos são armazenados na memória e redefinidos quando o servidor é reiniciado.","ok":"OK","errorShort":"ERRO","formatConverter":"Conversor de formato","formatConverterDescription":"Cole ou digite um corpo de solicitação JSON. O tradutor detectará automaticamente o formato de origem e o converterá para o formato de destino. Use isto para depurar como o OmniRoute traduz solicitações entre formatos (OpenAI ↔ Claude ↔ Gemini ↔ API de respostas).","input":"Entrada","output":"Saída","auto":"Automático","swapFormats":"Trocar formatos","translateAction":"Traduzir","clear":"Limpar","inputPlaceholder":"Cole o corpo da solicitação aqui ou selecione um modelo abaixo...","exampleTemplates":"Modelos de exemplo","exampleTemplatesHint":"- Clique para carregar","templateLoadHint":"O modelo carrega a solicitação no formato {format}. Altere o formato de origem para carregar em um formato diferente.","compatibilityTester":"Testador de compatibilidade","compatibilityReport":"Relatório de compatibilidade","testBenchDescription":"Execute cenários predefinidos (Simple Chat, Tool Calling, etc.) para verificar a tradução e a compatibilidade do provedor. Selecione um formato de origem e um provedor de destino e execute todos os testes para ver uma porcentagem de compatibilidade. Use isso para descobrir quais recursos funcionam entre os provedores.","targetProvider":"Provedor de destino","runAllTests":"Execute todos os testes","runTest":"Executar teste","reRun":"Executar novamente","running":"Correndo...","passed":"passou","failed":"falhou","passedIconLabel":"✅ Aprovado","chunks":"pedaços","scenarioSimpleChat":"Bate-papo simples","scenarioToolCalling":"Chamada de ferramenta","scenarioMultiTurn":"Multivoltas","scenarioThinking":"Pensando","scenarioSystemPrompt":"Alerta do sistema","scenarioStreaming":"Transmissão","templateNames":{"simple-chat":"Bate-papo simples","tool-calling":"Chamada de ferramenta","multi-turn":"Multivoltas","thinking":"Pensando","system-prompt":"Alerta do sistema","streaming":"Transmissão"},"templateDescriptions":{"simple-chat":"Mensagem de texto básica","tool-calling":"Invocação de função/ferramenta","multi-turn":"Conversa com história","thinking":"Pensamento/raciocínio estendido","system-prompt":"Instruções complexas do sistema","streaming":"Solicitação de streaming SSE"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente útil.","userGreeting":"Olá! Como você está hoje?"},"toolCalling":{"userWeather":"Como está o clima em São Paulo?","toolDescription":"Obtenha o clima atual para um local","cityNameDescription":"Nome da cidade"},"multiTurn":{"system":"Você é um assistente de codificação.","userInitial":"Escreva uma função para classificar um array em Python.","assistantExample":"Aqui está uma função de classificação simples:\\n\\n```píton\\ndef sort_array(arr):\\n retornar classificado (arr)\\n```","userFollowUp":"Agora classifique em ordem decrescente."},"thinking":{"question":"Qual é a soma dos primeiros 100 números primos?"},"systemPrompt":{"systemInstruction":"Você é um engenheiro de software sênior especializado em sistemas distribuídos. Responda às perguntas de forma concisa usando as melhores práticas do setor. Sempre forneça exemplos de código quando relevante. Formate suas respostas usando markdown.","question":"Como faço para implementar um padrão de disjuntor?"},"streaming":{"prompt":"Conte-me uma pequena história sobre um robô aprendendo a pintar."}},"openaiCompatibleLabel":"Compatível com OpenAI","anthropicCompatibleLabel":"Compatível Antrópico","noTemplateForFormat":"Nenhum modelo para este formato","translationFailed":"Falha na tradução: {error}","pipelineDebugger":"Depurador de pipeline","translationPipeline":"Pipeline de Tradução","pipelineVisualization":"Visualização de pipeline","pipelineVisualizationHint":"Envie uma mensagem para ver como sua solicitação flui através de detecção → tradução → chamada do provedor.","chatTesterDescription":"Envie mensagens em um formato de cliente específico e inspecione cada etapa do pipeline de tradução.","chatTesterFlow":"Solicitação do cliente → Detecção de formato → OpenAI Intermediário → Formato do provedor → Resposta","clickStepToInspect":"Clique em qualquer etapa para inspecionar os dados nessa fase.","clientFormat":"Formato do cliente","provider":"Provedor","modelPlaceholder":"Selecione ou digite um nome de modelo...","sendMessageToSeePipeline":"Envie uma mensagem para ver o pipeline de tradução","chatMessageHintPrefix":"Sua mensagem será formatada como um","chatMessageHintSuffix":"solicitação, traduzida por meio do pipeline e enviada ao provedor selecionado.","youWithFormat":"Você ({format})","assistant":"Assistente","typeMessage":"Digite uma mensagem...","send":"Enviar","clientRequest":"Solicitação do cliente","clientRequestDescription":"O corpo da solicitação que seu cliente enviaria","formatDetected":"Formato detectado","formatDetectedDescription":"OmniRoute detecta automaticamente o formato da API na estrutura da solicitação","openaiIntermediate":"OpenAI intermediário","openaiIntermediateDescription":"Todos os formatos são primeiro normalizados para o formato OpenAI (a ponte universal)","providerFormat":"Formato do provedor","providerFormatDescription":"O formato OpenAI é traduzido para o formato nativo do provedor","providerResponse":"Resposta do provedor","providerResponseRawDescription":"A resposta bruta da API do provedor","providerResponseSseDescription":"O fluxo SSE bruto da API do provedor","unexpectedError":"Ocorreu um erro inesperado","error":"Erro","errorMessage":"Erro: {message}","requestFailed":"Falha na solicitação","noTextExtracted":"(Nenhum texto extraído)","liveMonitorDescriptionPrefix":"Mostra eventos de tradução à medida que as chamadas de API fluem pelo OmniRoute. Os eventos vêm do buffer na memória (redefinições na reinicialização). Usar","liveMonitorDescriptionSuffix":"ou chamadas de API externas para gerar eventos."},"usage":{"title":"Uso","loggerTab":"Registrador","proxyTab":"Procurador","budgetManagement":"Gestão Orçamentária","budgetSaved":"Limites de orçamento salvos","budgetSaveFailed":"Falha ao salvar o orçamento","loadingBudgetData":"Carregando dados do orçamento...","noApiKeysTitle":"Sem chaves de API","noApiKeysDescription":"Adicione chaves de API primeiro para configurar limites de orçamento.","apiKey":"Chave de API","todaysSpend":"Gasto de hoje","thisMonth":"Este mês","setLimits":"Definir limites","dailyLimitUsd":"Limite Diário (USD)","monthlyLimitUsd":"Limite Mensal (USD)","warningThresholdPercent":"Limite de aviso (%)","dailyLimitPlaceholder":"por exemplo 5h00","monthlyLimitPlaceholder":"por exemplo 50,00","warningThresholdPlaceholder":"80","saveLimits":"Salvar Limites","budgetOk":"Orçamento OK — {remaining} restantes","budgetExceeded":"Orçamento excedido — solicitações podem ser bloqueadas","totalRequests":"Total de solicitações","noDataYet":"Ainda não há dados","latency":"Latência","latencyP50":"p50","latencyP95":"pág.95","latencyP99":"p99","promptCache":"Cache de prompt","systemHealth":"Saúde do sistema","entries":"Entradas","activeCount":"{count} ativo","openCircuitBreakersDetected":"Disjuntores abertos detectados","hitRate":"Taxa de acerto","hitsMisses":"Acertos / Erros","circuitBreakers":"Disjuntores","lockedIPs":"IPs bloqueados","lockoutsAutoRefreshHint":"Bloqueios de limite de taxa por modelo • Atualização automática de 10s","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} restantes","howItWorks":"Como funciona","howItWorksSubtitle":"Saiba como as avaliações validam suas respostas do LLM","define":"Definir","defineStepDescription":"Crie casos de teste com prompts de entrada e critérios de saída esperados usando estratégias como contém, regex ou correspondência exata.","run":"Corre","runStepDescription":"Execute casos de teste em seus endpoints LLM por meio do OmniRoute. Cada caso é enviado como uma solicitação de API real.","evaluate":"Avaliar","evaluateStepDescription":"As respostas são comparadas com os critérios esperados. Veja aprovação/reprovação para cada caso com métricas de latência e feedback detalhado.","evalSuites":"Suítes de avaliação","evalSuitesHint":"Clique em um conjunto para visualizar casos de teste e execute para avaliar seus endpoints LLM","evalsLoading":"Carregando suítes de avaliação...","noEvalSuitesFound":"Nenhuma suíte Eval encontrada","noEvalSuitesDescription":"Os conjuntos de avaliação podem ser definidos por meio da API ou em código. Eles testam os resultados do modelo em relação aos resultados esperados usando estratégias como contém, regex, correspondência exata e funções personalizadas.","columnCase":"Caso","columnStatus":"Estado","columnLatency":"Latência","columnDetails":"Detalhes","columnModel":"Modelo","columnStrategy":"Estratégia","columnExpected":"Esperado","statsSuites":"Suítes","statsTestCases":"Casos de teste","statsModels":"Modelos","statsCoverage":"Cobertura","statsStrategiesCount":"{count} estratégias","evaluationStrategies":"Estratégias de Avaliação","modelsUnderTest":"Modelos em teste","searchSuitesPlaceholder":"Pesquisar suítes...","passSuffix":"passar","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Executar avaliação","runningProgress":"Executando {current}/{total}...","passRate":"taxa de aprovação","summaryBreakdown":"{passed} aprovado · {failed} reprovado · {total} total","passedIconLabel":"✅ Aprovado","failedIconLabel":"❌ Falhou","detailsContains":"Contém: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Esperado: \\"{expected}\\"","noResultsYet":"Ainda não há resultados","testCasesCount":"Casos de teste ({count})","noTestCasesDefined":"Nenhum caso de teste definido","runEvalHint":"Clique em \\"Executar avaliação\\" para executar todos os casos em seu endpoint LLM. Cada teste envia uma solicitação real através do OmniRoute.","notifyNoTestCases":"Nenhum caso de teste definido para este pacote","notifyAllCasesPassed":"Todos os casos {total} foram aprovados ✅","notifySomeCasesFailed":"{passed}/{total} aprovado, {failed} falhou","notifyEvalRunFailed":"Falha na execução da avaliação","notifyEvalTitle":"Avaliação: {name}","modelEvals":"Avaliações de modelos","evalsHeroDescription":"Teste e valide seus endpoints LLM executando conjuntos de avaliação predefinidos. Cada conjunto contém casos de teste que enviam prompts reais por meio do OmniRoute e comparam as respostas com os critérios esperados, ajudando você a detectar regressões, comparar modelos e garantir a qualidade da resposta entre os provedores.","qualityValidation":"Validação de Qualidade","modelComparison":"Comparação de modelos","regressionDetection":"Detecção de regressão","latencyBenchmarks":"Benchmarks de latência","modelLockouts":"Bloqueios de modelo","noLockouts":"Nenhum modelo atualmente bloqueado","activeSessions":"Sessões ativas","noSessions":"Nenhuma sessão ativa","sessionsHint":"As sessões aparecem conforme as solicitações fluem pelo proxy","sessionsTrackedHint":"Rastreado por solicitação de impressão digital • Atualização automática 5s","session":"Sessão","age":"Idade","requests":"Solicitações","connection":"Conexão","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value}m","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Limites do provedor","noProviders":"Nenhum provedor conectado","connectProvidersForQuota":"Conecte-se a provedores com OAuth para rastrear o uso e os limites de cota de API.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(filtrado de {count})","autoRefresh":"Atualização automática","refreshAll":"Atualizar tudo","loadingQuotas":"Carregando...","account":"Conta","modelQuotas":"Cotas de modelo","lastUsed":"Last Refreshed","actions":"Ações","refreshQuota":"Atualizar cota","today":"Hoje","tomorrow":"Amanhã","dayTimeFormat":"{day}, {time}","inDuration":"em {duration}","notApplicable":"N/A","rawPlanWithValue":"Plano bruto: {plan}","noPlanFromProvider":"Nenhum plano do provedor","noQuotaData":"Sem dados de cota","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Não há dados de cota disponíveis","noAccountsForTierFilter":"Nenhuma conta encontrada para filtro de nível","tierAll":"Todos","tierEnterprise":"Empresa","tierTeam":"Equipe","tierBusiness":"Negócios","tierUltra":"Ultra","tierPro":"Pró","tierPlus":"Mais","tierFree":"Grátis","tierUnknown":"Desconhecido"},"modals":{"waitingAuth":"Aguardando autorização","verificationUrl":"URL de verificação","yourCode":"Seu código","remoteAccess":"Acesso remoto:","connectedSuccess":"Conectado com sucesso!","connectionFailed":"Falha na conexão","chooseAuthMethod":"Escolha seu método de autenticação:","awsBuilderId":"ID do construtor AWS","awsIamIdentity":"Centro de identidade AWS IAM","googleAccount":"Conta do Google","githubAccount":"Conta GitHub","importToken":"Token de importação","pasteToken":"Cole o token de atualização do Kiro IDE.","awsRegion":"Região AWS","autoDetecting":"Detecção automática de tokens...","readingFromCache":"Lendo do cache SSO da AWS","readingFromCursor":"Lendo do banco de dados Cursor IDE","initializing":"Inicializando...","pricingConfig":"Configuração de preços","loadingPricing":"Carregando dados de preços...","pricingRatesFormat":"Formato de taxas de preços","noPricingData":"Não há dados de preços disponíveis","noModelsFound":"Nenhum modelo encontrado"},"loggers":{"allProviders":"Todos os provedores","allModels":"Todos os modelos","allAccounts":"Todas as contas","allApiKeys":"Todas as chaves de API","allTypes":"Todos os tipos","allLevels":"Todos os níveis","modelAZ":"Modelo A-Z","modelZA":"Modelo Z-A","loadingLogs":"Carregando registros...","loadingProxyLogs":"Carregando registros de proxy...","noLogEntries":"Nenhuma entrada de registro encontrada","noPayloadData":"Não há dados de carga disponíveis para esta entrada de log.","proxyEvent":"Evento proxy","proxy":"Procurador","level":"Nível","directNative":"Direto (nativo)","combo":"Combinação","inputTokens":"Eu:","outputTokens":"Ó:"},"stats":{"usageOverview":"Visão geral do uso","outputTokens":"Tokens de saída","totalCost":"Custo total","usageByModel":"Uso por modelo","usageByAccount":"Uso por conta","failedToLoad":"Falha ao carregar estatísticas de uso.","tokenHealth":"Saúde do token","totalOAuth":"OAuth total","healthy":"Saudável","warning":"Aviso","errored":"Erro","lastCheck":"Última verificação","noData":"Sem dados","share":"Compartilhar","unableToLoad":"Não foi possível carregar as métricas do sistema","product":"Produto","resources":"Recursos","company":"Empresa"},"auth":{"welcome":"Bem vindo","signIn":"Faça login","enterPassword":"Digite sua senha para continuar","password":"Senha","unifiedProxy":"Proxy de API de IA unificado","unifiedAiApiProxy":"Proxy de API de IA unificado","unifiedAiApiProxyDesc":"Encaminhe solicitações para vários provedores de IA por meio de um único endpoint. Balanceamento de carga, failover e rastreamento de uso integrados.","passwordNotEnabled":"A proteção por senha não está ativada","loading":"Carregando...","invalidPassword":"Senha inválida","errorOccurredRetry":"Ocorreu um erro. Por favor, tente novamente.","configureInstance":"Vamos configurar sua instância do OmniRoute","runOnboardingWizard":"Execute o assistente de integração para configurar sua senha e conectar seu primeiro provedor de IA.","startOnboarding":"Comece a integração","secureYourInstance":"Proteja sua instância","setPasswordDescription":"Defina uma senha para proteger seu painel e proteger seus endpoints de API contra acesso não autorizado.","configurePassword":"Configurar senha","continue":"Continuar","windowWillClose":"Esta janela fechará automaticamente...","closeTabNow":"Você pode fechar esta guia agora.","copyUrlManual":"Copie o URL da barra de endereço e cole-o no aplicativo.","accessDeniedDescription":"Você não tem permissão para acessar este recurso. Verifique sua chave API ou entre em contato com o administrador.","goToDashboard":"Vá para o painel","featureMultiProviderTitle":"Multi-Provedor","featureMultiProviderDesc":"OpenAI, Antrópico, Google e muito mais","featureLoadBalancingTitle":"Balanceamento de carga","featureLoadBalancingDesc":"Distribua solicitações de forma inteligente","featureUsageTrackingTitle":"Rastreamento de uso","featureUsageTrackingDesc":"Monitore custos e tokens","resetPassword":"Redefinir senha","resetDescription":"Escolha um método para recuperar o acesso ao seu painel","stopServer":"Pare o servidor OmniRoute","processing":"Processando...","pleaseWait":"Aguarde enquanto concluímos a autorização.","authSuccess":"Autorização bem-sucedida!","copyUrl":"Copie este URL","accessDenied":"Acesso negado","methodCliTitle":"Método 1: redefinição CLI","methodCliDescription":"Execute o seguinte comando no servidor onde o OmniRoute está sendo executado:","methodCliHint":"Isso solicitará que você defina uma nova senha. O servidor deve ser parado primeiro.","methodManualTitle":"Método 2: reinicialização manual","methodManualDescription":"Exclua a senha do banco de dados e defina uma nova na inicialização:","setPasswordInYour":"Defina uma nova senha em seu","fileLabelSuffix":"arquivo:","newPasswordPlaceholder":"sua_nova_senha","deleteSettingsFile":"Excluir","orRemovePasswordHashField":"ou remova o campo passwordHash","restartServerWithNewPassword":"Reinicie o servidor - ele usará a nova senha","backToLogin":"Voltar ao login","forgotPassword":"Esqueceu a senha?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Autorização","Content-Disposition":"Disposição de conteúdo","waitingForAuthorization":"Waiting for authorization...","waitingForGoogleAuthorization":"Waiting for Google authorization...","waitingForOpenAIAuthorization":"Waiting for OpenAI authorization...","waitingForAntigravityAuthorization":"Waiting for Antigravity authorization...","waitingForQoderAuthorization":"Waiting for Qoder authorization...","exchangingCodeForTokens":"Exchanging code for tokens..."},"landing":{"brandName":"OmniRoute","navigateHome":"Navegue até a casa","toggleMenu":"Alternar menu","featuresLink":"Recursos","docsLink":"Documentos","github":"GitHub","versionLive":"v1.0 agora está ativo","oneEndpoint":"Um ponto final para","allProviders":"Todos os provedores de IA","heroDescription":"Proxy de endpoint de IA com painel da web – uma porta JavaScript do CLIProxyAPI. Funciona perfeitamente com Claude Code, OpenAI Codex, Cline, RooCode e outras ferramentas CLI.","getStarted":"Comece","viewOnGithub":"Ver no GitHub","powerfulFeatures":"Recursos poderosos","featuresSubtitle":"Tudo o que você precisa para gerenciar sua infraestrutura de IA em um só lugar, desenvolvida para escalar.","featureUnifiedEndpointTitle":"Ponto final unificado","featureUnifiedEndpointDesc":"Acesse todos os provedores por meio de um único URL de API padrão.","featureEasySetupTitle":"Configuração fácil","featureEasySetupDesc":"Comece a trabalhar em minutos com o comando npx.","featureModelFallbackTitle":"Modelo substituto","featureModelFallbackDesc":"Alterne automaticamente os provedores em caso de falha ou alta latência.","featureUsageTrackingTitle":"Rastreamento de uso","featureUsageTrackingDesc":"Análise detalhada e monitoramento de custos em todos os modelos.","featureOAuthApiKeysTitle":"Chaves OAuth e API","featureOAuthApiKeysDesc":"Gerencie credenciais com segurança em um cofre.","featureCloudSyncTitle":"Sincronização na nuvem","featureCloudSyncDesc":"Sincronize suas configurações entre dispositivos instantaneamente.","featureCliSupportTitle":"Suporte CLI","featureCliSupportDesc":"Funciona com Claude Code, Codex, Cline, Cursor e muito mais.","featureDashboardTitle":"Painel","featureDashboardDesc":"Painel visual para análise de tráfego em tempo real.","howItWorks":"Como funciona o OmniRoute","howItWorksDescription":"Os dados fluem perfeitamente da sua aplicação através da nossa camada de roteamento inteligente até o melhor fornecedor para o trabalho.","howItWorksStep1Title":"1. CLI e SDKs","howItWorksStep1Description":"Suas solicitações partem de suas ferramentas favoritas ou de nosso SDK unificado. Basta alterar o URL base.","howItWorksStep2Title":"2. Hub OmniRoute","howItWorksStep2Description":"Nosso mecanismo analisa o prompt, verifica a integridade do provedor e encaminha para obter menor latência ou custo.","howItWorksStep3Title":"3. Provedores de IA","howItWorksStep3Description":"A solicitação é atendida por OpenAI, Anthropic, Gemini ou outros instantaneamente.","getStartedIn30Seconds":"Comece em 30 segundos","getStartedDescription":"Instale o OmniRoute, configure seus provedores por meio do painel da web e comece a rotear solicitações de IA.","installOmniRoute":"Instalar OmniRoute","installStepDescription":"Execute o comando npx para iniciar o servidor instantaneamente","openDashboard":"Abra o painel","openDashboardStepDescription":"Configure provedores e chaves de API via interface web","routeRequests":"Solicitações de rota","routeRequestsStepDescription":"Aponte suas ferramentas CLI para {endpoint}","terminal":"terminal","copy":"Copiar","copied":"✓ Copiado","startingOmniRoute":"Iniciando o OmniRoute...","serverRunningOnLabel":"Servidor em execução","dashboardLabel":"Painel","readyToRoute":"Pronto para rota! ✓","configureProvidersNote":"📝 Configure provedores no painel ou use variáveis de ambiente","dataLocation":"Localização dos dados:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Janelas:","product":"Produto","dashboardLink":"Painel","changelog":"Registro de alterações","resources":"Recursos","documentation":"Documentação","npm":"NPM","legal":"Jurídico","mitLicense":"Licença MIT","footerTagline":"O endpoint unificado para geração de IA. Conecte, encaminhe e gerencie seus provedores de IA com facilidade.","copyright":"© {year} OmniRoute. Todos os direitos reservados.","flowToolClaudeCode":"Código Claude","flowToolOpenAICodex":"Códice OpenAI","flowToolCline":"Cline","flowToolCursor":"Cursor","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Antrópico","flowProviderGemini":"Gêmeos","flowProviderGithubCopilot":"Copiloto GitHub","interactiveDiagram":"Diagrama interativo visível na área de trabalho","ctaTitle":"Pronto para simplificar sua infraestrutura de IA?","ctaDescription":"Junte-se aos desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Código aberto e gratuito para começar.","startFree":"Comece grátis","readDocumentation":"Leia a documentação"},"docs":{"title":"Documentação","quickStart":"Início rápido","features":"Recursos","supportedProviders":"Provedores Suportados","supportedProvidersToc":"Provedores","commonUseCases":"Casos de uso comuns","clientCompatibility":"Compatibilidade do cliente","protocolsToc":"Protocols","apiReference":"Referência de API","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","method":"Método","path":"Caminho","notes":"Notas","modelPrefixes":"Prefixos de modelo","prefix":"Prefixo","troubleshooting":"Solução de problemas","supportsChat":"Suporta endpoints de chat e respostas.","oauthAutoRefresh":"Conexão OAuth com atualização automática de token.","fullStreaming":"Suporte completo de streaming para todos os modelos.","docsLabel":"Documentos","docsHeroDescription":"Gateway de IA para LLMs de vários provedores. Um endpoint para OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor e mais de 20 provedores.","openDashboard":"Abra o painel","endpointPage":"Página de ponto final","github":"GitHub","reportIssue":"Reportar problema","onThisPage":"Nesta página","documentationVersion":"Documentação - v{version}","quickStartStep1Title":"1. Instale e execute","quickStartStep1Prefix":"Corre","quickStartStep1Middle":"ou clone do GitHub e execute","quickStartStep2Title":"2. Crie uma chave API","quickStartStep2Text":"Vá para Endpoint -> Chaves Registradas. Gere uma chave por ambiente.","quickStartStep3Title":"3. Conecte provedores","quickStartStep3Text":"Adicione contas de provedor por meio de login OAuth, chave de API ou conexão automática de nível gratuito.","quickStartStep4Title":"4. Defina o URL da base do cliente","quickStartStep4Prefix":"Aponte seu cliente IDE ou API para","quickStartStep4Suffix":"Use o prefixo do provedor, por exemplo","featureRoutingTitle":"Roteamento multiprovedor","featureRoutingText":"Encaminhe solicitações para mais de 30 provedores de IA por meio de um único endpoint compatível com OpenAI. Suporta APIs de chat, respostas, áudio e imagem.","featureCombosTitle":"Combos e Balanceamento","featureCombosText":"Crie combinações de modelos com cadeias de fallback e estratégias de balanceamento: round-robin, prioridade, aleatório, menos usado e com custo otimizado.","featureUsageTitle":"Uso e rastreamento de custos","featureUsageText":"Contagem de tokens em tempo real, cálculo de custos por provedor/modelo e detalhamento de uso por chave de API e conta.","featureAnalyticsTitle":"Painel analítico","featureAnalyticsText":"Análise visual com gráficos de solicitações, tokens, erros, latência, custos e popularidade do modelo ao longo do tempo.","featureHealthTitle":"Monitoramento de Saúde","featureHealthText":"Verificações de integridade em tempo real, status do provedor, estados de disjuntores e detecção automática de limite de taxa com espera exponencial.","featureCliTitle":"Ferramentas CLI","featureCliText":"Gerencie configurações de IDE, exporte/importe backups, descubra perfis de codex e defina configurações no painel.","featureSecurityTitle":"Segurança e Políticas","featureSecurityText":"Autenticação de chave de API, filtragem de IP, proteção contra injeção de prompt, políticas de domínio, gerenciamento de sessão e registro de auditoria.","featureCloudSyncTitle":"Sincronização na nuvem","featureCloudSyncText":"Sincronize sua configuração com Cloudflare Workers para acesso remoto com credenciais criptografadas e failover automático.","providersAcrossConnectionTypes":"{count} provedores em três tipos de conexão.","manageProviders":"Gerenciar provedores","providersCount":"{count} provedores","providerTypeFree":"Nível gratuito","providerTypeOAuth":"OAuth","providerTypeApiKey":"Chave de API","useCaseSingleEndpointTitle":"Endpoint único para muitos provedores","useCaseSingleEndpointText":"Aponte os clientes para uma URL base e roteie por prefixo de modelo (por exemplo: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Fallback e troca de modelo com combos","useCaseFallbackText":"Crie modelos combinados no Dashboard e mantenha a configuração do cliente estável enquanto os provedores alternam internamente.","useCaseUsageVisibilityTitle":"Visibilidade de uso, custo e depuração","useCaseUsageVisibilityText":"Rastreie tokens e custos por provedor, conta e chave de API nas guias Uso e Análise.","clientCherryStudioTitle":"Estúdio Cereja","baseUrlLabel":"URL base","chatEndpointLabel":"Ponto de extremidade do bate-papo","modelRecommendationLabel":"Recomendação de modelo: prefixo explícito","clientCodexTitle":"Modelos de copiloto Codex/GitHub","clientCodexBullet1":"Use IDs de modelo com","clientCodexBullet2":"Os modelos da família Codex roteiam automaticamente para","clientCodexBullet3":"Os modelos não-Codex continuam","clientCursorTitle":"Cursor IDE","clientCursorBullet1":"Usar","clientCursorBullet1Suffix":"prefixo para modelos Cursor.","clientCursorBullet2":"Conexão OAuth - faça login na página Provedores.","clientClaudeTitle":"Código Claude / Antigravidade","clientClaudeBullet1Prefix":"Usar","clientClaudeBullet1Middle":"(Cláudio) ou","clientClaudeBullet1Suffix":"Prefixo (antigravidade).","protocolsTitle":"Protocols: MCP & A2A","protocolsDescription":"OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.","protocolMcpStep1":"Start MCP transport with `omniroute --mcp`.","protocolMcpStep2":"Point your MCP client to stdio transport.","protocolMcpStep3":"Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.","protocolA2aStep1":"Read `/.well-known/agent.json` for agent discovery.","protocolA2aStep2":"Send `message/send` or `message/stream` requests to `POST /a2a`.","protocolA2aStep3":"Manage task lifecycle with `tasks/get` and `tasks/cancel`.","protocolTroubleshootingTitle":"Protocol Troubleshooting","protocolTroubleshooting1":"If MCP status is offline, verify the stdio process is running and heartbeat file is updating.","protocolTroubleshooting2":"If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.","protocolTroubleshooting3":"Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.","endpointChatNote":"Endpoint de chat compatível com OpenAI (padrão).","endpointResponsesNote":"Endpoint da API de respostas (Codex, série o).","endpointModelsNote":"Catálogo de modelos para todos os provedores conectados.","endpointAudioNote":"Transcrição de áudio (Deepgram, AssemblyAI).","endpointSpeechNote":"Geração de texto para fala (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Geração de embeddings de texto (OpenAI, Cohere, Voyage).","endpointImagesNote":"Geração de imagens (NanoBanana).","endpointRewriteChatNote":"Auxiliar de reescrita para clientes sem /v1.","endpointRewriteResponsesNote":"Reescreva o auxiliar para respostas sem /v1.","endpointRewriteModelsNote":"Reescreva o auxiliar para descoberta de modelo sem /v1.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","modelPrefixesDescriptionStart":"Use o prefixo do provedor antes do nome do modelo para rotear para um provedor específico. Exemplo:","modelPrefixesDescriptionEnd":"rotas para GitHub Copilot.","provider":"Provedor","type":"Tipo","troubleshootingModelRouting":"Se o cliente falhar com o roteamento do modelo, use provedor/modelo explícito (por exemplo: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Se você receber erros de modelo ambíguos, escolha um prefixo de provedor em vez de um ID de modelo simples.","troubleshootingCodexFamily":"Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; roteador seleciona /respostas automaticamente.","troubleshootingTestConnection":"Use Painel > Provedores > Testar conexão antes de testar em IDEs ou clientes externos.","troubleshootingCircuitBreaker":"Se um provedor mostrar o disjuntor aberto, aguarde o resfriamento ou verifique a página de integridade para obter detalhes.","troubleshootingOAuth":"Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor."},"legal":{"privacyPolicy":"Política de Privacidade","termsOfService":"Termos de Serviço","providerConfigurations":"Configurações do provedor","apiKeys":"Chaves de API","usageLogs":"Registros de uso","applicationSettings":"Configurações do aplicativo","viewExportAnalytics":"Visualize e exporte análises de uso","clearHistory":"Limpe o histórico de uso a qualquer momento","configureRetention":"Configurar políticas de retenção de log","backupRestore":"Faça backup e restaure seu banco de dados","privacyMetadataTitle":"Política de Privacidade | OmniRoute","privacyMetadataDescription":"Política de privacidade para o roteador proxy OmniRoute AI API.","termsMetadataTitle":"Termos de Serviço | OmniRoute","termsMetadataDescription":"Termos de serviço do roteador proxy OmniRoute AI API.","backToHome":"De volta para casa","lastUpdated":"Última atualização: {date}","policyLastUpdatedDate":"13 de fevereiro de 2026","listSeparator":"-","questionsVisit":"Perguntas? Visite nosso","githubRepository":"Repositório GitHub","privacySection1Title":"1. Arquitetura local primeiro","privacySection1Text":"OmniRoute foi projetado como um aplicativo local. Todo o processamento e armazenamento de dados ocorre inteiramente em sua máquina. Não existe um servidor centralizado que coleta suas informações.","privacySection2Title":"2. Dados que armazenamos","privacyDataStoredIn":"Os seguintes dados são armazenados localmente em","privacyDataProviderConfigurationsDesc":"URLs de conexão, tipos de provedores e configurações de prioridade","privacyDataApiKeysDesc":"criptografado e armazenado localmente para autenticação com provedores de IA","privacyDataUsageLogsDesc":"contagens de solicitações, uso de token, nomes de modelos, carimbos de data/hora e tempos de resposta","privacyDataApplicationSettingsDesc":"preferências de tema, estratégia de roteamento e configurações combinadas","privacySection3Title":"3. Sem telemetria","privacySection3Text":"OmniRoute não coleta telemetria, análises ou relatórios de falhas. Nenhum dado é enviado para nós ou para terceiros. Seus padrões de uso, chamadas de API e configurações permanecem totalmente privados.","privacySection4Title":"4. Provedores terceirizados de IA","privacySection4Text":"Ao fazer chamadas de API por meio do OmniRoute, suas solicitações são encaminhadas para os provedores de IA que você configurou (por exemplo: OpenAI, Anthropic, Google). Esses provedores têm suas próprias políticas de privacidade que regem a forma como lidam com seus dados. Por favor, revise:","privacyOpenAiPolicy":"Política de privacidade da OpenAI","privacyAnthropicPolicy":"Política de Privacidade Antrópica","privacyGooglePolicy":"Política de privacidade do Google","privacySection5Title":"5. Sincronização na nuvem (opcional)","privacySection5Text":"Se você ativar o recurso opcional de sincronização em nuvem, as configurações do provedor e as chaves de API poderão ser transmitidas para um endpoint de nuvem configurado. Este recurso está desabilitado por padrão e requer aceitação explícita.","privacySection6Title":"6. Registro","privacyLoggingIntro":"Os logs de solicitação podem ser configurados nas configurações do painel. Você pode:","privacySection7Title":"7. Seus direitos","privacySection7TextStart":"Como todos os dados são armazenados localmente, você tem controle total. Você pode excluir seus dados a qualquer momento, removendo o","privacySection7TextEnd":"diretório ou usando os recursos de backup e restauração do banco de dados no painel.","termsSection1Title":"1. Visão geral","termsSection1Text":"OmniRoute é um roteador proxy API AI local que opera inteiramente em sua máquina. Ele roteia solicitações para vários provedores de IA com balanceamento de carga, failover e rastreamento de uso.","termsSection2Title":"2. Responsabilidades do usuário","termsResponsibilityApiKeys":"Você é o único responsável por gerenciar suas próprias chaves de API e credenciais para provedores de IA terceirizados (OpenAI, Anthropic, Google, etc.).","termsResponsibilityCompliance":"Você deve cumprir os termos de serviço de cada provedor de IA cuja API você acessa por meio do OmniRoute.","termsResponsibilitySecurity":"Você é responsável pela segurança da instalação local do OmniRoute, incluindo a definição de uma senha e a restrição do acesso à rede.","termsSection3Title":"3. Como funciona","termsSection3Text":"OmniRoute atua como um proxy intermediário. As chamadas de API enviadas ao OmniRoute são traduzidas e encaminhadas para seus provedores de IA configurados. OmniRoute não modifica o conteúdo de suas solicitações ou respostas além da tradução de protocolo necessária.","termsSection4Title":"4. Tratamento de dados","termsDataStoredLocally":"Todos os dados são armazenados localmente na sua máquina em um banco de dados SQLite.","termsNoTransmission":"O OmniRoute não transmite nenhum dado para servidores externos, a menos que você habilite explicitamente os recursos de sincronização na nuvem.","termsDataLocationText":"Logs de uso, chaves de API e configuração são armazenados em","termsSection5Title":"5. Isenção de responsabilidade","termsSection5Text":"OmniRoute é fornecido \\"como está\\" sem qualquer tipo de garantia. Não somos responsáveis ​​por quaisquer custos incorridos através do uso da API, interrupções de serviço ou perda de dados. Sempre mantenha backups de sua configuração.","termsSection6Title":"6. Código aberto","termsSection6Text":"OmniRoute é um software de código aberto. Você é livre para inspecioná-lo, modificá-lo e distribuí-lo sob os termos de sua licença."},"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"},"templateNames":{"simple-chat":"Simple Chat","streaming":"Streaming","system-prompt":"System Prompt","thinking":"Thinking","tool-calling":"Tool Calling","multi-turn":"Multi-turn"},"templateDescriptions":{"simple-chat":"Basic chat template","streaming":"Streaming template","system-prompt":"System prompt template","thinking":"Thinking template","tool-calling":"Tool calling template","multi-turn":"Multi-turn template"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente de IA útil.","userGreeting":"Olá! Como posso ajudá-lo hoje?"},"streaming":{"prompt":"Escreva uma história sobre"},"systemPrompt":{"question":"Qual é o sentido da vida?","systemInstruction":"Forneça uma resposta ponderada e filosófica."},"thinking":{"question":"Explique a computação quântica"},"toolCalling":{"cityNameDescription":"O nome da cidade para obter o clima","toolDescription":"Obtenha o clima atual para um local","userWeather":"Qual é o clima em Tóquio?"},"multiTurn":{"system":"Você é um assistente útil.","assistantExample":"Ficarei feliz em ajudá-lo com isso.","userInitial":"preciso de ajuda com","userFollowUp":"Você pode explicar isso?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","memoryEntriesSub":"In-memory LRU","dbEntries":"DB Entries","dbEntriesSub":"Persisted (SQLite)","cacheHits":"Cache Hits","cacheHitsSub":"of {total} total","tokensSaved":"Tokens Saved","tokensSavedSub":"Estimated from hits","hitRate":"Hit Rate","performance":"Cache Performance","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behavior":"Cache Behavior","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","idempotency":"Idempotency Layer","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","promptCache":"Prompt Cache (Provider-Side)","cachedRequests":"Cached Requests","cacheHitRate":"Cache Hit Rate","cachedTokens":"Cached Tokens","cacheCreationTokens":"Cache Creation Tokens","cacheMetrics":"Prompt Cache Metrics","withCacheControl":"With Cache Control","cachedTokensRead":"Cached Tokens (Read)","cacheCreationWrite":"Cache Creation (Write)","cacheReuseRatio":"Cache Reuse Ratio","cacheReuseRatioDesc":"Cached tokens / Total input tokens","estCostSaved":"Est. Cost Saved","requestsShort":"reqs","inputShort":"In","cachedShort":"Cached","writeShort":"Write","resetting":"Resetting...","resetMetrics":"Reset Metrics","byProvider":"Breakdown by Provider","provider":"Provider","requests":"Requests","inputTokens":"Input Tokens","cachedTokensCol":"Cached","cacheCreation":"Creation","trend24h":"Cache Trend (24h)","cached":"Cached","overview":"Overview","entries":"Entries","searchEntries":"Search entries...","search":"Search","loading":"Loading...","noEntries":"No cache entries found","signature":"Signature","model":"Model","created":"Created","expires":"Expires","actions":"Actions"}}')}];
1
+ module.exports=[672983,(a,b,c)=>{b.exports=JSON.parse('{"common":{"save":"Salvar","cancel":"Cancelar","delete":"Excluir","loading":"Carregando...","error":"Ocorreu um erro","success":"Sucesso","confirm":"Você tem certeza?","refresh":"Atualizar","close":"Fechar","add":"Adicionar","edit":"Editar","search":"Pesquisar","back":"Voltar","next":"Próximo","submit":"Enviar","reset":"Redefinir","copy":"Copiar","copied":"Copiado!","enabled":"Habilitado","disabled":"Desativado","active":"Ativo","inactive":"Inativo","noData":"Não há dados disponíveis","configure":"Configurar","manage":"Gerenciar","name":"Nome","actions":"Ações","status":"Estado","type":"Tipo","model":"Modelo","models":"modelos","provider":"Provedor","account":"Conta","time":"Hora","details":"Detalhes","created":"Criado","lastUsed":"Last Refreshed","loadMore":"Carregar mais","noResults":"Nenhum resultado encontrado","reloadPage":"Recarregar página","connected":"Conectado","disconnected":"Desconectado","notConfigured":"Não configurado","testConnection":"Conexão de teste","enable":"Habilitar","disable":"Desativar","columns":"Colunas","newest":"Mais recente","oldest":"Mais antigo","all":"Todos","none":"Nenhum","yes":"Sim","no":"Não","warning":"Aviso","note":"Nota","free":"Grátis","skipToContent":"Pular para o conteúdo","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"accept","accountId":"accountId","alias":"alias","apiKeyId":"apiKeyId","apiKeyName":"apiKeyName","apiKeySecret":"apiKeySecret","authorization":"authorization","content-type":"content-type","content-length":"content-length","cookie":"cookie","file":"file","host":"host","id":"id","import":"import","limit":"limit","offset":"offset","open":"open","origin":"origin","promptTokens":"promptTokens","completionTokens":"completionTokens","totalTokens":"totalTokens","rawModel":"rawModel","scope":"scope","skill":"skill","sortBy":"sortBy","sortOrder":"sortOrder","tab":"tab","text":"text","textarea":"textarea","tool":"tool","toolId":"toolId","web":"web","whereUsed":"whereUsed","whitelist":"whitelist","blacklist":"blacklist","resolve":"resolve","force":"force","base64url":"base64url","hex":"hex","range":"range","component":"component","redirect_uri":"redirect_uri","idempotency-key":"idempotency-key","error_description":"error_description","code":"code","compatible":"compatible","chat-completions":"chat-completions","oauth":"oauth","auth_token":"auth_token","crypto":"crypto","hours":"hours","selfsigned":"selfsigned","proxy_id":"proxy_id","proxyId":"proxyId","connectionId":"connectionId","resolveConnectionId":"resolveConnectionId","resolve_connection_id":"resolve_connection_id","scope_id":"scope_id","scopeId":"scopeId","jwtSecret":"jwtSecret","keytar":"keytar","better-sqlite3":"better-sqlite3","undici":"undici","builder-id":"builder-id","musicDesc":"musicDesc","musicGeneration":"musicGeneration","idc":"idc","cloud-status-changed":"cloud-status-changed","where_used":"where_used","windowMs":"windowMs","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Lista de permissões de ferramentas","TOOL_DENYLIST":"Lista de bloqueios de ferramentas","Failed to save pricing":"Falha ao salvar o preço","Failed to reset pricing":"Falha ao redefinir o preço","apikey":"Chave de API","http":"HTTP"},"sidebar":{"home":"Página inicial","dashboard":"Painel","providers":"Provedores","combos":"Combos","autoCombo":"Auto Combo","usage":"Uso","analytics":"Análise","costs":"Custos","health":"Saúde","limits":"Limites e cotas","cliTools":"Ferramentas CLI","media":"Mídia","settings":"Configurações","translator":"Tradutor","playground":"Playground","searchTools":"Search Tools","agents":"Agentes","memory":"Memória","skills":"Habilidades","docs":"Documentos","issues":"Problemas","endpoints":"Endpoints","apiManager":"Gerenciador de APIs","logs":"Registros","auditLog":"Registro de auditoria","shutdown":"Desligamento","restart":"Reiniciar","shutdownConfirm":"Desligar o OmniRoute?","restartConfirm":"Reiniciar o OmniRoute?","version":"v{version}","debug":"Depurar","system":"Sistema","help":"Ajuda","primarySection":"Main","cliSection":"CLI","debugSection":"Debug","systemSection":"System","helpSection":"Help","serverDisconnected":"Servidor desconectado","serverDisconnectedMsg":"O servidor proxy foi interrompido ou está reiniciando.","expandSidebar":"Expandir barra lateral","collapseSidebar":"Recolher barra lateral","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Vermelho","themeGreen":"Verde","themeViolet":"Violeta","themeOrange":"Laranja","themeCyan":"Ciano","cliToolsShort":"Ferramentas","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Escolha um tema predefinido ou crie o seu próprio com uma única cor","presetColors":"Popular colors","customTheme":"Tema personalizado","customThemeDesc":"Clique em criar tema e escolha uma cor","createTheme":"Create theme","activePreset":"Tema ativo"},"header":{"logout":"Sair","language":"Idioma","providers":"Provedores","providerDescription":"Gerencie suas conexões de provedor de IA","combos":"Combos","comboDescription":"Combinações de modelos com substituto","usage":"Uso e análise","usageDescription":"Monitore o uso da API, o consumo de tokens e os registros de solicitação","analytics":"Análise","analyticsDescription":"Gráficos, tendências e insights de avaliação","cliTools":"Ferramentas CLI","cliToolsDescription":"Configurar ferramentas CLI","home":"Página inicial","homeDescription":"Bem-vindo ao OmniRoute","endpoint":"Endpoints","endpointDescription":"Gerenciar endpoints proxy, MCP, A2A e endpoints de API","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability","settings":"Configurações","settingsDescription":"Gerencie suas preferências","openaiCompatible":"Compatível com OpenAI","anthropicCompatible":"Compatível Antrópico","media":"Media","mediaDescription":"Generate images, videos, and music","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel"},"home":{"quickStart":"Início rápido","quickStartDesc":"Comece a trabalhar em 4 etapas. Conecte provedores, encaminhe modelos, monitore tudo.","fullDocs":"Documentos completos","step1Title":"1. Crie uma chave API","step1Desc":"Vá para <endpoint>Endpoint</endpoint> -> Chaves registradas. Gere uma chave por ambiente.","step2Title":"2. Conecte provedores","step2Desc":"Adicione contas em <providers>Providers</providers>. Suporta OAuth, chave de API e níveis gratuitos.","step3Title":"3. Aponte seu cliente","step3Desc":"Defina o URL base como {url} em seu IDE ou cliente API.","step4Title":"4. Monitore e otimize","step4Desc":"Rastreie tokens, custos e erros em <logs>Logs de solicitação</logs> e <analytics>Analytics</analytics>.","providersOverview":"Visão geral dos provedores","configuredOf":"{configured} configurado de {total} provedores disponíveis","noModelsAvailable":"Nenhum modelo disponível para este fornecedor.","configureFirst":"Configure uma conexão primeiro em {providers}","configureProvider":"Configurar provedor","modelAvailable":"Modelo {count} disponível","modelsAvailable":"{count} modelos disponíveis","connectionsActive":"{count} conexão ativa","connectionsActivePlural":"{count} conexões ativas","copyModelName":"Copiar nome do modelo","documentation":"Documentação","healthMonitor":"Monitor de Saúde","reportIssue":"Informar problema","activeError":"{active} ativo · Erro {errors}","oauthLabel":"OAuth","apiKeyLabel":"Chave de API","requestsShort":"{count} requisitos","providerModelsTitle":"{provider} - Modelos","copiedModel":"Copiado: {model}","aliasLabel":"apelido","updateNow":"Atualizar agora","updating":"Atualizando...","updateAvailableDesc":"Uma nova versão está disponível. Clique para atualizar.","updateStarted":"Atualização iniciada..."},"analytics":{"title":"Análise","overviewDescription":"Monitore seus padrões de uso de API, consumo de tokens, custos e tendências de atividades em todos os provedores e modelos.","evalsDescription":"Execute conjuntos de avaliação para testar e validar seus endpoints LLM. Compare a qualidade do modelo, detecte regressões e compare a latência.","overview":"Visão geral","evals":"Avaliações","utilization":"Utilização","utilizationDescription":"Tendências de uso de quota do provedor e rastreamento de limites de taxa","comboHealth":"Saúde do Combo","comboHealthDescription":"Quota ao nível do combo, distribuição de uso e métricas de desempenho"},"apiManager":{"title":"Chaves de API","createKey":"Criar chave de API","key":"Chave","revokeKey":"Revogar chave","revokeConfirm":"Tem certeza de que deseja revogar esta chave de API?","noKeys":"Ainda não há chaves de API","noKeysDesc":"Crie sua primeira chave de API para autenticar solicitações em seu endpoint","keyLabel":"Etiqueta-chave","permissions":"Permissões","expiresAt":"Expira","never":"Nunca","revoke":"Revogar","showKey":"Mostrar chave","hideKey":"Ocultar chave","copyKey":"Copiar chave de API","allModels":"Todos os modelos","selectedModels":"Modelos Selecionados","readOnly":"Somente leitura","fullAccess":"Acesso total","keyManagement":"Gerenciamento de chaves de API","keyManagementDesc":"Crie e gerencie chaves de API para autenticar solicitações em seu endpoint","totalKeys":"Total de chaves","restricted":"Restrito","totalRequests":"Total de solicitações","modelsAvailable":"Modelos Disponíveis","registeredKeys":"Chaves Registradas","keysRegistered":"{count} chaves registradas","keyRegistered":"{count} chave registrada","keysSecurityNote":"Cada chave isola o rastreamento de uso e pode ser revogada de forma independente. As chaves são mascaradas após a criação por segurança.","createFirstKey":"Crie sua primeira chave","name":"Nome","usage":"Uso","created":"Criado","actions":"Ações","reqs":"requisitos","neverUsed":"Nunca usado","deleteConfirm":"Excluir esta chave de API?","usageTips":"Dicas de uso","tipAuth":"Use chaves de API no cabeçalho de autorização como portador YOUR_KEY","tipSecure":"As chaves são mostradas apenas uma vez durante a criação – armazene-as com segurança","tipSeparate":"Crie chaves separadas para diferentes clientes ou ambientes","tipRestrict":"Restrinja chaves a modelos específicos para melhor segurança e controle de custos","keyName":"Nome da chave","keyNamePlaceholder":"por exemplo, chave de produção, chave de desenvolvimento","keyNameDesc":"Escolha um nome descritivo para identificar a finalidade desta chave","keyCreated":"Chave de API criada","keyCreatedSuccess":"Chave criada com sucesso!","keyCreatedNote":"Copie e armazene esta chave agora — ela não será mostrada novamente.","done":"Concluído","savePermissions":"Salvar permissões","autoResolve":"Auto-Resolve","autoResolveDesc":"Auto-resolve ambiguous model names to native provider for this API key.","keyActive":"Key Active","keyActiveDesc":"Enable or disable this API key. Disabled keys are immediately rejected with 403.","accessSchedule":"Access Schedule","accessScheduleDesc":"Restrict access to specific hours and days of the week.","scheduleFrom":"From","scheduleUntil":"Until","scheduleDays":"Days","scheduleTimezone":"Timezone","scheduleTimezoneHint":"Use IANA timezone names, e.g. America/New_York, Europe/Berlin","scheduleActive":"Schedule","disabled":"Disabled","daySun":"Sun","dayMon":"Mon","dayTue":"Tue","dayWed":"Wed","dayThu":"Thu","dayFri":"Fri","daySat":"Sat","allowAll":"Permitir tudo","restrict":"Restringir","allowAllInfo":"Esta chave pode acessar todos os modelos disponíveis.","restrictInfo":"Esta chave pode acessar {selected} de modelos {total}.","selected":"{count} selecionado","all":"Todos","clear":"Limpar","searchModels":"Pesquise modelos por nome ou fornecedor...","noModelsFound":"Nenhum modelo encontrado","keyNameRequired":"O nome da chave é obrigatório","keyNameTooLong":"O nome da chave deve ter {max} caracteres ou menos","keyNameInvalid":"O nome da chave só pode conter letras, números, espaços, hifens e sublinhados","invalidKeyName":"Nome de chave inválido","failedCreateKey":"Falha ao criar chave","failedCreateKeyRetry":"Falha ao criar chave. Por favor, tente novamente.","invalidKeyId":"ID de chave inválido","failedDeleteKey":"Falha ao excluir a chave","failedDeleteKeyRetry":"Falha ao excluir a chave. Por favor, tente novamente.","invalidModelsSelection":"Seleção de modelos inválidos","cannotSelectMoreThanModels":"Não é possível selecionar mais de {max} modelos","failedUpdatePermissions":"Falha ao atualizar as permissões","failedUpdatePermissionsRetry":"Falha ao atualizar as permissões. Por favor, tente novamente.","unknownProvider":"desconhecido","copyMaskedKey":"Copiar chave mascarada","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Último: {date}","editPermissions":"Editar permissões","deleteKey":"Excluir chave","model":"Modelo {count}","models":"{count} modelos","permissionsTitle":"Permissões: {name}","allowAllDesc":"Esta chave pode acessar todos os modelos disponíveis.","restrictDesc":"Esta chave pode acessar {selectedCount} de modelos {totalModels}.","selectedCount":"{count} selecionado"},"auditLog":{"title":"Registro de auditoria","searchPlaceholder":"Ações de pesquisa...","action":"Ação","actor":"Ator","target":"Alvo","ipAddress":"Endereço IP","timestamp":"Carimbo de data e hora","noEntries":"Nenhuma entrada de auditoria encontrada","filterByAction":"Filtrar por ação...","filterByActor":"Filtrar por ator...","filterEntriesAria":"Filtrar entradas de log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por ator","refreshAuditLogAria":"Atualizar registro de auditoria","tableAria":"Entradas de registro de auditoria","failedFetchAuditLog":"Falha ao buscar o log de auditoria","notAvailable":"—","description":"Ações administrativas e eventos de segurança","showing":"Mostrando entradas {count} (deslocamento {offset})","previous":"Anterior"},"media":{"title":"Playground de Mídia","subtitle":"Gere imagens, vídeos e música","model":"Model","prompt":"Prompt","generate":"Gerar","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."},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results"},"cliTools":{"title":"Ferramentas CLI","noActiveProviders":"Nenhum provedor ativo","noActiveProvidersDesc":"Adicione e conecte provedores primeiro para configurar as ferramentas CLI.","mapModels":"Modelos de mapas","testConnection":"Conexão de teste","connectionStatus":"Status da conexão","configureEndpoint":"Configurar ponto final","instructions":"Instruções","modelMapping":"Mapeamento de modelo","baseUrl":"URL base","apiKey":"Chave de API","configured":"Configurado","notConfigured":"Não configurado","notInstalled":"Não instalado","custom":"Personalizado","unknown":"Desconhecido","lastSavedAt":"Último salvo: {date}","never":"Nunca","justNow":"agora mesmo","minutesAgoShort":"{count}m atrás","hoursAgoShort":"{count}h atrás","daysAgoShort":"{count}d atrás","monthsAgoShort":"{count}mo atrás","yearsAgoShort":"{count}anos atrás","runtimeCheckFailed":"Falha na verificação de tempo de execução","yourApiKeyPlaceholder":"sua chave de API","modelPlaceholder":"provedor/id do modelo","configurationSaved":"Configuração salva com sucesso.","failedToSave":"Falha ao salvar a configuração.","noApiKeysCreateOne":"Nenhuma chave de API – Crie uma na página Chaves","defaultOmnirouteKey":"sk_omniroute (padrão)","selectModel":"Selecione o modelo","selectModelForAlias":"Selecione o modelo para {alias}","selectModelForTool":"Selecione o modelo para {tool}","select":"Selecione","clear":"Limpar","comingSoon":"Em breve","checkingRuntime":"Verificando o status do tempo de execução...","guideOnlyIntegration":"Integração somente guia (sem necessidade de tempo de execução local)","cliRuntimeDetected":"Tempo de execução CLI detectado e pronto","cliFoundNotRunnable":"CLI encontrada, mas não executável{reason}","cliRuntimeNotDetected":"Tempo de execução da CLI não detectado","binary":"Binário","configPath":"Caminho de configuração","configPathShort":"Configuração","failedCheckRuntimeStatus":"Falha ao verificar o status do tempo de execução.","copy":"Copiar","copied":"Copiado","copyConfig":"Copiar configuração","saveConfig":"Salvar configuração","selectionSaved":"Seleção salva","guide":"Guia","detected":"Detectado","notReady":"Não está pronto","active":"Ativo","inactive":"Inativo","startMitm":"Iniciar MITM","stopMitm":"Pare o MITM","mitmStarted":"MITM iniciado com sucesso!","mitmStopped":"MITM parou com sucesso!","failedStart":"Falha ao iniciar o MITM","failedStop":"Falha ao parar o MITM","saveMappings":"Salvar mapeamentos","mappingsSaved":"Mapeamentos salvos!","failedSaveMappings":"Falha ao salvar mapeamentos","howItWorks":"Como funciona:","antigravityHowWorksDesc":"A antigravidade envia solicitações ao endpoint do Google. O MITM os intercepta e os redireciona para o OmniRoute.","antigravityStep1":"1. Inicie o MITM para rotear solicitações por meio do OmniRoute.","antigravityStep2Prefix":"2. Adicionar","antigravityStep2Suffix":"ao seu arquivo hosts como 127.0.0.1.","antigravityStep3":"3. Abra o Antigravity e as solicitações serão proxy.","mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","sudoPasswordRequiredTitle":"Senha Sudo obrigatória","sudoPasswordHint":"A senha do administrador é necessária para modificar o arquivo hosts e as configurações de proxy do sistema.","enterSudoPassword":"Digite a senha do sudo","sudoPasswordRequiredError":"A senha Sudo é necessária.","cancel":"Cancelar","confirm":"Confirmar","settingsApplied":"Configurações aplicadas com sucesso!","failedApplySettings":"Falha ao aplicar configurações","settingsReset":"Configurações redefinidas com sucesso!","failedResetSettings":"Falha ao redefinir as configurações","backupRestored":"Cópia de segurança restaurada!","failedRestore":"Falha ao restaurar","checkingCli":"Verificando {tool} CLI...","cliNotRunnable":"{tool} CLI instalada, mas não executável","cliNotInstalled":"{tool} CLI não instalada","cliNotDetected":"{tool} CLI não detectada","cliDetectedReady":"{tool} CLI detectada e pronta","cliFoundFailedHealthcheck":"{tool} CLI foi encontrada, mas falhou na verificação de integridade do tempo de execução{reason}.","installCliPrompt":"Instale {tool} CLI para usar este recurso.","installCodexPrompt":"Instale o Codex CLI para usar o recurso de aplicação automática.","hide":"Esconder","howToInstall":"Como instalar","installationGuide":"Guia de instalação","platforms":"macOS/Linux/Windows:","afterInstallationRun":"Após a instalação, execute","toVerify":"para verificar.","current":"Atual","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Redefinir para o padrão","providerModelPlaceholder":"provedor/id do modelo","apply":"Aplicar","reset":"Redefinir","manualConfig":"Configuração manual","backups":"Cópias de segurança","configBackups":"Backups de configuração","noBackupsYet":"Ainda não há backups. Os backups são criados automaticamente antes de cada aplicação ou redefinição.","restore":"Restaurar","backupRestoredReloading":"Cópia de segurança restaurada! Recarregando status...","failedRestoreBackup":"Falha ao restaurar o backup","applied":"Aplicado!","failed":"Falha","resetDone":"Redefinir!","omnirouteConfiguredOpenAiCompatible":"OmniRoute está configurado como provedor compatível com OpenAI","provider":"Provedor","model":"Modelo","providers":"Provedores","auth":"Autenticação","noApiKeysAvailable":"Nenhuma chave de API disponível","usingDefaultOmniroute":"Usando o padrão: sk_omniroute","updateConfig":"Atualizar configuração","applyConfig":"Aplicar configuração","noBackupsAvailable":"Nenhum backup disponível.","profileSaved":"Perfil \\"{name}\\" salvo!","failedSaveProfile":"Falha ao salvar o perfil","profileActivated":"Perfil ativado!","failedActivateProfile":"Falha ao ativar o perfil","profiles":"Perfis","savedProfiles":"Perfis salvos","noProfilesYet":"Nenhum perfil salvo ainda. Salve a configuração atual como um perfil abaixo.","activate":"Ativar","deleteProfile":"Excluir perfil","profileNamePlaceholder":"Nome do perfil (por exemplo, conta pessoal)","saveCurrent":"Salvar atual","codexAuthNotePrefix":"Usos do Codex","codexAuthNoteMiddle":"com","codexAuthNoteSuffix":"Clique em \\"Aplicar\\" para configurar automaticamente.","claudeManualConfiguration":"Claude CLI - Configuração manual","codexManualConfiguration":"Codex CLI - Configuração manual","droidManualConfiguration":"Droid de fábrica - configuração manual","openClawManualConfiguration":"Garra Aberta - Configuração Manual","clineManualConfiguration":"Configuração Manual do Cline","kiloManualConfiguration":"Configuração Manual do Código Kilo","whenToUseLabel":"Quando usar","openToolDocs":"Abrir documentos de ferramentas","toolUseCases":{"claude":"Use quando desejar fluxos de trabalho de planejamento robustos e refatorações longas de vários arquivos com Claude Code.","codex":"Use quando sua equipe estiver padronizada em fluxos OpenAI Codex CLI e autenticação baseada em perfil.","droid":"Use quando precisar de um agente de terminal leve focado em codificação rápida e loops de execução de comandos.","openclaw":"Use quando desejar um agente de codificação no estilo Open Claw, mas roteado por meio de políticas OmniRoute.","cline":"Use quando você configura agentes de codificação dentro de editores e deseja configuração guiada com modelos OmniRoute.","kilo":"Use quando seu fluxo de trabalho depender de comandos Kilo Code e edições iterativas rápidas.","cursor":"Use ao codificar no Cursor e você precisar de modelos personalizados compatíveis com OpenAI por meio do OmniRoute.","continue":"Use ao executar Continue em IDEs e você precisar de uma configuração de provedor portátil baseada em JSON.","opencode":"Use quando preferir execuções de agentes nativos de terminal e automação com script via OpenCode.","kiro":"Use ao integrar o Kiro e controlar o roteamento do modelo centralmente no OmniRoute.","antigravity":"Use quando o tráfego Antigravity/Kiro deve ser interceptado através do MITM e roteado para OmniRoute.","copilot":"Use quando desejar UX no estilo de bate-papo do Copilot enquanto impõe chaves OmniRoute e regras de roteamento."},"toolDescriptions":{"antigravity":"IDE antigravidade do Google com MITM","claude":"CLI do Código Claude Antrópico","codex":"CLI do OpenAI Codex","droid":"Assistente de IA Droid de fábrica","openclaw":"Assistente de IA de garra aberta","cline":"CLI do assistente de codificação Cline AI","kilo":"CLI do assistente de IA do Kilo Code","cursor":"Editor de código do cursor AI","continue":"Continuar Assistente de IA","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":"Requer conta Cursor Pro para usar este recurso.","1":"O cursor roteia solicitações por meio de seu próprio servidor, portanto, o endpoint local não é compatível. Ative o Cloud Endpoint nas configurações."},"steps":{"1":{"title":"Abra Configurações","desc":"Vá para Configurações -> Modelos"},"2":{"title":"Habilitar API OpenAI","desc":"Habilite a opção \\"chave de API OpenAI\\""},"3":{"title":"URL base"},"4":{"title":"Chave de API"},"5":{"title":"Adicionar modelo personalizado","desc":"Clique em \\"Ver todos os modelos\\" -> \\"Adicionar modelo personalizado\\""},"6":{"title":"Selecione o modelo"}}},"continue":{"steps":{"1":{"title":"Abrir configuração","desc":"Abra o arquivo de configuração Continuar"},"2":{"title":"Chave de API"},"3":{"title":"Selecione o modelo"},"4":{"title":"Adicionar configuração de modelo","desc":"Adicione a seguinte configuração ao seu array de modelos:"}},"notes":{"0":"Continue usa um arquivo de configuração JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"},"5":{"title":"Use Thinking Variant","desc":"For thinking models, run with --variant high/low/max (example command below)."}},"notes":{"0":"OpenCode requer configuração de chave de API.","1":"Defina a URL base para seu endpoint OmniRoute."}},"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 requer conta Amazon."}},"windsurf":{"steps":{"1":{"title":"Open AI Settings","desc":"Click the AI Settings icon in Windsurf or go to Settings"},"2":{"title":"Add Custom Provider","desc":"Select \\"Add custom provider\\" (OpenAI-compatible)"},"3":{"title":"Base URL","desc":"http://127.0.0.1:20128/v1"},"4":{"title":"API Key","desc":"Select your OmniRoute API key"},"5":{"title":"Select Model","desc":"Choose a model from the dropdown"}}}}},"combos":{"title":"Combos","description":"Crie combinações de modelos com roteamento ponderado e suporte substituto","createCombo":"Criar combinação","editCombo":"Editar combinação","deleteCombo":"Excluir combinação","noModels":"Nenhum modelo","noModelsYet":"Nenhum modelo adicionado ainda","addModel":"Adicionar modelo","addModelToCombo":"Adicionar modelo ao combo","routingStrategy":"Estratégia de Roteamento","maxRetries":"Máximo de tentativas","timeout":"Tempo limite (ms)","healthcheck":"Verificação de integridade","priority":"Prioridade","fallback":"Alternativa","roundRobin":"Rodada Robin","random":"Aleatório","leastLatency":"Menor latência","comboName":"Nome do combo","comboNamePlaceholder":"meu-combo","deleteConfirm":"Excluir este combo?","noCombosYet":"Ainda não há combos","comboCreated":"Combo criado com sucesso","comboUpdated":"Combo atualizado com sucesso","comboDeleted":"Combinação excluída","failedCreate":"Falha ao criar combinação","failedUpdate":"Falha ao atualizar o combo","errorCreating":"Erro ao criar o combo","errorUpdating":"Erro ao atualizar o combo","errorDeleting":"Erro ao excluir o combo","testFailed":"Falha na solicitação de teste","failedToggle":"Falha ao alternar combinação","testResults":"Resultados do teste — {name}","resolvedBy":"Resolvido por:","more":"+{count} mais","reqs":"requisitos","success":"sucesso","proxyConfigured":"Proxy configurado","copyComboName":"Copiar nome do combo","enableCombo":"Ativar combinação","disableCombo":"Desativar combinação","testCombo":"Combinação de teste","duplicate":"Duplicar","proxyConfig":"Configuração de proxy","nameRequired":"O nome é obrigatório","nameInvalid":"Apenas letras, números, -, _, / e . permitido","nameHint":"Letras, números, -, _, / e . permitido","priorityDesc":"Fallback sequencial: tenta primeiro o modelo 1, depois o 2, etc.","weightedDesc":"Distribui o tráfego por porcentagem de peso com substituto","roundRobinDesc":"Distribuição circular: cada solicitação vai para o próximo modelo em rotação","randomDesc":"Seleção aleatória uniforme e, em seguida, retorno aos modelos restantes","leastUsedDesc":"Escolhe o modelo com menos solicitações, equilibrando a carga ao longo do tempo","costOptimizedDesc":"Rotas para o modelo mais barato primeiro com base no preço","strictRandom":"Aleatório Estrito","strictRandomDesc":"Baralho embaralhado — usa cada modelo uma vez antes de reembaralhar","models":"Modelos","autoBalance":"Equilíbrio automático","advancedSettings":"Configurações avançadas","retryDelay":"Atraso de nova tentativa (ms)","concurrencyPerModel":"Simultaneidade/Modelo","queueTimeout":"Tempo limite da fila (ms)","advancedHint":"Deixe em branco para usar padrões globais. Eles substituem as configurações por provedor.","moveUp":"Subir","moveDown":"Mover para baixo","removeModel":"Remover","saving":"Salvando...","weighted":"Ponderado","leastUsed":"Menos usado","costOpt":"Opção de custo","strategyGuideTitle":"How to use this strategy","strategyGuideWhen":"When to use","strategyGuideAvoid":"Avoid when","strategyGuideExample":"Example","strategyGuide":{"priority":{"when":"You have one preferred model and only want fallback on failure.","avoid":"You need request distribution across models.","example":"Primary coding model with cheaper backup for outages."},"weighted":{"when":"You need controlled traffic split across models.","avoid":"You cannot maintain accurate weights over time.","example":"80% stable model + 20% canary model rollout."},"round-robin":{"when":"You want predictable and even distribution.","avoid":"Models differ too much in latency or cost.","example":"Same model on multiple accounts to spread throughput."},"random":{"when":"You want simple distribution with minimal setup.","avoid":"You need strict traffic guarantees.","example":"Quick prototyping with equivalent models."},"least-used":{"when":"You want adaptive balancing based on live demand.","avoid":"Traffic is too low to benefit from usage balancing.","example":"Mixed workloads where one model often gets overloaded."},"cost-optimized":{"when":"Cost reduction is your top priority.","avoid":"Pricing data is missing or outdated.","example":"Background or batch jobs where lower cost is preferred."},"strict-random":{"when":"Use when you want perfectly even spread — each model used once before repeating.","avoid":"Avoid when models have different quality or latency and order matters.","example":"Example: Multiple accounts of the same model to distribute usage evenly."}},"advancedHelp":{"maxRetries":"How many retries are attempted before failing a request.","retryDelay":"Initial wait between retries. Higher values reduce burst pressure.","timeout":"Maximum request duration before aborting.","healthcheck":"Skips unhealthy models/providers from routing decisions.","concurrencyPerModel":"Max simultaneous requests allowed per model in round-robin.","queueTimeout":"How long a request can wait in queue before timing out."},"templatesTitle":"Quick templates","templatesDescription":"Apply a starting profile, then adjust models and config.","templateApply":"Apply template","templateHighAvailability":"High availability","templateHighAvailabilityDesc":"Priority routing with health checks and safe retries.","templateCostSaver":"Cost saver","templateCostSaverDesc":"Cost-optimized routing for budget-first workloads.","templateBalanced":"Balanced load","templateBalancedDesc":"Least-used routing to spread demand over time.","usageGuideHide":"Hide","usageGuideDontShowAgain":"Don\'t show again","usageGuideShow":"Show guide","quickTestTitle":"Combo ready to validate","quickTestDescription":"Run a test now to confirm fallback and latency behavior.","testNow":"Test now","pricingCoverage":"Pricing coverage","pricingCoverageHint":"Cost-optimized works best when all combo models have pricing.","pricingAvailable":"Pricing available","pricingMissing":"No pricing","pricingAvailableShort":"priced","pricingMissingShort":"no-price","warningRoundRobinSingleModel":"Round-robin is most useful with at least 2 models.","warningCostOptimizedPartialPricing":"Only {priced} of {total} models have pricing. Routing may be partially cost-aware.","warningCostOptimizedNoPricing":"No pricing data found for this combo. Cost-optimized may route unexpectedly.","readinessTitle":"Pronto para salvar?","readinessDescription":"Revise a lista de verificação antes de criar ou atualizar este combo.","readinessCheckName":"O nome do combo é válido","readinessCheckModels":"Pelo menos um modelo está selecionado","readinessCheckWeights":"O total dos pesos é 100%","readinessCheckWeightsOptional":"Regra de pesos não obrigatória","readinessCheckPricing":"Dados de preços disponíveis","readinessCheckPricingOptional":"Regra de preços não obrigatória","saveBlockedTitle":"O salvamento está bloqueado até corrigir os itens abaixo:","saveBlockName":"Defina um nome para o combo.","saveBlockModels":"Adicione pelo menos um modelo.","saveBlockWeighted":"Ajuste os pesos para 100% (atual: {total}%).","saveBlockPricing":"Adicione preço para pelo menos um modelo ou escolha outra estratégia.","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."},"strict-random":{"title":"Shuffle deck distribution","description":"Each model is used exactly once per cycle before reshuffling.","tip1":"Use at least 2 models for meaningful distribution.","tip2":"Works best with equivalent-performance models.","tip3":"Ideal for load balancing across multiple API accounts."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), Qoder (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Custos","budget":"Orçamento","totalCost":"Custo total","breakdown":"Divisão de custos","noData":"Sem dados de custo","byModel":"Por modelo","byProvider":"Por provedor"},"endpoint":{"title":"Ponto final da API","available":"Terminais disponíveis","cloudProxy":"Proxy de nuvem","disableConfirm":"Tem certeza de que deseja desativar o proxy na nuvem?","baseUrl":"URL base","apiKeyLabel":"Chave de API","registeredKeys":"Chaves Registradas","chatCompletions":"Conclusões de bate-papo","responses":"Respostas","listModels":"Listar modelos","usingCloudProxy":"Usando o Cloud Proxy","usingLocalServer":"Usando servidor local","machineId":"ID da máquina: {id}...","disableCloud":"Desativar nuvem","enableCloud":"Habilitar nuvem","modelsAcrossEndpoints":"Modelos {models} em endpoints {endpoints}","chatDesc":"Bate-papo com e sem streaming com todos os provedores","embeddings":"Incorporações","embeddingsDesc":"Incorporações de texto para pipelines de pesquisa e RAG","imageGeneration":"Geração de imagem","imageDesc":"Gere imagens a partir de prompts de texto","rerank":"Reclassificar","rerankDesc":"Reclassificar documentos por relevância para uma consulta","audioTranscription":"Transcrição de áudio","audioTranscriptionDesc":"Transcrever arquivos de áudio para texto (Whisper)","textToSpeech":"Texto para fala","textToSpeechDesc":"Converta texto em fala com som natural","moderations":"Moderações","moderationsDesc":"Moderação de conteúdo e classificação de segurança","responsesDesc":"API Responses do OpenAI para Codex e fluxos de trabalho agênticos avançados","listModelsDesc":"Listar todos os modelos disponíveis em todos os fornecedores conectados","settingsApiDesc":"Ler e modificar a configuração do OmniRoute via API","settingsApi":"Settings API","categoryCore":"APIs Principais","categoryMedia":"Mídia e Multi-Modal","categorySearch":"Search & Discovery","categoryUtility":"Utilidades e Gestão","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.","enableCloudTitle":"Ativar proxy de nuvem","whatYouGet":"O que você receberá","cloudBenefitAccess":"Acesse sua API de qualquer lugar do mundo","cloudBenefitShare":"Compartilhe endpoint com sua equipe facilmente","cloudBenefitPorts":"Não há necessidade de abrir portas ou configurar firewall","cloudBenefitEdge":"Rede de borda global rápida","cloudSessionNote":"A nuvem manterá sua sessão de autenticação por 1 dia. Se não for usado, ele será excluído automaticamente.","cloudUnstableNote":"A nuvem está atualmente instável com Claude Code OAuth em alguns casos.","cloudConnected":"Cloud Proxy conectado!","connectingToCloud":"Conectando à nuvem...","verifyingConnection":"Verificando conexão...","connecting":"Conectando...","verifying":"Verificando...","connected":"Conectado!","disableCloudTitle":"Desativar proxy de nuvem","disableWarning":"Todas as sessões de autenticação serão excluídas da nuvem.","syncingData":"Sincronizando os dados mais recentes...","disablingCloud":"Desativando nuvem...","syncing":"Sincronizando...","disabling":"Desativando...","cloudConnectedVerified":"Cloud Proxy conectado e verificado!","connectedVerificationPending":"Conectado – verificação pendente","connectedVerificationPendingWithError":"Conectado – verificação pendente: {error}","cloudDisabledSuccess":"Nuvem desativada com sucesso","syncedSuccess":"Sincronizado com sucesso","failedDisable":"Falha ao desativar a nuvem","failedEnable":"Falha ao ativar a nuvem","cloudRequestTimeout":"Tempo limite de solicitação na nuvem","cloudRequestFailed":"Falha na solicitação de nuvem","cloudWorkerUnreachable":"Não foi possível entrar em contato com o trabalhador da nuvem. Certifique-se de que o serviço de nuvem esteja em execução (npm run dev in/cloud).","connectionFailed":"Falha na conexão","syncFailed":"Falha ao sincronizar dados na nuvem","cloudflaredTitle":"Cloudflare Quick Tunnel","cloudflaredDescription":"Create a Cloudflare Quick Tunnel for this endpoint to make it accessible from the internet without configuring DNS.","cloudflaredUrlNotice":"Creates a temporary Cloudflare Quick Tunnel. URLs change after restart.","cloudflaredEnable":"Enable Tunnel","cloudflaredInstallAndEnable":"Install & Enable","cloudflaredDisable":"Stop Tunnel","cloudflaredRunning":"Running","cloudflaredStarting":"Starting","cloudflaredStoppedState":"Stopped","cloudflaredNotInstalled":"Not installed","cloudflaredUnsupported":"Unsupported","cloudflaredError":"Error","cloudflaredStarted":"Cloudflare tunnel started","cloudflaredStopped":"Cloudflare tunnel stopped","cloudflaredRequestFailed":"Failed to update Cloudflare tunnel","cloudflaredTemporaryNote":"Quick Tunnel URLs are temporary and will change after restart.","cloudflaredUnsupportedNote":"This platform is not supported for managed installation.","cloudflaredIdleNote":"Create a temporary Cloudflare Quick Tunnel for this endpoint.","cloudflaredLastError":"Last error: {error}","providerModelsTitle":"{provider} — Modelos","noModelsForProvider":"Nenhum modelo disponível para este fornecedor.","chat":"Bate-papo","embedding":"Incorporação","image":"Imagem","custom":"personalizado","modelsCount":"{count, plural, one {# model} other {# models}}","sectionTitle":"Integration Surface","sectionDescription":"OpenAI-compatible APIs and operational protocol endpoints","tabApis":"OpenAI-compatible APIs","tabProtocols":"Protocols","tabsAria":"Endpoint sections","protocolsTitle":"Protocols","protocolsDescription":"MCP and A2A are first-class endpoints with dedicated observability and controls.","mcpCardTitle":"MCP Server","mcpCardDescription":"Model Context Protocol over stdio","a2aCardTitle":"A2A Server","a2aCardDescription":"Agent2Agent JSON-RPC endpoint","protocolToolsLabel":"Tools","protocolTasksLabel":"Tasks","protocolActiveStreamsLabel":"Active streams","protocolLastActivity":"Last activity","quickStart":"Quick Start","openMcpDashboard":"Open MCP management","openA2aDashboard":"Open A2A management","mcpQuickStartTitle":"MCP Quick Start","mcpQuickStartStep1":"Run the MCP server via `omniroute --mcp`.","mcpQuickStartStep2":"Configure your MCP client to connect over stdio transport.","mcpQuickStartStep3":"Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.","a2aQuickStartTitle":"A2A Quick Start","a2aQuickStartStep1":"Discover the agent card at `/.well-known/agent.json`.","a2aQuickStartStep2":"Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.","a2aQuickStartStep3":"Track and control tasks using `tasks/get` and `tasks/cancel`.","completionsLegacy":"Completions (Legacy)","completionsLegacyDesc":"Legacy OpenAI text completions — accepts both prompt string and messages array format"},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"Endpoints de API","apiEndpointsTitle":"Endpoints de API","apiEndpointsDescription":"Endpoints de API backend que podem ser consumidos por outras aplicações e serviços. Esta seção listará todas as APIs REST disponíveis com documentação e testes.","comingSoon":"Em Breve","plannedFeatures":"Funcionalidades Planejadas","featureRestApi":"Catálogo de endpoints REST API com documentação interativa","featureWebhooks":"Configuração de webhooks e assinaturas de eventos","featureSwagger":"Geração automática de specs OpenAPI / Swagger","featureAuth":"Gestão de chaves API e escopos OAuth por endpoint"},"mcpDashboard":{"loading":"Loading MCP dashboard...","activate":"activate","deactivate":"deactivate","confirmSwitchCombo":"Confirm {action} combo \\"{combo}\\"?","switchComboFailed":"Failed to switch combo state.","switchComboSuccess":"Combo \\"{combo}\\" updated.","confirmApplyProfile":"Apply resilience profile \\"{profile}\\"?","applyProfileFailed":"Failed to apply resilience profile.","applyProfileSuccess":"Profile \\"{profile}\\" applied.","confirmResetBreakers":"Reset all circuit breakers?","resetBreakersFailed":"Failed to reset circuit breakers.","resetBreakersSuccess":"Circuit breakers reset.","processStatus":"Process status","online":"Online","offline":"Offline","pid":"PID","sessionUptime":"Session uptime","lastHeartbeat":"Last heartbeat","activity24h":"Activity (24h)","totalCalls":"Total calls","successRate":"Success rate","avgLatency":"Avg latency","topTools":"Top tools","noToolCalls24h":"No tool calls in the last 24 hours.","runtimeDetails":"Runtime details","transport":"Transport","scopesEnforced":"Scopes enforced","yes":"yes","no":"no","lastCall":"Last call","heartbeatPath":"Heartbeat path","operationalControls":"Operational controls","switchCombo":"Switch combo","inactive":"inactive","active":"active","activateCombo":"Activate combo","deactivateCombo":"Deactivate combo","applyResilienceProfile":"Apply resilience profile","profileAggressive":"aggressive","profileBalanced":"balanced","profileConservative":"conservative","applyProfile":"Apply profile","resetCircuitBreakers":"Reset circuit breakers","resetCircuitBreakersHelp":"Clears current breaker state and failure counters for providers.","resetAllBreakers":"Reset all breakers","toolsAndScopes":"Tools and scopes","tableTool":"Tool","tableScopes":"Scopes","tablePhase":"Phase","tableAudit":"Audit","auditLog":"Audit log","auditSummary":"Calls: {total} | page {page} of {totalPages}","allTools":"All tools","allResults":"All results","success":"Success","failure":"Failure","apiKeyIdPlaceholder":"apiKeyId","loadingAuditEntries":"Loading audit entries...","noAuditEntriesForFilters":"No audit entries found for current filters.","tableTimestamp":"Timestamp","tableDuration":"Duration","tableResult":"Result","tableApiKey":"API key","failed":"failed","previous":"Previous","next":"Next"},"a2aDashboard":{"loading":"Loading A2A dashboard...","confirmCancelTask":"Cancel task {taskId}?","cancelTaskFailed":"Failed to cancel task.","cancelTaskSuccess":"Task {taskId} cancelled.","smokeSendFailed":"message/send smoke test failed.","smokeSendSuccessWithTask":"message/send ok (task {taskId}).","smokeSendSuccess":"message/send ok.","smokeStreamFailed":"message/stream smoke test failed.","smokeStreamSuccessWithTask":"message/stream ok (task {taskId}{stateSuffix}).","smokeStreamNoTaskId":"message/stream finished without task id.","health":"Health","ok":"ok","totalTasks":"Total tasks","activeStreams":"Active streams","lastTask":"Last task","taskStateOverview":"Task state overview","state":{"submitted":"submitted","working":"working","completed":"completed","failed":"failed","cancelled":"cancelled"},"agentCard":"Agent card","version":"Version","url":"URL","capabilities":"Capacidades","agentCardNotAvailable":"Cartão de agente não disponível.","quickValidation":"Validação rápida","quickValidationDescription":"Executa chamadas smoke através do endpoint `/a2a` ativo.","runMessageSend":"Run message/send","runMessageStream":"Run message/stream","taskManagement":"Gerenciamento de tarefas","taskSummary":"{total} tasks | page {page} of {totalPages}","allStates":"all","allSkills":"all skills","loadingTasks":"Loading tasks...","noTasksForFilters":"No tasks found for current filters.","tableTask":"Task","tableSkill":"Skill","tableState":"State","tableUpdated":"Updated","tableActions":"Actions","view":"View","cancel":"Cancel","previous":"Previous","next":"Next","taskDetail":"Task detail","close":"Close","metadata":"Metadata","events":"Events","artifacts":"Artefatos"},"memory":{"title":"Gerenciamento de Memória","description":"Visualize e gerencie entradas de memória armazenadas","memories":"Memórias","totalEntries":"Total de Entradas","tokensUsed":"Tokens Usados","hitRate":"Taxa de Acerto","loading":"Carregando memórias...","noMemories":"Nenhuma memória encontrada","search":"Buscar memórias...","allTypes":"Todos os Tipos","export":"Exportar","import":"Importar","addMemory":"Adicionar Memória","type":"Tipo","key":"Chave","content":"Conteúdo","created":"Criado","actions":"Ações","factual":"Factual","episodic":"Episódica","procedural":"Procedural","semantic":"Semântica"},"skills":{"title":"Skills","description":"Gerencie e monitore skills de IA","skillsTab":"Skills","executionsTab":"Execuções","sandboxTab":"Sandbox","loading":"Carregando skills...","noSkills":"Nenhuma skill encontrada","noExecutions":"Nenhuma execução encontrada","enabled":"Ativado","disabled":"Desativado","version":"Versão","tableDescription":"Descrição","skill":"Skill","status":"Status","duration":"Duração","time":"Tempo","sandboxConfig":"Configuração da Sandbox","cpuLimit":"Limite de CPU","cpuLimitDesc":"Tempo máximo de execução por skill","memoryLimit":"Limite de Memória","memoryLimitDesc":"Alocação máxima de memória","timeout":"Timeout","timeoutDesc":"Tempo máximo de espera por resposta","networkAccess":"Acesso à Rede","networkAccessDesc":"Permitir requisições de rede de saída"},"health":{"title":"Saúde do sistema","description":"Monitoramento em tempo real da sua instância OmniRoute","healthy":"Saudável","degraded":"Degradado","down":"Para baixo","uptime":"Tempo de atividade","memory":"Memória","memoryRss":"Memória (RSS)","heap":"Pilha","cpu":"CPU","database":"Banco de dados","version":"Versão","lastCheck":"Última verificação","providerHealth":"Saúde do Provedor","systemMetrics":"Métricas do sistema","tokenHealth":"Saúde do token","refreshAll":"Atualizar tudo","checkNow":"Verifique agora","loadingHealth":"Carregando dados de saúde...","failedToLoad":"Falha ao carregar dados de integridade: {error}","retry":"Tentar novamente","allOperational":"Todos os sistemas operacionais","issuesDetected":"Problemas de sistema detectados","updatedAt":"{time} atualizado","latency":"Latência","latencyP50":"p50","latencyP95":"pág.95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Total de solicitações","noDataYet":"Ainda não há dados","promptCache":"Cache de prompt","entries":"Entradas","hitRate":"Taxa de acerto","hitsMisses":"Acertos / Erros","signatureCache":"Cache de Assinatura","signatureDefaults":"Padrões","signatureTool":"Ferramenta","signatureFamily":"Família","signatureSession":"Sessão","recovering":"Recuperando","noCBData":"Não há dados disponíveis sobre disjuntores. Faça alguns pedidos primeiro.","providerHealthStatusAria":"Estado de saúde do provedor","issuesLabel":"Problemas detectados","operational":"Operacional","providers":"Provedores","configuredProvidersLabel":"Configurado no painel","configuredProvidersHint":"Provedores com credenciais salvas em /dashboard/providers, independentemente do estado do tempo de execução.","activeProviders":"{count} active","activeProvidersHint":"Provedores configurados atualmente habilitados para solicitações de roteamento.","monitoredProviders":"{count} monitored","monitoredProvidersHint":"Provedores atualmente monitorados por monitores de integridade dos disjuntores.","healthyCount":"{count} íntegro","nodeVersion":"Nó {version}","failures":"{count} falha","failuresPlural":"{count} falhas","lastFailure":"Último","rateLimitStatus":"Status do limite de taxa","activeLimiters":"{count} limitador ativo","activeLimitersPlural":"{count} limitadores ativos","queued":"Na fila","queuedCount":"{count} na fila","running":"correndo","runningCount":"{count} em execução","ok":"OK","activeLockouts":"Bloqueios ativos","resetConfirm":"Redefinir todos os disjuntores para um estado íntegro? Isto limpará todas as contagens de falhas e restaurará todos os provedores ao status operacional.","resetAllTitle":"Reinicialize todos os disjuntores para um estado saudável","resetting":"Redefinindo...","resetAll":"Redefinir tudo","until":"Até {time}"},"limits":{"title":"Limites e cotas","rateLimit":"Limite de taxa","remaining":"Restante","requestsPerMinute":"Solicitações/min","tokensPerMinute":"Tokens/min","dailyLimit":"Limite Diário"},"logs":{"title":"Registros","requestLogs":"Solicitar registros","proxyLogs":"Registros de proxy","auditLog":"Registro de auditoria","console":"Consola","auditLogDesc":"Ações administrativas e eventos de segurança","loading":"Carregando...","refresh":"Atualizar","filterByAction":"Filtrar por ação...","filterByActor":"Filtrar por ator...","filterEntriesAria":"Filtrar entradas de log de auditoria","filterByActionTypeAria":"Filtrar por tipo de ação","filterByActorAria":"Filtrar por ator","refreshAuditLogAria":"Atualizar registro de auditoria","tableAria":"Entradas de registro de auditoria","failedFetchAuditLog":"Falha ao buscar o log de auditoria","showing":"Mostrando entradas {count} (deslocamento {offset})","search":"Pesquisar","timestamp":"Carimbo de data e hora","action":"Ação","actor":"Ator","target":"Alvo","details":"Detalhes","ipAddress":"Endereço IP","notAvailable":"—","noEntries":"Nenhuma entrada de registro de auditoria encontrada","previous":"Anterior","next":"Próximo"},"onboarding":{"welcome":"Bem vindo","security":"Segurança","test":"Teste","ready":"Pronto!","setPassword":"Definir senha","addProvider":"Adicione seu primeiro provedor","getStarted":"Comece","skip":"Pular","skipWizard":"Ignorar totalmente o assistente","skipPassword":"Ignorar configuração de senha","skipAndContinue":"Pular e continuar","passwordLabel":"Senha","confirmPassword":"Confirmar senha","enterPassword":"Digite a senha","confirmPasswordPlaceholder":"Confirmar senha","passwordsMismatch":"As senhas não coincidem","setupComplete":"Configuração concluída!","goToDashboard":"Vá para Painel →","welcomeDesc":"OmniRoute é o seu proxy local da API AI. Ele roteia solicitações para vários provedores de IA com balanceamento de carga, failover e rastreamento de uso.","multiProvider":"Multi-Provedor","usageTracking":"Rastreamento de uso","apiKeyMgmt":"Gerenciamento de chave de API","securityDesc":"Defina uma senha para proteger seu painel ou pule por enquanto.","providerDesc":"Conecte seu primeiro provedor de IA. Você pode adicionar mais posteriormente.","apiKeyRequired":"Chave API (obrigatória)","customUrlOptional":"URL personalizado (opcional)","testDesc":"Vamos verificar se a conexão do seu provedor funciona.","runTest":"Execute o teste de conexão","testingConnection":"Testando conexão...","connectionSuccessful":"Conexão bem-sucedida! Seu provedor está pronto.","noProviderFound":"Nenhum provedor encontrado. Você pode adicionar um do painel posteriormente.","testFailed":"O teste falhou, mas você pode configurar isso mais tarde.","couldNotTest":"Não foi possível testar agora. Você pode testar no painel.","doneDesc":"Está tudo pronto! Sua instância do OmniRoute está configurada e pronta para fazer proxy de solicitações de IA.","yourEndpoint":"Seu ponto final:","continue":"Continuar","retry":"Tentar novamente","failedSetPassword":"Falha ao definir a senha. Tente novamente.","failedAddProvider":"Falha ao adicionar provedor. Tente novamente.","connectionError":"Erro de conexão. Por favor, tente novamente.","provider":"Provedor"},"providers":{"title":"Provedores","addProvider":"Adicionar provedor","editProvider":"Editar provedor","deleteProvider":"Excluir provedor","noProviders":"Nenhum provedor configurado","modelAvailability":"Disponibilidade do modelo","accounts":"Contas","newAccount":"Nova conta","deleteConfirm":"Tem certeza de que deseja excluir este provedor?","testing":"Testando...","testConnection":"Conexão de teste","testSuccess":"Conexão bem-sucedida","testFailed":"Falha na conexão","available":"Disponível","cooldown":"Recarga","unavailable":"Indisponível","unknown":"Desconhecido","oauthLabel":"OAuth","compatibleLabel":"Compatível","chat":"Bate-papo","responses":"Respostas","messages":"Mensagens","oauthProviders":"Provedores OAuth","freeProviders":"Provedores Gratuitos","apiKeyProviders":"Provedores de chaves de API","compatibleProviders":"Provedores compatíveis com chave de API","testAll":"Teste tudo","testAllOAuth":"Teste todas as conexões OAuth","testAllFree":"Teste todas as conexões gratuitas","testAllApiKey":"Teste todas as conexões de chave de API","testAllCompatible":"Teste todas as conexões compatíveis","connected":"{count} Conectado","errorCount":"{count} Erro ({code})","errorCountNoCode":"{count} Erro","noConnections":"Sem conexões","disabled":"Desativado","enableProvider":"Habilitar provedor","disableProvider":"Desativar provedor","testResults":"Resultados do teste","noCompatibleYet":"Nenhum provedor compatível adicionado ainda","compatibleHint":"Use os botões acima para adicionar endpoints compatíveis com OpenAI ou Antrópico","addOpenAICompatible":"Adicionar compatível com OpenAI","addAnthropicCompatible":"Adicionar Compatível Antrópico","addNewProvider":"Adicionar novo provedor","backToProviders":"Voltar para Provedores","configureNewProvider":"Configure um novo provedor de IA para usar com seus aplicativos.","providerLabel":"Provedor","selectProvider":"Selecione um provedor","selectedProvider":"Provedor selecionado","authMethod":"Método de autenticação","apiKeyLabel":"Chave de API","apiKeyRequired":"A chave de API é obrigatória","selectProviderRequired":"Selecione um provedor","enterApiKey":"Insira sua chave API","apiKeySecure":"Sua chave API será criptografada e armazenada com segurança.","oauth2Connect":"Conecte-se com OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Conecte sua conta usando autenticação OAuth2.","displayName":"Nome de exibição","displayNamePlaceholder":"por exemplo, API de produção, ambiente de desenvolvimento","displayNameHint":"Opcional. Um nome amigável para identificar esta configuração.","active":"Ativo","activeDescription":"Habilite este provedor para uso em seus aplicativos","cancel":"Cancelar","createProvider":"Criar provedor","failedCreate":"Falha ao criar provedor","errorOccurred":"Ocorreu um erro. Por favor, tente novamente.","modelStatus":"Status do modelo","allModelsOperational":"Todos os modelos operacionais","modelsWithIssues":"{count} modelo(s) com problemas","allModelsNormal":"Todos os modelos estão respondendo normalmente.","cooldownCleared":"Tempo de espera liberado para {model}","failedClearCooldown":"Falha ao limpar o tempo de espera","loadingAvailability":"Carregando disponibilidade do modelo...","clearCooldown":"Limpar","clearing":"Limpando...","until":"Até {time}","providerTestFailed":"Falha no teste do provedor","providerTestTimeout":"Provider test timed out — too many connections to test at once","modeTest":"{mode} Teste","passedCount":"{count} aprovado","failedCount":"{count} falhou","testedCount":"{count} testado","millisecondsAbbr":"{value}ms","okShort":"OK","errorShort":"ERRO","noActiveConnectionsInGroup":"Nenhuma conexão ativa encontrada para este grupo.","allTestsPassed":"Todos os testes {total} foram aprovados","testSummary":"{passed}/{total} aprovado, {failed} falhou","nameLabel":"Nome","prefixLabel":"Prefixo","baseUrlLabel":"URL base","apiTypeLabel":"Tipo de API","prefixHint":"Obrigatório. Prefixo exclusivo para nomes de modelos.","nameHint":"Obrigatório. Um rótulo amigável para este nó.","baseUrlHint":"Obrigatório.  URL base da API do provedor.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Validar conexão","validating":"Validando...","connectionValid":"A conexão é válida!","connectionFailed":"Falha na conexão. Verifique o URL e a chave.","testKeyLabel":"Chave de API de teste","testKeyPlaceholder":"sk-... (apenas para validação)","providerNotFound":"Provedor não encontrado","deleteConnectionConfirm":"Excluir esta conexão?","failedSetAlias":"Falha ao definir o alias","failedSaveConnection":"Falha ao salvar conexão","failedSaveConnectionRetry":"Falha ao salvar a conexão. Por favor, tente novamente.","failedRetestConnection":"Falha ao testar novamente a conexão","deleteCompatibleNodeConfirm":"Excluir este nó compatível com {type}?","anthropicCompatibleDetails":"Detalhes compatíveis com antrópicos","openaiCompatibleDetails":"Detalhes compatíveis com OpenAI","messagesApi":"API de mensagens","responsesApi":"API de respostas","chatCompletions":"Conclusões de bate-papo","importingModels":"Importando...","importFromModels":"Importar de /modelos","allModelsAlreadyImported":"Todos os modelos já foram importados","noNewModelsToImport":"Nenhum modelo novo para importar — todos os modelos já estão no registo ou na lista de modelos personalizados","skippingExistingModels":"A ignorar {count} modelos existentes","autoSync":"Sincronização automática","autoSyncTooltip":"Atualiza automaticamente a lista de modelos a cada 24 horas (configurável via MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Sincronização automática ativada — modelos serão atualizados periodicamente","autoSyncDisabled":"Sincronização automática desativada","autoSyncToggleFailed":"Falha ao alternar sincronização automática","clearAllModels":"Limpar todos os modelos","clearAllModelsConfirm":"Tem certeza que deseja remover todos os modelos deste provedor?","clearAllModelsSuccess":"Todos os modelos limpos","clearAllModelsFailed":"Falha ao limpar modelos","addConnectionToImport":"Adicione uma conexão para permitir a importação.","noModelsConfigured":"Nenhum modelo configurado","connectionCount":"{count} conexões","fetchingModels":"Buscando modelos disponíveis...","failedFetchModels":"Falha ao buscar modelos","noModelsFound":"Nenhum modelo encontrado","importFailed":"Falha na importação","noNewModelsAdded":"Nenhum novo modelo foi adicionado.","adding":"Adicionando...","importingModelsTitle":"Importando Modelos","copyModel":"Copiar modelo","removeModel":"Remover modelo","rateLimitProtected":"Protegido","rateLimitUnprotected":"Desprotegido","enableRateLimitProtection":"Clique para ativar a proteção de limite de taxa","disableRateLimitProtection":"Clique para desativar a proteção de limite de taxa","productionKey":"Chave de produção","enterNewApiKey":"Insira a nova chave de API","optional":"Opcional","anthropicCompatibleName":"Compatível Antrópico","openaiCompatibleName":"Compatível com OpenAI","failedImportModels":"Falha ao importar modelos","noModelsReturnedFromEndpoint":"Nenhum modelo foi retornado do endpoint /models.","importingModelsProgress":"Importando {current} de modelos {total}...","foundModelsStartingImport":"Modelos {count} encontrados. Iniciando importação...","importingModelById":"Importando {modelId}...","importSuccessCount":"{count, plural, one {# model} other {# models}} importado com sucesso!","noNewModelsAddedExisting":"Nenhum novo modelo foi adicionado (todos já existem).","importDoneCount":"✓ Pronto! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"Ocorreu um erro inesperado","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"mensagens","responsesPath":"respostas","chatCompletionsPath":"bate-papo/conclusões","add":"Adicionar","edit":"Editar","delete":"Excluir","anthropic":"Antrópico","openai":"OpenAI","singleConnectionPerCompatible":"Somente uma conexão é permitida por nó compatível. Adicione outro nó se precisar de mais conexões.","connections":"Conexões","providerProxyTitleConfigured":"Proxy do provedor: {host}","configured":"configurado","providerProxyConfigureHint":"Configure o proxy para todas as conexões deste provedor","providerProxy":"Proxy do provedor","noConnectionsYet":"Ainda não há conexões","addFirstConnectionHint":"Adicione sua primeira conexão para começar","addConnection":"Adicionar conexão","availableModels":"Modelos Disponíveis","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","pageAutoRefresh":"A página será atualizada automaticamente...","statusDisabled":"desativado","statusConnected":"conectado","statusRuntimeIssue":"problema de tempo de execução","statusAuthFailed":"falha na autenticação","statusRateLimited":"taxa limitada","statusNetworkIssue":"problema de rede","statusTestUnsupported":"teste sem suporte","statusUnavailable":"indisponível","statusFailed":"falhou","statusError":"erro","oauthAccount":"Conta OAuth","errorTypeRuntime":"Tempo de execução local","errorTypeUpstreamAuth":"Autenticação upstream","errorTypeMissingCredential":"Credencial ausente","errorTypeRefreshFailed":"Falha na atualização","errorTypeTokenExpired":"O token expirou","errorTypeRateLimited":"Taxa limitada","errorTypeUpstreamUnavailable":"Upstream indisponível","errorTypeNetworkError":"Erro de rede","errorTypeTestUnsupported":"Teste sem suporte","errorTypeUpstreamError":"Erro de envio","proxySourceGlobal":"Globais","proxySourceProvider":"Provedor","proxySourceKey":"Chave","proxyConfiguredBySource":"Proxy ({source}): {host}","autoPriority":"Automático: {priority}","proxy":"Procurador","retestAuthentication":"Testar novamente a autenticação","retest":"Teste novamente","disableConnection":"Desativar conexão","enableConnection":"Habilitar conexão","reauthenticateConnection":"Autentique novamente esta conexão","proxyConfig":"Configuração de proxy","aliasExistsAlert":"O alias \\"{alias}\\" já existe. Use um modelo diferente ou edite o alias existente.","openRouterAnyModelHint":"OpenRouter suporta qualquer modelo. Adicione modelos e crie aliases para acesso rápido.","modelIdFromOpenRouter":"ID do modelo (do OpenRouter)","openRouterModelPlaceholder":"antrópico/claude-3-opus","customModels":"Modelos personalizados","customModelsHint":"Adicione IDs de modelo que não estão na lista padrão. Eles estarão disponíveis para roteamento.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamAddRow":"Add header","compatUpstreamRemoveRow":"Remove row","compatBadgeUpstreamHeaders":"Headers","modelId":"ID do modelo","customModelPlaceholder":"por exemplo gpt-4.5-turbo","loading":"Carregando...","removeCustomModel":"Remover modelo personalizado","noCustomModels":"Nenhum modelo personalizado adicionado ainda.","allSuggestedAliasesExist":"Todos os aliases sugeridos já existem. Escolha um modelo diferente ou remova aliases conflitantes.","failedSaveCustomModel":"Falha ao salvar o modelo personalizado","modelAddedSuccess":"Modelo {modelId} adicionado com sucesso","failedAddModelTryAgain":"Falha ao adicionar modelo. Por favor, tente novamente.","failedSaveImportedModel":"Falha ao salvar o modelo importado no banco de dados personalizado","failedImportModelsTryAgain":"Falha ao importar modelos. Por favor, tente novamente.","failedRemoveModelFromDatabase":"Falha ao remover o modelo do banco de dados","modelRemovedSuccess":"Modelo removido com sucesso","failedDeleteModelTryAgain":"Falha ao excluir modelo. Por favor, tente novamente.","compatibleModelsDescription":"Adicione modelos compatíveis com {type} manualmente ou importe-os do endpoint /models.","anthropicCompatibleModelPlaceholder":"claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"Falha na validação da chave de API. Verifique sua chave e tente novamente.","addProviderApiKeyTitle":"Adicionar chave de API {provider}","checking":"Verificando...","check":"Verifique","valid":"Válido","invalid":"Inválido","creating":"Criando...","validationChecksAnthropicCompatible":"A validação verifica {provider} verificando a chave de API.","validationChecksOpenAiCompatible":"A validação verifica {provider} via /models em seu URL base.","priorityLabel":"Prioridade","saving":"Salvando...","save":"Salvar","editConnection":"Editar conexão","accountName":"Nome da conta","email":"E-mail","healthCheckMinutes":"Verificação de integridade (min)","healthCheckHint":"Intervalo de atualização de token proativo. 0 = desabilitado.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Falha ao testar a conexão","failed":"Falha","leaveBlankKeepCurrentApiKey":"Deixe em branco para manter a chave API atual.","editCompatibleTitle":"Editar {type} Compatível","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Chave API (para verificação)","compatibleProdPlaceholder":"{type} Compatível (Produção)","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","applyCodexAuthLocal":"Apply auth","exportCodexAuthFile":"Export auth","codexAuthAppliedLocal":"Codex auth.json applied locally","codexAuthApplyFailed":"Failed to apply Codex auth.json locally","codexAuthExported":"Codex auth.json exported","codexAuthExportFailed":"Failed to export Codex auth.json","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)"},"settings":{"title":"Configurações","general":"Geral","security":"Segurança","appearance":"Aparência","routing":"Roteamento","cache":"Cache","resilience":"Resiliência","systemPrompt":"Alerta do sistema","thinkingBudget":"Pensando no orçamento","proxy":"Procurador","pricing":"Preços","storage":"Armazenamento","policies":"Políticas","ipFilter":"Filtro IP","comboDefaults":"Padrões de combinação","fallbackChains":"Cadeias substitutas","changePassword":"Alterar senha","enablePassword":"Habilitar senha","darkMode":"Modo escuro","lightMode":"Modo claro","systemTheme":"Tema do sistema","debugToggle":"Enable Debug Mode","sidebarVisibilityToggle":"Show Sidebar Items","enableCache":"Habilitar cache","cacheTTL":"Cache TTL","maxCacheSize":"Tamanho máximo do cache","clearCache":"Limpar Cache","cacheHits":"Acessos de cache","cacheMisses":"Perdas de cache","hitRate":"Taxa de acerto","cacheEntries":"Entradas de cache","cacheSettings":"Cache Settings","semanticCache":"Semantic Cache","maxEntries":"Max Entries","ttlMinutes":"TTL (minutes)","promptCache":"Cache de prompt","strategy":"Strategy","preserveClientCache":"Preserve Client Cache","enabled":"Enabled","loading":"Loading...","saving":"Salvando...","save":"Save","circuitBreaker":"Disjuntor","retryPolicy":"Política de Nova Tentativa","maxRetries":"Máximo de tentativas","retryDelay":"Atraso na nova tentativa","timeoutMs":"Tempo limite (ms)","enableSystemPrompt":"Habilitar prompt do sistema","systemPromptText":"Texto de prompt do sistema","autoDisableBannedAccounts":"Auto-Disable Banned Accounts","autoDisableDescription":"Permanently mark provider connections as deactivated if they return specific terminal ban signals (e.g. HTTP 403 \'verify your account\'). This removes them from the combo rotation.","autoDisableThreshold":"Ban Threshold","autoDisableThresholdDesc":"Consecutive ban signals required before permanent deactivation.","enableThinking":"Habilite o pensamento","maxThinkingTokens":"Tokens de pensamento máximo","enableProxy":"Habilitar proxy","proxyUrl":"URL proxy","pricingRates":"Formato de taxas de preços","currentPricing":"Visão geral de preços atuais","loadingPricing":"Carregando dados de preços...","noPricing":"Não há dados de preços disponíveis","input":"Entrada","output":"Saída","cached":"Em cache","reasoning":"Raciocínio","cacheCreation":"Criação de Cache","customPricing":"Preço personalizado","databaseSize":"Tamanho do banco de dados","backupDb":"Banco de dados de backup","restoreDb":"Restaurar banco de dados","exportData":"Exportar dados","importData":"Importar dados","clearData":"Limpar todos os dados","clearDataConfirm":"Isso excluirá permanentemente todos os dados. Tem certeza?","enableRequestLogs":"Habilitar registros de solicitação","logRetention":"Retenção de registros","ipWhitelist":"Lista de permissões de IP","ipBlacklist":"Lista negra de IP","addIP":"Adicionar IP","savedSuccessfully":"Configurações salvas com sucesso","ai":"IA","advanced":"Avançado","localMode":"Modo Local — Todos os dados armazenados em sua máquina","settingsSectionsAria":"Seções de configurações","switchThemes":"Alternar entre temas claros e escuros","themeSelectionAria":"Seleção de tema","themeLight":"Luz","themeDark":"Escuro","themeSystem":"Sistema","sidebarVisibility":"Hide sidebar items","sidebarVisibilityDesc":"Hide any sidebar navigation entry to reduce visual clutter.","sidebarVisibilityHint":"Any sidebar section is hidden automatically when a...","hideHealthLogs":"Ocultar registros de verificação de integridade","hideHealthLogsDesc":"Quando ativado, suprime mensagens [HealthCheck] no console do servidor","themeAccent":"Cor do tema","themeAccentDesc":"Escolha uma cor predefinida ou crie seu próprio tema com uma cor","themeCreate":"Criar tema","themeCustom":"Tema personalizado","themeBlue":"Azul","themeRed":"Vermelho","themeGreen":"Verde","themeViolet":"Violeta","themeOrange":"Laranja","themeCyan":"Ciano","whitelabeling":"Branding","whitelabelingDesc":"Customize the application name and logo","appName":"Application Name","appNameDesc":"Display name shown in sidebar and browser tab","customLogo":"Custom Logo URL","customLogoDesc":"URL to your custom logo image","uploadLogo":"Upload Logo","resetLogo":"Reset to Default","logoPreview":"Preview","customFavicon":"Browser Favicon","customFaviconDesc":"URL to your custom favicon (shown in browser tab)","uploadFavicon":"Upload Favicon","resetFavicon":"Reset Favicon","faviconPreview":"Favicon Preview","flushCache":"Liberar cache","flushing":"Rubor…","size":"Tamanho","hits":"Acessos","evictions":"Despejos","loadingCacheStats":"Carregando estatísticas de cache…","globalProxy":"Procurador global","globalProxyDesc":"Configure um proxy de saída global para todas as chamadas de API. Provedores individuais, combos e chaves podem substituir isso.","noGlobalProxy":"Nenhum proxy global configurado","globalLabel":"Globais","configure":"Configurar","globalSystemPrompt":"Alerta do sistema global","systemPromptDesc":"Injetado em todas as solicitações no nível do proxy","saved":"Salvo","systemPromptPlaceholder":"Digite o prompt do sistema para injetar em todas as solicitações...","systemPromptHint":"Este prompt é anexado à mensagem do sistema de cada solicitação. Use para instruções globais, diretrizes de segurança ou regras de formatação de resposta.","chars":"{count} caracteres","thinkingBudgetTitle":"Pensando no orçamento","thinkingBudgetDesc":"Controle o uso do token de raciocínio de IA em todas as solicitações","passthrough":"Passagem","passthroughDesc":"Sem alterações – o cliente controla o orçamento pensado","auto":"Automático","autoDesc":"Remova todas as configurações de pensamento – deixe o provedor decidir","custom":"Personalizado","customDesc":"Defina um orçamento fixo de tokens para todas as solicitações","adaptive":"Adaptativo","adaptiveDesc":"Dimensione o orçamento com base na complexidade da solicitação","effortNone":"Nenhum (0 tokens)","effortLow":"Baixo (tokens de 1K)","effortMedium":"Médio (10 mil tokens)","effortHigh":"Alto (128 mil tokens)","tokenBudget":"Orçamento de token","tokens":"fichas","baseEffortLevel":"Nível de esforço básico","adaptiveHint":"O modo adaptativo é dimensionado a partir desse nível básico com base na contagem de mensagens, no uso da ferramenta e no comprimento do prompt.","requireLogin":"Exigir login","requireLoginDesc":"Quando LIGADO, o painel requer senha. Quando DESLIGADO, acesse sem login.","currentPassword":"Senha atual","enterCurrentPassword":"Digite a senha atual","newPassword":"Nova senha","enterNewPassword":"Digite a nova senha","confirmPassword":"Confirme a nova senha","confirmPasswordPlaceholder":"Confirme a nova senha","passwordsNoMatch":"As senhas não coincidem","passwordUpdated":"Senha atualizada com sucesso","failedUpdatePassword":"Falha ao atualizar a senha","errorOccurred":"Ocorreu um erro","updatePassword":"Atualizar senha","setPassword":"Definir senha","apiEndpointProtection":"Proteção de endpoint de API","requireAuthModels":"Exigir chave de API para /models","requireAuthModelsDesc":"Quando ativado, o endpoint /v1/models retorna 404 para solicitações não autenticadas. Impede a descoberta de modelos por usuários não autorizados.","blockedProviders":"Provedores bloqueados","blockedProvidersDesc":"Oculte provedores específicos da resposta /v1/models. Os provedores bloqueados não aparecerão nas listagens de modelos.","providersBlocked":"{count} provedor(es) bloqueado(s) em /models","blockProviderTitle":"Bloquear {provider}","unblockProviderTitle":"Desbloquear {provider}","cliFingerprint":"CLI Fingerprint Matching","cliFingerprintDesc":"Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.","cliFingerprintEnabled":"{count} provider(s) with CLI fingerprint active","enableFingerprintTitle":"Enable fingerprint for {provider}","disableFingerprintTitle":"Disable fingerprint for {provider}","routingStrategy":"Estratégia de Roteamento","routingAdvancedGuideTitle":"Orientação avançada de roteamento","routingAdvancedGuideHint1":"Use Fill First para prioridade previsível, Round Robin para justiça e P2C para resiliência de latência.","routingAdvancedGuideHint2":"Se os fornecedores variarem em qualidade/custo, comece com Opção de custo para trabalho em segundo plano e Menos usado para desgaste equilibrado.","fillFirst":"Preencha primeiro","fillFirstDesc":"Use contas em ordem de prioridade","roundRobin":"Rodada Robin","roundRobinDesc":"Percorrer todas as contas","p2c":"P2C","p2cDesc":"Escolha 2 aleatoriamente, use o mais saudável","random":"Aleatório","randomDesc":"Conta aleatória a cada solicitação","leastUsed":"Menos usado","leastUsedDesc":"Escolha a conta usada menos recentemente","costOpt":"Opção de custo","costOptDesc":"Prefira a conta mais barata disponível","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Limite pegajoso","stickyLimitDesc":"Chamadas por conta antes de mudar","modelAliases":"Aliases de modelo","modelAliasesTitle":"Aliases de Modelo","modelAliasesDesc":"Padrões curinga para remapear nomes de modelos • Use * e ?","addCustomAlias":"Adicionar Alias Personalizado","deprecatedModelId":"ID do modelo depreciado","newModelId":"Novo ID do modelo","customAliases":"Aliases Personalizados","builtInAliases":"Aliases Integrados","backgroundDegradationTitle":"Degradação de Tarefas em Background","backgroundDegradationDesc":"Detecta automaticamente tarefas em background (títulos, resumos) e roteia para modelos mais baratos","enableDegradation":"Ativar Degradação em Background","enableDegradationHint":"Quando ativado, tarefas em background como geração de títulos e resumos são roteadas automaticamente para modelos mais baratos","tasksDetected":"Tarefas detectadas","degradationMap":"Mapa de Degradação de Modelos","premiumModel":"Modelo premium","cheapModel":"Modelo barato","detectionPatterns":"Padrões de Deteção","newPattern":"ex: \\"gerar um título\\"","aliasPatternPlaceholder":"claude-soneto-*","aliasTargetPlaceholder":"claude-soneto-4-20250514","pattern":"Padrão","targetModel":"Modelo alvo","add":"+ Adicionar","session":"Sessão","sessionDetailsAria":"Detalhes da sessão","status":"Estado","authenticated":"Autenticado","guest":"Convidado","loginTime":"Hora de login","sessionAge":"Idade da sessão","browser":"Navegador","clearLocalData":"Limpar dados locais","logout":"Sair","clearLocalDataConfirm":"Limpar todos os dados locais? Isso redefinirá suas preferências.","unknown":"Desconhecido","systemActor":"sistema","ipAccessControl":"Controle de acesso IP","ipAccessControlDesc":"Bloquear ou permitir endereços IP específicos","ipModeDisabled":"Desativado","ipModeBlacklist":"Lista negra","ipModeWhitelist":"Lista de permissões","ipModeWhitelistPriority":"Prioridade WL","addIpAddress":"Adicionar endereço IP","ipAddressPlaceholder":"192.168.1.0/24 ou 10.0.*.*","block":"+ Bloquear","allow":"+ Permitir","blocked":"Bloqueado ({count})","allowed":"Permitido ({count})","temporaryBans":"Banimentos temporários ({count})","minLeft":"{min}m restantes","auditLog":"Registro de auditoria","searchAuditLogs":"Pesquisar registros de auditoria...","failedLoadAuditLog":"Falha ao carregar o log de auditoria","noAuditEvents":"Nenhum evento de auditoria encontrado","action":"Ação","actor":"Ator","details":"Detalhes","time":"Hora","fallbackChainsTitle":"Cadeias substitutas","fallbackChainsDesc":"Definir ordem de fallback do provedor por modelo","addChain":"+ Adicionar corrente","modelName":"Nome do modelo","modelNamePlaceholder":"claude-soneto-4-20250514","providersCommaSeparated":"Provedores (separados por vírgula, em ordem de prioridade)","providersCommaSeparatedPlaceholder":"antrópico, openai, gêmeos","createChain":"Criar cadeia","noFallbackChains":"Sem cadeias de fallback","noFallbackChainsDesc":"Crie uma cadeia para definir a ordem de fallback do provedor para um modelo.","loadingFallbackChains":"Carregando cadeias de fallback...","deleteChainConfirm":"Excluir cadeia substituta para \\"{model}\\"?","chainCreated":"Cadeia criada para {model}","chainDeleted":"Cadeia excluída para {model}","failedCreateChain":"Falha ao criar cadeia","failedDeleteChain":"Falha ao excluir a cadeia","deleteChain":"Excluir cadeia","fillModelAndProviders":"Preencha o nome do modelo e os fornecedores","addAtLeastOneProvider":"Adicione pelo menos um provedor","comboDefaultsTitle":"Padrões de combinação","comboDefaultsGuideTitle":"Como ajustar os padrões de combinação","comboDefaultsGuideHint1":"Mantenha as tentativas baixas em fluxos de baixa latência; aumente o tempo limite apenas para tarefas de geração longa.","comboDefaultsGuideHint2":"Use substituições de provedor quando um provedor precisar de um comportamento de tempo limite/nova tentativa diferente dos padrões globais.","globalComboConfig":"Configuração de combinação global","defaultStrategy":"Estratégia padrão","defaultStrategyDesc":"Aplicado a novos combos sem estratégia explícita","comboStrategyAria":"Estratégia combinada","priority":"Prioridade","weighted":"Ponderado","maxRetriesLabel":"Máximo de tentativas","retryDelayLabel":"Atraso de nova tentativa (ms)","timeoutLabel":"Tempo limite (ms)","healthCheck":"Verificação de saúde","healthCheckDesc":"Verifique previamente a disponibilidade do provedor","trackMetrics":"Rastrear métricas","trackMetricsDesc":"Registrar métricas de solicitação por combinação","providerOverrides":"Substituições de provedor","providerOverridesDesc":"Substitua o tempo limite e novas tentativas por provedor. As configurações do provedor substituem os padrões globais.","providerMaxRetriesAria":"{provider} máximo de novas tentativas","providerTimeoutAria":"{provider} tempo limite ms","removeProviderOverrideAria":"Remover substituição de {provider}","newProviderNamePlaceholder":"por exemplo google, abraai...","newProviderNameAria":"Novo nome do provedor","retries":"novas tentativas","ms":"senhora","saveComboDefaults":"Salvar padrões de combinação","maxNestingDepth":"Profundidade máxima de aninhamento","concurrencyPerModel":"Simultaneidade/Modelo","queueTimeout":"Tempo limite da fila (ms)","providerProfiles":"Perfis de Provedores","providerProfilesDesc":"Configurações de resiliência separadas para provedores OAuth (baseado em sessão) e chave de API (medida). Os provedores OAuth têm limites mais rígidos devido aos limites de taxas mais baixos.","oauthProviders":"Provedores OAuth","apiKeyProviders":"Provedores de chaves de API","transientCooldown":"Recarga transitória","rateLimitCooldown":"Recarga do Limite de Taxa","maxBackoffLevel":"Nível máximo de espera","cbThreshold":"Limite CB","cbResetTime":"Tempo de reinicialização do CB","rateLimiting":"Limitação de taxa","rateLimitingDesc":"Os provedores de chaves de API são automaticamente limitados por taxas com padrões seguros. Os limites são aprendidos nos cabeçalhos de resposta e se adaptam ao longo do tempo.","defaultSafetyNet":"Rede de segurança padrão","rpm":"RPM","minGap":"Intervalo mínimo","maxConcurrent":"Máximo simultâneo","activeLimiters":"Limitadores Ativos","noActiveLimiters":"Ainda não há limitadores de taxa ativos.","reservoir":"Reservatório","running":"Correndo","queued":"Na fila","circuitBreakers":"Disjuntores","breakerStateClosed":"Fechado","breakerStateOpen":"Abrir","breakerStateHalfOpen":"Meio aberto","tripped":"{count} tropeçou","healthy":"{count} íntegro","resetAll":"Redefinir tudo","noCircuitBreakers":"Nenhum disjuntor ativo ainda. Eles são criados automaticamente quando as solicitações fluem pelo pipeline combinado.","failures":"{count} falha(s)","policiesLocked":"Políticas e identificadores bloqueados","allOperational":"Todos os sistemas operacionais – sem bloqueios ou disjuntores desarmados","loadingPolicies":"Carregando políticas...","lockedIdentifiers":"Identificadores bloqueados","unlockedIdentifier":"Desbloqueado: {identifier}","sinceDate":"desde {date}","forceUnlock":"Forçar desbloqueio","unlocking":"Desbloqueando...","failedUnlock":"Falha ao desbloquear","failedLoadWithStatus":"Falha ao carregar: {status}","failedLoadResilience":"Falha ao carregar o status de resiliência","saveFailed":"Falha ao salvar","resetFailed":"Falha na redefinição","loadingResilience":"Carregando status de resiliência...","retry":"Tentar novamente","systemStorage":"Sistema e armazenamento","allDataLocal":"Todos os dados armazenados localmente em sua máquina","databasePath":"Caminho do banco de dados","exportDatabase":"Exportar banco de dados","exportAll":"Exportar tudo (.tar.gz)","importDatabase":"Importar banco de dados","confirmDbImport":"Confirmar importação do banco de dados","confirmDbImportDesc":"Isso substituirá todos os dados atuais pelo conteúdo de {file}. Um backup será criado automaticamente antes da importação.","yesImport":"Sim, importar","lastBackup":"Último backup","noBackupYet":"Ainda não há backup","backupNow":"Faça backup agora","backupRestore":"Backup e restauração","viewBackups":"Ver backups","hide":"Esconder","backupRetentionDesc":"Os instantâneos do banco de dados são criados automaticamente antes da restauração e a cada 15 minutos quando os dados são alterados. Retenção: 24 horas + 30 backups diários com rotação inteligente.","loadingBackups":"Carregando backups...","noBackupsYet":"Nenhum backup disponível ainda. Os backups serão criados automaticamente quando os dados forem alterados.","backupsAvailable":"{count} backup(s) disponíveis","refresh":"Atualizar","confirm":"Confirmar?","yes":"Sim","no":"Não","restore":"Restaurar","invalidFileType":"Tipo de arquivo inválido. Somente arquivos .sqlite são aceitos.","exportFailed":"Falha na exportação","exportFailedWithError":"Falha na exportação: {error}","fullExportFailedWithError":"Falha na exportação completa: {error}","backupCreated":"Backup criado: {file}","restoreSuccess":"Restaurado! {connections} conexões, {nodes} nós, {combos} combos, {apiKeys} chaves de API.","importSuccess":"Banco de dados importado! {connections} conexões, {nodes} nós, {combos} combos, {apiKeys} chaves de API.","justNow":"agora mesmo","minutesAgo":"{count}m atrás","hoursAgo":"{count}h atrás","daysAgo":"{count}d atrás","backupReasonManual":"manual","backupReasonPreRestore":"pré-restauração","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"Nenhuma alteração desde o último backup","backupFailed":"Falha no backup","restoreFailed":"Falha na restauração","importFailed":"Falha na importação","errorDuringRestore":"Ocorreu um erro durante a restauração","errorDuringImport":"Ocorreu um erro durante a importação","modelPricing":"Preço do modelo","modelPricingDesc":"Configurar taxas de custo por modelo • Todas as taxas em tokens de US$/1 milhão","providers":"Provedores","registry":"Registro","priced":"Preço","searchProvidersModels":"Pesquise fornecedores ou modelos...","showAll":"Mostrar tudo","noProvidersMatch":"Nenhum provedor corresponde à sua pesquisa.","howPricingWorks":"Como funciona o preço","cacheWrite":"Gravação em cache","unsaved":"não salvo","resetDefaults":"Redefinir padrões","saveProvider":"Salvar provedor","model":"Modelo","models":"modelos","moreProviders":"{count} mais provedores","withPricing":"com preços configurados","policiesCircuitBreakers":"Políticas e disjuntores","activeIssuesDetected":"Problemas ativos detectados","off":"Desligado","resetPricingConfirm":"Redefinir todos os preços de {provider} para os padrões?","pricingDescInput":"Entrada: tokens enviados ao modelo","pricingDescOutput":"Saída: tokens gerados","pricingDescCached":"Armazenado em cache: entrada reutilizada (~50% da taxa de entrada)","pricingDescReasoning":"Raciocínio: tokens de pensamento (volta para Saída)","pricingDescCacheWrite":"Cache Write: criando entradas de cache (volta para Input)","pricingDescFormula":"Custo = (entrada × taxa_de_entrada) + (saída × taxa_de_saída) + (em cache × taxa_de_cache) por milhão de tokens.","pricingSettingsTitle":"Configurações de preços","totalModels":"Modelos totais","active":"Ativo","costCalculation":"Cálculo de custos","costCalculationDesc":"Os custos são calculados com base no uso do token e nas taxas de preços configuradas para cada modelo.","pricingFormat":"Formato de preços","pricingFormatDesc":"Todas as taxas são em tokens de US$/1 milhão (dólares por milhão de tokens).","tokenTypes":"Tipos de token","inputTokenDesc":"Tokens de prompt padrão","outputTokenDesc":"Tokens de conclusão/resposta","cachedTokenDesc":"Tokens de entrada armazenados em cache (normalmente 50% da taxa de entrada)","reasoningTokenDesc":"Tokens especiais de raciocínio/pensamento (substituição para taxa de produção)","cacheCreationTokenDesc":"Tokens usados para criar entradas de cache (fallback para taxa de entrada)","customPricingNote":"Você pode substituir o preço padrão de modelos específicos. As substituições personalizadas têm prioridade sobre os preços detectados automaticamente.","editPricing":"Editar preços","viewFullDetails":"Ver detalhes completos","themeCoral":"Coral"},"translator":{"title":"Tradutor","metaTitle":"Parque do Tradutor | OmniRoute","metaDescription":"Depure, teste e visualize traduções de formatos de API entre provedores","playgroundTitle":"Parque do Tradutor","playground":"Parque infantil","realtime":"Atividade de tradução em tempo real","chatTester":"Testador de bate-papo","testBench":"Bancada de testes","liveMonitor":"Monitoramento ao vivo","modeDescriptionPlayground":"Cole qualquer corpo de solicitação de API e veja como o OmniRoute o traduz entre formatos de provedor (OpenAI ↔ Claude ↔ Gemini ↔ API de respostas)","modeDescriptionChatTester":"Envie solicitações de chat reais por meio do OmniRoute e inspecione todo o percurso: entrada, solicitação traduzida, resposta do provedor e saída traduzida.","modeDescriptionTestBench":"Execute cenários predefinidos e compare a compatibilidade entre provedores e modelos.","modeDescriptionLiveMonitor":"Assista a eventos de tradução em tempo real à medida que as solicitações fluem pelo OmniRoute.","modeDescriptionFallback":"Depure, teste e visualize como o OmniRoute traduz solicitações de API entre provedores.","recentTranslations":"Traduções recentes","noTranslations":"Ainda não há traduções","source":"Fonte","target":"Alvo","time":"Hora","model":"Modelo","status":"Estado","latency":"Latência","totalTranslations":"Total de traduções","successful":"Bem sucedido","errors":"Erros","avgLatency":"Latência média","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Ao vivo – atualização automática","paused":"Pausado","eventsAppearHint":"Os eventos de tradução aparecem aqui conforme as solicitações fluem pelo OmniRoute. Use qualquer um destes métodos para gerar eventos:","chatTesterTab":"Guia Testador de bate-papo","testBenchTab":"Aba Bancada de Teste","externalApiCalls":"Chamadas de API externas","ideCliIntegrations":"Integrações IDE/CLI","inMemoryNote":"Nota: Os eventos são armazenados na memória e redefinidos quando o servidor é reiniciado.","ok":"OK","errorShort":"ERRO","formatConverter":"Conversor de formato","formatConverterDescription":"Cole ou digite um corpo de solicitação JSON. O tradutor detectará automaticamente o formato de origem e o converterá para o formato de destino. Use isto para depurar como o OmniRoute traduz solicitações entre formatos (OpenAI ↔ Claude ↔ Gemini ↔ API de respostas).","input":"Entrada","output":"Saída","auto":"Automático","swapFormats":"Trocar formatos","translateAction":"Traduzir","clear":"Limpar","inputPlaceholder":"Cole o corpo da solicitação aqui ou selecione um modelo abaixo...","exampleTemplates":"Modelos de exemplo","exampleTemplatesHint":"- Clique para carregar","templateLoadHint":"O modelo carrega a solicitação no formato {format}. Altere o formato de origem para carregar em um formato diferente.","compatibilityTester":"Testador de compatibilidade","compatibilityReport":"Relatório de compatibilidade","testBenchDescription":"Execute cenários predefinidos (Simple Chat, Tool Calling, etc.) para verificar a tradução e a compatibilidade do provedor. Selecione um formato de origem e um provedor de destino e execute todos os testes para ver uma porcentagem de compatibilidade. Use isso para descobrir quais recursos funcionam entre os provedores.","targetProvider":"Provedor de destino","runAllTests":"Execute todos os testes","runTest":"Executar teste","reRun":"Executar novamente","running":"Correndo...","passed":"passou","failed":"falhou","passedIconLabel":"✅ Aprovado","chunks":"pedaços","scenarioSimpleChat":"Bate-papo simples","scenarioToolCalling":"Chamada de ferramenta","scenarioMultiTurn":"Multivoltas","scenarioThinking":"Pensando","scenarioSystemPrompt":"Alerta do sistema","scenarioStreaming":"Transmissão","templateNames":{"simple-chat":"Bate-papo simples","tool-calling":"Chamada de ferramenta","multi-turn":"Multivoltas","thinking":"Pensando","system-prompt":"Alerta do sistema","streaming":"Transmissão"},"templateDescriptions":{"simple-chat":"Mensagem de texto básica","tool-calling":"Invocação de função/ferramenta","multi-turn":"Conversa com história","thinking":"Pensamento/raciocínio estendido","system-prompt":"Instruções complexas do sistema","streaming":"Solicitação de streaming SSE"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente útil.","userGreeting":"Olá! Como você está hoje?"},"toolCalling":{"userWeather":"Como está o clima em São Paulo?","toolDescription":"Obtenha o clima atual para um local","cityNameDescription":"Nome da cidade"},"multiTurn":{"system":"Você é um assistente de codificação.","userInitial":"Escreva uma função para classificar um array em Python.","assistantExample":"Aqui está uma função de classificação simples:\\n\\n```píton\\ndef sort_array(arr):\\n retornar classificado (arr)\\n```","userFollowUp":"Agora classifique em ordem decrescente."},"thinking":{"question":"Qual é a soma dos primeiros 100 números primos?"},"systemPrompt":{"systemInstruction":"Você é um engenheiro de software sênior especializado em sistemas distribuídos. Responda às perguntas de forma concisa usando as melhores práticas do setor. Sempre forneça exemplos de código quando relevante. Formate suas respostas usando markdown.","question":"Como faço para implementar um padrão de disjuntor?"},"streaming":{"prompt":"Conte-me uma pequena história sobre um robô aprendendo a pintar."}},"openaiCompatibleLabel":"Compatível com OpenAI","anthropicCompatibleLabel":"Compatível Antrópico","noTemplateForFormat":"Nenhum modelo para este formato","translationFailed":"Falha na tradução: {error}","pipelineDebugger":"Depurador de pipeline","translationPipeline":"Pipeline de Tradução","pipelineVisualization":"Visualização de pipeline","pipelineVisualizationHint":"Envie uma mensagem para ver como sua solicitação flui através de detecção → tradução → chamada do provedor.","chatTesterDescription":"Envie mensagens em um formato de cliente específico e inspecione cada etapa do pipeline de tradução.","chatTesterFlow":"Solicitação do cliente → Detecção de formato → OpenAI Intermediário → Formato do provedor → Resposta","clickStepToInspect":"Clique em qualquer etapa para inspecionar os dados nessa fase.","clientFormat":"Formato do cliente","provider":"Provedor","modelPlaceholder":"Selecione ou digite um nome de modelo...","sendMessageToSeePipeline":"Envie uma mensagem para ver o pipeline de tradução","chatMessageHintPrefix":"Sua mensagem será formatada como um","chatMessageHintSuffix":"solicitação, traduzida por meio do pipeline e enviada ao provedor selecionado.","youWithFormat":"Você ({format})","assistant":"Assistente","typeMessage":"Digite uma mensagem...","send":"Enviar","clientRequest":"Solicitação do cliente","clientRequestDescription":"O corpo da solicitação que seu cliente enviaria","formatDetected":"Formato detectado","formatDetectedDescription":"OmniRoute detecta automaticamente o formato da API na estrutura da solicitação","openaiIntermediate":"OpenAI intermediário","openaiIntermediateDescription":"Todos os formatos são primeiro normalizados para o formato OpenAI (a ponte universal)","providerFormat":"Formato do provedor","providerFormatDescription":"O formato OpenAI é traduzido para o formato nativo do provedor","providerResponse":"Resposta do provedor","providerResponseRawDescription":"A resposta bruta da API do provedor","providerResponseSseDescription":"O fluxo SSE bruto da API do provedor","unexpectedError":"Ocorreu um erro inesperado","error":"Erro","errorMessage":"Erro: {message}","requestFailed":"Falha na solicitação","noTextExtracted":"(Nenhum texto extraído)","liveMonitorDescriptionPrefix":"Mostra eventos de tradução à medida que as chamadas de API fluem pelo OmniRoute. Os eventos vêm do buffer na memória (redefinições na reinicialização). Usar","liveMonitorDescriptionSuffix":"ou chamadas de API externas para gerar eventos."},"usage":{"title":"Uso","loggerTab":"Registrador","proxyTab":"Procurador","budgetManagement":"Gestão Orçamentária","budgetSaved":"Limites de orçamento salvos","budgetSaveFailed":"Falha ao salvar o orçamento","loadingBudgetData":"Carregando dados do orçamento...","noApiKeysTitle":"Sem chaves de API","noApiKeysDescription":"Adicione chaves de API primeiro para configurar limites de orçamento.","apiKey":"Chave de API","todaysSpend":"Gasto de hoje","thisMonth":"Este mês","setLimits":"Definir limites","dailyLimitUsd":"Limite Diário (USD)","monthlyLimitUsd":"Limite Mensal (USD)","warningThresholdPercent":"Limite de aviso (%)","dailyLimitPlaceholder":"por exemplo 5h00","monthlyLimitPlaceholder":"por exemplo 50,00","warningThresholdPlaceholder":"80","saveLimits":"Salvar Limites","budgetOk":"Orçamento OK — {remaining} restantes","budgetExceeded":"Orçamento excedido — solicitações podem ser bloqueadas","totalRequests":"Total de solicitações","noDataYet":"Ainda não há dados","latency":"Latência","latencyP50":"p50","latencyP95":"pág.95","latencyP99":"p99","promptCache":"Cache de prompt","systemHealth":"Saúde do sistema","entries":"Entradas","activeCount":"{count} ativo","openCircuitBreakersDetected":"Disjuntores abertos detectados","hitRate":"Taxa de acerto","hitsMisses":"Acertos / Erros","circuitBreakers":"Disjuntores","lockedIPs":"IPs bloqueados","lockoutsAutoRefreshHint":"Bloqueios de limite de taxa por modelo • Atualização automática de 10s","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} restantes","howItWorks":"Como funciona","howItWorksSubtitle":"Saiba como as avaliações validam suas respostas do LLM","define":"Definir","defineStepDescription":"Crie casos de teste com prompts de entrada e critérios de saída esperados usando estratégias como contém, regex ou correspondência exata.","run":"Corre","runStepDescription":"Execute casos de teste em seus endpoints LLM por meio do OmniRoute. Cada caso é enviado como uma solicitação de API real.","evaluate":"Avaliar","evaluateStepDescription":"As respostas são comparadas com os critérios esperados. Veja aprovação/reprovação para cada caso com métricas de latência e feedback detalhado.","evalSuites":"Suítes de avaliação","evalSuitesHint":"Clique em um conjunto para visualizar casos de teste e execute para avaliar seus endpoints LLM","evalsLoading":"Carregando suítes de avaliação...","noEvalSuitesFound":"Nenhuma suíte Eval encontrada","noEvalSuitesDescription":"Os conjuntos de avaliação podem ser definidos por meio da API ou em código. Eles testam os resultados do modelo em relação aos resultados esperados usando estratégias como contém, regex, correspondência exata e funções personalizadas.","columnCase":"Caso","columnStatus":"Estado","columnLatency":"Latência","columnDetails":"Detalhes","columnModel":"Modelo","columnStrategy":"Estratégia","columnExpected":"Esperado","statsSuites":"Suítes","statsTestCases":"Casos de teste","statsModels":"Modelos","statsCoverage":"Cobertura","statsStrategiesCount":"{count} estratégias","evaluationStrategies":"Estratégias de Avaliação","modelsUnderTest":"Modelos em teste","searchSuitesPlaceholder":"Pesquisar suítes...","passSuffix":"passar","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Executar avaliação","runningProgress":"Executando {current}/{total}...","passRate":"taxa de aprovação","summaryBreakdown":"{passed} aprovado · {failed} reprovado · {total} total","passedIconLabel":"✅ Aprovado","failedIconLabel":"❌ Falhou","detailsContains":"Contém: \\"{term}\\"","detailsRegex":"Regex: {pattern}","detailsExpected":"Esperado: \\"{expected}\\"","noResultsYet":"Ainda não há resultados","testCasesCount":"Casos de teste ({count})","noTestCasesDefined":"Nenhum caso de teste definido","runEvalHint":"Clique em \\"Executar avaliação\\" para executar todos os casos em seu endpoint LLM. Cada teste envia uma solicitação real através do OmniRoute.","notifyNoTestCases":"Nenhum caso de teste definido para este pacote","notifyAllCasesPassed":"Todos os casos {total} foram aprovados ✅","notifySomeCasesFailed":"{passed}/{total} aprovado, {failed} falhou","notifyEvalRunFailed":"Falha na execução da avaliação","notifyEvalTitle":"Avaliação: {name}","modelEvals":"Avaliações de modelos","evalsHeroDescription":"Teste e valide seus endpoints LLM executando conjuntos de avaliação predefinidos. Cada conjunto contém casos de teste que enviam prompts reais por meio do OmniRoute e comparam as respostas com os critérios esperados, ajudando você a detectar regressões, comparar modelos e garantir a qualidade da resposta entre os provedores.","qualityValidation":"Validação de Qualidade","modelComparison":"Comparação de modelos","regressionDetection":"Detecção de regressão","latencyBenchmarks":"Benchmarks de latência","modelLockouts":"Bloqueios de modelo","noLockouts":"Nenhum modelo atualmente bloqueado","activeSessions":"Sessões ativas","noSessions":"Nenhuma sessão ativa","sessionsHint":"As sessões aparecem conforme as solicitações fluem pelo proxy","sessionsTrackedHint":"Rastreado por solicitação de impressão digital • Atualização automática 5s","session":"Sessão","age":"Idade","requests":"Solicitações","connection":"Conexão","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value}m","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Limites do provedor","noProviders":"Nenhum provedor conectado","connectProvidersForQuota":"Conecte-se a provedores com OAuth para rastrear o uso e os limites de cota de API.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(filtrado de {count})","autoRefresh":"Atualização automática","refreshAll":"Atualizar tudo","loadingQuotas":"Carregando...","account":"Conta","modelQuotas":"Cotas de modelo","lastUsed":"Last Refreshed","actions":"Ações","refreshQuota":"Atualizar cota","today":"Hoje","tomorrow":"Amanhã","dayTimeFormat":"{day}, {time}","inDuration":"em {duration}","notApplicable":"N/A","rawPlanWithValue":"Plano bruto: {plan}","noPlanFromProvider":"Nenhum plano do provedor","noQuotaData":"Sem dados de cota","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Não há dados de cota disponíveis","noAccountsForTierFilter":"Nenhuma conta encontrada para filtro de nível","tierAll":"Todos","tierEnterprise":"Empresa","tierTeam":"Equipe","tierBusiness":"Negócios","tierUltra":"Ultra","tierPro":"Pró","tierPlus":"Mais","tierFree":"Grátis","tierUnknown":"Desconhecido"},"modals":{"waitingAuth":"Aguardando autorização","verificationUrl":"URL de verificação","yourCode":"Seu código","remoteAccess":"Acesso remoto:","connectedSuccess":"Conectado com sucesso!","connectionFailed":"Falha na conexão","chooseAuthMethod":"Escolha seu método de autenticação:","awsBuilderId":"ID do construtor AWS","awsIamIdentity":"Centro de identidade AWS IAM","googleAccount":"Conta do Google","githubAccount":"Conta GitHub","importToken":"Token de importação","pasteToken":"Cole o token de atualização do Kiro IDE.","awsRegion":"Região AWS","autoDetecting":"Detecção automática de tokens...","readingFromCache":"Lendo do cache SSO da AWS","readingFromCursor":"Lendo do banco de dados Cursor IDE","initializing":"Inicializando...","pricingConfig":"Configuração de preços","loadingPricing":"Carregando dados de preços...","pricingRatesFormat":"Formato de taxas de preços","noPricingData":"Não há dados de preços disponíveis","noModelsFound":"Nenhum modelo encontrado"},"loggers":{"allProviders":"Todos os provedores","allModels":"Todos os modelos","allAccounts":"Todas as contas","allApiKeys":"Todas as chaves de API","allTypes":"Todos os tipos","allLevels":"Todos os níveis","modelAZ":"Modelo A-Z","modelZA":"Modelo Z-A","loadingLogs":"Carregando registros...","loadingProxyLogs":"Carregando registros de proxy...","noLogEntries":"Nenhuma entrada de registro encontrada","noPayloadData":"Não há dados de carga disponíveis para esta entrada de log.","proxyEvent":"Evento proxy","proxy":"Procurador","level":"Nível","directNative":"Direto (nativo)","combo":"Combinação","inputTokens":"Eu:","outputTokens":"Ó:"},"stats":{"usageOverview":"Visão geral do uso","outputTokens":"Tokens de saída","totalCost":"Custo total","usageByModel":"Uso por modelo","usageByAccount":"Uso por conta","failedToLoad":"Falha ao carregar estatísticas de uso.","tokenHealth":"Saúde do token","totalOAuth":"OAuth total","healthy":"Saudável","warning":"Aviso","errored":"Erro","lastCheck":"Última verificação","noData":"Sem dados","share":"Compartilhar","unableToLoad":"Não foi possível carregar as métricas do sistema","product":"Produto","resources":"Recursos","company":"Empresa"},"auth":{"welcome":"Bem vindo","signIn":"Faça login","enterPassword":"Digite sua senha para continuar","password":"Senha","unifiedProxy":"Proxy de API de IA unificado","unifiedAiApiProxy":"Proxy de API de IA unificado","unifiedAiApiProxyDesc":"Encaminhe solicitações para vários provedores de IA por meio de um único endpoint. Balanceamento de carga, failover e rastreamento de uso integrados.","passwordNotEnabled":"A proteção por senha não está ativada","loading":"Carregando...","invalidPassword":"Senha inválida","errorOccurredRetry":"Ocorreu um erro. Por favor, tente novamente.","configureInstance":"Vamos configurar sua instância do OmniRoute","runOnboardingWizard":"Execute o assistente de integração para configurar sua senha e conectar seu primeiro provedor de IA.","startOnboarding":"Comece a integração","secureYourInstance":"Proteja sua instância","setPasswordDescription":"Defina uma senha para proteger seu painel e proteger seus endpoints de API contra acesso não autorizado.","configurePassword":"Configurar senha","continue":"Continuar","windowWillClose":"Esta janela fechará automaticamente...","closeTabNow":"Você pode fechar esta guia agora.","copyUrlManual":"Copie o URL da barra de endereço e cole-o no aplicativo.","accessDeniedDescription":"Você não tem permissão para acessar este recurso. Verifique sua chave API ou entre em contato com o administrador.","goToDashboard":"Vá para o painel","featureMultiProviderTitle":"Multi-Provedor","featureMultiProviderDesc":"OpenAI, Antrópico, Google e muito mais","featureLoadBalancingTitle":"Balanceamento de carga","featureLoadBalancingDesc":"Distribua solicitações de forma inteligente","featureUsageTrackingTitle":"Rastreamento de uso","featureUsageTrackingDesc":"Monitore custos e tokens","resetPassword":"Redefinir senha","resetDescription":"Escolha um método para recuperar o acesso ao seu painel","stopServer":"Pare o servidor OmniRoute","processing":"Processando...","pleaseWait":"Aguarde enquanto concluímos a autorização.","authSuccess":"Autorização bem-sucedida!","copyUrl":"Copie este URL","accessDenied":"Acesso negado","methodCliTitle":"Método 1: redefinição CLI","methodCliDescription":"Execute o seguinte comando no servidor onde o OmniRoute está sendo executado:","methodCliHint":"Isso solicitará que você defina uma nova senha. O servidor deve ser parado primeiro.","methodManualTitle":"Método 2: reinicialização manual","methodManualDescription":"Exclua a senha do banco de dados e defina uma nova na inicialização:","setPasswordInYour":"Defina uma nova senha em seu","fileLabelSuffix":"arquivo:","newPasswordPlaceholder":"sua_nova_senha","deleteSettingsFile":"Excluir","orRemovePasswordHashField":"ou remova o campo passwordHash","restartServerWithNewPassword":"Reinicie o servidor - ele usará a nova senha","backToLogin":"Voltar ao login","forgotPassword":"Esqueceu a senha?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Autorização","Content-Disposition":"Disposição de conteúdo","waitingForAuthorization":"Waiting for authorization...","waitingForGoogleAuthorization":"Waiting for Google authorization...","waitingForOpenAIAuthorization":"Waiting for OpenAI authorization...","waitingForAntigravityAuthorization":"Waiting for Antigravity authorization...","waitingForQoderAuthorization":"Waiting for Qoder authorization...","exchangingCodeForTokens":"Exchanging code for tokens..."},"landing":{"brandName":"OmniRoute","navigateHome":"Navegue até a casa","toggleMenu":"Alternar menu","featuresLink":"Recursos","docsLink":"Documentos","github":"GitHub","versionLive":"v1.0 agora está ativo","oneEndpoint":"Um ponto final para","allProviders":"Todos os provedores de IA","heroDescription":"Proxy de endpoint de IA com painel da web – uma porta JavaScript do CLIProxyAPI. Funciona perfeitamente com Claude Code, OpenAI Codex, Cline, RooCode e outras ferramentas CLI.","getStarted":"Comece","viewOnGithub":"Ver no GitHub","powerfulFeatures":"Recursos poderosos","featuresSubtitle":"Tudo o que você precisa para gerenciar sua infraestrutura de IA em um só lugar, desenvolvida para escalar.","featureUnifiedEndpointTitle":"Ponto final unificado","featureUnifiedEndpointDesc":"Acesse todos os provedores por meio de um único URL de API padrão.","featureEasySetupTitle":"Configuração fácil","featureEasySetupDesc":"Comece a trabalhar em minutos com o comando npx.","featureModelFallbackTitle":"Modelo substituto","featureModelFallbackDesc":"Alterne automaticamente os provedores em caso de falha ou alta latência.","featureUsageTrackingTitle":"Rastreamento de uso","featureUsageTrackingDesc":"Análise detalhada e monitoramento de custos em todos os modelos.","featureOAuthApiKeysTitle":"Chaves OAuth e API","featureOAuthApiKeysDesc":"Gerencie credenciais com segurança em um cofre.","featureCloudSyncTitle":"Sincronização na nuvem","featureCloudSyncDesc":"Sincronize suas configurações entre dispositivos instantaneamente.","featureCliSupportTitle":"Suporte CLI","featureCliSupportDesc":"Funciona com Claude Code, Codex, Cline, Cursor e muito mais.","featureDashboardTitle":"Painel","featureDashboardDesc":"Painel visual para análise de tráfego em tempo real.","howItWorks":"Como funciona o OmniRoute","howItWorksDescription":"Os dados fluem perfeitamente da sua aplicação através da nossa camada de roteamento inteligente até o melhor fornecedor para o trabalho.","howItWorksStep1Title":"1. CLI e SDKs","howItWorksStep1Description":"Suas solicitações partem de suas ferramentas favoritas ou de nosso SDK unificado. Basta alterar o URL base.","howItWorksStep2Title":"2. Hub OmniRoute","howItWorksStep2Description":"Nosso mecanismo analisa o prompt, verifica a integridade do provedor e encaminha para obter menor latência ou custo.","howItWorksStep3Title":"3. Provedores de IA","howItWorksStep3Description":"A solicitação é atendida por OpenAI, Anthropic, Gemini ou outros instantaneamente.","getStartedIn30Seconds":"Comece em 30 segundos","getStartedDescription":"Instale o OmniRoute, configure seus provedores por meio do painel da web e comece a rotear solicitações de IA.","installOmniRoute":"Instalar OmniRoute","installStepDescription":"Execute o comando npx para iniciar o servidor instantaneamente","openDashboard":"Abra o painel","openDashboardStepDescription":"Configure provedores e chaves de API via interface web","routeRequests":"Solicitações de rota","routeRequestsStepDescription":"Aponte suas ferramentas CLI para {endpoint}","terminal":"terminal","copy":"Copiar","copied":"✓ Copiado","startingOmniRoute":"Iniciando o OmniRoute...","serverRunningOnLabel":"Servidor em execução","dashboardLabel":"Painel","readyToRoute":"Pronto para rota! ✓","configureProvidersNote":"📝 Configure provedores no painel ou use variáveis de ambiente","dataLocation":"Localização dos dados:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Janelas:","product":"Produto","dashboardLink":"Painel","changelog":"Registro de alterações","resources":"Recursos","documentation":"Documentação","npm":"NPM","legal":"Jurídico","mitLicense":"Licença MIT","footerTagline":"O endpoint unificado para geração de IA. Conecte, encaminhe e gerencie seus provedores de IA com facilidade.","copyright":"© {year} OmniRoute. Todos os direitos reservados.","flowToolClaudeCode":"Código Claude","flowToolOpenAICodex":"Códice OpenAI","flowToolCline":"Cline","flowToolCursor":"Cursor","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"Antrópico","flowProviderGemini":"Gêmeos","flowProviderGithubCopilot":"Copiloto GitHub","interactiveDiagram":"Diagrama interativo visível na área de trabalho","ctaTitle":"Pronto para simplificar sua infraestrutura de IA?","ctaDescription":"Junte-se aos desenvolvedores que estão simplificando suas integrações de IA com o OmniRoute. Código aberto e gratuito para começar.","startFree":"Comece grátis","readDocumentation":"Leia a documentação"},"docs":{"title":"Documentação","quickStart":"Início rápido","features":"Recursos","supportedProviders":"Provedores Suportados","supportedProvidersToc":"Provedores","commonUseCases":"Casos de uso comuns","clientCompatibility":"Compatibilidade do cliente","protocolsToc":"Protocols","apiReference":"Referência de API","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","method":"Método","path":"Caminho","notes":"Notas","modelPrefixes":"Prefixos de modelo","prefix":"Prefixo","troubleshooting":"Solução de problemas","supportsChat":"Suporta endpoints de chat e respostas.","oauthAutoRefresh":"Conexão OAuth com atualização automática de token.","fullStreaming":"Suporte completo de streaming para todos os modelos.","docsLabel":"Documentos","docsHeroDescription":"Gateway de IA para LLMs de vários provedores. Um endpoint para OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor e mais de 20 provedores.","openDashboard":"Abra o painel","endpointPage":"Página de ponto final","github":"GitHub","reportIssue":"Reportar problema","onThisPage":"Nesta página","documentationVersion":"Documentação - v{version}","quickStartStep1Title":"1. Instale e execute","quickStartStep1Prefix":"Corre","quickStartStep1Middle":"ou clone do GitHub e execute","quickStartStep2Title":"2. Crie uma chave API","quickStartStep2Text":"Vá para Endpoint -> Chaves Registradas. Gere uma chave por ambiente.","quickStartStep3Title":"3. Conecte provedores","quickStartStep3Text":"Adicione contas de provedor por meio de login OAuth, chave de API ou conexão automática de nível gratuito.","quickStartStep4Title":"4. Defina o URL da base do cliente","quickStartStep4Prefix":"Aponte seu cliente IDE ou API para","quickStartStep4Suffix":"Use o prefixo do provedor, por exemplo","featureRoutingTitle":"Roteamento multiprovedor","featureRoutingText":"Encaminhe solicitações para mais de 30 provedores de IA por meio de um único endpoint compatível com OpenAI. Suporta APIs de chat, respostas, áudio e imagem.","featureCombosTitle":"Combos e Balanceamento","featureCombosText":"Crie combinações de modelos com cadeias de fallback e estratégias de balanceamento: round-robin, prioridade, aleatório, menos usado e com custo otimizado.","featureUsageTitle":"Uso e rastreamento de custos","featureUsageText":"Contagem de tokens em tempo real, cálculo de custos por provedor/modelo e detalhamento de uso por chave de API e conta.","featureAnalyticsTitle":"Painel analítico","featureAnalyticsText":"Análise visual com gráficos de solicitações, tokens, erros, latência, custos e popularidade do modelo ao longo do tempo.","featureHealthTitle":"Monitoramento de Saúde","featureHealthText":"Verificações de integridade em tempo real, status do provedor, estados de disjuntores e detecção automática de limite de taxa com espera exponencial.","featureCliTitle":"Ferramentas CLI","featureCliText":"Gerencie configurações de IDE, exporte/importe backups, descubra perfis de codex e defina configurações no painel.","featureSecurityTitle":"Segurança e Políticas","featureSecurityText":"Autenticação de chave de API, filtragem de IP, proteção contra injeção de prompt, políticas de domínio, gerenciamento de sessão e registro de auditoria.","featureCloudSyncTitle":"Sincronização na nuvem","featureCloudSyncText":"Sincronize sua configuração com Cloudflare Workers para acesso remoto com credenciais criptografadas e failover automático.","providersAcrossConnectionTypes":"{count} provedores em três tipos de conexão.","manageProviders":"Gerenciar provedores","providersCount":"{count} provedores","providerTypeFree":"Nível gratuito","providerTypeOAuth":"OAuth","providerTypeApiKey":"Chave de API","useCaseSingleEndpointTitle":"Endpoint único para muitos provedores","useCaseSingleEndpointText":"Aponte os clientes para uma URL base e roteie por prefixo de modelo (por exemplo: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Fallback e troca de modelo com combos","useCaseFallbackText":"Crie modelos combinados no Dashboard e mantenha a configuração do cliente estável enquanto os provedores alternam internamente.","useCaseUsageVisibilityTitle":"Visibilidade de uso, custo e depuração","useCaseUsageVisibilityText":"Rastreie tokens e custos por provedor, conta e chave de API nas guias Uso e Análise.","clientCherryStudioTitle":"Estúdio Cereja","baseUrlLabel":"URL base","chatEndpointLabel":"Ponto de extremidade do bate-papo","modelRecommendationLabel":"Recomendação de modelo: prefixo explícito","clientCodexTitle":"Modelos de copiloto Codex/GitHub","clientCodexBullet1":"Use IDs de modelo com","clientCodexBullet2":"Os modelos da família Codex roteiam automaticamente para","clientCodexBullet3":"Os modelos não-Codex continuam","clientCursorTitle":"Cursor IDE","clientCursorBullet1":"Usar","clientCursorBullet1Suffix":"prefixo para modelos Cursor.","clientCursorBullet2":"Conexão OAuth - faça login na página Provedores.","clientClaudeTitle":"Código Claude / Antigravidade","clientClaudeBullet1Prefix":"Usar","clientClaudeBullet1Middle":"(Cláudio) ou","clientClaudeBullet1Suffix":"Prefixo (antigravidade).","protocolsTitle":"Protocols: MCP & A2A","protocolsDescription":"OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.","protocolMcpTitle":"MCP (Model Context Protocol)","protocolMcpDesc":"Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.","protocolMcpStep1":"Start MCP transport with `omniroute --mcp`.","protocolMcpStep2":"Point your MCP client to stdio transport.","protocolMcpStep3":"Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.","protocolA2aTitle":"A2A (Agent2Agent)","protocolA2aDesc":"Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.","protocolA2aStep1":"Read `/.well-known/agent.json` for agent discovery.","protocolA2aStep2":"Send `message/send` or `message/stream` requests to `POST /a2a`.","protocolA2aStep3":"Manage task lifecycle with `tasks/get` and `tasks/cancel`.","protocolTroubleshootingTitle":"Protocol Troubleshooting","protocolTroubleshooting1":"If MCP status is offline, verify the stdio process is running and heartbeat file is updating.","protocolTroubleshooting2":"If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.","protocolTroubleshooting3":"Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.","endpointChatNote":"Endpoint de chat compatível com OpenAI (padrão).","endpointResponsesNote":"Endpoint da API de respostas (Codex, série o).","endpointModelsNote":"Catálogo de modelos para todos os provedores conectados.","endpointAudioNote":"Transcrição de áudio (Deepgram, AssemblyAI).","endpointSpeechNote":"Geração de texto para fala (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Geração de embeddings de texto (OpenAI, Cohere, Voyage).","endpointImagesNote":"Geração de imagens (NanoBanana).","endpointRewriteChatNote":"Auxiliar de reescrita para clientes sem /v1.","endpointRewriteResponsesNote":"Reescreva o auxiliar para respostas sem /v1.","endpointRewriteModelsNote":"Reescreva o auxiliar para descoberta de modelo sem /v1.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","modelPrefixesDescriptionStart":"Use o prefixo do provedor antes do nome do modelo para rotear para um provedor específico. Exemplo:","modelPrefixesDescriptionEnd":"rotas para GitHub Copilot.","provider":"Provedor","type":"Tipo","troubleshootingModelRouting":"Se o cliente falhar com o roteamento do modelo, use provedor/modelo explícito (por exemplo: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Se você receber erros de modelo ambíguos, escolha um prefixo de provedor em vez de um ID de modelo simples.","troubleshootingCodexFamily":"Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; roteador seleciona /respostas automaticamente.","troubleshootingTestConnection":"Use Painel > Provedores > Testar conexão antes de testar em IDEs ou clientes externos.","troubleshootingCircuitBreaker":"Se um provedor mostrar o disjuntor aberto, aguarde o resfriamento ou verifique a página de integridade para obter detalhes.","troubleshootingOAuth":"Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor."},"legal":{"privacyPolicy":"Política de Privacidade","termsOfService":"Termos de Serviço","providerConfigurations":"Configurações do provedor","apiKeys":"Chaves de API","usageLogs":"Registros de uso","applicationSettings":"Configurações do aplicativo","viewExportAnalytics":"Visualize e exporte análises de uso","clearHistory":"Limpe o histórico de uso a qualquer momento","configureRetention":"Configurar políticas de retenção de log","backupRestore":"Faça backup e restaure seu banco de dados","privacyMetadataTitle":"Política de Privacidade | OmniRoute","privacyMetadataDescription":"Política de privacidade para o roteador proxy OmniRoute AI API.","termsMetadataTitle":"Termos de Serviço | OmniRoute","termsMetadataDescription":"Termos de serviço do roteador proxy OmniRoute AI API.","backToHome":"De volta para casa","lastUpdated":"Última atualização: {date}","policyLastUpdatedDate":"13 de fevereiro de 2026","listSeparator":"-","questionsVisit":"Perguntas? Visite nosso","githubRepository":"Repositório GitHub","privacySection1Title":"1. Arquitetura local primeiro","privacySection1Text":"OmniRoute foi projetado como um aplicativo local. Todo o processamento e armazenamento de dados ocorre inteiramente em sua máquina. Não existe um servidor centralizado que coleta suas informações.","privacySection2Title":"2. Dados que armazenamos","privacyDataStoredIn":"Os seguintes dados são armazenados localmente em","privacyDataProviderConfigurationsDesc":"URLs de conexão, tipos de provedores e configurações de prioridade","privacyDataApiKeysDesc":"criptografado e armazenado localmente para autenticação com provedores de IA","privacyDataUsageLogsDesc":"contagens de solicitações, uso de token, nomes de modelos, carimbos de data/hora e tempos de resposta","privacyDataApplicationSettingsDesc":"preferências de tema, estratégia de roteamento e configurações combinadas","privacySection3Title":"3. Sem telemetria","privacySection3Text":"OmniRoute não coleta telemetria, análises ou relatórios de falhas. Nenhum dado é enviado para nós ou para terceiros. Seus padrões de uso, chamadas de API e configurações permanecem totalmente privados.","privacySection4Title":"4. Provedores terceirizados de IA","privacySection4Text":"Ao fazer chamadas de API por meio do OmniRoute, suas solicitações são encaminhadas para os provedores de IA que você configurou (por exemplo: OpenAI, Anthropic, Google). Esses provedores têm suas próprias políticas de privacidade que regem a forma como lidam com seus dados. Por favor, revise:","privacyOpenAiPolicy":"Política de privacidade da OpenAI","privacyAnthropicPolicy":"Política de Privacidade Antrópica","privacyGooglePolicy":"Política de privacidade do Google","privacySection5Title":"5. Sincronização na nuvem (opcional)","privacySection5Text":"Se você ativar o recurso opcional de sincronização em nuvem, as configurações do provedor e as chaves de API poderão ser transmitidas para um endpoint de nuvem configurado. Este recurso está desabilitado por padrão e requer aceitação explícita.","privacySection6Title":"6. Registro","privacyLoggingIntro":"Os logs de solicitação podem ser configurados nas configurações do painel. Você pode:","privacySection7Title":"7. Seus direitos","privacySection7TextStart":"Como todos os dados são armazenados localmente, você tem controle total. Você pode excluir seus dados a qualquer momento, removendo o","privacySection7TextEnd":"diretório ou usando os recursos de backup e restauração do banco de dados no painel.","termsSection1Title":"1. Visão geral","termsSection1Text":"OmniRoute é um roteador proxy API AI local que opera inteiramente em sua máquina. Ele roteia solicitações para vários provedores de IA com balanceamento de carga, failover e rastreamento de uso.","termsSection2Title":"2. Responsabilidades do usuário","termsResponsibilityApiKeys":"Você é o único responsável por gerenciar suas próprias chaves de API e credenciais para provedores de IA terceirizados (OpenAI, Anthropic, Google, etc.).","termsResponsibilityCompliance":"Você deve cumprir os termos de serviço de cada provedor de IA cuja API você acessa por meio do OmniRoute.","termsResponsibilitySecurity":"Você é responsável pela segurança da instalação local do OmniRoute, incluindo a definição de uma senha e a restrição do acesso à rede.","termsSection3Title":"3. Como funciona","termsSection3Text":"OmniRoute atua como um proxy intermediário. As chamadas de API enviadas ao OmniRoute são traduzidas e encaminhadas para seus provedores de IA configurados. OmniRoute não modifica o conteúdo de suas solicitações ou respostas além da tradução de protocolo necessária.","termsSection4Title":"4. Tratamento de dados","termsDataStoredLocally":"Todos os dados são armazenados localmente na sua máquina em um banco de dados SQLite.","termsNoTransmission":"O OmniRoute não transmite nenhum dado para servidores externos, a menos que você habilite explicitamente os recursos de sincronização na nuvem.","termsDataLocationText":"Logs de uso, chaves de API e configuração são armazenados em","termsSection5Title":"5. Isenção de responsabilidade","termsSection5Text":"OmniRoute é fornecido \\"como está\\" sem qualquer tipo de garantia. Não somos responsáveis ​​por quaisquer custos incorridos através do uso da API, interrupções de serviço ou perda de dados. Sempre mantenha backups de sua configuração.","termsSection6Title":"6. Código aberto","termsSection6Text":"OmniRoute é um software de código aberto. Você é livre para inspecioná-lo, modificá-lo e distribuí-lo sob os termos de sua licença."},"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"},"templateNames":{"simple-chat":"Simple Chat","streaming":"Streaming","system-prompt":"System Prompt","thinking":"Thinking","tool-calling":"Tool Calling","multi-turn":"Multi-turn"},"templateDescriptions":{"simple-chat":"Basic chat template","streaming":"Streaming template","system-prompt":"System prompt template","thinking":"Thinking template","tool-calling":"Tool calling template","multi-turn":"Multi-turn template"},"templatePayloads":{"simpleChat":{"system":"Você é um assistente de IA útil.","userGreeting":"Olá! Como posso ajudá-lo hoje?"},"streaming":{"prompt":"Escreva uma história sobre"},"systemPrompt":{"question":"Qual é o sentido da vida?","systemInstruction":"Forneça uma resposta ponderada e filosófica."},"thinking":{"question":"Explique a computação quântica"},"toolCalling":{"cityNameDescription":"O nome da cidade para obter o clima","toolDescription":"Obtenha o clima atual para um local","userWeather":"Qual é o clima em Tóquio?"},"multiTurn":{"system":"Você é um assistente útil.","assistantExample":"Ficarei feliz em ajudá-lo com isso.","userInitial":"preciso de ajuda com","userFollowUp":"Você pode explicar isso?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","memoryEntriesSub":"In-memory LRU","dbEntries":"DB Entries","dbEntriesSub":"Persisted (SQLite)","cacheHits":"Cache Hits","cacheHitsSub":"of {total} total","tokensSaved":"Tokens Saved","tokensSavedSub":"Estimated from hits","hitRate":"Hit Rate","performance":"Cache Performance","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behavior":"Cache Behavior","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","idempotency":"Idempotency Layer","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","promptCache":"Prompt Cache (Provider-Side)","cachedRequests":"Cached Requests","cacheHitRate":"Cache Hit Rate","cachedTokens":"Cached Tokens","cacheCreationTokens":"Cache Creation Tokens","cacheMetrics":"Prompt Cache Metrics","withCacheControl":"With Cache Control","cachedTokensRead":"Cached Tokens (Read)","cacheCreationWrite":"Cache Creation (Write)","cacheReuseRatio":"Cache Reuse Ratio","cacheReuseRatioDesc":"Cached tokens / Total input tokens","estCostSaved":"Est. Cost Saved","requestsShort":"reqs","inputShort":"In","cachedShort":"Cached","writeShort":"Write","resetting":"Resetting...","resetMetrics":"Reset Metrics","byProvider":"Breakdown by Provider","provider":"Provider","requests":"Requests","inputTokens":"Input Tokens","cachedTokensCol":"Cached","cacheCreation":"Creation","trend24h":"Cache Trend (24h)","cached":"Cached","overview":"Overview","entries":"Entries","searchEntries":"Search entries...","search":"Search","loading":"Loading...","noEntries":"No cache entries found","signature":"Signature","model":"Model","created":"Created","expires":"Expires","actions":"Actions"}}')}];
2
2
 
3
3
  //# sourceMappingURL=src_i18n_messages_pt_json_%5Bjson%5D_cjs_0fwb8p.._.js.map