omniroute 3.3.6 → 3.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__950558b8._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__9698d25e._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__a32d3818._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__bc251fbe._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__d5a064d5._.js +1 -1
- package/app/.next/server/chunks/_05c48915._.js +1 -1
- package/app/.next/server/chunks/_06515a8a._.js +1 -1
- package/app/.next/server/chunks/_2115d8de._.js +1 -1
- package/app/.next/server/chunks/_3ac953eb._.js +1 -1
- package/app/.next/server/chunks/_4b8fd853._.js +1 -1
- package/app/.next/server/chunks/_68683848._.js +1 -1
- package/app/.next/server/chunks/_ee9b677b._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_ar_json_e1d5145b._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_bg_json_34495a0f._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_cs_json_db6f9ebc._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_da_json_7500ed02._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_de_json_b2a40318._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_es_json_82775c4a._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_fi_json_dcc6745e._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_fr_json_fe904570._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_he_json_3e3c1e1b._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_hi_json_83a0b9e5._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_hu_json_651e00d3._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_id_json_725d4a34._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_in_json_2d7cd177._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_it_json_e23882ae._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_ja_json_fc6af4d8._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_ko_json_0ffdbdc6._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_ms_json_610df819._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_nl_json_55ad1507._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_no_json_9f484a8c._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_phi_json_871ece45._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_pl_json_79d0be4b._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_pt-BR_json_e7b9e8db._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_pt_json_2fc13a82._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_ro_json_d1a5f5ee._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_ru_json_9d7a9dfe._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_sk_json_1c5bff4a._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_sv_json_e8ae9f28._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_th_json_6ed546bd._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_tr_json_c8d78b01._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_uk-UA_json_c72cdf08._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_vi_json_03ec9dfd._.js +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{b9999bd9d2b99bf6.js → d3c3a9266158d9b0.js} +1 -1
- package/app/CHANGELOG.md +19 -1
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/handlers/responseTranslator.ts +1 -1
- package/app/open-sse/package.json +1 -1
- package/app/package-lock.json +3 -3
- package/app/package.json +1 -1
- package/app/src/i18n/messages/ar.json +2 -1
- package/app/src/i18n/messages/bg.json +2 -1
- package/app/src/i18n/messages/cs.json +2 -1
- package/app/src/i18n/messages/da.json +2 -1
- package/app/src/i18n/messages/de.json +2 -1
- package/app/src/i18n/messages/es.json +2 -1
- package/app/src/i18n/messages/fi.json +2 -1
- package/app/src/i18n/messages/fr.json +2 -1
- package/app/src/i18n/messages/he.json +2 -1
- package/app/src/i18n/messages/hi.json +2 -1
- package/app/src/i18n/messages/hu.json +2 -1
- package/app/src/i18n/messages/id.json +2 -1
- package/app/src/i18n/messages/in.json +2 -1
- package/app/src/i18n/messages/it.json +2 -1
- package/app/src/i18n/messages/ja.json +2 -1
- package/app/src/i18n/messages/ko.json +2 -1
- package/app/src/i18n/messages/ms.json +2 -1
- package/app/src/i18n/messages/nl.json +2 -1
- package/app/src/i18n/messages/no.json +2 -1
- package/app/src/i18n/messages/phi.json +2 -1
- package/app/src/i18n/messages/pl.json +2 -1
- package/app/src/i18n/messages/pt-BR.json +2 -1
- package/app/src/i18n/messages/pt.json +2 -1
- package/app/src/i18n/messages/ro.json +2 -1
- package/app/src/i18n/messages/ru.json +2 -1
- package/app/src/i18n/messages/sk.json +2 -1
- package/app/src/i18n/messages/sv.json +2 -1
- package/app/src/i18n/messages/th.json +2 -1
- package/app/src/i18n/messages/tr.json +2 -1
- package/app/src/i18n/messages/uk-UA.json +2 -1
- package/app/src/i18n/messages/vi.json +2 -1
- package/app/src/shared/services/opencodeConfig.ts +14 -13
- package/app/tests/unit/t40-opencode-cli-tools-integration.test.mjs +5 -5
- package/package.json +1 -1
- /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_buildManifest.js +0 -0
- /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_clientMiddlewareManifest.json +0 -0
- /package/app/.next/static/{1ny0VWnN2mDf-NnjRzXAY → NYBYaP3-LK80ViNPwi7dC}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[111074,a=>{a.v(JSON.parse('{"common":{"save":"Lưu","cancel":"Hủy bỏ","delete":"Xóa","loading":"Đang tải...","error":"Đã xảy ra lỗi","success":"thành công","confirm":"Bạn có chắc không?","refresh":"Làm mới","close":"Đóng","add":"Thêm","edit":"Chỉnh sửa","search":"Tìm kiếm","back":"Quay lại","next":"Tiếp theo","submit":"Gửi","reset":"Đặt lại","copy":"Sao chép","copied":"Đã sao chép!","enabled":"Đã bật","disabled":"Đã tắt","active":"Đang hoạt động","inactive":"Không hoạt động","noData":"Không có sẵn dữ liệu","configure":"Cấu hình","manage":"Quản lý","name":"Tên","actions":"hành động","status":"Trạng thái","type":"loại","model":"người mẫu","models":"mô hình","provider":"nhà cung cấp","account":"Tài khoản","time":"thời gian","details":"Chi tiết","created":"Đã tạo","lastUsed":"Được sử dụng lần cuối","loadMore":"Tải thêm","noResults":"Không tìm thấy kết quả nào","reloadPage":"Tải lại trang","connected":"Đã kết nối","disconnected":"Đã ngắt kết nối","notConfigured":"Chưa được định cấu hình","testConnection":"Kiểm tra kết nối","enable":"Kích hoạt","disable":"Vô hiệu hóa","columns":"Cột","newest":"Mới nhất","oldest":"Cũ nhất","all":"Tất cả","none":"không có","yes":"Có","no":"Không","warning":"Cảnh báo","note":"Lưu ý","free":"miễn phí","skipToContent":"Chuyển đến nội dung","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Chấp nhận","accountId":"ID tài khoản","alias":"Bí danh","apiKeyId":"ID khóa API","apiKeyName":"Tên khóa API","apiKeySecret":"Bí mật khóa API","authorization":"Ủy quyền","content-type":"Loại nội dung","content-length":"Độ dài nội dung","cookie":"bánh quy","file":"tập tin","host":"Máy chủ","id":"ID","import":"Nhập khẩu","limit":"giới hạn","offset":"Bù đắp","open":"Mở","origin":"Xuất xứ","promptTokens":"Mã thông báo nhắc nhở","completionTokens":"Mã thông báo hoàn thành","totalTokens":"Tổng số token","rawModel":"Mô hình thô","scope":"Phạm vi","skill":"kỹ năng","sortBy":"Sắp xếp theo","sortOrder":"Sắp xếp thứ tự","tab":"Thẻ","text":"văn bản","textarea":"Vùng văn bản","tool":"Công cụ","toolId":"Mã công cụ","web":"Web","whereUsed":"Nơi sử dụng","whitelist":"Danh sách trắng","blacklist":"Danh sách đen","resolve":"giải quyết","force":"Lực lượng","base64url":"URL Base64","hex":"lục giác","range":"Phạm vi","component":"thành phần","redirect_uri":"URI chuyển hướng","idempotency-key":"Chìa khóa bình đẳng","error_description":"Mô tả lỗi","code":"Mã","compatible":"Tương thích","chat-completions":"Hoàn thành cuộc trò chuyện","oauth":"OAuth","auth_token":"Mã thông báo xác thực","crypto":"tiền điện tử","hours":"Giờ","selfsigned":"Tự ký","proxy_id":"ID proxy","proxyId":"ID proxy","connectionId":"ID kết nối","resolveConnectionId":"Giải quyết ID kết nối","resolve_connection_id":"Giải quyết ID kết nối","scope_id":"ID phạm vi","scopeId":"ID phạm vi","jwtSecret":"Bí mật JWT","keytar":"Bàn phím","better-sqlite3":"tốt hơn-sqlite3","undici":"undic","builder-id":"ID người xây dựng","musicDesc":"Mô tả âm nhạc","musicGeneration":"Thế hệ âm nhạc","idc":"IDC","cloud-status-changed":"Trạng thái đám mây đã thay đổi","where_used":"Nơi sử dụng","windowMs":"Cửa sổ (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Danh sách cho phép của công cụ","TOOL_DENYLIST":"Danh sách từ chối công cụ","Failed to save pricing":"Không lưu được giá","Failed to reset pricing":"Không thể đặt lại giá","apikey":"Khóa API","http":"HTTP"},"sidebar":{"home":"Trang chủ","dashboard":"Trang tổng quan","providers":"Nhà cung cấp","combos":"Combo","usage":"Cách sử dụng","analytics":"Phân tích","costs":"Chi phí","health":"sức khỏe","limits":"Giới hạn & hạn ngạch","cliTools":"Công cụ CLI","media":"Phương tiện","settings":"Cài đặt","translator":"Người phiên dịch","docs":"Tài liệu","issues":"vấn đề","apiManager":"Trình quản lý API","logs":"Nhật ký","auditLog":"Nhật ký kiểm tra","shutdown":"Tắt máy","restart":"Khởi động lại","shutdownConfirm":"Tắt OmniRoute?","restartConfirm":"Khởi động lại OmniRoute?","version":"v{version}","debug":"Gỡ lỗi","system":"Hệ thống","help":"Trợ giúp","serverDisconnected":"Máy chủ bị ngắt kết nối","serverDisconnectedMsg":"Máy chủ proxy đã bị dừng hoặc đang khởi động lại.","expandSidebar":"Mở rộng thanh bên","collapseSidebar":"Thu gọn thanh bên","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Red","themeGreen":"Green","themeViolet":"Violet","themeOrange":"Orange","themeCyan":"Cyan","endpoints":"Điểm cuối","playground":"Playground","agents":"Tác nhân","cliToolsShort":"Công cụ","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Choose a preset theme or create your own with a single color","presetColors":"Popular colors","customTheme":"Custom theme","customThemeDesc":"Click create theme and pick one color","createTheme":"Create theme","activePreset":"Active theme"},"header":{"logout":"Đăng xuất","language":"Ngôn ngữ","providers":"Nhà cung cấp","providerDescription":"Quản lý kết nối nhà cung cấp AI của bạn","combos":"Combo","comboDescription":"Kết hợp mô hình với dự phòng","usage":"Cách sử dụng & phân tích","usageDescription":"Giám sát việc sử dụng API, mức tiêu thụ mã thông báo và nhật ký yêu cầu của bạn","analytics":"Phân tích","analyticsDescription":"Biểu đồ, xu hướng và thông tin đánh giá","cliTools":"Công cụ CLI","cliToolsDescription":"Định cấu hình công cụ CLI","home":"Trang chủ","homeDescription":"Chào mừng đến với OmniRoute","endpoint":"Endpoints","endpointDescription":"Manage proxy endpoints, MCP, A2A, and API endpoints","settings":"Cài đặt","settingsDescription":"Quản lý tùy chọn của bạn","openaiCompatible":"Tương thích OpenAI","anthropicCompatible":"Tương thích với con người","media":"Media","mediaDescription":"Generate images, videos, and music","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"home":{"quickStart":"Bắt đầu nhanh","quickStartDesc":"Hãy đứng dậy và chạy trong 4 bước. Kết nối nhà cung cấp, mô hình định tuyến, giám sát mọi thứ.","fullDocs":"Tài liệu đầy đủ","step1Title":"1. Tạo khóa API","step1Desc":"Đi tới <endpoint>Endpoint</endpoint> -> Khóa đã đăng ký. Tạo một khóa cho mỗi môi trường.","step2Title":"2. Kết nối nhà cung cấp","step2Desc":"Thêm tài khoản trong <providers>Providers</providers>. Hỗ trợ OAuth, Khóa API và các cấp miễn phí.","step3Title":"3. Chỉ vào khách hàng của bạn","step3Desc":"Đặt URL cơ sở thành {url} trong ứng dụng khách IDE hoặc API của bạn.","step4Title":"4. Giám sát & tối ưu hóa","step4Desc":"Theo dõi mã thông báo, chi phí và lỗi trong <logs>Nhật ký yêu cầu</logs> và <analytics>Analytics</analytics>.","providersOverview":"Tổng quan về nhà cung cấp","configuredOf":"{configured} được định cấu hình của {total} nhà cung cấp hiện có","noModelsAvailable":"Không có mô hình có sẵn cho nhà cung cấp này.","configureFirst":"Trước tiên hãy định cấu hình kết nối trong {providers}","configureProvider":"Định cấu hình nhà cung cấp","modelAvailable":"Có mẫu {count}","modelsAvailable":"Có sẵn mẫu {count}","connectionsActive":"{count} kết nối đang hoạt động","connectionsActivePlural":"{count} kết nối đang hoạt động","copyModelName":"Sao chép tên mẫu","documentation":"Tài liệu","healthMonitor":"Theo dõi sức khỏe","reportIssue":"Báo cáo vấn đề","activeError":"{active} đang hoạt động · Lỗi {errors}","oauthLabel":"OAuth","apiKeyLabel":"Khóa API","requestsShort":"{count} yêu cầu","providerModelsTitle":"{provider} - Người mẫu","copiedModel":"Đã sao chép: {model}","aliasLabel":"bí danh","updateNow":"Cập nhật ngay","updating":"Đang cập nhật...","updateAvailableDesc":"Một phiên bản mới có sẵn. Nhấn vào đây để cập nhật.","updateStarted":"Đã bắt đầu cập nhật..."},"analytics":{"title":"Phân tích","overviewDescription":"Giám sát mô hình sử dụng API, mức tiêu thụ mã thông báo, chi phí và xu hướng hoạt động của bạn trên tất cả các nhà cung cấp và mô hình.","evalsDescription":"Chạy bộ đánh giá để kiểm tra và xác thực điểm cuối LLM của bạn. So sánh chất lượng mô hình, phát hiện hồi quy và độ trễ điểm chuẩn.","overview":"Tổng quan","evals":"Đánh giá"},"apiManager":{"title":"Khóa API","createKey":"Tạo khóa API","key":"Chìa khóa","revokeKey":"Thu hồi khóa","revokeConfirm":"Bạn có chắc chắn muốn thu hồi khóa API này không?","noKeys":"Chưa có khóa API nào","noKeysDesc":"Tạo khóa API đầu tiên để xác thực các yêu cầu tới điểm cuối của bạn","keyLabel":"Nhãn khóa","permissions":"Quyền","expiresAt":"Hết hạn","never":"không bao giờ","revoke":"Thu hồi","showKey":"Hiển thị khóa","hideKey":"Ẩn phím","copyKey":"Sao chép khóa API","allModels":"Tất cả các mô hình","selectedModels":"Các mẫu đã chọn","readOnly":"Chỉ đọc","fullAccess":"Toàn quyền truy cập","keyManagement":"Quản lý khóa API","keyManagementDesc":"Tạo và quản lý khóa API để xác thực các yêu cầu tới điểm cuối của bạn","totalKeys":"Tổng số phím","restricted":"Bị hạn chế","totalRequests":"Tổng số yêu cầu","modelsAvailable":"Các mẫu có sẵn","registeredKeys":"Khóa đã đăng ký","keysRegistered":"{count} khóa đã được đăng ký","keyRegistered":"Đã đăng ký khóa {count}","keysSecurityNote":"Mỗi khóa tách biệt việc theo dõi việc sử dụng và có thể được thu hồi một cách độc lập. Các khóa được che dấu sau khi tạo để bảo mật.","createFirstKey":"Tạo chìa khóa đầu tiên của bạn","name":"Tên","usage":"Cách sử dụng","created":"Đã tạo","actions":"hành động","reqs":"yêu cầu","neverUsed":"Chưa bao giờ sử dụng","deleteConfirm":"Xóa khóa API này?","usageTips":"Mẹo sử dụng","tipAuth":"Sử dụng các khóa API trong tiêu đề Cấp phép làm Người ghi tên YOUR_KEY","tipSecure":"Khóa chỉ được hiển thị một lần trong quá trình tạo — hãy lưu trữ chúng một cách an toàn","tipSeparate":"Tạo khóa riêng cho các máy khách hoặc môi trường khác nhau","tipRestrict":"Hạn chế khóa cho các kiểu máy cụ thể để bảo mật tốt hơn và kiểm soát chi phí","keyName":"Tên khóa","keyNamePlaceholder":"ví dụ: Khóa sản xuất, Khóa phát triển","keyNameDesc":"Chọn tên mô tả để xác định mục đích của khóa này","keyCreated":"Đã tạo khóa API","keyCreatedSuccess":"Đã tạo khóa thành công!","keyCreatedNote":"Sao chép và lưu trữ khóa này ngay bây giờ — nó sẽ không được hiển thị lại.","done":"Xong","savePermissions":"Lưu quyền","allowAll":"Cho phép tất cả","restrict":"hạn chế","allowAllInfo":"Chìa khóa này có thể truy cập vào tất cả các mô hình có sẵn.","restrictInfo":"Khóa này có thể truy cập {selected} trong số {total} mô hình.","selected":"{count} đã chọn","all":"Tất cả","clear":"Xóa","searchModels":"Tìm kiếm mô hình theo tên hoặc nhà cung cấp...","noModelsFound":"Không tìm thấy mô hình nào","keyNameRequired":"Tên khóa là bắt buộc","keyNameTooLong":"Tên khóa phải có {max} ký tự trở xuống","keyNameInvalid":"Tên khóa chỉ có thể chứa chữ cái, số, dấu cách, dấu gạch ngang và dấu gạch dưới","invalidKeyName":"Tên khóa không hợp lệ","failedCreateKey":"Không tạo được khóa","failedCreateKeyRetry":"Không tạo được khóa. Vui lòng thử lại.","invalidKeyId":"ID khóa không hợp lệ","failedDeleteKey":"Không thể xóa khóa","failedDeleteKeyRetry":"Không thể xóa khóa. Vui lòng thử lại.","invalidModelsSelection":"Lựa chọn mô hình không hợp lệ","cannotSelectMoreThanModels":"Không thể chọn nhiều hơn {max} mẫu","failedUpdatePermissions":"Không cập nhật được quyền","failedUpdatePermissionsRetry":"Không cập nhật được quyền. Vui lòng thử lại.","unknownProvider":"không rõ","copyMaskedKey":"Sao chép khóa bị che","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Cuối cùng: {date}","editPermissions":"Chỉnh sửa quyền","deleteKey":"Xóa phím","model":"{count} mô hình","models":"{count} mô hình","permissionsTitle":"Quyền: {name}","allowAllDesc":"Chìa khóa này có thể truy cập vào tất cả các mô hình có sẵn.","restrictDesc":"Khóa này có thể truy cập {selectedCount} trong số {totalModels} mô hình.","selectedCount":"{count} đã chọn","autoResolve":"Auto-Resolve","autoResolveDesc":"Auto-resolve ambiguous model names to native provider for this API key.","keyActive":"Key Active","keyActiveDesc":"Enable or disable this API key. Disabled keys are immediately rejected with 403.","accessSchedule":"Access Schedule","accessScheduleDesc":"Restrict access to specific hours and days of the week.","scheduleFrom":"From","scheduleUntil":"Until","scheduleDays":"Days","scheduleTimezone":"Timezone","scheduleTimezoneHint":"Use IANA timezone names, e.g. America/New_York, Europe/Berlin","scheduleActive":"Schedule","disabled":"Disabled","daySun":"Sun","dayMon":"Mon","dayTue":"Tue","dayWed":"Wed","dayThu":"Thu","dayFri":"Fri","daySat":"Sat","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"auditLog":{"title":"Nhật ký kiểm tra","searchPlaceholder":"Hành động tìm kiếm...","action":"hành động","actor":"diễn viên","target":"Mục tiêu","ipAddress":"Địa chỉ IP","timestamp":"Dấu thời gian","noEntries":"Không tìm thấy mục kiểm tra nào","filterByAction":"Lọc theo hành động...","filterByActor":"Lọc theo diễn viên...","filterEntriesAria":"Lọc các mục nhật ký kiểm tra","filterByActionTypeAria":"Lọc theo loại hành động","filterByActorAria":"Lọc theo diễn viên","refreshAuditLogAria":"Làm mới nhật ký kiểm tra","tableAria":"Mục nhật ký kiểm tra","failedFetchAuditLog":"Không tìm nạp được nhật ký kiểm tra","notAvailable":"—","description":"Hành động hành chính và sự kiện bảo mật","showing":"Hiển thị các mục {count} (bù đắp {offset})","previous":"trước đó"},"media":{"title":"Sân chơi phương tiện","subtitle":"Tạo hình ảnh, video và âm nhạc","model":"Model","prompt":"Prompt","generate":"Tạo","generating":"Generating...","loadingModels":"Loading available models...","noModels":"No models available. Configure providers with media capabilities first.","error":"Generation Failed","result":"Result","imageDescription":"Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.","videoDescription":"Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.","musicDescription":"Compose music using Stable Audio Open or MusicGen via ComfyUI."},"cliTools":{"title":"Công cụ CLI","noActiveProviders":"Không có nhà cung cấp đang hoạt động","noActiveProvidersDesc":"Trước tiên, vui lòng thêm và kết nối nhà cung cấp để định cấu hình công cụ CLI.","mapModels":"Mô hình bản đồ","testConnection":"Kiểm tra kết nối","connectionStatus":"Trạng thái kết nối","configureEndpoint":"Định cấu hình điểm cuối","instructions":"Hướng dẫn","modelMapping":"Ánh xạ mô hình","baseUrl":"URL cơ sở","apiKey":"Khóa API","configured":"Đã định cấu hình","notConfigured":"Chưa được định cấu hình","notInstalled":"Chưa được cài đặt","custom":"tùy chỉnh","unknown":"Không xác định","lastSavedAt":"Đã lưu lần cuối: {date}","never":"không bao giờ","justNow":"ngay bây giờ","minutesAgoShort":"{count} phút trước","hoursAgoShort":"{count} giờ trước","daysAgoShort":"{count}ngày trước","monthsAgoShort":"{count}tháng trước","yearsAgoShort":"{count} năm trước","runtimeCheckFailed":"Kiểm tra thời gian chạy không thành công","yourApiKeyPlaceholder":"khóa-api-của bạn","modelPlaceholder":"nhà cung cấp/id mô hình","configurationSaved":"Đã lưu cấu hình thành công.","failedToSave":"Không lưu được cấu hình.","noApiKeysCreateOne":"Không có khóa API - Tạo một khóa trong trang Khóa","defaultOmnirouteKey":"sk_omniroute (mặc định)","selectModel":"Chọn mẫu","selectModelForAlias":"Chọn kiểu máy cho {alias}","selectModelForTool":"Chọn mẫu cho {tool}","select":"chọn","clear":"Xóa","comingSoon":"Sắp có","checkingRuntime":"Đang kiểm tra trạng thái thời gian chạy...","guideOnlyIntegration":"Tích hợp chỉ có hướng dẫn (không yêu cầu thời gian chạy cục bộ)","cliRuntimeDetected":"Đã phát hiện và sẵn sàng thời gian chạy CLI","cliFoundNotRunnable":"Đã tìm thấy CLI nhưng không thể chạy được{reason}","cliRuntimeNotDetected":"Thời gian chạy CLI không được phát hiện","binary":"nhị phân","configPath":"Đường dẫn cấu hình","configPathShort":"Cấu hình","failedCheckRuntimeStatus":"Không thể kiểm tra trạng thái thời gian chạy.","copy":"Sao chép","copied":"Đã sao chép","copyConfig":"Sao chép cấu hình","saveConfig":"Lưu cấu hình","selectionSaved":"Đã lưu lựa chọn","guide":"hướng dẫn","detected":"Đã phát hiện","notReady":"Chưa sẵn sàng","active":"Đang hoạt động","inactive":"Không hoạt động","startMitm":"Bắt đầu MITM","stopMitm":"Dừng MITM","mitmStarted":"MITM đã bắt đầu thành công!","mitmStopped":"MITM đã dừng thành công!","failedStart":"Không khởi động được MITM","failedStop":"Không thể dừng MITM","saveMappings":"Lưu bản đồ","mappingsSaved":"Đã lưu bản đồ!","failedSaveMappings":"Không lưu được bản đồ","howItWorks":"Nó hoạt động như thế nào:","antigravityHowWorksDesc":"Phản trọng lực gửi yêu cầu đến điểm cuối của Google. MITM chặn và chuyển hướng chúng đến OmniRoute.","antigravityStep1":"1. Khởi động MITM để định tuyến các yêu cầu thông qua OmniRoute.","antigravityStep2Prefix":"2. Thêm","antigravityStep2Suffix":"vào tệp máy chủ của bạn dưới dạng 127.0.0.1.","antigravityStep3":"3. Mở AntiGravity và các yêu cầu sẽ được ủy quyền.","sudoPasswordRequiredTitle":"Yêu cầu mật khẩu Sudo","sudoPasswordHint":"Cần có mật khẩu quản trị viên để sửa đổi cài đặt proxy hệ thống và tệp máy chủ.","enterSudoPassword":"Nhập mật khẩu sudo","sudoPasswordRequiredError":"Mật khẩu Sudo là bắt buộc.","cancel":"Hủy bỏ","confirm":"Xác nhận","settingsApplied":"Cài đặt được áp dụng thành công!","failedApplySettings":"Không thể áp dụng cài đặt","settingsReset":"Thiết lập lại cài đặt thành công!","failedResetSettings":"Không thể đặt lại cài đặt","backupRestored":"Đã khôi phục bản sao lưu!","failedRestore":"Không thể khôi phục","checkingCli":"Đang kiểm tra {tool} CLI...","cliNotRunnable":"{tool} CLI đã được cài đặt nhưng không chạy được","cliNotInstalled":"{tool} CLI chưa được cài đặt","cliNotDetected":"{tool} CLI không được phát hiện","cliDetectedReady":"{tool} CLI đã được phát hiện và sẵn sàng","cliFoundFailedHealthcheck":"{tool} CLI đã được tìm thấy nhưng quá trình kiểm tra tình trạng thời gian chạy không thành công{reason}.","installCliPrompt":"Vui lòng cài đặt {tool} CLI để sử dụng tính năng này.","installCodexPrompt":"Vui lòng cài đặt Codex CLI để sử dụng tính năng tự động áp dụng.","hide":"Ẩn","howToInstall":"Cách cài đặt","installationGuide":"Hướng dẫn cài đặt","platforms":"macOS/Linux/Windows:","afterInstallationRun":"Sau khi cài đặt, hãy chạy","toVerify":"để xác minh.","current":"hiện tại","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Đặt lại về mặc định","providerModelPlaceholder":"nhà cung cấp/id mô hình","apply":"Áp dụng","reset":"Đặt lại","manualConfig":"Cấu hình thủ công","backups":"Sao lưu","configBackups":"Cấu hình sao lưu","noBackupsYet":"Chưa có bản sao lưu nào. Các bản sao lưu được tạo tự động trước mỗi lần Áp dụng hoặc Đặt lại.","restore":"Khôi phục","backupRestoredReloading":"Đã khôi phục bản sao lưu! Đang tải lại trạng thái...","failedRestoreBackup":"Không thể khôi phục bản sao lưu","applied":"Đã áp dụng!","failed":"thất bại","resetDone":"Đặt lại!","omnirouteConfiguredOpenAiCompatible":"OmniRoute được định cấu hình là nhà cung cấp tương thích với OpenAI","provider":"nhà cung cấp","model":"người mẫu","providers":"Nhà cung cấp","auth":"Xác thực","noApiKeysAvailable":"Không có khóa API nào","usingDefaultOmniroute":"Sử dụng mặc định: sk_omniroute","updateConfig":"Cập nhật cấu hình","applyConfig":"Áp dụng cấu hình","noBackupsAvailable":"Không có bản sao lưu nào có sẵn.","profileSaved":"Đã lưu hồ sơ \\"{name}\\"!","failedSaveProfile":"Không lưu được hồ sơ","profileActivated":"Hồ sơ đã được kích hoạt!","failedActivateProfile":"Không thể kích hoạt hồ sơ","profiles":"Hồ sơ","savedProfiles":"Hồ sơ đã lưu","noProfilesYet":"Chưa có hồ sơ nào được lưu. Lưu cấu hình hiện tại dưới dạng hồ sơ bên dưới.","activate":"Kích hoạt","deleteProfile":"Xóa hồ sơ","profileNamePlaceholder":"Tên hồ sơ (ví dụ: Tài khoản cá nhân)","saveCurrent":"Lưu hiện tại","codexAuthNotePrefix":"Công dụng của Codex","codexAuthNoteMiddle":"với","codexAuthNoteSuffix":"Nhấp vào \\"Áp dụng\\" để tự động định cấu hình.","claudeManualConfiguration":"Claude CLI - Cấu hình thủ công","codexManualConfiguration":"Codex CLI - Cấu hình thủ công","droidManualConfiguration":"Factory Droid - Cấu hình thủ công","openClawManualConfiguration":"Open Claw - Cấu hình thủ công","clineManualConfiguration":"Cấu hình thủ công Cline","kiloManualConfiguration":"Cấu hình thủ công mã Kilo","toolDescriptions":{"antigravity":"IDE chống trọng lực của Google với MITM","claude":"Mã Claude nhân loại CLI","codex":"OpenAI Codex CLI","droid":"Trợ lý AI Droid của nhà máy","openclaw":"Trợ lý AI móng vuốt mở","cline":"Trợ lý mã hóa Cline AI CLI","kilo":"Trợ lý AI Kilo Code CLI","cursor":"Trình chỉnh sửa mã AI con trỏ","continue":"Tiếp tục Trợ lý AI","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":"Yêu cầu tài khoản Cursor Pro để sử dụng tính năng này.","1":"Con trỏ định tuyến các yêu cầu thông qua máy chủ của chính nó, do đó điểm cuối cục bộ không được hỗ trợ. Vui lòng bật Cloud Endpoint trong Cài đặt."},"steps":{"1":{"title":"Mở Cài đặt","desc":"Đi tới Cài đặt -> Kiểu máy"},"2":{"title":"Kích hoạt API OpenAI","desc":"Bật tùy chọn \\"Khóa API OpenAI\\""},"3":{"title":"URL cơ sở"},"4":{"title":"Khóa API"},"5":{"title":"Thêm mô hình tùy chỉnh","desc":"Nhấp vào \\"Xem tất cả mẫu\\" -> \\"Thêm mẫu tùy chỉnh\\""},"6":{"title":"Chọn mẫu"}}},"continue":{"steps":{"1":{"title":"Mở cấu hình","desc":"Mở tệp cấu hình Tiếp tục"},"2":{"title":"Khóa API"},"3":{"title":"Chọn mẫu"},"4":{"title":"Thêm cấu hình mô hình","desc":"Thêm cấu hình sau vào mảng mô hình của bạn:"}},"notes":{"0":"Tiếp tục sử dụng tệp cấu hình JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"}},"notes":{"0":"OpenCode yêu cầu cấu hình khóa API.","1":"Đặt URL cơ sở cho điểm cuối OmniRoute của bạn."}},"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 yêu cầu tài khoản Amazon."}}},"mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","whenToUseLabel":"Khi nào nên sử dụng","openToolDocs":"Mở tài liệu công cụ","toolUseCases":{"claude":"Sử dụng khi bạn muốn quy trình lập kế hoạch mạnh mẽ và các trình tái cấu trúc nhiều tệp dài với Mã Claude.","codex":"Sử dụng khi nhóm của bạn được chuẩn hóa trên các luồng OpenAI Codex CLI và xác thực dựa trên hồ sơ.","droid":"Sử dụng khi bạn cần một tác nhân đầu cuối nhẹ tập trung vào các vòng lặp thực thi lệnh và mã hóa nhanh.","openclaw":"Sử dụng khi bạn muốn một tác nhân mã hóa kiểu Open Claw nhưng được định tuyến thông qua các chính sách OmniRoute.","cline":"Sử dụng khi bạn định cấu hình các tác nhân mã hóa bên trong trình chỉnh sửa và muốn thiết lập có hướng dẫn với các mô hình OmniRoute.","kilo":"Sử dụng khi quy trình làm việc của bạn phụ thuộc vào các lệnh Kilo Code và các chỉnh sửa lặp lại nhanh chóng.","cursor":"Sử dụng khi mã hóa bằng Con trỏ và bạn cần các mô hình tương thích với OpenAI tùy chỉnh thông qua OmniRoute.","continue":"Sử dụng khi chạy Tiếp tục trong IDE và bạn cần cấu hình nhà cung cấp dựa trên JSON di động.","opencode":"Sử dụng khi bạn thích chạy tác nhân gốc trên thiết bị đầu cuối và tự động hóa theo kịch bản thông qua OpenCode.","kiro":"Sử dụng khi tích hợp Kiro và điều khiển định tuyến mô hình tập trung từ OmniRoute.","antigravity":"Sử dụng khi lưu lượng truy cập AntiGravity/Kiro phải bị chặn thông qua MITM và được định tuyến đến OmniRoute.","copilot":"Sử dụng khi bạn muốn UX kiểu trò chuyện Copilot trong khi thực thi các khóa OmniRoute và quy tắc định tuyến."}},"combos":{"title":"Combo","description":"Tạo các tổ hợp mô hình với hỗ trợ định tuyến và dự phòng có trọng số","createCombo":"Tạo tổ hợp","editCombo":"Chỉnh sửa kết hợp","deleteCombo":"Xóa tổ hợp","noModels":"Không có mô hình","noModelsYet":"Chưa có mô hình nào được thêm vào","addModel":"Thêm mô hình","addModelToCombo":"Thêm Model vào Combo","routingStrategy":"Chiến lược định tuyến","maxRetries":"Số lần thử lại tối đa","timeout":"Thời gian chờ (ms)","healthcheck":"Kiểm tra sức khỏe","priority":"Ưu tiên","fallback":"Dự phòng","roundRobin":"Vòng Robin","random":"Ngẫu nhiên","leastLatency":"Độ trễ ít nhất","comboName":"Tên kết hợp","comboNamePlaceholder":"combo của tôi","deleteConfirm":"Xóa tổ hợp này?","noCombosYet":"Chưa có combo nào","comboCreated":"Combo được tạo thành công","comboUpdated":"Combo được cập nhật thành công","comboDeleted":"Đã xóa kết hợp","failedCreate":"Không tạo được kết hợp","failedUpdate":"Không thể cập nhật kết hợp","errorCreating":"Lỗi tạo combo","errorUpdating":"Lỗi cập nhật kết hợp","errorDeleting":"Lỗi xóa kết hợp","testFailed":"Yêu cầu kiểm tra không thành công","failedToggle":"Không thể chuyển đổi kết hợp","testResults":"Kết quả kiểm tra — {name}","resolvedBy":"Đã giải quyết bởi:","more":"+{count} khác","reqs":"yêu cầu","success":"sự thành công","proxyConfigured":"Đã định cấu hình proxy","copyComboName":"Sao chép tên tổ hợp","enableCombo":"Bật kết hợp","disableCombo":"Tắt kết hợp","testCombo":"Kết hợp thử nghiệm","duplicate":"trùng lặp","proxyConfig":"Cấu hình proxy","nameRequired":"Tên là bắt buộc","nameInvalid":"Chỉ các chữ cái, số, -, _, / và . được phép","nameHint":"Các chữ cái, số, -, _, / và . được phép","priorityDesc":"Dự phòng tuần tự: thử mô hình 1 trước, sau đó đến mô hình 2, v.v.","weightedDesc":"Phân phối lưu lượng truy cập theo phần trăm trọng lượng với dự phòng","roundRobinDesc":"Phân phối vòng tròn: mỗi yêu cầu sẽ chuyển sang mô hình tiếp theo trong vòng quay","randomDesc":"Lựa chọn ngẫu nhiên thống nhất, sau đó dự phòng cho các mô hình còn lại","leastUsedDesc":"Chọn mô hình có ít yêu cầu nhất, cân bằng tải theo thời gian","costOptimizedDesc":"Hướng tới mô hình rẻ nhất trước tiên dựa trên giá cả","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each model once before reshuffling","models":"Người mẫu","autoBalance":"Tự động cân bằng","advancedSettings":"Cài đặt nâng cao","retryDelay":"Độ trễ thử lại (ms)","concurrencyPerModel":"Đồng thời / Mô hình","queueTimeout":"Hết thời gian xếp hàng (ms)","advancedHint":"Để trống để sử dụng mặc định chung. Những cài đặt này ghi đè lên mỗi nhà cung cấp.","moveUp":"Di chuyển lên","moveDown":"Di chuyển xuống","removeModel":"Xóa","saving":"Đang lưu...","weighted":"Có trọng số","leastUsed":"Ít được sử dụng nhất","costOpt":"Lựa chọn chi phí","strategyGuideTitle":"How to use this strategy","strategyGuideWhen":"When to use","strategyGuideAvoid":"Avoid when","strategyGuideExample":"Example","strategyGuide":{"priority":{"when":"You have one preferred model and only want fallback on failure.","avoid":"You need request distribution across models.","example":"Primary coding model with cheaper backup for outages."},"weighted":{"when":"You need controlled traffic split across models.","avoid":"You cannot maintain accurate weights over time.","example":"80% stable model + 20% canary model rollout."},"round-robin":{"when":"You want predictable and even distribution.","avoid":"Models differ too much in latency or cost.","example":"Same model on multiple accounts to spread throughput."},"random":{"when":"You want simple distribution with minimal setup.","avoid":"You need strict traffic guarantees.","example":"Quick prototyping with equivalent models."},"least-used":{"when":"You want adaptive balancing based on live demand.","avoid":"Traffic is too low to benefit from usage balancing.","example":"Mixed workloads where one model often gets overloaded."},"cost-optimized":{"when":"Cost reduction is your top priority.","avoid":"Pricing data is missing or outdated.","example":"Background or batch jobs where lower cost is preferred."}},"advancedHelp":{"maxRetries":"How many retries are attempted before failing a request.","retryDelay":"Initial wait between retries. Higher values reduce burst pressure.","timeout":"Maximum request duration before aborting.","healthcheck":"Skips unhealthy models/providers from routing decisions.","concurrencyPerModel":"Max simultaneous requests allowed per model in round-robin.","queueTimeout":"How long a request can wait in queue before timing out."},"templatesTitle":"Quick templates","templatesDescription":"Apply a starting profile, then adjust models and config.","templateApply":"Apply template","templateHighAvailability":"High availability","templateHighAvailabilityDesc":"Priority routing with health checks and safe retries.","templateCostSaver":"Cost saver","templateCostSaverDesc":"Cost-optimized routing for budget-first workloads.","templateBalanced":"Balanced load","templateBalancedDesc":"Least-used routing to spread demand over time.","usageGuideHide":"Hide","usageGuideDontShowAgain":"Don\'t show again","usageGuideShow":"Show guide","quickTestTitle":"Combo ready to validate","quickTestDescription":"Run a test now to confirm fallback and latency behavior.","testNow":"Test now","pricingCoverage":"Pricing coverage","pricingCoverageHint":"Cost-optimized works best when all combo models have pricing.","pricingAvailable":"Pricing available","pricingMissing":"No pricing","pricingAvailableShort":"priced","pricingMissingShort":"no-price","warningRoundRobinSingleModel":"Round-robin is most useful with at least 2 models.","warningCostOptimizedPartialPricing":"Only {priced} of {total} models have pricing. Routing may be partially cost-aware.","warningCostOptimizedNoPricing":"No pricing data found for this combo. Cost-optimized may route unexpectedly.","readinessTitle":"Sẵn sàng để lưu?","readinessDescription":"Xem lại danh sách kiểm tra trước khi tạo hoặc cập nhật kết hợp này.","readinessCheckName":"Tên kết hợp là hợp lệ","readinessCheckModels":"Ít nhất một mô hình được chọn","readinessCheckWeights":"Tổng trọng số là 100%","readinessCheckWeightsOptional":"Không cần quy định trọng lượng","readinessCheckPricing":"Dữ liệu giá cả có sẵn","readinessCheckPricingOptional":"Quy tắc đặt giá không bắt buộc","saveBlockedTitle":"Lưu bị chặn cho đến khi các mục sau được khắc phục:","saveBlockName":"Xác định tên kết hợp.","saveBlockModels":"Thêm ít nhất một mô hình.","saveBlockWeighted":"Đặt trọng số thành 100% (hiện tại: {total}%).","saveBlockPricing":"Thêm giá cho ít nhất một mô hình hoặc chọn một chiến lược khác.","recommendationsLabel":"Recommended setup","applyRecommendations":"Apply recommendations","recommendationsUpdated":"Recommendations updated for {strategy}.","recommendationsApplied":"Recommendations applied to this combo.","strategyRecommendations":{"priority":{"title":"Fail-safe baseline","description":"Use one primary model and keep fallback chain short and reliable.","tip1":"Put your most reliable model first.","tip2":"Keep 1-2 backup models with similar quality.","tip3":"Use safe retries to absorb transient provider failures."},"weighted":{"title":"Controlled traffic split","description":"Great for canary rollouts and gradual migration between models.","tip1":"Start with conservative split like 90/10.","tip2":"Keep the total at 100% and auto-balance after changes.","tip3":"Monitor success and latency before increasing canary weight."},"round-robin":{"title":"Predictable load sharing","description":"Best when models are equivalent and you need smooth distribution.","tip1":"Use at least 2 models.","tip2":"Set concurrency limits to avoid burst overload.","tip3":"Use queue timeout to fail fast under saturation."},"random":{"title":"Quick spread with low setup","description":"Use when you need simple distribution without strict guarantees.","tip1":"Use models with similar latency profiles.","tip2":"Keep retries enabled to absorb random misses.","tip3":"Prefer this for experimentation, not strict SLAs."},"least-used":{"title":"Adaptive balancing","description":"Routes to less-used models to reduce hotspots over time.","tip1":"Works better under continuous traffic.","tip2":"Combine with health checks for safer balancing.","tip3":"Track per-model usage to validate distribution gains."},"cost-optimized":{"title":"Budget-first routing","description":"Routes to lower-cost models when pricing metadata is available.","tip1":"Ensure pricing coverage for all selected models.","tip2":"Keep a quality fallback for hard prompts.","tip3":"Use for batch/background jobs where cost is the main KPI."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Chi phí","budget":"Ngân sách","totalCost":"Tổng chi phí","breakdown":"Phân tích chi phí","noData":"Không có dữ liệu chi phí","byModel":"Theo mẫu","byProvider":"Theo nhà cung cấp"},"endpoint":{"title":"Điểm cuối API","available":"Điểm cuối có sẵn","cloudProxy":"Proxy đám mây","disableConfirm":"Bạn có chắc chắn muốn tắt proxy đám mây không?","baseUrl":"URL cơ sở","apiKeyLabel":"Khóa API","registeredKeys":"Khóa đã đăng ký","chatCompletions":"Hoàn thành cuộc trò chuyện","responses":"Phản hồi","listModels":"Danh sách mô hình","usingCloudProxy":"Sử dụng Proxy đám mây","usingLocalServer":"Sử dụng máy chủ cục bộ","machineId":"ID máy: {id}...","disableCloud":"Tắt đám mây","enableCloud":"Kích hoạt đám mây","modelsAcrossEndpoints":"{models} mô hình trên {endpoints} điểm cuối","chatDesc":"Trò chuyện trực tuyến và không phát trực tuyến với tất cả các nhà cung cấp","embeddings":"Nhúng","embeddingsDesc":"Nhúng văn bản cho đường dẫn tìm kiếm & RAG","imageGeneration":"Tạo hình ảnh","imageDesc":"Tạo hình ảnh từ lời nhắc văn bản","rerank":"Xếp hạng lại","rerankDesc":"Sắp xếp lại tài liệu theo mức độ liên quan đến truy vấn","audioTranscription":"Phiên âm âm thanh","audioTranscriptionDesc":"Phiên âm tập tin âm thanh thành văn bản (Whisper)","textToSpeech":"Chuyển văn bản thành giọng nói","textToSpeechDesc":"Chuyển đổi văn bản thành giọng nói tự nhiên","moderations":"Kiểm duyệt","moderationsDesc":"Kiểm duyệt nội dung và phân loại an toàn","responsesDesc":"API Responses của OpenAI cho Codex và quy trình làm việc tác tử nâng cao","listModelsDesc":"Liệt kê tất cả các mô hình có sẵn từ tất cả các nhà cung cấp đã kết nối","settingsApiDesc":"Đọc và sửa đổi cấu hình OmniRoute qua API","settingsApi":"Settings API","categoryCore":"API Cốt Lõi","categoryMedia":"Phương Tiện & Đa Phương Thức","categoryUtility":"Tiện Ích & Quản Lý","enableCloudTitle":"Kích hoạt proxy đám mây","whatYouGet":"Những gì bạn sẽ nhận được","cloudBenefitAccess":"Truy cập API của bạn từ mọi nơi trên thế giới","cloudBenefitShare":"Chia sẻ điểm cuối với nhóm của bạn một cách dễ dàng","cloudBenefitPorts":"Không cần mở cổng hoặc cấu hình tường lửa","cloudBenefitEdge":"Mạng biên toàn cầu nhanh","cloudSessionNote":"Cloud sẽ giữ phiên xác thực của bạn trong 1 ngày. Nếu không được sử dụng, nó sẽ tự động bị xóa.","cloudUnstableNote":"Cloud hiện tại không ổn định với Claude Code OAuth trong một số trường hợp.","cloudConnected":"Đã kết nối Proxy đám mây!","connectingToCloud":"Đang kết nối với đám mây...","verifyingConnection":"Đang xác minh kết nối...","connecting":"Đang kết nối...","verifying":"Đang xác minh...","connected":"Đã kết nối!","disableCloudTitle":"Vô hiệu hóa Proxy đám mây","disableWarning":"Tất cả các phiên xác thực sẽ bị xóa khỏi đám mây.","syncingData":"Đang đồng bộ hóa dữ liệu mới nhất...","disablingCloud":"Đang tắt đám mây...","syncing":"Đang đồng bộ hóa...","disabling":"Đang tắt...","cloudConnectedVerified":"Cloud Proxy đã được kết nối và xác minh!","connectedVerificationPending":"Đã kết nối - đang chờ xác minh","connectedVerificationPendingWithError":"Đã kết nối — đang chờ xác minh: {error}","cloudDisabledSuccess":"Đám mây đã được tắt thành công","syncedSuccess":"Đã đồng bộ hóa thành công","failedDisable":"Không thể tắt đám mây","failedEnable":"Không thể bật đám mây","cloudRequestTimeout":"Hết thời gian yêu cầu đám mây","cloudRequestFailed":"Yêu cầu đám mây không thành công","cloudWorkerUnreachable":"Không thể liên hệ với nhân viên đám mây. Đảm bảo dịch vụ đám mây đang chạy (npm run dev in /cloud).","connectionFailed":"Kết nối không thành công","syncFailed":"Không thể đồng bộ hóa dữ liệu đám mây","providerModelsTitle":"{provider} — Mô hình","noModelsForProvider":"Không có mô hình có sẵn cho nhà cung cấp này.","chat":"Trò chuyện","embedding":"Nhúng","image":"Hình ảnh","custom":"tùy chỉnh","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","categorySearch":"Search & Discovery","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected."},"mcpDashboard":{"loading":"Loading MCP dashboard...","activate":"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":"Capabilities","agentCardNotAvailable":"Agent card not available.","quickValidation":"Quick validation","quickValidationDescription":"Executes smoke calls through the live `/a2a` endpoint.","runMessageSend":"Run message/send","runMessageStream":"Run message/stream","taskManagement":"Task management","taskSummary":"{total} tasks | page {page} of {totalPages}","allStates":"all","allSkills":"all skills","loadingTasks":"Loading tasks...","noTasksForFilters":"No tasks found for current filters.","tableTask":"Task","tableSkill":"Skill","tableState":"State","tableUpdated":"Updated","tableActions":"Actions","view":"View","cancel":"Cancel","previous":"Previous","next":"Next","taskDetail":"Task detail","close":"Close","metadata":"Metadata","events":"Events","artifacts":"Artifacts"},"health":{"title":"Tình trạng hệ thống","description":"Giám sát thời gian thực phiên bản OmniRoute của bạn","healthy":"khỏe mạnh","degraded":"xuống cấp","down":"xuống","uptime":"Thời gian hoạt động","memory":"Bộ nhớ","memoryRss":"Bộ nhớ (RSS)","heap":"Đống","cpu":"CPU","database":"Cơ sở dữ liệu","version":"Phiên bản","lastCheck":"Kiểm tra lần cuối","providerHealth":"Sức khỏe nhà cung cấp","systemMetrics":"Số liệu hệ thống","tokenHealth":"Tình trạng mã thông báo","refreshAll":"Làm mới tất cả","checkNow":"Kiểm tra ngay","loadingHealth":"Đang tải dữ liệu sức khỏe...","failedToLoad":"Không tải được dữ liệu sức khỏe: {error}","retry":"Thử lại","allOperational":"Tất cả các hệ thống hoạt động","issuesDetected":"Đã phát hiện sự cố hệ thống","updatedAt":"Đã cập nhật {time}","latency":"Độ trễ","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Tổng số yêu cầu","noDataYet":"Chưa có dữ liệu","promptCache":"Bộ nhớ đệm nhắc nhở","entries":"Bài dự thi","hitRate":"Tỷ lệ trúng","hitsMisses":"Lượt truy cập / Bỏ lỡ","signatureCache":"Bộ đệm chữ ký","signatureDefaults":"Mặc định","signatureTool":"Công cụ","signatureFamily":"gia đình","signatureSession":"Phiên","recovering":"Đang phục hồi","noCBData":"Không có dữ liệu ngắt mạch có sẵn. Thực hiện một số yêu cầu đầu tiên.","providerHealthStatusAria":"Tình trạng sức khỏe của nhà cung cấp","issuesLabel":"Đã phát hiện sự cố","operational":"hoạt động","providers":"Nhà cung cấp","healthyCount":"{count} khỏe mạnh","nodeVersion":"Nút {version}","failures":"{count} thất bại","failuresPlural":"{count} thất bại","lastFailure":"Cuối cùng","rateLimitStatus":"Trạng thái giới hạn tỷ lệ","activeLimiters":"{count} bộ giới hạn hoạt động","activeLimitersPlural":"{count} bộ giới hạn hoạt động","queued":"Đã xếp hàng","queuedCount":"{count} đã xếp hàng","running":"đang chạy","runningCount":"{count} đang chạy","ok":"được rồi","activeLockouts":"Khóa hoạt động","resetConfirm":"Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh? Điều này sẽ xóa tất cả số lần lỗi và khôi phục tất cả các nhà cung cấp về trạng thái hoạt động.","resetAllTitle":"Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh","resetting":"Đang đặt lại...","resetAll":"Đặt lại tất cả","until":"Cho đến {time}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Được định cấu hình trong bảng điều khiển","configuredProvidersHint":"Nhà cung cấp có thông tin xác thực được lưu trong /dashboard/providers, bất kể trạng thái thời gian chạy.","activeProvidersHint":"Nhà cung cấp được định cấu hình hiện đã được bật cho các yêu cầu định tuyến.","monitoredProvidersHint":"Các nhà cung cấp hiện được theo dõi bởi máy theo dõi tình trạng ngắt mạch."},"limits":{"title":"Giới hạn & hạn ngạch","rateLimit":"Giới hạn tỷ lệ","remaining":"Còn lại","requestsPerMinute":"Yêu cầu/phút","tokensPerMinute":"Mã thông báo/phút","dailyLimit":"Giới hạn hàng ngày"},"logs":{"title":"Nhật ký","requestLogs":"Nhật ký yêu cầu","proxyLogs":"Nhật ký proxy","auditLog":"Nhật ký kiểm tra","console":"Bảng điều khiển","auditLogDesc":"Hành động hành chính và sự kiện bảo mật","loading":"Đang tải...","refresh":"Làm mới","filterByAction":"Lọc theo hành động...","filterByActor":"Lọc theo diễn viên...","filterEntriesAria":"Lọc các mục nhật ký kiểm tra","filterByActionTypeAria":"Lọc theo loại hành động","filterByActorAria":"Lọc theo diễn viên","refreshAuditLogAria":"Làm mới nhật ký kiểm tra","tableAria":"Mục nhật ký kiểm tra","failedFetchAuditLog":"Không tìm nạp được nhật ký kiểm tra","showing":"Hiển thị các mục {count} (bù đắp {offset})","search":"Tìm kiếm","timestamp":"Dấu thời gian","action":"hành động","actor":"diễn viên","target":"Mục tiêu","details":"Chi tiết","ipAddress":"Địa chỉ IP","notAvailable":"—","noEntries":"Không tìm thấy mục nhật ký kiểm tra nào","previous":"trước đó","next":"Tiếp theo"},"onboarding":{"welcome":"Chào mừng","security":"Bảo mật","test":"kiểm tra","ready":"Sẵn sàng!","setPassword":"Đặt mật khẩu","addProvider":"Thêm nhà cung cấp đầu tiên của bạn","getStarted":"Bắt đầu","skip":"Bỏ qua","skipWizard":"Bỏ qua hoàn toàn trình hướng dẫn","skipPassword":"Bỏ qua việc thiết lập mật khẩu","skipAndContinue":"Bỏ qua & Tiếp tục","passwordLabel":"Mật khẩu","confirmPassword":"Xác nhận mật khẩu","enterPassword":"Nhập mật khẩu","confirmPasswordPlaceholder":"Xác nhận mật khẩu","passwordsMismatch":"Mật khẩu không khớp","setupComplete":"Thiết lập hoàn tất!","goToDashboard":"Đi tới Bảng điều khiển →","welcomeDesc":"OmniRoute là proxy API AI cục bộ của bạn. Nó định tuyến các yêu cầu đến nhiều nhà cung cấp AI với tính năng cân bằng tải, chuyển đổi dự phòng và theo dõi việc sử dụng.","multiProvider":"Đa nhà cung cấp","usageTracking":"Theo dõi sử dụng","apiKeyMgmt":"Quản lý khóa API","securityDesc":"Đặt mật khẩu để bảo vệ trang tổng quan của bạn hoặc bỏ qua ngay bây giờ.","providerDesc":"Kết nối nhà cung cấp AI đầu tiên của bạn. Bạn có thể thêm nhiều hơn sau.","apiKeyRequired":"Khóa API (bắt buộc)","customUrlOptional":"URL tùy chỉnh (tùy chọn)","testDesc":"Hãy xác minh kết nối nhà cung cấp của bạn hoạt động.","runTest":"Chạy kiểm tra kết nối","testingConnection":"Đang kiểm tra kết nối...","connectionSuccessful":"Kết nối thành công! Nhà cung cấp của bạn đã sẵn sàng.","noProviderFound":"Không tìm thấy nhà cung cấp nào. Bạn có thể thêm một từ bảng điều khiển sau.","testFailed":"Thử nghiệm không thành công nhưng bạn có thể định cấu hình điều này sau.","couldNotTest":"Không thể kiểm tra ngay bây giờ. Bạn có thể kiểm tra từ bảng điều khiển.","doneDesc":"Bạn đã hoàn tất! Phiên bản OmniRoute của bạn đã được định cấu hình và sẵn sàng thực hiện các yêu cầu AI proxy.","yourEndpoint":"Điểm cuối của bạn:","continue":"Tiếp tục","retry":"Thử lại","failedSetPassword":"Không thể đặt mật khẩu. Hãy thử lại.","failedAddProvider":"Không thể thêm nhà cung cấp. Hãy thử lại.","connectionError":"Lỗi kết nối. Vui lòng thử lại.","provider":"nhà cung cấp"},"providers":{"title":"Nhà cung cấp","addProvider":"Thêm nhà cung cấp","editProvider":"Chỉnh sửa nhà cung cấp","deleteProvider":"Xóa nhà cung cấp","noProviders":"Không có nhà cung cấp nào được định cấu hình","modelAvailability":"Mẫu sẵn có","accounts":"Tài khoản","newAccount":"Tài khoản mới","deleteConfirm":"Bạn có chắc chắn muốn xóa nhà cung cấp này không?","testing":"Đang thử nghiệm...","testConnection":"Kiểm tra kết nối","testSuccess":"Kết nối thành công","testFailed":"Kết nối không thành công","available":"Có sẵn","cooldown":"Thời gian hồi chiêu","unavailable":"Không có sẵn","unknown":"Không xác định","oauthLabel":"OAuth","compatibleLabel":"Tương thích","chat":"Trò chuyện","responses":"Phản hồi","messages":"Tin nhắn","oauthProviders":"Nhà cung cấp OAuth","freeProviders":"Nhà cung cấp miễn phí","apiKeyProviders":"Nhà cung cấp khóa API","compatibleProviders":"Nhà cung cấp tương thích với khóa API","testAll":"Kiểm tra tất cả","testAllOAuth":"Kiểm tra tất cả các kết nối OAuth","testAllFree":"Kiểm tra tất cả các kết nối miễn phí","testAllApiKey":"Kiểm tra tất cả các kết nối Khóa API","testAllCompatible":"Kiểm tra tất cả các kết nối tương thích","connected":"{count} Đã kết nối","errorCount":"{count} Lỗi ({code})","errorCountNoCode":"{count} Lỗi","noConnections":"Không có kết nối","disabled":"Đã tắt","enableProvider":"Kích hoạt nhà cung cấp","disableProvider":"Vô hiệu hóa nhà cung cấp","testResults":"Kết quả kiểm tra","noCompatibleYet":"Chưa có nhà cung cấp tương thích nào được thêm vào","compatibleHint":"Sử dụng các nút ở trên để thêm điểm cuối tương thích với OpenAI hoặc Anthropic","addOpenAICompatible":"Thêm tương thích OpenAI","addAnthropicCompatible":"Thêm tính tương thích với con người","addNewProvider":"Thêm nhà cung cấp mới","backToProviders":"Quay lại Nhà cung cấp","configureNewProvider":"Định cấu hình nhà cung cấp AI mới để sử dụng với các ứng dụng của bạn.","providerLabel":"nhà cung cấp","selectProvider":"Chọn nhà cung cấp","selectedProvider":"Nhà cung cấp đã chọn","authMethod":"Phương thức xác thực","apiKeyLabel":"Khóa API","apiKeyRequired":"Cần có khóa API","selectProviderRequired":"Vui lòng chọn nhà cung cấp","enterApiKey":"Nhập khóa API của bạn","apiKeySecure":"Khóa API của bạn sẽ được mã hóa và lưu trữ an toàn.","oauth2Connect":"Kết nối với OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Kết nối tài khoản của bạn bằng xác thực OAuth2.","displayName":"Tên hiển thị","displayNamePlaceholder":"ví dụ: API sản xuất, Môi trường phát triển","displayNameHint":"Tùy chọn. Một cái tên thân thiện để xác định cấu hình này.","active":"Đang hoạt động","activeDescription":"Cho phép nhà cung cấp này sử dụng trong các ứng dụng của bạn","cancel":"Hủy bỏ","createProvider":"Tạo nhà cung cấp","failedCreate":"Không tạo được nhà cung cấp","errorOccurred":"Đã xảy ra lỗi. Vui lòng thử lại.","modelStatus":"Tình trạng mẫu","allModelsOperational":"Tất cả các mô hình hoạt động","modelsWithIssues":"{count} mô hình có vấn đề","allModelsNormal":"Tất cả các model đều phản hồi bình thường.","cooldownCleared":"Đã xóa thời gian hồi chiêu cho {model}","failedClearCooldown":"Không thể xóa thời gian hồi chiêu","loadingAvailability":"Đang tải tính khả dụng của mô hình...","clearCooldown":"Xóa","clearing":"Đang dọn dẹp...","until":"Cho đến {time}","providerTestFailed":"Kiểm tra nhà cung cấp không thành công","modeTest":"{mode} Kiểm tra","passedCount":"{count} đã vượt qua","failedCount":"{count} không thành công","testedCount":"{count} đã kiểm tra","millisecondsAbbr":"{value}ms","okShort":"được rồi","errorShort":"LỖI","noActiveConnectionsInGroup":"Không tìm thấy kết nối hoạt động nào cho nhóm này.","allTestsPassed":"Tất cả {total} bài kiểm tra đã vượt qua","testSummary":"{passed}/{total} đã đạt, {failed} không thành công","nameLabel":"Tên","prefixLabel":"Tiền tố","baseUrlLabel":"URL cơ sở","apiTypeLabel":"Loại API","prefixHint":"Bắt buộc. Tiền tố duy nhất cho tên model.","nameHint":"Bắt buộc. Một nhãn thân thiện cho nút này.","baseUrlHint":"Bắt buộc. URL cơ sở API của nhà cung cấp.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Xác thực kết nối","validating":"Đang xác thực...","connectionValid":"Kết nối là hợp lệ!","connectionFailed":"Kết nối không thành công. Kiểm tra URL và khóa.","testKeyLabel":"Khóa API kiểm tra","testKeyPlaceholder":"sk-... (chỉ để xác nhận)","providerNotFound":"Không tìm thấy nhà cung cấp","deleteConnectionConfirm":"Xóa kết nối này?","failedSetAlias":"Không đặt được bí danh","failedSaveConnection":"Không lưu được kết nối","failedSaveConnectionRetry":"Không lưu được kết nối. Vui lòng thử lại.","failedRetestConnection":"Không thể kiểm tra lại kết nối","deleteCompatibleNodeConfirm":"Xóa nút tương thích {type} này?","anthropicCompatibleDetails":"Chi tiết tương thích nhân loại","openaiCompatibleDetails":"Chi tiết tương thích OpenAI","messagesApi":"API tin nhắn","responsesApi":"API phản hồi","chatCompletions":"Hoàn thành cuộc trò chuyện","importingModels":"Đang nhập khẩu...","importFromModels":"Nhập từ /model","clearAllModels":"Xóa tất cả các mẫu","clearAllModelsConfirm":"Bạn có chắc chắn muốn xóa tất cả mô hình của nhà cung cấp này không? Điều này không thể hoàn tác được.","clearAllModelsSuccess":"Tất cả các mô hình đã bị xóa","clearAllModelsFailed":"Không xóa được mô hình","addConnectionToImport":"Thêm kết nối để cho phép nhập.","noModelsConfigured":"Không có mô hình nào được định cấu hình","connectionCount":"{count} kết nối","fetchingModels":"Đang tìm nạp các mẫu có sẵn...","failedFetchModels":"Không tìm nạp được mô hình","noModelsFound":"Không tìm thấy mô hình nào","importFailed":"Nhập không thành công","noNewModelsAdded":"Không có mô hình mới được thêm vào.","adding":"Đang thêm...","importingModelsTitle":"Nhập mô hình","copyModel":"Sao chép mô hình","removeModel":"Xóa mô hình","rateLimitProtected":"Được bảo vệ","rateLimitUnprotected":"không được bảo vệ","enableRateLimitProtection":"Nhấp để bật bảo vệ giới hạn tỷ lệ","disableRateLimitProtection":"Nhấp để tắt bảo vệ giới hạn tỷ lệ","productionKey":"Khóa sản xuất","enterNewApiKey":"Nhập khóa API mới","optional":"Tùy chọn","anthropicCompatibleName":"Tương thích với con người","openaiCompatibleName":"Tương thích OpenAI","failedImportModels":"Không thể nhập mô hình","noModelsReturnedFromEndpoint":"Không có mô hình nào được trả về từ điểm cuối /models.","importingModelsProgress":"Đang nhập {current} trong số {total} mô hình...","foundModelsStartingImport":"Đã tìm thấy mô hình {count}. Đang bắt đầu nhập...","importingModelById":"Đang nhập {modelId}...","importSuccessCount":"Đã nhập thành công {count, plural, one {# model} other {# models}}!","noNewModelsAddedExisting":"Không có mẫu mới nào được thêm vào (tất cả đều đã tồn tại).","importDoneCount":"✓ Xong! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"Đã xảy ra lỗi không mong muốn","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"tin nhắn","responsesPath":"phản hồi","chatCompletionsPath":"trò chuyện/hoàn thành","add":"Thêm","edit":"Chỉnh sửa","delete":"Xóa","anthropic":"nhân loại","openai":"OpenAI","singleConnectionPerCompatible":"Chỉ có một kết nối được phép cho mỗi nút tương thích. Thêm một nút khác nếu bạn cần thêm kết nối.","connections":"Kết nối","providerProxyTitleConfigured":"Proxy của nhà cung cấp: {host}","configured":"được cấu hình","providerProxyConfigureHint":"Định cấu hình proxy cho tất cả các kết nối của nhà cung cấp này","providerProxy":"Ủy quyền của nhà cung cấp","noConnectionsYet":"Chưa có kết nối nào","addFirstConnectionHint":"Thêm kết nối đầu tiên của bạn để bắt đầu","addConnection":"Thêm kết nối","availableModels":"Các mẫu có sẵn","pageAutoRefresh":"Trang sẽ tự động làm mới...","statusDisabled":"bị vô hiệu hóa","statusConnected":"đã kết nối","statusRuntimeIssue":"vấn đề thời gian chạy","statusAuthFailed":"xác thực thất bại","statusRateLimited":"tỷ lệ giới hạn","statusNetworkIssue":"sự cố mạng","statusTestUnsupported":"kiểm tra không được hỗ trợ","statusUnavailable":"không có sẵn","statusFailed":"thất bại","statusError":"lỗi","oauthAccount":"Tài khoản OAuth","errorTypeRuntime":"Thời gian chạy cục bộ","errorTypeUpstreamAuth":"Xác thực ngược dòng","errorTypeMissingCredential":"Thiếu thông tin xác thực","errorTypeRefreshFailed":"Làm mới không thành công","errorTypeTokenExpired":"Mã thông báo đã hết hạn","errorTypeRateLimited":"Tỷ lệ giới hạn","errorTypeUpstreamUnavailable":"Thượng nguồn không có sẵn","errorTypeNetworkError":"Lỗi mạng","errorTypeTestUnsupported":"Kiểm tra không được hỗ trợ","errorTypeUpstreamError":"Lỗi ngược dòng","proxySourceGlobal":"Toàn cầu","proxySourceProvider":"nhà cung cấp","proxySourceKey":"Chìa khóa","proxyConfiguredBySource":"Ủy quyền ({source}): {host}","autoPriority":"Tự động: {priority}","proxy":"ủy nhiệm","retestAuthentication":"Kiểm tra lại xác thực","retest":"Kiểm tra lại","disableConnection":"Tắt kết nối","enableConnection":"Kích hoạt kết nối","reauthenticateConnection":"Xác thực lại kết nối này","proxyConfig":"Cấu hình proxy","aliasExistsAlert":"Bí danh \\"{alias}\\" đã tồn tại. Vui lòng sử dụng một mô hình khác hoặc chỉnh sửa bí danh hiện có.","openRouterAnyModelHint":"OpenRouter hỗ trợ mọi mô hình. Thêm mô hình và tạo bí danh để truy cập nhanh.","modelIdFromOpenRouter":"ID mẫu (từ OpenRouter)","openRouterModelPlaceholder":"nhân chủng/claude-3-opus","customModels":"Mô hình tùy chỉnh","customModelsHint":"Thêm ID mẫu không có trong danh sách mặc định. Chúng sẽ có sẵn để định tuyến.","modelId":"Mã mẫu","customModelPlaceholder":"ví dụ: gpt-4.5-turbo","loading":"Đang tải...","removeCustomModel":"Xóa mô hình tùy chỉnh","noCustomModels":"Chưa có mô hình tùy chỉnh nào được thêm vào.","allSuggestedAliasesExist":"Tất cả các bí danh được đề xuất đã tồn tại. Vui lòng chọn một mẫu khác hoặc xóa các bí danh xung đột.","failedSaveCustomModel":"Không lưu được mô hình tùy chỉnh","modelAddedSuccess":"Đã thêm mô hình {modelId} thành công","failedAddModelTryAgain":"Không thể thêm mô hình. Vui lòng thử lại.","failedSaveImportedModel":"Không lưu được mô hình đã nhập vào cơ sở dữ liệu tùy chỉnh","failedImportModelsTryAgain":"Không thể nhập mô hình. Vui lòng thử lại.","failedRemoveModelFromDatabase":"Không thể xóa mô hình khỏi cơ sở dữ liệu","modelRemovedSuccess":"Đã xóa mô hình thành công","failedDeleteModelTryAgain":"Không xóa được mô hình. Vui lòng thử lại.","compatibleModelsDescription":"Thêm các mô hình tương thích {type} theo cách thủ công hoặc nhập chúng từ điểm cuối /models.","anthropicCompatibleModelPlaceholder":"Claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"Xác thực khóa API không thành công. Vui lòng kiểm tra chìa khóa của bạn và thử lại.","addProviderApiKeyTitle":"Thêm khóa API {provider}","checking":"Đang kiểm tra...","check":"Kiểm tra","valid":"hợp lệ","invalid":"không hợp lệ","creating":"Đang tạo...","validationChecksAnthropicCompatible":"Kiểm tra xác thực {provider} bằng cách xác minh khóa API.","validationChecksOpenAiCompatible":"Kiểm tra xác thực {provider} thông qua /models trên URL cơ sở của bạn.","priorityLabel":"Ưu tiên","saving":"Đang lưu...","save":"Lưu","editConnection":"Chỉnh sửa kết nối","accountName":"Tên tài khoản","email":"Email","healthCheckMinutes":"Kiểm tra sức khỏe (phút)","healthCheckHint":"Khoảng thời gian làm mới mã thông báo chủ động. 0 = bị vô hiệu hóa.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Không thể kiểm tra kết nối","failed":"thất bại","leaveBlankKeepCurrentApiKey":"Để trống để giữ khóa API hiện tại.","editCompatibleTitle":"Chỉnh sửa {type} Tương thích","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Khóa API (để kiểm tra)","compatibleProdPlaceholder":"{type} Tương thích (Sản phẩm)","providerTestTimeout":"Provider test timed out — too many connections to test at once","advancedSettings":"Advanced Settings","chatPathLabel":"Chat Endpoint Path","chatPathPlaceholder":"/chat/completions","chatPathHint":"Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)","modelsPathLabel":"Models Endpoint Path","modelsPathPlaceholder":"/models","modelsPathHint":"Custom models path for validation (e.g. /v4/models)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","autoSync":"Tự động đồng bộ hóa","autoSyncTooltip":"Tự động làm mới danh sách mô hình sau mỗi 24 giờ (có thể định cấu hình qua MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Đã bật tự động đồng bộ hóa - các mô hình sẽ làm mới định kỳ","autoSyncDisabled":"Tự động đồng bộ hóa đã bị tắt","autoSyncToggleFailed":"Không chuyển đổi được tính năng tự động đồng bộ hóa","allModelsAlreadyImported":"Tất cả mô hình đã được nhập","noNewModelsToImport":"Không có mô hình mới để nhập — tất cả mô hình đã có trong danh mục hoặc danh sách mô hình tùy chỉnh","skippingExistingModels":"Bỏ qua {count} mô hình hiện có"},"settings":{"title":"Cài đặt","general":"chung","security":"Bảo mật","appearance":"Ngoại hình","routing":"Định tuyến","cache":"Bộ nhớ đệm","resilience":"khả năng phục hồi","systemPrompt":"Lời nhắc hệ thống","thinkingBudget":"Suy nghĩ về ngân sách","proxy":"ủy nhiệm","pricing":"Định giá","storage":"Lưu trữ","policies":"Chính sách","ipFilter":"Bộ lọc IP","comboDefaults":"Mặc định kết hợp","fallbackChains":"Chuỗi dự phòng","changePassword":"Thay đổi mật khẩu","enablePassword":"Kích hoạt mật khẩu","darkMode":"Chế độ tối","lightMode":"Chế độ ánh sáng","systemTheme":"Chủ đề hệ thống","enableCache":"Bật bộ đệm","cacheTTL":"Bộ nhớ đệm TTL","maxCacheSize":"Kích thước bộ đệm tối đa","clearCache":"Xóa bộ nhớ đệm","cacheHits":"Số lần truy cập bộ đệm","cacheMisses":"Thiếu bộ nhớ đệm","hitRate":"Tỷ lệ trúng","cacheEntries":"Mục nhập bộ nhớ đệm","circuitBreaker":"Bộ ngắt mạch","retryPolicy":"Chính sách thử lại","maxRetries":"Số lần thử lại tối đa","retryDelay":"Trì hoãn thử lại","timeoutMs":"Thời gian chờ (ms)","enableSystemPrompt":"Kích hoạt lời nhắc hệ thống","systemPromptText":"Văn bản nhắc nhở hệ thống","enableThinking":"Kích hoạt tư duy","maxThinkingTokens":"Mã thông báo tư duy tối đa","enableProxy":"Kích hoạt proxy","proxyUrl":"URL proxy","pricingRates":"Định dạng giá cước","currentPricing":"Tổng quan về giá hiện tại","loadingPricing":"Đang tải dữ liệu giá...","noPricing":"Không có dữ liệu giá cả","input":"đầu vào","output":"đầu ra","cached":"Đã lưu vào bộ nhớ đệm","reasoning":"Lý luận","cacheCreation":"Tạo bộ đệm","customPricing":"Giá tùy chỉnh","databaseSize":"Kích thước cơ sở dữ liệu","backupDb":"Sao lưu cơ sở dữ liệu","restoreDb":"Khôi phục cơ sở dữ liệu","exportData":"Xuất dữ liệu","importData":"Nhập dữ liệu","clearData":"Xóa tất cả dữ liệu","clearDataConfirm":"Điều này sẽ xóa vĩnh viễn tất cả dữ liệu. Bạn có chắc không?","enableRequestLogs":"Bật nhật ký yêu cầu","logRetention":"Lưu giữ nhật ký","ipWhitelist":"Danh sách trắng IP","ipBlacklist":"Danh sách đen IP","addIP":"Thêm IP","savedSuccessfully":"Đã lưu cài đặt thành công","ai":"trí tuệ nhân tạo","advanced":"Nâng cao","localMode":"Chế độ cục bộ - Tất cả dữ liệu được lưu trữ trên máy của bạn","settingsSectionsAria":"Phần cài đặt","switchThemes":"Chuyển đổi giữa chủ đề sáng và tối","themeSelectionAria":"Lựa chọn chủ đề","themeLight":"Ánh sáng","themeDark":"Tối","themeSystem":"Hệ thống","hideHealthLogs":"Ẩn nhật ký kiểm tra sức khỏe","hideHealthLogsDesc":"Khi BẬT, hãy chặn thông báo [HealthCheck] trong bảng điều khiển máy chủ","themeAccent":"Màu chủ đề","themeAccentDesc":"Chọn màu đặt sẵn hoặc tạo chủ đề của riêng bạn bằng một màu","themeCreate":"Tạo chủ đề","themeCustom":"Chủ đề tùy chỉnh","themeBlue":"Xanh dương","themeRed":"Đỏ","themeGreen":"Xanh lá","themeViolet":"Tím","themeOrange":"Cam","themeCyan":"Lục lam","promptCache":"Bộ nhớ đệm nhắc nhở","flushCache":"Xóa bộ nhớ đệm","flushing":"Đang xả…","size":"Kích thước","hits":"Lượt truy cập","evictions":"Trục xuất","loadingCacheStats":"Đang tải số liệu thống kê về bộ nhớ đệm…","globalProxy":"Proxy toàn cầu","globalProxyDesc":"Định cấu hình proxy gửi đi toàn cầu cho tất cả lệnh gọi API. Các nhà cung cấp, tổ hợp và khóa riêng lẻ có thể ghi đè điều này.","noGlobalProxy":"Không có proxy toàn cầu nào được định cấu hình","globalLabel":"Toàn cầu","configure":"Cấu hình","globalSystemPrompt":"Lời nhắc hệ thống toàn cầu","systemPromptDesc":"Được đưa vào tất cả các yêu cầu ở cấp độ proxy","saved":"Đã lưu","systemPromptPlaceholder":"Nhập lời nhắc hệ thống để đưa vào tất cả các yêu cầu...","systemPromptHint":"Lời nhắc này được thêm vào trước thông báo hệ thống của mọi yêu cầu. Sử dụng cho các hướng dẫn chung, nguyên tắc an toàn hoặc quy tắc định dạng phản hồi.","chars":"{count} ký tự","thinkingBudgetTitle":"Suy nghĩ về ngân sách","thinkingBudgetDesc":"Kiểm soát việc sử dụng mã thông báo lý luận AI trên tất cả các yêu cầu","passthrough":"Truyền qua","passthroughDesc":"Không có thay đổi - khách hàng kiểm soát ngân sách tư duy","auto":"Tự động","autoDesc":"Loại bỏ mọi cấu hình suy nghĩ - hãy để nhà cung cấp quyết định","custom":"tùy chỉnh","customDesc":"Đặt ngân sách mã thông báo cố định cho tất cả các yêu cầu","adaptive":"Thích ứng","adaptiveDesc":"Mở rộng ngân sách dựa trên độ phức tạp của yêu cầu","effortNone":"Không có (0 mã thông báo)","effortLow":"Thấp (1K token)","effortMedium":"Trung bình (10K token)","effortHigh":"Cao (128K token)","tokenBudget":"Ngân sách mã thông báo","tokens":"mã thông báo","baseEffortLevel":"Mức nỗ lực cơ bản","adaptiveHint":"Chế độ thích ứng sẽ chia tỷ lệ từ cấp cơ sở này dựa trên số lượng tin nhắn, mức sử dụng công cụ và độ dài lời nhắc.","requireLogin":"Yêu cầu đăng nhập","requireLoginDesc":"Khi BẬT, bảng điều khiển yêu cầu mật khẩu. Khi TẮT, truy cập mà không cần đăng nhập.","currentPassword":"Mật khẩu hiện tại","enterCurrentPassword":"Nhập mật khẩu hiện tại","newPassword":"Mật khẩu mới","enterNewPassword":"Nhập mật khẩu mới","confirmPassword":"Xác nhận mật khẩu mới","confirmPasswordPlaceholder":"Xác nhận mật khẩu mới","passwordsNoMatch":"Mật khẩu không khớp","passwordUpdated":"Đã cập nhật mật khẩu thành công","failedUpdatePassword":"Không cập nhật được mật khẩu","errorOccurred":"Đã xảy ra lỗi","updatePassword":"Cập nhật mật khẩu","setPassword":"Đặt mật khẩu","apiEndpointProtection":"Bảo vệ điểm cuối API","requireAuthModels":"Yêu cầu khóa API cho /model","requireAuthModelsDesc":"Khi BẬT, điểm cuối /v1/models trả về 404 cho các yêu cầu không được xác thực. Ngăn chặn việc phát hiện mô hình bởi người dùng trái phép.","blockedProviders":"Nhà cung cấp bị chặn","blockedProvidersDesc":"Ẩn các nhà cung cấp cụ thể khỏi phản hồi /v1/models. Các nhà cung cấp bị chặn sẽ không xuất hiện trong danh sách mô hình.","providersBlocked":"{count} nhà cung cấp bị chặn khỏi /models","blockProviderTitle":"Chặn {provider}","unblockProviderTitle":"Bỏ chặn {provider}","routingStrategy":"Chiến lược định tuyến","fillFirst":"điền đầu tiên","fillFirstDesc":"Sử dụng tài khoản theo thứ tự ưu tiên","roundRobin":"Vòng Robin","roundRobinDesc":"Duyệt qua tất cả các tài khoản","p2c":"P2C","p2cDesc":"Chọn ngẫu nhiên 2 cái, chọn cái lành mạnh hơn","random":"Ngẫu nhiên","randomDesc":"Tài khoản ngẫu nhiên mỗi yêu cầu","leastUsed":"Ít được sử dụng nhất","leastUsedDesc":"Chọn tài khoản ít được sử dụng gần đây nhất","costOpt":"Lựa chọn chi phí","costOptDesc":"Ưu tiên tài khoản có sẵn rẻ nhất","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Giới hạn dính","stickyLimitDesc":"Cuộc gọi trên mỗi tài khoản trước khi chuyển đổi","modelAliases":"Bí danh mẫu","modelAliasesTitle":"Bí danh mô hình","modelAliasesDesc":"Các mẫu ký tự đại diện để ánh xạ lại tên mẫu máy • Sử dụng * và ?","addCustomAlias":"Thêm Bí Danh Tùy Chỉnh","deprecatedModelId":"ID mô hình ngừng sử dụng","newModelId":"ID mô hình mới","customAliases":"Bí Danh Tùy Chỉnh","builtInAliases":"Bí Danh Tích Hợp","backgroundDegradationTitle":"Giảm Cấp Tác Vụ Nền","backgroundDegradationDesc":"Tự động phát hiện tác vụ nền (tiêu đề, tóm tắt) và chuyển hướng sang mô hình rẻ hơn","enableDegradation":"Bật Giảm Cấp Nền","enableDegradationHint":"Khi bật, các tác vụ nền như tạo tiêu đề và tóm tắt sẽ tự động được chuyển hướng sang các mô hình rẻ hơn","tasksDetected":"Tác vụ được phát hiện","degradationMap":"Bản Đồ Giảm Cấp Mô Hình","premiumModel":"Mô hình cao cấp","cheapModel":"Mô hình giá rẻ","detectionPatterns":"Mẫu Phát Hiện","newPattern":"vd: \\"tạo tiêu đề\\"","aliasPatternPlaceholder":"Claude-sonnet-*","aliasTargetPlaceholder":"Claude-sonnet-4-20250514","pattern":"mẫu","targetModel":"Mô hình mục tiêu","add":"+ Thêm","session":"Phiên","sessionDetailsAria":"Chi tiết phiên","status":"Trạng thái","authenticated":"Đã xác thực","guest":"khách","loginTime":"Thời gian đăng nhập","sessionAge":"Tuổi phiên","browser":"Trình duyệt","clearLocalData":"Xóa dữ liệu cục bộ","logout":"Đăng xuất","clearLocalDataConfirm":"Xóa tất cả dữ liệu cục bộ? Điều này sẽ thiết lập lại tùy chọn của bạn.","unknown":"Không xác định","systemActor":"hệ thống","ipAccessControl":"Kiểm soát truy cập IP","ipAccessControlDesc":"Chặn hoặc cho phép các địa chỉ IP cụ thể","ipModeDisabled":"Đã tắt","ipModeBlacklist":"Danh sách đen","ipModeWhitelist":"Danh sách trắng","ipModeWhitelistPriority":"Ưu tiên WL","addIpAddress":"Thêm địa chỉ IP","ipAddressPlaceholder":"192.168.1.0/24 hoặc 10.0.*.*","block":"+ Chặn","allow":"+ Cho phép","blocked":"Đã chặn ({count})","allowed":"Được phép ({count})","temporaryBans":"Lệnh cấm tạm thời ({count})","minLeft":"{min} phút còn lại","auditLog":"Nhật ký kiểm tra","searchAuditLogs":"Tìm kiếm nhật ký kiểm tra...","failedLoadAuditLog":"Không tải được nhật ký kiểm tra","noAuditEvents":"Không tìm thấy sự kiện kiểm tra nào","action":"hành động","actor":"diễn viên","details":"Chi tiết","time":"thời gian","fallbackChainsTitle":"Chuỗi dự phòng","fallbackChainsDesc":"Xác định thứ tự dự phòng của nhà cung cấp cho mỗi mô hình","addChain":"+ Thêm chuỗi","modelName":"Tên mẫu","modelNamePlaceholder":"Claude-sonnet-4-20250514","providersCommaSeparated":"Nhà cung cấp (được phân tách bằng dấu phẩy, theo thứ tự ưu tiên)","providersCommaSeparatedPlaceholder":"nhân loại, openai, song tử","createChain":"Tạo chuỗi","noFallbackChains":"Không có chuỗi dự phòng","noFallbackChainsDesc":"Tạo một chuỗi để xác định thứ tự dự phòng của nhà cung cấp cho một mô hình.","loadingFallbackChains":"Đang tải chuỗi dự phòng...","deleteChainConfirm":"Xóa chuỗi dự phòng cho \\"{model}\\"?","chainCreated":"Đã tạo chuỗi cho {model}","chainDeleted":"Đã xóa chuỗi cho {model}","failedCreateChain":"Không tạo được chuỗi","failedDeleteChain":"Không thể xóa chuỗi","deleteChain":"Xóa chuỗi","fillModelAndProviders":"Vui lòng điền tên model và nhà cung cấp","addAtLeastOneProvider":"Thêm ít nhất một nhà cung cấp","comboDefaultsTitle":"Mặc định kết hợp","globalComboConfig":"Cấu hình kết hợp toàn cầu","defaultStrategy":"Chiến lược mặc định","defaultStrategyDesc":"Áp dụng cho các combo mới không có chiến lược rõ ràng","comboStrategyAria":"Chiến lược kết hợp","priority":"Ưu tiên","weighted":"Có trọng số","maxRetriesLabel":"Số lần thử lại tối đa","retryDelayLabel":"Độ trễ thử lại (ms)","timeoutLabel":"Thời gian chờ (ms)","healthCheck":"Kiểm tra sức khỏe","healthCheckDesc":"Kiểm tra trước tính khả dụng của nhà cung cấp","trackMetrics":"Theo dõi số liệu","trackMetricsDesc":"Ghi lại số liệu yêu cầu trên mỗi kết hợp","providerOverrides":"Ghi đè nhà cung cấp","providerOverridesDesc":"Ghi đè thời gian chờ và thử lại trên mỗi nhà cung cấp. Cài đặt nhà cung cấp ghi đè mặc định chung.","providerMaxRetriesAria":"{provider} số lần thử lại tối đa","providerTimeoutAria":"{provider} hết thời gian chờ mili giây","removeProviderOverrideAria":"Xóa ghi đè {provider}","newProviderNamePlaceholder":"ví dụ: google, openai...","newProviderNameAria":"Tên nhà cung cấp mới","retries":"thử lại","ms":"cô","saveComboDefaults":"Lưu mặc định kết hợp","maxNestingDepth":"Độ sâu lồng tối đa","concurrencyPerModel":"Đồng thời / Mô hình","queueTimeout":"Hết thời gian xếp hàng (ms)","providerProfiles":"Hồ sơ nhà cung cấp","providerProfilesDesc":"Cài đặt khả năng phục hồi riêng biệt cho các nhà cung cấp OAuth (dựa trên phiên) và Khóa API (được đo lường). Nhà cung cấp OAuth có ngưỡng chặt chẽ hơn do giới hạn tốc độ thấp hơn.","oauthProviders":"Nhà cung cấp OAuth","apiKeyProviders":"Nhà cung cấp khóa API","transientCooldown":"Thời gian hồi chiêu thoáng qua","rateLimitCooldown":"Thời gian hồi chiêu giới hạn tốc độ","maxBackoffLevel":"Mức chờ đợi tối đa","cbThreshold":"Ngưỡng CB","cbResetTime":"Thời gian đặt lại CB","rateLimiting":"Giới hạn tỷ lệ","rateLimitingDesc":"Nhà cung cấp Khóa API được tự động giới hạn tỷ lệ với các giá trị mặc định an toàn. Các giới hạn được học từ tiêu đề phản hồi và điều chỉnh theo thời gian.","defaultSafetyNet":"Mạng lưới an toàn mặc định","rpm":"vòng/phút","minGap":"Khoảng cách tối thiểu","maxConcurrent":"Đồng thời tối đa","activeLimiters":"Bộ hạn chế hoạt động","noActiveLimiters":"Chưa có giới hạn tỷ lệ hoạt động nào.","reservoir":"Hồ chứa nước","running":"Đang chạy","queued":"Đã xếp hàng","circuitBreakers":"Bộ ngắt mạch","breakerStateClosed":"Đã đóng","breakerStateOpen":"Mở","breakerStateHalfOpen":"Nửa mở","tripped":"{count} bị vấp","healthy":"{count} khỏe mạnh","resetAll":"Đặt lại tất cả","noCircuitBreakers":"Chưa có bộ ngắt mạch nào hoạt động. Chúng được tạo tự động khi các yêu cầu chảy qua đường dẫn kết hợp.","failures":"{count} lỗi","policiesLocked":"Chính sách & Mã định danh bị khóa","allOperational":"Tất cả các hệ thống đều hoạt động - không có khóa hoặc cầu dao bị ngắt","loadingPolicies":"Đang tải chính sách...","lockedIdentifiers":"Số nhận dạng bị khóa","unlockedIdentifier":"Đã mở khóa: {identifier}","sinceDate":"kể từ {date}","forceUnlock":"Buộc mở khóa","unlocking":"Đang mở khóa...","failedUnlock":"Không thể mở khóa","failedLoadWithStatus":"Không tải được: {status}","failedLoadResilience":"Không tải được trạng thái phục hồi","saveFailed":"Lưu không thành công","resetFailed":"Đặt lại không thành công","loadingResilience":"Đang tải trạng thái phục hồi...","retry":"Thử lại","systemStorage":"Hệ thống & Lưu trữ","allDataLocal":"Tất cả dữ liệu được lưu trữ cục bộ trên máy của bạn","databasePath":"Đường dẫn cơ sở dữ liệu","exportDatabase":"Xuất cơ sở dữ liệu","exportAll":"Xuất tất cả (.tar.gz)","importDatabase":"Nhập cơ sở dữ liệu","confirmDbImport":"Xác nhận nhập cơ sở dữ liệu","confirmDbImportDesc":"Thao tác này sẽ thay thế tất cả dữ liệu hiện tại bằng nội dung từ {file}. Một bản sao lưu sẽ được tạo tự động trước khi nhập.","yesImport":"Có, nhập khẩu","lastBackup":"Sao lưu lần cuối","noBackupYet":"Chưa có bản sao lưu nào","backupNow":"Sao lưu ngay","backupRestore":"Sao lưu & Khôi phục","viewBackups":"Xem bản sao lưu","hide":"Ẩn","backupRetentionDesc":"Ảnh chụp nhanh cơ sở dữ liệu được tạo tự động trước khi khôi phục và cứ sau 15 phút khi dữ liệu thay đổi. Lưu giữ: 24 giờ + 30 lần sao lưu hàng ngày với chế độ xoay thông minh.","loadingBackups":"Đang tải bản sao lưu...","noBackupsYet":"Chưa có bản sao lưu nào. Bản sao lưu sẽ được tạo tự động khi dữ liệu thay đổi.","backupsAvailable":"{count} bản sao lưu có sẵn","refresh":"Làm mới","confirm":"Xác nhận?","yes":"Có","no":"Không","restore":"Khôi phục","invalidFileType":"Loại tệp không hợp lệ. Chỉ các tệp .sqlite được chấp nhận.","exportFailed":"Xuất không thành công","exportFailedWithError":"Xuất không thành công: {error}","fullExportFailedWithError":"Xuất toàn bộ không thành công: {error}","backupCreated":"Đã tạo bản sao lưu: {file}","restoreSuccess":"Đã khôi phục! {connections} kết nối, nút {nodes}, tổ hợp {combos}, khóa API {apiKeys}.","importSuccess":"Cơ sở dữ liệu đã được nhập! {connections} kết nối, nút {nodes}, tổ hợp {combos}, khóa API {apiKeys}.","justNow":"ngay bây giờ","minutesAgo":"{count} phút trước","hoursAgo":"{count} giờ trước","daysAgo":"{count}ngày trước","backupReasonManual":"hướng dẫn sử dụng","backupReasonPreRestore":"khôi phục trước","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"Không có thay đổi nào kể từ lần sao lưu cuối cùng","backupFailed":"Sao lưu không thành công","restoreFailed":"Khôi phục không thành công","importFailed":"Nhập không thành công","errorDuringRestore":"Đã xảy ra lỗi trong quá trình khôi phục","errorDuringImport":"Đã xảy ra lỗi trong quá trình nhập","modelPricing":"Giá mẫu","modelPricingDesc":"Định cấu hình mức chi phí cho mỗi mô hình • Tất cả mức giá bằng mã thông báo $/1 triệu","providers":"Nhà cung cấp","registry":"Đăng ký","priced":"Đã định giá","searchProvidersModels":"Tìm kiếm nhà cung cấp hoặc mô hình...","showAll":"Hiển thị tất cả","noProvidersMatch":"Không có nhà cung cấp nào phù hợp với tìm kiếm của bạn.","howPricingWorks":"Cách thức hoạt động của giá","cacheWrite":"Ghi bộ nhớ đệm","unsaved":"chưa được lưu","resetDefaults":"Đặt lại mặc định","saveProvider":"Lưu nhà cung cấp","saving":"Đang lưu...","model":"người mẫu","models":"mô hình","moreProviders":"{count} nhà cung cấp khác","withPricing":"với giá được cấu hình","policiesCircuitBreakers":"Chính sách & Bộ ngắt mạch","activeIssuesDetected":"Đã phát hiện sự cố đang diễn ra","off":"Tắt","resetPricingConfirm":"Đặt lại tất cả giá cho {provider} về mặc định?","pricingDescInput":"Đầu vào: mã thông báo được gửi đến mô hình","pricingDescOutput":"Đầu ra: mã thông báo được tạo","pricingDescCached":"Đã lưu vào bộ nhớ đệm: đầu vào được sử dụng lại (~50% tốc độ đầu vào)","pricingDescReasoning":"Lý luận: mã thông báo suy nghĩ (quay lại Đầu ra)","pricingDescCacheWrite":"Ghi bộ đệm: tạo các mục bộ đệm (quay lại Đầu vào)","pricingDescFormula":"Chi phí = (đầu vào × tốc độ đầu vào) + (đầu ra × tốc độ đầu ra) + (được lưu vào bộ nhớ đệm × tốc độ được lưu vào bộ nhớ cache) trên một triệu mã thông báo.","pricingSettingsTitle":"Cài đặt giá","totalModels":"Tổng số mô hình","active":"Đang hoạt động","costCalculation":"Tính toán chi phí","costCalculationDesc":"Chi phí được tính toán dựa trên mức sử dụng mã thông báo và mức giá được định cấu hình cho từng mô hình.","pricingFormat":"Định dạng giá","pricingFormatDesc":"Tất cả các mức giá đều tính bằng token $/1 triệu (đô la trên một triệu token).","tokenTypes":"Các loại mã thông báo","inputTokenDesc":"Mã thông báo nhắc nhở tiêu chuẩn","outputTokenDesc":"Mã thông báo hoàn thành/phản hồi","cachedTokenDesc":"Mã thông báo đầu vào được lưu trong bộ nhớ đệm (thường là 50% tốc độ đầu vào)","reasoningTokenDesc":"Mã thông báo lý luận/suy nghĩ đặc biệt (dự phòng tốc độ đầu ra)","cacheCreationTokenDesc":"Mã thông báo được sử dụng để tạo mục nhập bộ đệm (dự phòng tốc độ đầu vào)","customPricingNote":"Bạn có thể ghi đè giá mặc định cho các kiểu máy cụ thể. Ghi đè tùy chỉnh được ưu tiên hơn giá được tự động phát hiện.","editPricing":"Chỉnh sửa giá","viewFullDetails":"Xem chi tiết đầy đủ","themeCoral":"San hô","cliFingerprint":"CLI Fingerprint Matching","cliFingerprintDesc":"Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.","cliFingerprintEnabled":"{count} provider(s) with CLI fingerprint active","enableFingerprintTitle":"Enable fingerprint for {provider}","disableFingerprintTitle":"Disable fingerprint for {provider}","routingAdvancedGuideTitle":"Hướng dẫn định tuyến nâng cao","routingAdvancedGuideHint1":"Sử dụng Fill First để có mức độ ưu tiên có thể dự đoán được, Round Robin để đảm bảo tính công bằng và P2C để có khả năng phục hồi độ trễ.","routingAdvancedGuideHint2":"Nếu các nhà cung cấp khác nhau về chất lượng/chi phí, hãy bắt đầu với Cost Opt cho công việc nền và Ít được sử dụng nhất để cân bằng độ hao mòn.","comboDefaultsGuideTitle":"Cách điều chỉnh mặc định kết hợp","comboDefaultsGuideHint1":"Giữ số lần thử ở mức thấp trong các luồng có độ trễ thấp; chỉ tăng thời gian chờ cho các tác vụ tạo dài.","comboDefaultsGuideHint2":"Sử dụng ghi đè nhà cung cấp khi một nhà cung cấp cần hành vi hết thời gian chờ/thử lại khác với mặc định chung."},"translator":{"title":"Người phiên dịch","metaTitle":"Sân chơi phiên dịch | OmniRoute","metaDescription":"Gỡ lỗi, kiểm tra và trực quan hóa bản dịch định dạng API giữa các nhà cung cấp","playgroundTitle":"Sân chơi phiên dịch","playground":"Sân chơi","realtime":"Hoạt động dịch thời gian thực","chatTester":"Trình kiểm tra trò chuyện","testBench":"Ghế thử nghiệm","liveMonitor":"Màn hình trực tiếp","modeDescriptionPlayground":"Dán bất kỳ nội dung yêu cầu API nào và xem cách OmniRoute dịch nó giữa các định dạng nhà cung cấp (OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi)","modeDescriptionChatTester":"Gửi các yêu cầu trò chuyện thực tế thông qua OmniRoute và kiểm tra toàn bộ hành trình: đầu vào, yêu cầu đã dịch, phản hồi của nhà cung cấp và đầu ra đã dịch.","modeDescriptionTestBench":"Chạy các kịch bản được xác định trước và so sánh khả năng tương thích giữa các nhà cung cấp và mô hình.","modeDescriptionLiveMonitor":"Xem các sự kiện dịch thuật trong thời gian thực khi các yêu cầu chảy qua OmniRoute.","modeDescriptionFallback":"Gỡ lỗi, kiểm tra và trực quan hóa cách OmniRoute dịch các yêu cầu API giữa các nhà cung cấp.","recentTranslations":"Bản dịch gần đây","noTranslations":"Chưa có bản dịch nào","source":"Nguồn","target":"Mục tiêu","time":"thời gian","model":"người mẫu","status":"Trạng thái","latency":"Độ trễ","totalTranslations":"Tổng số bản dịch","successful":"thành công","errors":"Lỗi","avgLatency":"Độ trễ trung bình","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Trực tiếp - Tự động làm mới","paused":"Đã tạm dừng","eventsAppearHint":"Các sự kiện dịch xuất hiện ở đây khi các yêu cầu chuyển qua OmniRoute. Sử dụng bất kỳ phương pháp nào sau đây để tạo sự kiện:","chatTesterTab":"Tab Trình kiểm tra trò chuyện","testBenchTab":"Tab Bench thử nghiệm","externalApiCalls":"Lệnh gọi API bên ngoài","ideCliIntegrations":"Tích hợp IDE/CLI","inMemoryNote":"Lưu ý: Các sự kiện được lưu trong bộ nhớ và được đặt lại khi máy chủ khởi động lại.","ok":"được rồi","errorShort":"LỖI","formatConverter":"Trình chuyển đổi định dạng","formatConverterDescription":"Dán hoặc nhập nội dung yêu cầu JSON. Trình dịch sẽ tự động phát hiện định dạng nguồn và chuyển đổi nó sang định dạng đích. Sử dụng tính năng này để gỡ lỗi cách OmniRoute dịch các yêu cầu giữa các định dạng (OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi).","input":"đầu vào","output":"đầu ra","auto":"Tự động","swapFormats":"Hoán đổi định dạng","translateAction":"Dịch","clear":"Xóa","inputPlaceholder":"Dán nội dung yêu cầu tại đây hoặc chọn mẫu bên dưới...","exampleTemplates":"Mẫu ví dụ","exampleTemplatesHint":"- Bấm để tải","templateLoadHint":"Mẫu tải yêu cầu ở định dạng {format}. Thay đổi định dạng nguồn để tải ở định dạng khác.","compatibilityTester":"Trình kiểm tra khả năng tương thích","compatibilityReport":"Báo cáo tương thích","testBenchDescription":"Chạy các kịch bản được xác định trước (Trò chuyện đơn giản, Gọi công cụ, v.v.) để xác minh khả năng tương thích của bản dịch và nhà cung cấp. Chọn định dạng nguồn và nhà cung cấp mục tiêu, sau đó chạy tất cả các thử nghiệm để xem tỷ lệ phần trăm tương thích. Sử dụng công cụ này để tìm những tính năng nào hoạt động giữa các nhà cung cấp.","targetProvider":"Nhà cung cấp mục tiêu","runAllTests":"Chạy tất cả các bài kiểm tra","runTest":"Chạy thử nghiệm","reRun":"Chạy lại","running":"Đang chạy...","passed":"đã vượt qua","failed":"thất bại","passedIconLabel":"✅ Đạt","chunks":"khối","scenarioSimpleChat":"Trò chuyện đơn giản","scenarioToolCalling":"Gọi công cụ","scenarioMultiTurn":"Nhiều lượt","scenarioThinking":"suy nghĩ","scenarioSystemPrompt":"Lời nhắc hệ thống","scenarioStreaming":"Truyền phát","templateNames":{"simple-chat":"Trò chuyện đơn giản","tool-calling":"Gọi công cụ","multi-turn":"Nhiều lượt","thinking":"suy nghĩ","system-prompt":"Lời nhắc hệ thống","streaming":"Truyền phát"},"templateDescriptions":{"simple-chat":"Tin nhắn văn bản cơ bản","tool-calling":"Lệnh gọi hàm/công cụ","multi-turn":"Đối thoại với lịch sử","thinking":"Suy nghĩ/lý luận mở rộng","system-prompt":"Hướng dẫn hệ thống phức tạp","streaming":"Yêu cầu phát trực tuyến SSE"},"templatePayloads":{"simpleChat":{"system":"Bạn là một trợ lý hữu ích.","userGreeting":"Xin chào! Bạn hôm nay thế nào?"},"toolCalling":{"userWeather":"Thời tiết ở São Paulo thế nào?","toolDescription":"Nhận thời tiết hiện tại cho một địa điểm","cityNameDescription":"Tên thành phố"},"multiTurn":{"system":"Bạn là một trợ lý mã hóa.","userInitial":"Viết hàm sắp xếp một mảng trong Python.","assistantExample":"Đây là một chức năng sắp xếp đơn giản:\\n\\n``` con trăn\\ndef sắp xếp_array(arr):\\n trả về đã sắp xếp(arr)\\n```","userFollowUp":"Bây giờ hãy sắp xếp nó theo thứ tự giảm dần."},"thinking":{"question":"Tổng của 100 số nguyên tố đầu tiên là bao nhiêu?"},"systemPrompt":{"systemInstruction":"Bạn là một kỹ sư phần mềm cao cấp chuyên về hệ thống phân tán. Trả lời các câu hỏi một cách chính xác bằng cách sử dụng các phương pháp hay nhất trong ngành. Luôn cung cấp các ví dụ về mã khi có liên quan. Định dạng câu trả lời của bạn bằng cách sử dụng markdown.","question":"Làm cách nào để triển khai mẫu ngắt mạch?"},"streaming":{"prompt":"Kể cho tôi nghe một câu chuyện ngắn về một robot học vẽ."}},"openaiCompatibleLabel":"Tương thích OpenAI","anthropicCompatibleLabel":"Tương thích với con người","noTemplateForFormat":"Không có mẫu cho định dạng này","translationFailed":"Dịch không thành công: {error}","pipelineDebugger":"Trình gỡ lỗi đường ống","translationPipeline":"Đường dẫn dịch thuật","pipelineVisualization":"Trực quan hóa đường ống","pipelineVisualizationHint":"Gửi tin nhắn để xem yêu cầu của bạn diễn ra như thế nào thông qua quá trình phát hiện → dịch thuật → cuộc gọi của nhà cung cấp.","chatTesterDescription":"Gửi tin nhắn dưới dạng định dạng ứng dụng khách cụ thể và kiểm tra từng bước của quy trình dịch thuật.","chatTesterFlow":"Yêu cầu của khách hàng → Phát hiện định dạng → Trung gian OpenAI → Định dạng nhà cung cấp → Phản hồi","clickStepToInspect":"Nhấp vào bất kỳ bước nào để kiểm tra dữ liệu ở giai đoạn đó.","clientFormat":"Định dạng khách hàng","provider":"nhà cung cấp","modelPlaceholder":"Chọn hoặc nhập tên mẫu máy...","sendMessageToSeePipeline":"Gửi tin nhắn để xem quy trình dịch thuật","chatMessageHintPrefix":"Tin nhắn của bạn sẽ được định dạng dưới dạng","chatMessageHintSuffix":"yêu cầu, được dịch qua quy trình và gửi đến nhà cung cấp đã chọn.","youWithFormat":"Bạn ({format})","assistant":"Trợ lý","typeMessage":"Nhập tin nhắn...","send":"Gửi","clientRequest":"Yêu cầu của khách hàng","clientRequestDescription":"Nội dung yêu cầu mà khách hàng của bạn sẽ gửi nó","formatDetected":"Đã phát hiện định dạng","formatDetectedDescription":"OmniRoute tự động phát hiện định dạng API từ cấu trúc yêu cầu","openaiIntermediate":"Trung cấp OpenAI","openaiIntermediateDescription":"Tất cả các định dạng trước tiên được chuẩn hóa thành định dạng OpenAI (cầu nối phổ quát)","providerFormat":"Định dạng nhà cung cấp","providerFormatDescription":"Định dạng OpenAI được dịch sang định dạng gốc của nhà cung cấp","providerResponse":"Phản hồi của nhà cung cấp","providerResponseRawDescription":"Phản hồi thô từ API nhà cung cấp","providerResponseSseDescription":"Luồng SSE thô từ API nhà cung cấp","unexpectedError":"Đã xảy ra lỗi không mong muốn","error":"Lỗi","errorMessage":"Lỗi: {message}","requestFailed":"Yêu cầu không thành công","noTextExtracted":"(Không trích xuất văn bản)","liveMonitorDescriptionPrefix":"Hiển thị các sự kiện dịch khi lệnh gọi API đi qua OmniRoute. Các sự kiện đến từ bộ đệm trong bộ nhớ (đặt lại khi khởi động lại). sử dụng","liveMonitorDescriptionSuffix":"hoặc lệnh gọi API bên ngoài để tạo sự kiện."},"usage":{"title":"Cách sử dụng","loggerTab":"Trình ghi nhật ký","proxyTab":"ủy nhiệm","budgetManagement":"Quản lý ngân sách","budgetSaved":"Đã lưu giới hạn ngân sách","budgetSaveFailed":"Không thể tiết kiệm ngân sách","loadingBudgetData":"Đang tải dữ liệu ngân sách...","noApiKeysTitle":"Không có khóa API","noApiKeysDescription":"Thêm khóa API trước để thiết lập giới hạn ngân sách.","apiKey":"Khóa API","todaysSpend":"Chi tiêu hôm nay","thisMonth":"Tháng này","setLimits":"Đặt giới hạn","dailyLimitUsd":"Giới hạn hàng ngày (USD)","monthlyLimitUsd":"Giới hạn hàng tháng (USD)","warningThresholdPercent":"Ngưỡng cảnh báo (%)","dailyLimitPlaceholder":"ví dụ: 5 giờ 00","monthlyLimitPlaceholder":"ví dụ: 50,00","warningThresholdPlaceholder":"80","saveLimits":"Lưu giới hạn","budgetOk":"Ngân sách ổn — còn lại {remaining}","budgetExceeded":"Vượt quá ngân sách — yêu cầu có thể bị chặn","totalRequests":"Tổng số yêu cầu","noDataYet":"Chưa có dữ liệu","latency":"Độ trễ","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Bộ nhớ đệm nhắc nhở","systemHealth":"Tình trạng hệ thống","entries":"Bài dự thi","activeCount":"{count} đang hoạt động","openCircuitBreakersDetected":"Đã phát hiện bộ ngắt mạch hở","hitRate":"Tỷ lệ trúng","hitsMisses":"Lượt truy cập / Bỏ lỡ","circuitBreakers":"Bộ ngắt mạch","lockedIPs":"IP bị khóa","lockoutsAutoRefreshHint":"Khóa giới hạn tốc độ trên mỗi mô hình • Tự động làm mới 10 giây","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} còn lại","howItWorks":"Nó hoạt động như thế nào","howItWorksSubtitle":"Tìm hiểu cách đánh giá xác thực phản hồi LLM của bạn","define":"Xác định","defineStepDescription":"Tạo các trường hợp thử nghiệm với lời nhắc đầu vào và tiêu chí đầu ra dự kiến bằng cách sử dụng các chiến lược như chứa, biểu thức chính quy hoặc đối sánh chính xác.","run":"Chạy","runStepDescription":"Thực hiện các trường hợp kiểm thử đối với điểm cuối LLM của bạn thông qua OmniRoute. Mỗi trường hợp được gửi dưới dạng một yêu cầu API thực sự.","evaluate":"Đánh giá","evaluateStepDescription":"Các câu trả lời được so sánh với các tiêu chí dự kiến. Xem đạt/không đạt cho từng trường hợp với số liệu về độ trễ và phản hồi chi tiết.","evalSuites":"Bộ đánh giá","evalSuitesHint":"Nhấp vào một bộ để xem các trường hợp thử nghiệm, sau đó chạy để đánh giá điểm cuối LLM của bạn","evalsLoading":"Đang tải bộ đánh giá...","noEvalSuitesFound":"Không tìm thấy bộ đánh giá nào","noEvalSuitesDescription":"Bộ đánh giá có thể được xác định thông qua API hoặc bằng mã. Họ kiểm tra kết quả đầu ra của mô hình so với kết quả mong đợi bằng cách sử dụng các chiến lược như chứa, biểu thức chính quy, đối sánh chính xác và các hàm tùy chỉnh.","columnCase":"trường hợp","columnStatus":"Trạng thái","columnLatency":"Độ trễ","columnDetails":"Chi tiết","columnModel":"người mẫu","columnStrategy":"Chiến lược","columnExpected":"Dự kiến","statsSuites":"dãy phòng","statsTestCases":"Trường hợp thử nghiệm","statsModels":"Người mẫu","statsCoverage":"Bảo hiểm","statsStrategiesCount":"{count} chiến lược","evaluationStrategies":"Chiến lược đánh giá","modelsUnderTest":"Mô hình đang được thử nghiệm","searchSuitesPlaceholder":"Bộ tìm kiếm...","passSuffix":"vượt qua","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Chạy đánh giá","runningProgress":"Đang chạy {current}/{total}...","passRate":"tỷ lệ đậu","summaryBreakdown":"{passed} đã đạt · {failed} thất bại · tổng cộng {total}","passedIconLabel":"✅ Đạt","failedIconLabel":"❌ Thất bại","detailsContains":"Chứa: \\"{term}\\"","detailsRegex":"Biểu thức chính quy: {pattern}","detailsExpected":"Dự kiến: \\"{expected}\\"","noResultsYet":"Chưa có kết quả","testCasesCount":"Các trường hợp thử nghiệm ({count})","noTestCasesDefined":"Không có trường hợp thử nghiệm nào được xác định","runEvalHint":"Nhấp vào \\"Chạy đánh giá\\" để thực thi tất cả các trường hợp đối với điểm cuối LLM của bạn. Mỗi bài kiểm tra sẽ gửi một yêu cầu thực sự thông qua OmniRoute.","notifyNoTestCases":"Không có trường hợp thử nghiệm nào được xác định cho bộ phần mềm này","notifyAllCasesPassed":"Tất cả {total} trường hợp đã thành công ✅","notifySomeCasesFailed":"{passed}/{total} đã đạt, {failed} không thành công","notifyEvalRunFailed":"Chạy đánh giá không thành công","notifyEvalTitle":"Đánh giá: {name}","modelEvals":"Đánh giá mô hình","evalsHeroDescription":"Kiểm tra và xác thực các điểm cuối LLM của bạn bằng cách chạy các bộ đánh giá được xác định trước. Mỗi bộ chứa các trường hợp thử nghiệm gửi lời nhắc thực sự thông qua OmniRoute và so sánh phản hồi với tiêu chí dự kiến — giúp bạn phát hiện hồi quy, so sánh mô hình và đảm bảo chất lượng phản hồi giữa các nhà cung cấp.","qualityValidation":"Xác nhận chất lượng","modelComparison":"So sánh mô hình","regressionDetection":"Phát hiện hồi quy","latencyBenchmarks":"Điểm chuẩn độ trễ","modelLockouts":"Khóa mô hình","noLockouts":"Hiện không có mẫu nào bị khóa","activeSessions":"Phiên hoạt động","noSessions":"Không có phiên hoạt động nào","sessionsHint":"Phiên xuất hiện khi yêu cầu chảy qua proxy","sessionsTrackedHint":"Được theo dõi thông qua dấu vân tay yêu cầu • Tự động làm mới 5 giây","session":"Phiên","age":"Tuổi","requests":"Yêu cầu","connection":"Kết nối","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value} phút","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Giới hạn của nhà cung cấp","noProviders":"Không có nhà cung cấp nào được kết nối","connectProvidersForQuota":"Kết nối với nhà cung cấp bằng OAuth để theo dõi giới hạn và mức sử dụng hạn ngạch API của bạn.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(được lọc từ {count})","autoRefresh":"Tự động làm mới","refreshAll":"Làm mới tất cả","loadingQuotas":"Đang tải...","account":"Tài khoản","modelQuotas":"Hạn ngạch mẫu","lastUsed":"Được sử dụng lần cuối","actions":"hành động","refreshQuota":"Làm mới hạn ngạch","today":"hôm nay","tomorrow":"Ngày mai","dayTimeFormat":"{day}, {time}","inDuration":"trong {duration}","notApplicable":"không áp dụng","rawPlanWithValue":"Gói thô: {plan}","noPlanFromProvider":"Không có kế hoạch từ nhà cung cấp","noQuotaData":"Không có dữ liệu hạn ngạch","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Không có sẵn dữ liệu hạn ngạch","noAccountsForTierFilter":"Không tìm thấy tài khoản nào cho bộ lọc cấp độ","tierAll":"Tất cả","tierEnterprise":"Doanh nghiệp","tierTeam":"đội","tierBusiness":"Kinh doanh","tierUltra":"siêu","tierPro":"chuyên nghiệp","tierPlus":"Cộng thêm","tierFree":"miễn phí","tierUnknown":"Không xác định"},"modals":{"waitingAuth":"Đang chờ cấp phép","verificationUrl":"URL xác minh","yourCode":"Mã của bạn","remoteAccess":"Truy cập từ xa:","connectedSuccess":"Đã kết nối thành công!","connectionFailed":"Kết nối không thành công","chooseAuthMethod":"Chọn phương thức xác thực của bạn:","awsBuilderId":"ID trình tạo AWS","awsIamIdentity":"Trung tâm nhận dạng AWS IAM","googleAccount":"Tài khoản Google","githubAccount":"Tài khoản GitHub","importToken":"Nhập mã thông báo","pasteToken":"Dán mã thông báo làm mới từ Kiro IDE.","awsRegion":"Khu vực AWS","autoDetecting":"Tự động phát hiện mã thông báo...","readingFromCache":"Đọc từ bộ đệm AWS SSO","readingFromCursor":"Đọc từ cơ sở dữ liệu Cursor IDE","initializing":"Đang khởi tạo...","pricingConfig":"Cấu hình giá","loadingPricing":"Đang tải dữ liệu giá...","pricingRatesFormat":"Định dạng giá cước","noPricingData":"Không có dữ liệu giá cả","noModelsFound":"Không tìm thấy mô hình nào"},"loggers":{"allProviders":"Tất cả nhà cung cấp","allModels":"Tất cả các mẫu","allAccounts":"Tất cả tài khoản","allApiKeys":"Tất cả các khóa API","allTypes":"Tất cả các loại","allLevels":"Tất cả các cấp độ","modelAZ":"Mô hình A-Z","modelZA":"Model Z-A","loadingLogs":"Đang tải nhật ký...","loadingProxyLogs":"Đang tải nhật ký proxy...","noLogEntries":"Không tìm thấy mục nhật ký nào","noPayloadData":"Không có dữ liệu tải trọng cho mục nhập nhật ký này.","proxyEvent":"Sự kiện ủy quyền","proxy":"ủy nhiệm","level":"Cấp độ","directNative":"Trực tiếp (gốc)","combo":"kết hợp","inputTokens":"Tôi:","outputTokens":"Ồ:"},"stats":{"usageOverview":"Tổng quan về cách sử dụng","outputTokens":"Mã thông báo đầu ra","totalCost":"Tổng chi phí","usageByModel":"Cách sử dụng theo mẫu","usageByAccount":"Mức sử dụng theo tài khoản","failedToLoad":"Không tải được số liệu thống kê sử dụng.","tokenHealth":"Tình trạng mã thông báo","totalOAuth":"Tổng OAuth","healthy":"khỏe mạnh","warning":"Cảnh báo","errored":"Đã xảy ra lỗi","lastCheck":"Kiểm tra lần cuối","noData":"Không có dữ liệu","share":"Chia sẻ","unableToLoad":"Không thể tải số liệu hệ thống","product":"sản phẩm","resources":"Tài nguyên","company":"Công ty"},"auth":{"welcome":"Chào mừng","signIn":"Đăng nhập","enterPassword":"Nhập mật khẩu của bạn để tiếp tục","password":"Mật khẩu","unifiedProxy":"Proxy API AI hợp nhất","unifiedAiApiProxy":"Proxy API AI hợp nhất","unifiedAiApiProxyDesc":"Định tuyến các yêu cầu đến nhiều nhà cung cấp AI thông qua một điểm cuối duy nhất. Cân bằng tải, chuyển đổi dự phòng và theo dõi sử dụng được tích hợp sẵn.","passwordNotEnabled":"Bảo vệ mật khẩu không được kích hoạt","loading":"Đang tải...","invalidPassword":"Mật khẩu không hợp lệ","errorOccurredRetry":"Đã xảy ra lỗi. Vui lòng thử lại.","configureInstance":"Hãy cấu hình phiên bản OmniRoute của bạn","runOnboardingWizard":"Chạy trình hướng dẫn tích hợp để thiết lập mật khẩu và kết nối với nhà cung cấp AI đầu tiên của bạn.","startOnboarding":"Bắt đầu giới thiệu","secureYourInstance":"Bảo mật phiên bản của bạn","setPasswordDescription":"Đặt mật khẩu để bảo vệ bảng thông tin và bảo mật các điểm cuối API của bạn khỏi bị truy cập trái phép.","configurePassword":"Định cấu hình mật khẩu","continue":"Tiếp tục","windowWillClose":"Cửa sổ này sẽ tự động đóng lại...","closeTabNow":"Bạn có thể đóng tab này ngay bây giờ.","copyUrlManual":"Vui lòng sao chép URL từ thanh địa chỉ và dán vào ứng dụng.","accessDeniedDescription":"Bạn không có quyền truy cập tài nguyên này. Kiểm tra khóa API của bạn hoặc liên hệ với quản trị viên.","goToDashboard":"Đi tới Trang tổng quan","featureMultiProviderTitle":"Đa nhà cung cấp","featureMultiProviderDesc":"OpenAI, Anthropic, Google, v.v.","featureLoadBalancingTitle":"Cân bằng tải","featureLoadBalancingDesc":"Phân phối yêu cầu một cách thông minh","featureUsageTrackingTitle":"Theo dõi sử dụng","featureUsageTrackingDesc":"Theo dõi chi phí và mã thông báo","resetPassword":"Đặt lại mật khẩu","resetDescription":"Chọn một phương pháp để khôi phục quyền truy cập vào trang tổng quan của bạn","stopServer":"Dừng máy chủ OmniRoute","processing":"Đang xử lý...","pleaseWait":"Vui lòng đợi trong khi chúng tôi hoàn tất việc ủy quyền.","authSuccess":"Ủy quyền thành công!","copyUrl":"Sao chép URL này","accessDenied":"Truy cập bị từ chối","methodCliTitle":"Phương pháp 1: Đặt lại CLI","methodCliDescription":"Chạy lệnh sau trên máy chủ nơi OmniRoute đang chạy:","methodCliHint":"Điều này sẽ nhắc bạn đặt mật khẩu mới. Máy chủ phải được dừng trước tiên.","methodManualTitle":"Phương pháp 2: Đặt lại thủ công","methodManualDescription":"Xóa mật khẩu khỏi cơ sở dữ liệu và đặt mật khẩu mới khi khởi động:","setPasswordInYour":"Đặt mật khẩu mới trong","fileLabelSuffix":"tập tin:","newPasswordPlaceholder":"your_new_password","deleteSettingsFile":"Xóa","orRemovePasswordHashField":"hoặc xóa trường mật khẩuHash","restartServerWithNewPassword":"Khởi động lại máy chủ - nó sẽ sử dụng mật khẩu mới","backToLogin":"Quay lại đăng nhập","forgotPassword":"Quên mật khẩu?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Ủy quyền","Content-Disposition":"Bố trí nội dung","waitingForAuthorization":"Đang chờ cấp phép...","waitingForGoogleAuthorization":"Đang chờ Google ủy quyền...","waitingForOpenAIAuthorization":"Đang chờ ủy quyền OpenAI...","waitingForAntigravityAuthorization":"Đang chờ ủy quyền chống hấp dẫn...","waitingForIFlowAuthorization":"Đang chờ ủy quyền iFlow...","exchangingCodeForTokens":"Đổi mã lấy token..."},"landing":{"brandName":"OmniRoute","navigateHome":"Điều hướng về nhà","toggleMenu":"Chuyển đổi menu","featuresLink":"Tính năng","docsLink":"Tài liệu","github":"GitHub","versionLive":"v1.0 hiện đang hoạt động","oneEndpoint":"Một điểm cuối cho","allProviders":"Tất cả các nhà cung cấp AI","heroDescription":"Proxy điểm cuối AI với bảng điều khiển web - Cổng JavaScript của CLIProxyAPI. Hoạt động liền mạch với Claude Code, OpenAI Codex, Cline, RooCode và các công cụ CLI khác.","getStarted":"Bắt đầu","viewOnGithub":"Xem trên GitHub","powerfulFeatures":"Tính năng mạnh mẽ","featuresSubtitle":"Mọi thứ bạn cần để quản lý cơ sở hạ tầng AI ở một nơi, được xây dựng theo quy mô.","featureUnifiedEndpointTitle":"Điểm cuối hợp nhất","featureUnifiedEndpointDesc":"Truy cập tất cả các nhà cung cấp thông qua một URL API tiêu chuẩn duy nhất.","featureEasySetupTitle":"Thiết lập dễ dàng","featureEasySetupDesc":"Thiết lập và chạy trong vài phút với lệnh npx.","featureModelFallbackTitle":"Dự phòng mô hình","featureModelFallbackDesc":"Tự động chuyển đổi nhà cung cấp khi có lỗi hoặc độ trễ cao.","featureUsageTrackingTitle":"Theo dõi sử dụng","featureUsageTrackingDesc":"Phân tích chi tiết và giám sát chi phí trên tất cả các mô hình.","featureOAuthApiKeysTitle":"Khóa OAuth & API","featureOAuthApiKeysDesc":"Quản lý an toàn thông tin xác thực trong một kho tiền.","featureCloudSyncTitle":"Đồng bộ đám mây","featureCloudSyncDesc":"Đồng bộ hóa cấu hình của bạn trên các thiết bị ngay lập tức.","featureCliSupportTitle":"Hỗ trợ CLI","featureCliSupportDesc":"Hoạt động với Claude Code, Codex, Cline, Cursor, v.v.","featureDashboardTitle":"Trang tổng quan","featureDashboardDesc":"Bảng điều khiển trực quan để phân tích lưu lượng truy cập theo thời gian thực.","howItWorks":"OmniRoute hoạt động như thế nào","howItWorksDescription":"Dữ liệu được truyền liền mạch từ ứng dụng của bạn thông qua lớp định tuyến thông minh của chúng tôi đến nhà cung cấp tốt nhất cho công việc.","howItWorksStep1Title":"1. CLI & SDK","howItWorksStep1Description":"Yêu cầu của bạn bắt đầu từ các công cụ yêu thích của bạn hoặc SDK hợp nhất của chúng tôi. Chỉ cần thay đổi URL cơ sở.","howItWorksStep2Title":"2. Trung tâm OmniRoute","howItWorksStep2Description":"Công cụ của chúng tôi phân tích lời nhắc, kiểm tra trạng thái của nhà cung cấp và các lộ trình để có độ trễ hoặc chi phí thấp nhất.","howItWorksStep3Title":"3. Nhà cung cấp AI","howItWorksStep3Description":"Yêu cầu được OpenAI, Anthropic, Gemini hoặc những người khác thực hiện ngay lập tức.","getStartedIn30Seconds":"Bắt đầu sau 30 giây","getStartedDescription":"Cài đặt OmniRoute, định cấu hình nhà cung cấp của bạn thông qua bảng điều khiển web và bắt đầu định tuyến các yêu cầu AI.","installOmniRoute":"Cài đặt OmniRoute","installStepDescription":"Chạy lệnh npx để khởi động máy chủ ngay lập tức","openDashboard":"Mở trang tổng quan","openDashboardStepDescription":"Định cấu hình nhà cung cấp và khóa API thông qua giao diện web","routeRequests":"Yêu cầu lộ trình","routeRequestsStepDescription":"Trỏ công cụ CLI của bạn tới {endpoint}","terminal":"thiết bị đầu cuối","copy":"Sao chép","copied":"✓ Sao chép","startingOmniRoute":"Đang khởi động OmniRoute...","serverRunningOnLabel":"Máy chủ đang chạy","dashboardLabel":"Trang tổng quan","readyToRoute":"Sẵn sàng lên đường! ✓","configureProvidersNote":"📝 Định cấu hình nhà cung cấp trong bảng điều khiển hoặc sử dụng biến môi trường","dataLocation":"Vị trí dữ liệu:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"sản phẩm","dashboardLink":"Trang tổng quan","changelog":"Nhật ký thay đổi","resources":"Tài nguyên","documentation":"Tài liệu","npm":"NPM","legal":"pháp lý","mitLicense":"Giấy phép MIT","footerTagline":"Điểm cuối thống nhất để tạo AI. Kết nối, định tuyến và quản lý các nhà cung cấp AI của bạn một cách dễ dàng.","copyright":"© {year} OmniRoute. Mọi quyền được bảo lưu.","flowToolClaudeCode":"Mã Claude","flowToolOpenAICodex":"Codex OpenAI","flowToolCline":"Cline","flowToolCursor":"Con trỏ","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"nhân loại","flowProviderGemini":"Song Tử","flowProviderGithubCopilot":"Phi công phụ GitHub","interactiveDiagram":"Sơ đồ tương tác hiển thị trên màn hình","ctaTitle":"Sẵn sàng đơn giản hóa cơ sở hạ tầng AI của bạn?","ctaDescription":"Tham gia cùng các nhà phát triển đang hợp lý hóa việc tích hợp AI của họ với OmniRoute. Nguồn mở và miễn phí để bắt đầu.","startFree":"Bắt đầu miễn phí","readDocumentation":"Đọc tài liệu"},"docs":{"title":"Tài liệu","quickStart":"Bắt đầu nhanh","features":"Tính năng","supportedProviders":"Nhà cung cấp được hỗ trợ","supportedProvidersToc":"Nhà cung cấp","commonUseCases":"Các trường hợp sử dụng phổ biến","clientCompatibility":"Khả năng tương thích của khách hàng","protocolsToc":"Protocols","apiReference":"Tham chiếu API","method":"phương pháp","path":"Đường dẫn","notes":"Ghi chú","modelPrefixes":"Tiền tố mẫu","prefix":"Tiền tố","troubleshooting":"Khắc phục sự cố","supportsChat":"Hỗ trợ cả điểm cuối trò chuyện và phản hồi.","oauthAutoRefresh":"Kết nối OAuth với tính năng làm mới mã thông báo tự động.","fullStreaming":"Hỗ trợ phát trực tuyến đầy đủ cho tất cả các kiểu máy.","docsLabel":"Tài liệu","docsHeroDescription":"Cổng AI cho LLM đa nhà cung cấp. Một điểm cuối cho OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor và hơn 20 nhà cung cấp khác.","openDashboard":"Mở trang tổng quan","endpointPage":"Trang điểm cuối","github":"GitHub","reportIssue":"Báo cáo vấn đề","onThisPage":"Trên trang này","documentationVersion":"Tài liệu - v{version}","quickStartStep1Title":"1. Cài đặt và chạy","quickStartStep1Prefix":"Chạy","quickStartStep1Middle":"hoặc sao chép từ GitHub và chạy","quickStartStep2Title":"2. Tạo khóa API","quickStartStep2Text":"Đi tới Điểm cuối -> Khóa đã đăng ký. Tạo một khóa cho mỗi môi trường.","quickStartStep3Title":"3. Kết nối nhà cung cấp","quickStartStep3Text":"Thêm tài khoản nhà cung cấp thông qua thông tin đăng nhập OAuth, khóa API hoặc tự động kết nối bậc miễn phí.","quickStartStep4Title":"4. Đặt URL cơ sở khách hàng","quickStartStep4Prefix":"Trỏ ứng dụng khách IDE hoặc API của bạn tới","quickStartStep4Suffix":"Sử dụng tiền tố nhà cung cấp, ví dụ","featureRoutingTitle":"Định tuyến nhiều nhà cung cấp","featureRoutingText":"Định tuyến yêu cầu đến hơn 30 nhà cung cấp AI thông qua một điểm cuối tương thích với OpenAI. Hỗ trợ API trò chuyện, phản hồi, âm thanh và hình ảnh.","featureCombosTitle":"Combo và cân bằng","featureCombosText":"Tạo các tổ hợp mô hình với chuỗi dự phòng và chiến lược cân bằng: luân phiên, ưu tiên, ngẫu nhiên, ít sử dụng nhất và tối ưu hóa chi phí.","featureUsageTitle":"Theo dõi việc sử dụng và chi phí","featureUsageText":"Đếm mã thông báo theo thời gian thực, tính toán chi phí cho mỗi nhà cung cấp/mô hình và phân tích mức sử dụng chi tiết theo khóa và tài khoản API.","featureAnalyticsTitle":"Trang tổng quan phân tích","featureAnalyticsText":"Phân tích trực quan với biểu đồ về yêu cầu, mã thông báo, lỗi, độ trễ, chi phí và mức độ phổ biến của mô hình theo thời gian.","featureHealthTitle":"Theo dõi sức khỏe","featureHealthText":"Kiểm tra tình trạng trực tiếp, trạng thái nhà cung cấp, trạng thái ngắt mạch và phát hiện giới hạn tốc độ tự động với thời gian chờ theo cấp số nhân.","featureCliTitle":"Công cụ CLI","featureCliText":"Quản lý cấu hình IDE, xuất/nhập bản sao lưu, khám phá cấu hình codex và định cấu hình cài đặt từ bảng điều khiển.","featureSecurityTitle":"Bảo mật và chính sách","featureSecurityText":"Xác thực khóa API, lọc IP, bảo vệ tiêm nhắc nhở, chính sách miền, quản lý phiên và ghi nhật ký kiểm tra.","featureCloudSyncTitle":"Đồng bộ đám mây","featureCloudSyncText":"Đồng bộ hóa cấu hình của bạn với Cloudflare Workers để truy cập từ xa bằng thông tin xác thực được mã hóa và chuyển đổi dự phòng tự động.","providersAcrossConnectionTypes":"{count} nhà cung cấp trên ba loại kết nối.","manageProviders":"Quản lý nhà cung cấp","providersCount":"{count} nhà cung cấp","providerTypeFree":"Bậc miễn phí","providerTypeOAuth":"OAuth","providerTypeApiKey":"Khóa API","useCaseSingleEndpointTitle":"Điểm cuối duy nhất cho nhiều nhà cung cấp","useCaseSingleEndpointText":"Trỏ máy khách đến một URL cơ sở và định tuyến theo tiền tố mô hình (ví dụ: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Dự phòng và chuyển đổi mô hình bằng combo","useCaseFallbackText":"Tạo các mô hình kết hợp trong Bảng điều khiển và giữ cấu hình máy khách ổn định trong khi các nhà cung cấp luân chuyển nội bộ.","useCaseUsageVisibilityTitle":"Khả năng hiển thị cách sử dụng, chi phí và gỡ lỗi","useCaseUsageVisibilityText":"Theo dõi mã thông báo và chi phí theo nhà cung cấp, tài khoản và khóa API trong tab Sử dụng và Phân tích.","clientCherryStudioTitle":"Xưởng Anh Đào","baseUrlLabel":"URL cơ sở","chatEndpointLabel":"Điểm cuối trò chuyện","modelRecommendationLabel":"Đề xuất mô hình: tiền tố rõ ràng","clientCodexTitle":"Mô hình phi công phụ Codex / GitHub","clientCodexBullet1":"Sử dụng ID mẫu với","clientCodexBullet2":"Các mô hình dòng Codex tự động định tuyến tới","clientCodexBullet3":"Các mô hình không phải Codex vẫn tiếp tục","clientCursorTitle":"IDE con trỏ","clientCursorBullet1":"sử dụng","clientCursorBullet1Suffix":"tiền tố cho các mô hình Con trỏ.","clientCursorBullet2":"Kết nối OAuth - đăng nhập từ trang Nhà cung cấp.","clientClaudeTitle":"Mật mã Claude/Phản trọng lực","clientClaudeBullet1Prefix":"sử dụng","clientClaudeBullet1Middle":"(Claude) hoặc","clientClaudeBullet1Suffix":"(Phản trọng lực) tiền tố.","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":"Sử dụng MCP qua stdio để cho phép khách hàng khám phá và gọi các công cụ OmniRoute với khả năng hiển thị kiểm tra.","protocolMcpStep1":"Bắt đầu vận chuyển MCP với `omniroute --mcp`.","protocolMcpStep2":"Trỏ máy khách MCP của bạn tới dịch vụ vận chuyển stdio.","protocolMcpStep3":"Gọi `omniroute_get_health` và `omniroute_list_combos` để xác thực kết nối.","protocolA2aTitle":"A2A (Đại lý2Agent)","protocolA2aDesc":"Sử dụng A2A JSON-RPC để gửi tác vụ một cách đồng bộ hoặc thông qua truyền phát SSE.","protocolA2aStep1":"Đọc `/.well-known/agent.json` để khám phá tác nhân.","protocolA2aStep2":"Gửi yêu cầu `message/send` hoặc `message/stream` tới `POST /a2a`.","protocolA2aStep3":"Quản lý vòng đời tác vụ với `tasks/get` và `tasks/cancel`.","protocolTroubleshootingTitle":"Khắc phục sự cố giao thức","protocolTroubleshooting1":"Nếu trạng thái MCP ngoại tuyến, hãy xác minh quy trình stdio đang chạy và tệp nhịp tim đang cập nhật.","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":"Điểm cuối trò chuyện tương thích với OpenAI (mặc định).","endpointResponsesNote":"Điểm cuối API phản hồi (Codex, o-series).","endpointModelsNote":"Danh mục mô hình cho tất cả các nhà cung cấp được kết nối.","endpointAudioNote":"Phiên âm âm thanh (Deepgram, AssemblyAI).","endpointImagesNote":"Tạo hình ảnh (NanoBanana).","endpointRewriteChatNote":"Viết lại trình trợ giúp cho khách hàng không có /v1.","endpointRewriteResponsesNote":"Viết lại trình trợ giúp cho Phản hồi không có /v1.","endpointRewriteModelsNote":"Viết lại trình trợ giúp để khám phá mô hình mà không cần /v1.","modelPrefixesDescriptionStart":"Sử dụng tiền tố nhà cung cấp trước tên mẫu máy để định tuyến đến một nhà cung cấp cụ thể. Ví dụ:","modelPrefixesDescriptionEnd":"định tuyến đến GitHub Copilot.","provider":"nhà cung cấp","type":"loại","troubleshootingModelRouting":"Nếu máy khách không định tuyến được mô hình, hãy sử dụng nhà cung cấp/mô hình rõ ràng (ví dụ: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Nếu bạn nhận được lỗi mô hình không rõ ràng, hãy chọn tiền tố nhà cung cấp thay vì ID mô hình trần.","troubleshootingCodexFamily":"Đối với các mô hình dòng GitHub Codex, hãy giữ mô hình là gh/codex-model; bộ định tuyến chọn/phản hồi tự động.","troubleshootingTestConnection":"Sử dụng Trang tổng quan > Nhà cung cấp > Kiểm tra kết nối trước khi thử nghiệm từ IDE hoặc ứng dụng khách bên ngoài.","troubleshootingCircuitBreaker":"Nếu nhà cung cấp hiển thị cầu dao đang mở, hãy đợi thời gian hồi chiêu hoặc kiểm tra trang Sức khỏe để biết chi tiết.","troubleshootingOAuth":"Đối với nhà cung cấp OAuth, hãy xác thực lại nếu mã thông báo hết hạn. Kiểm tra chỉ báo trạng thái thẻ nhà cung cấp.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","endpointSpeechNote":"Tạo văn bản thành giọng nói (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Tạo nhúng văn bản (OpenAI, Cohere, Voyage)."},"legal":{"privacyPolicy":"Chính sách bảo mật","termsOfService":"Điều khoản dịch vụ","providerConfigurations":"Cấu hình nhà cung cấp","apiKeys":"Khóa API","usageLogs":"Nhật ký sử dụng","applicationSettings":"Cài đặt ứng dụng","viewExportAnalytics":"Xem và xuất phân tích sử dụng","clearHistory":"Xóa lịch sử sử dụng bất cứ lúc nào","configureRetention":"Định cấu hình chính sách lưu giữ nhật ký","backupRestore":"Sao lưu và khôi phục cơ sở dữ liệu của bạn","privacyMetadataTitle":"Chính sách bảo mật | OmniRoute","privacyMetadataDescription":"Chính sách quyền riêng tư dành cho bộ định tuyến proxy OmniRoute AI API.","termsMetadataTitle":"Điều khoản dịch vụ | OmniRoute","termsMetadataDescription":"Điều khoản dịch vụ dành cho bộ định tuyến proxy OmniRoute AI API.","backToHome":"Trở về nhà","lastUpdated":"Cập nhật lần cuối: {date}","policyLastUpdatedDate":"Ngày 13 tháng 2 năm 2026","listSeparator":"-","questionsVisit":"Câu hỏi? Ghé thăm của chúng tôi","githubRepository":"Kho lưu trữ GitHub","privacySection1Title":"1. Kiến trúc địa phương đầu tiên","privacySection1Text":"OmniRoute được thiết kế như một ứng dụng cục bộ đầu tiên. Tất cả quá trình xử lý và lưu trữ dữ liệu diễn ra hoàn toàn trên máy của bạn. Không có máy chủ tập trung thu thập thông tin của bạn.","privacySection2Title":"2. Dữ liệu chúng tôi lưu trữ","privacyDataStoredIn":"Dữ liệu sau được lưu trữ cục bộ trong","privacyDataProviderConfigurationsDesc":"URL kết nối, loại nhà cung cấp và cài đặt ưu tiên","privacyDataApiKeysDesc":"được mã hóa và lưu trữ cục bộ để xác thực với các nhà cung cấp AI","privacyDataUsageLogsDesc":"số lượng yêu cầu, mức sử dụng mã thông báo, tên mô hình, dấu thời gian và thời gian phản hồi","privacyDataApplicationSettingsDesc":"tùy chọn chủ đề, chiến lược định tuyến và cấu hình kết hợp","privacySection3Title":"3. Không đo từ xa","privacySection3Text":"OmniRoute không thu thập báo cáo đo từ xa, phân tích hoặc sự cố. Không có dữ liệu nào được gửi cho chúng tôi hoặc bất kỳ bên thứ ba nào. Kiểu sử dụng, lệnh gọi API và cấu hình của bạn vẫn hoàn toàn ở chế độ riêng tư.","privacySection4Title":"4. Nhà cung cấp AI bên thứ ba","privacySection4Text":"Khi bạn thực hiện lệnh gọi API thông qua OmniRoute, yêu cầu của bạn sẽ được chuyển tiếp đến nhà cung cấp AI mà bạn đã định cấu hình (ví dụ: OpenAI, Anthropic, Google). Các nhà cung cấp này có chính sách bảo mật riêng chi phối cách họ xử lý dữ liệu của bạn. Vui lòng xem lại:","privacyOpenAiPolicy":"Chính sách quyền riêng tư của OpenAI","privacyAnthropicPolicy":"Chính sách về quyền riêng tư của Anthropic","privacyGooglePolicy":"Chính sách bảo mật của Google","privacySection5Title":"5. Đồng bộ hóa đám mây (Tùy chọn)","privacySection5Text":"Nếu bạn bật tính năng đồng bộ hóa đám mây tùy chọn, cấu hình nhà cung cấp và khóa API có thể được truyền đến điểm cuối đám mây đã định cấu hình. Tính năng này bị tắt theo mặc định và yêu cầu chọn tham gia rõ ràng.","privacySection6Title":"6. Ghi nhật ký","privacyLoggingIntro":"Nhật ký yêu cầu có thể được cấu hình thông qua cài đặt bảng điều khiển. Bạn có thể:","privacySection7Title":"7. Quyền của bạn","privacySection7TextStart":"Vì tất cả dữ liệu được lưu trữ cục bộ nên bạn có toàn quyền kiểm soát. Bạn có thể xóa dữ liệu của mình bất kỳ lúc nào bằng cách xóa","privacySection7TextEnd":"thư mục hoặc sử dụng tính năng sao lưu và khôi phục cơ sở dữ liệu trong bảng điều khiển.","termsSection1Title":"1. Tổng quan","termsSection1Text":"OmniRoute là bộ định tuyến proxy AI API cục bộ đầu tiên hoạt động hoàn toàn trên máy của bạn. Nó định tuyến các yêu cầu đến nhiều nhà cung cấp AI với tính năng cân bằng tải, chuyển đổi dự phòng và theo dõi việc sử dụng.","termsSection2Title":"2. Trách nhiệm của Người dùng","termsResponsibilityApiKeys":"Bạn hoàn toàn chịu trách nhiệm quản lý khóa API và thông tin đăng nhập của riêng mình cho các nhà cung cấp AI bên thứ ba (OpenAI, Anthropic, Google, v.v.).","termsResponsibilityCompliance":"Bạn phải tuân thủ các điều khoản dịch vụ của từng nhà cung cấp AI có API mà bạn truy cập thông qua OmniRoute.","termsResponsibilitySecurity":"Bạn chịu trách nhiệm về tính bảo mật của cài đặt OmniRoute cục bộ của mình, bao gồm đặt mật khẩu và hạn chế quyền truy cập mạng.","termsSection3Title":"3. Nó hoạt động như thế nào","termsSection3Text":"OmniRoute hoạt động như một proxy trung gian. Các lệnh gọi API gửi tới OmniRoute sẽ được dịch và chuyển tiếp đến các nhà cung cấp AI đã định cấu hình của bạn. OmniRoute không sửa đổi nội dung yêu cầu hoặc phản hồi của bạn ngoài bản dịch giao thức cần thiết.","termsSection4Title":"4. Xử lý dữ liệu","termsDataStoredLocally":"Tất cả dữ liệu được lưu trữ cục bộ trên máy của bạn trong cơ sở dữ liệu SQLite.","termsNoTransmission":"OmniRoute không truyền bất kỳ dữ liệu nào đến các máy chủ bên ngoài trừ khi bạn bật rõ ràng các tính năng đồng bộ hóa trên đám mây.","termsDataLocationText":"Nhật ký sử dụng, khóa API và cấu hình được lưu trữ trong","termsSection5Title":"5. Tuyên bố từ chối trách nhiệm","termsSection5Text":"OmniRoute được cung cấp \\"nguyên trạng\\" mà không có bất kỳ hình thức bảo hành nào. Chúng tôi không chịu trách nhiệm về bất kỳ chi phí nào phát sinh do sử dụng API, gián đoạn dịch vụ hoặc mất dữ liệu. Luôn duy trì bản sao lưu cấu hình của bạn.","termsSection6Title":"6. Nguồn mở","termsSection6Text":"OmniRoute là phần mềm mã nguồn mở. Bạn có thể tự do kiểm tra, sửa đổi và phân phối nó theo các điều khoản trong giấy phép."},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"API Endpoints","apiEndpointsTitle":"API Endpoints","apiEndpointsDescription":"Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.","comingSoon":"Coming Soon","plannedFeatures":"Planned Features","featureRestApi":"REST API endpoint catalog with interactive documentation","featureWebhooks":"Webhook configuration and event subscriptions","featureSwagger":"OpenAPI / Swagger spec auto-generation","featureAuth":"API key and OAuth scope management per endpoint"},"agents":{"title":"CLI Agents","description":"Discover installed CLI agents on your system. Add custom agents for auto-detection.","refresh":"Refresh","installed":"Installed","notFound":"Not Found","builtIn":"Built-in","custom":"Custom","remove":"Remove","addCustomAgent":"Add Custom Agent","addCustomAgentDesc":"Register any CLI tool for detection. It will be scanned automatically on refresh.","agentName":"Agent Name","binaryName":"Binary Name","versionCommand":"Version Command","spawnArgs":"Spawn Args","addAgent":"Add Agent","scanning":"Scanning system for CLI agents...","opencodeIntegration":"OpenCode Integration","opencodeDetected":"opencode {version} detected","opencodeDesc":"Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.","downloadConfig":"Download {file}","downloaded":"Downloaded!","setupGuideTitle":"Setup guide","openCliTools":"Open CLI Tools","setupGuideDetectCliTitle":"Detect installed CLIs","setupGuideDetectCliDesc":"Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.","setupGuideCustomAgentTitle":"Register custom binary","setupGuideCustomAgentDesc":"Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.","setupGuideCommandMissingTitle":"Fix \'command not found\'","setupGuideCommandMissingDesc":"Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error"},"templateNames":{"simple-chat":"Trò chuyện đơn giản","streaming":"Truyền phát","system-prompt":"Lời nhắc hệ thống","thinking":"suy nghĩ","tool-calling":"Gọi công cụ","multi-turn":"Nhiều lượt"},"templateDescriptions":{"simple-chat":"Mẫu chat cơ bản kèm tin nhắn hệ thống","streaming":"Mẫu để truyền phát phản hồi","system-prompt":"Mẫu có lời nhắc hệ thống tùy chỉnh","thinking":"Mẫu có ngân sách lý luận/suy nghĩ","tool-calling":"Mẫu để gọi công cụ/chức năng","multi-turn":"Mẫu hội thoại nhiều lượt"},"templatePayloads":{"simpleChat":{"system":"Bạn là một trợ lý AI hữu ích.","userGreeting":"Xin chào! Hôm nay tôi có thể giúp gì cho bạn?"},"streaming":{"prompt":"Viết một câu chuyện về"},"systemPrompt":{"question":"Ý nghĩa của cuộc sống là gì?","systemInstruction":"Đưa ra một câu trả lời sâu sắc và mang tính triết lý."},"thinking":{"question":"Giải thích tính toán lượng tử"},"toolCalling":{"cityNameDescription":"Tên của thành phố để biết thời tiết","toolDescription":"Nhận thời tiết hiện tại cho một địa điểm","userWeather":"Thời tiết ở Tokyo thế nào?"},"multiTurn":{"system":"Bạn là một trợ lý hữu ích.","assistantExample":"Tôi rất vui được giúp bạn việc đó.","userInitial":"Tôi cần giúp đỡ với","userFollowUp":"Bạn có thể giải thích về điều đó?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
|
|
1
|
+
module.exports=[111074,a=>{a.v(JSON.parse('{"common":{"save":"Lưu","cancel":"Hủy bỏ","delete":"Xóa","loading":"Đang tải...","error":"Đã xảy ra lỗi","success":"thành công","confirm":"Bạn có chắc không?","refresh":"Làm mới","close":"Đóng","add":"Thêm","edit":"Chỉnh sửa","search":"Tìm kiếm","back":"Quay lại","next":"Tiếp theo","submit":"Gửi","reset":"Đặt lại","copy":"Sao chép","copied":"Đã sao chép!","enabled":"Đã bật","disabled":"Đã tắt","active":"Đang hoạt động","inactive":"Không hoạt động","noData":"Không có sẵn dữ liệu","configure":"Cấu hình","manage":"Quản lý","name":"Tên","actions":"hành động","status":"Trạng thái","type":"loại","model":"người mẫu","models":"mô hình","provider":"nhà cung cấp","account":"Tài khoản","time":"thời gian","details":"Chi tiết","created":"Đã tạo","lastUsed":"Được sử dụng lần cuối","loadMore":"Tải thêm","noResults":"Không tìm thấy kết quả nào","reloadPage":"Tải lại trang","connected":"Đã kết nối","disconnected":"Đã ngắt kết nối","notConfigured":"Chưa được định cấu hình","testConnection":"Kiểm tra kết nối","enable":"Kích hoạt","disable":"Vô hiệu hóa","columns":"Cột","newest":"Mới nhất","oldest":"Cũ nhất","all":"Tất cả","none":"không có","yes":"Có","no":"Không","warning":"Cảnh báo","note":"Lưu ý","free":"miễn phí","skipToContent":"Chuyển đến nội dung","maintenanceServerIssues":"Server is experiencing issues. Some features may be unavailable.","maintenanceServerUnreachable":"Server is unreachable. Reconnecting...","accept":"Chấp nhận","accountId":"ID tài khoản","alias":"Bí danh","apiKeyId":"ID khóa API","apiKeyName":"Tên khóa API","apiKeySecret":"Bí mật khóa API","authorization":"Ủy quyền","content-type":"Loại nội dung","content-length":"Độ dài nội dung","cookie":"bánh quy","file":"tập tin","host":"Máy chủ","id":"ID","import":"Nhập khẩu","limit":"giới hạn","offset":"Bù đắp","open":"Mở","origin":"Xuất xứ","promptTokens":"Mã thông báo nhắc nhở","completionTokens":"Mã thông báo hoàn thành","totalTokens":"Tổng số token","rawModel":"Mô hình thô","scope":"Phạm vi","skill":"kỹ năng","sortBy":"Sắp xếp theo","sortOrder":"Sắp xếp thứ tự","tab":"Thẻ","text":"văn bản","textarea":"Vùng văn bản","tool":"Công cụ","toolId":"Mã công cụ","web":"Web","whereUsed":"Nơi sử dụng","whitelist":"Danh sách trắng","blacklist":"Danh sách đen","resolve":"giải quyết","force":"Lực lượng","base64url":"URL Base64","hex":"lục giác","range":"Phạm vi","component":"thành phần","redirect_uri":"URI chuyển hướng","idempotency-key":"Chìa khóa bình đẳng","error_description":"Mô tả lỗi","code":"Mã","compatible":"Tương thích","chat-completions":"Hoàn thành cuộc trò chuyện","oauth":"OAuth","auth_token":"Mã thông báo xác thực","crypto":"tiền điện tử","hours":"Giờ","selfsigned":"Tự ký","proxy_id":"ID proxy","proxyId":"ID proxy","connectionId":"ID kết nối","resolveConnectionId":"Giải quyết ID kết nối","resolve_connection_id":"Giải quyết ID kết nối","scope_id":"ID phạm vi","scopeId":"ID phạm vi","jwtSecret":"Bí mật JWT","keytar":"Bàn phím","better-sqlite3":"tốt hơn-sqlite3","undici":"undic","builder-id":"ID người xây dựng","musicDesc":"Mô tả âm nhạc","musicGeneration":"Thế hệ âm nhạc","idc":"IDC","cloud-status-changed":"Trạng thái đám mây đã thay đổi","where_used":"Nơi sử dụng","windowMs":"Cửa sổ (ms)","social-github":"GitHub","social-google":"Google","TOOL_ALLOWLIST":"Danh sách cho phép của công cụ","TOOL_DENYLIST":"Danh sách từ chối công cụ","Failed to save pricing":"Không lưu được giá","Failed to reset pricing":"Không thể đặt lại giá","apikey":"Khóa API","http":"HTTP"},"sidebar":{"home":"Trang chủ","dashboard":"Trang tổng quan","providers":"Nhà cung cấp","combos":"Combo","usage":"Cách sử dụng","analytics":"Phân tích","costs":"Chi phí","health":"sức khỏe","limits":"Giới hạn & hạn ngạch","cliTools":"Công cụ CLI","media":"Phương tiện","settings":"Cài đặt","translator":"Người phiên dịch","docs":"Tài liệu","issues":"vấn đề","apiManager":"Trình quản lý API","logs":"Nhật ký","auditLog":"Nhật ký kiểm tra","shutdown":"Tắt máy","restart":"Khởi động lại","shutdownConfirm":"Tắt OmniRoute?","restartConfirm":"Khởi động lại OmniRoute?","version":"v{version}","debug":"Gỡ lỗi","system":"Hệ thống","help":"Trợ giúp","serverDisconnected":"Máy chủ bị ngắt kết nối","serverDisconnectedMsg":"Máy chủ proxy đã bị dừng hoặc đang khởi động lại.","expandSidebar":"Mở rộng thanh bên","collapseSidebar":"Thu gọn thanh bên","themes":"Themes","presetColors":"Popular colors","createTheme":"Create theme","chooseColor":"Pick one color","themeCoral":"Coral","themeBlue":"Blue","themeRed":"Red","themeGreen":"Green","themeViolet":"Violet","themeOrange":"Orange","themeCyan":"Cyan","endpoints":"Điểm cuối","playground":"Playground","agents":"Tác nhân","cliToolsShort":"Công cụ","autoCombo":"Auto Combo","searchTools":"Search Tools","cache":"Cache","cacheShort":"Cache"},"themesPage":{"title":"Themes","description":"Choose a preset theme or create your own with a single color","presetColors":"Popular colors","customTheme":"Custom theme","customThemeDesc":"Click create theme and pick one color","createTheme":"Create theme","activePreset":"Active theme"},"header":{"logout":"Đăng xuất","language":"Ngôn ngữ","providers":"Nhà cung cấp","providerDescription":"Quản lý kết nối nhà cung cấp AI của bạn","combos":"Combo","comboDescription":"Kết hợp mô hình với dự phòng","usage":"Cách sử dụng & phân tích","usageDescription":"Giám sát việc sử dụng API, mức tiêu thụ mã thông báo và nhật ký yêu cầu của bạn","analytics":"Phân tích","analyticsDescription":"Biểu đồ, xu hướng và thông tin đánh giá","cliTools":"Công cụ CLI","cliToolsDescription":"Định cấu hình công cụ CLI","home":"Trang chủ","homeDescription":"Chào mừng đến với OmniRoute","endpoint":"Endpoints","endpointDescription":"Manage proxy endpoints, MCP, A2A, and API endpoints","settings":"Cài đặt","settingsDescription":"Quản lý tùy chọn của bạn","openaiCompatible":"Tương thích OpenAI","anthropicCompatible":"Tương thích với con người","media":"Media","mediaDescription":"Generate images, videos, and music","themes":"Themes","themesDescription":"Choose a color theme for the whole dashboard panel","mcp":"MCP","mcpDescription":"Model Context Protocol server management and tools","a2a":"A2A","a2aDescription":"Agent-to-Agent protocol tasks and observability"},"home":{"quickStart":"Bắt đầu nhanh","quickStartDesc":"Hãy đứng dậy và chạy trong 4 bước. Kết nối nhà cung cấp, mô hình định tuyến, giám sát mọi thứ.","fullDocs":"Tài liệu đầy đủ","step1Title":"1. Tạo khóa API","step1Desc":"Đi tới <endpoint>Endpoint</endpoint> -> Khóa đã đăng ký. Tạo một khóa cho mỗi môi trường.","step2Title":"2. Kết nối nhà cung cấp","step2Desc":"Thêm tài khoản trong <providers>Providers</providers>. Hỗ trợ OAuth, Khóa API và các cấp miễn phí.","step3Title":"3. Chỉ vào khách hàng của bạn","step3Desc":"Đặt URL cơ sở thành {url} trong ứng dụng khách IDE hoặc API của bạn.","step4Title":"4. Giám sát & tối ưu hóa","step4Desc":"Theo dõi mã thông báo, chi phí và lỗi trong <logs>Nhật ký yêu cầu</logs> và <analytics>Analytics</analytics>.","providersOverview":"Tổng quan về nhà cung cấp","configuredOf":"{configured} được định cấu hình của {total} nhà cung cấp hiện có","noModelsAvailable":"Không có mô hình có sẵn cho nhà cung cấp này.","configureFirst":"Trước tiên hãy định cấu hình kết nối trong {providers}","configureProvider":"Định cấu hình nhà cung cấp","modelAvailable":"Có mẫu {count}","modelsAvailable":"Có sẵn mẫu {count}","connectionsActive":"{count} kết nối đang hoạt động","connectionsActivePlural":"{count} kết nối đang hoạt động","copyModelName":"Sao chép tên mẫu","documentation":"Tài liệu","healthMonitor":"Theo dõi sức khỏe","reportIssue":"Báo cáo vấn đề","activeError":"{active} đang hoạt động · Lỗi {errors}","oauthLabel":"OAuth","apiKeyLabel":"Khóa API","requestsShort":"{count} yêu cầu","providerModelsTitle":"{provider} - Người mẫu","copiedModel":"Đã sao chép: {model}","aliasLabel":"bí danh","updateNow":"Cập nhật ngay","updating":"Đang cập nhật...","updateAvailableDesc":"Một phiên bản mới có sẵn. Nhấn vào đây để cập nhật.","updateStarted":"Đã bắt đầu cập nhật..."},"analytics":{"title":"Phân tích","overviewDescription":"Giám sát mô hình sử dụng API, mức tiêu thụ mã thông báo, chi phí và xu hướng hoạt động của bạn trên tất cả các nhà cung cấp và mô hình.","evalsDescription":"Chạy bộ đánh giá để kiểm tra và xác thực điểm cuối LLM của bạn. So sánh chất lượng mô hình, phát hiện hồi quy và độ trễ điểm chuẩn.","overview":"Tổng quan","evals":"Đánh giá"},"apiManager":{"title":"Khóa API","createKey":"Tạo khóa API","key":"Chìa khóa","revokeKey":"Thu hồi khóa","revokeConfirm":"Bạn có chắc chắn muốn thu hồi khóa API này không?","noKeys":"Chưa có khóa API nào","noKeysDesc":"Tạo khóa API đầu tiên để xác thực các yêu cầu tới điểm cuối của bạn","keyLabel":"Nhãn khóa","permissions":"Quyền","expiresAt":"Hết hạn","never":"không bao giờ","revoke":"Thu hồi","showKey":"Hiển thị khóa","hideKey":"Ẩn phím","copyKey":"Sao chép khóa API","allModels":"Tất cả các mô hình","selectedModels":"Các mẫu đã chọn","readOnly":"Chỉ đọc","fullAccess":"Toàn quyền truy cập","keyManagement":"Quản lý khóa API","keyManagementDesc":"Tạo và quản lý khóa API để xác thực các yêu cầu tới điểm cuối của bạn","totalKeys":"Tổng số phím","restricted":"Bị hạn chế","totalRequests":"Tổng số yêu cầu","modelsAvailable":"Các mẫu có sẵn","registeredKeys":"Khóa đã đăng ký","keysRegistered":"{count} khóa đã được đăng ký","keyRegistered":"Đã đăng ký khóa {count}","keysSecurityNote":"Mỗi khóa tách biệt việc theo dõi việc sử dụng và có thể được thu hồi một cách độc lập. Các khóa được che dấu sau khi tạo để bảo mật.","createFirstKey":"Tạo chìa khóa đầu tiên của bạn","name":"Tên","usage":"Cách sử dụng","created":"Đã tạo","actions":"hành động","reqs":"yêu cầu","neverUsed":"Chưa bao giờ sử dụng","deleteConfirm":"Xóa khóa API này?","usageTips":"Mẹo sử dụng","tipAuth":"Sử dụng các khóa API trong tiêu đề Cấp phép làm Người ghi tên YOUR_KEY","tipSecure":"Khóa chỉ được hiển thị một lần trong quá trình tạo — hãy lưu trữ chúng một cách an toàn","tipSeparate":"Tạo khóa riêng cho các máy khách hoặc môi trường khác nhau","tipRestrict":"Hạn chế khóa cho các kiểu máy cụ thể để bảo mật tốt hơn và kiểm soát chi phí","keyName":"Tên khóa","keyNamePlaceholder":"ví dụ: Khóa sản xuất, Khóa phát triển","keyNameDesc":"Chọn tên mô tả để xác định mục đích của khóa này","keyCreated":"Đã tạo khóa API","keyCreatedSuccess":"Đã tạo khóa thành công!","keyCreatedNote":"Sao chép và lưu trữ khóa này ngay bây giờ — nó sẽ không được hiển thị lại.","done":"Xong","savePermissions":"Lưu quyền","allowAll":"Cho phép tất cả","restrict":"hạn chế","allowAllInfo":"Chìa khóa này có thể truy cập vào tất cả các mô hình có sẵn.","restrictInfo":"Khóa này có thể truy cập {selected} trong số {total} mô hình.","selected":"{count} đã chọn","all":"Tất cả","clear":"Xóa","searchModels":"Tìm kiếm mô hình theo tên hoặc nhà cung cấp...","noModelsFound":"Không tìm thấy mô hình nào","keyNameRequired":"Tên khóa là bắt buộc","keyNameTooLong":"Tên khóa phải có {max} ký tự trở xuống","keyNameInvalid":"Tên khóa chỉ có thể chứa chữ cái, số, dấu cách, dấu gạch ngang và dấu gạch dưới","invalidKeyName":"Tên khóa không hợp lệ","failedCreateKey":"Không tạo được khóa","failedCreateKeyRetry":"Không tạo được khóa. Vui lòng thử lại.","invalidKeyId":"ID khóa không hợp lệ","failedDeleteKey":"Không thể xóa khóa","failedDeleteKeyRetry":"Không thể xóa khóa. Vui lòng thử lại.","invalidModelsSelection":"Lựa chọn mô hình không hợp lệ","cannotSelectMoreThanModels":"Không thể chọn nhiều hơn {max} mẫu","failedUpdatePermissions":"Không cập nhật được quyền","failedUpdatePermissionsRetry":"Không cập nhật được quyền. Vui lòng thử lại.","unknownProvider":"không rõ","copyMaskedKey":"Sao chép khóa bị che","modelsCount":"{count, plural, one {# model} other {# models}}","lastUsedOn":"Cuối cùng: {date}","editPermissions":"Chỉnh sửa quyền","deleteKey":"Xóa phím","model":"{count} mô hình","models":"{count} mô hình","permissionsTitle":"Quyền: {name}","allowAllDesc":"Chìa khóa này có thể truy cập vào tất cả các mô hình có sẵn.","restrictDesc":"Khóa này có thể truy cập {selectedCount} trong số {totalModels} mô hình.","selectedCount":"{count} đã chọn","autoResolve":"Auto-Resolve","autoResolveDesc":"Auto-resolve ambiguous model names to native provider for this API key.","keyActive":"Key Active","keyActiveDesc":"Enable or disable this API key. Disabled keys are immediately rejected with 403.","accessSchedule":"Access Schedule","accessScheduleDesc":"Restrict access to specific hours and days of the week.","scheduleFrom":"From","scheduleUntil":"Until","scheduleDays":"Days","scheduleTimezone":"Timezone","scheduleTimezoneHint":"Use IANA timezone names, e.g. America/New_York, Europe/Berlin","scheduleActive":"Schedule","disabled":"Disabled","daySun":"Sun","dayMon":"Mon","dayTue":"Tue","dayWed":"Wed","dayThu":"Thu","dayFri":"Fri","daySat":"Sat","keyOnlyAvailableAtCreation":"Full key available only at creation time — copy it when you first create the key"},"auditLog":{"title":"Nhật ký kiểm tra","searchPlaceholder":"Hành động tìm kiếm...","action":"hành động","actor":"diễn viên","target":"Mục tiêu","ipAddress":"Địa chỉ IP","timestamp":"Dấu thời gian","noEntries":"Không tìm thấy mục kiểm tra nào","filterByAction":"Lọc theo hành động...","filterByActor":"Lọc theo diễn viên...","filterEntriesAria":"Lọc các mục nhật ký kiểm tra","filterByActionTypeAria":"Lọc theo loại hành động","filterByActorAria":"Lọc theo diễn viên","refreshAuditLogAria":"Làm mới nhật ký kiểm tra","tableAria":"Mục nhật ký kiểm tra","failedFetchAuditLog":"Không tìm nạp được nhật ký kiểm tra","notAvailable":"—","description":"Hành động hành chính và sự kiện bảo mật","showing":"Hiển thị các mục {count} (bù đắp {offset})","previous":"trước đó"},"media":{"title":"Sân chơi phương tiện","subtitle":"Tạo hình ảnh, video và âm nhạc","model":"Model","prompt":"Prompt","generate":"Tạo","generating":"Generating...","loadingModels":"Loading available models...","noModels":"No models available. Configure providers with media capabilities first.","error":"Generation Failed","result":"Result","imageDescription":"Generate images from text prompts using OpenAI, xAI, Together, Hyperbolic, SD WebUI, ComfyUI and more.","videoDescription":"Create videos with AnimateDiff, Stable Video Diffusion via ComfyUI or SD WebUI.","musicDescription":"Compose music using Stable Audio Open or MusicGen via ComfyUI."},"cliTools":{"title":"Công cụ CLI","noActiveProviders":"Không có nhà cung cấp đang hoạt động","noActiveProvidersDesc":"Trước tiên, vui lòng thêm và kết nối nhà cung cấp để định cấu hình công cụ CLI.","mapModels":"Mô hình bản đồ","testConnection":"Kiểm tra kết nối","connectionStatus":"Trạng thái kết nối","configureEndpoint":"Định cấu hình điểm cuối","instructions":"Hướng dẫn","modelMapping":"Ánh xạ mô hình","baseUrl":"URL cơ sở","apiKey":"Khóa API","configured":"Đã định cấu hình","notConfigured":"Chưa được định cấu hình","notInstalled":"Chưa được cài đặt","custom":"tùy chỉnh","unknown":"Không xác định","lastSavedAt":"Đã lưu lần cuối: {date}","never":"không bao giờ","justNow":"ngay bây giờ","minutesAgoShort":"{count} phút trước","hoursAgoShort":"{count} giờ trước","daysAgoShort":"{count}ngày trước","monthsAgoShort":"{count}tháng trước","yearsAgoShort":"{count} năm trước","runtimeCheckFailed":"Kiểm tra thời gian chạy không thành công","yourApiKeyPlaceholder":"khóa-api-của bạn","modelPlaceholder":"nhà cung cấp/id mô hình","configurationSaved":"Đã lưu cấu hình thành công.","failedToSave":"Không lưu được cấu hình.","noApiKeysCreateOne":"Không có khóa API - Tạo một khóa trong trang Khóa","defaultOmnirouteKey":"sk_omniroute (mặc định)","selectModel":"Chọn mẫu","selectModelForAlias":"Chọn kiểu máy cho {alias}","selectModelForTool":"Chọn mẫu cho {tool}","select":"chọn","clear":"Xóa","comingSoon":"Sắp có","checkingRuntime":"Đang kiểm tra trạng thái thời gian chạy...","guideOnlyIntegration":"Tích hợp chỉ có hướng dẫn (không yêu cầu thời gian chạy cục bộ)","cliRuntimeDetected":"Đã phát hiện và sẵn sàng thời gian chạy CLI","cliFoundNotRunnable":"Đã tìm thấy CLI nhưng không thể chạy được{reason}","cliRuntimeNotDetected":"Thời gian chạy CLI không được phát hiện","binary":"nhị phân","configPath":"Đường dẫn cấu hình","configPathShort":"Cấu hình","failedCheckRuntimeStatus":"Không thể kiểm tra trạng thái thời gian chạy.","copy":"Sao chép","copied":"Đã sao chép","copyConfig":"Sao chép cấu hình","saveConfig":"Lưu cấu hình","selectionSaved":"Đã lưu lựa chọn","guide":"hướng dẫn","detected":"Đã phát hiện","notReady":"Chưa sẵn sàng","active":"Đang hoạt động","inactive":"Không hoạt động","startMitm":"Bắt đầu MITM","stopMitm":"Dừng MITM","mitmStarted":"MITM đã bắt đầu thành công!","mitmStopped":"MITM đã dừng thành công!","failedStart":"Không khởi động được MITM","failedStop":"Không thể dừng MITM","saveMappings":"Lưu bản đồ","mappingsSaved":"Đã lưu bản đồ!","failedSaveMappings":"Không lưu được bản đồ","howItWorks":"Nó hoạt động như thế nào:","antigravityHowWorksDesc":"Phản trọng lực gửi yêu cầu đến điểm cuối của Google. MITM chặn và chuyển hướng chúng đến OmniRoute.","antigravityStep1":"1. Khởi động MITM để định tuyến các yêu cầu thông qua OmniRoute.","antigravityStep2Prefix":"2. Thêm","antigravityStep2Suffix":"vào tệp máy chủ của bạn dưới dạng 127.0.0.1.","antigravityStep3":"3. Mở AntiGravity và các yêu cầu sẽ được ủy quyền.","sudoPasswordRequiredTitle":"Yêu cầu mật khẩu Sudo","sudoPasswordHint":"Cần có mật khẩu quản trị viên để sửa đổi cài đặt proxy hệ thống và tệp máy chủ.","enterSudoPassword":"Nhập mật khẩu sudo","sudoPasswordRequiredError":"Mật khẩu Sudo là bắt buộc.","cancel":"Hủy bỏ","confirm":"Xác nhận","settingsApplied":"Cài đặt được áp dụng thành công!","failedApplySettings":"Không thể áp dụng cài đặt","settingsReset":"Thiết lập lại cài đặt thành công!","failedResetSettings":"Không thể đặt lại cài đặt","backupRestored":"Đã khôi phục bản sao lưu!","failedRestore":"Không thể khôi phục","checkingCli":"Đang kiểm tra {tool} CLI...","cliNotRunnable":"{tool} CLI đã được cài đặt nhưng không chạy được","cliNotInstalled":"{tool} CLI chưa được cài đặt","cliNotDetected":"{tool} CLI không được phát hiện","cliDetectedReady":"{tool} CLI đã được phát hiện và sẵn sàng","cliFoundFailedHealthcheck":"{tool} CLI đã được tìm thấy nhưng quá trình kiểm tra tình trạng thời gian chạy không thành công{reason}.","installCliPrompt":"Vui lòng cài đặt {tool} CLI để sử dụng tính năng này.","installCodexPrompt":"Vui lòng cài đặt Codex CLI để sử dụng tính năng tự động áp dụng.","hide":"Ẩn","howToInstall":"Cách cài đặt","installationGuide":"Hướng dẫn cài đặt","platforms":"macOS/Linux/Windows:","afterInstallationRun":"Sau khi cài đặt, hãy chạy","toVerify":"để xác minh.","current":"hiện tại","baseUrlPlaceholder":"https://.../v1","resetToDefault":"Đặt lại về mặc định","providerModelPlaceholder":"nhà cung cấp/id mô hình","apply":"Áp dụng","reset":"Đặt lại","manualConfig":"Cấu hình thủ công","backups":"Sao lưu","configBackups":"Cấu hình sao lưu","noBackupsYet":"Chưa có bản sao lưu nào. Các bản sao lưu được tạo tự động trước mỗi lần Áp dụng hoặc Đặt lại.","restore":"Khôi phục","backupRestoredReloading":"Đã khôi phục bản sao lưu! Đang tải lại trạng thái...","failedRestoreBackup":"Không thể khôi phục bản sao lưu","applied":"Đã áp dụng!","failed":"thất bại","resetDone":"Đặt lại!","omnirouteConfiguredOpenAiCompatible":"OmniRoute được định cấu hình là nhà cung cấp tương thích với OpenAI","provider":"nhà cung cấp","model":"người mẫu","providers":"Nhà cung cấp","auth":"Xác thực","noApiKeysAvailable":"Không có khóa API nào","usingDefaultOmniroute":"Sử dụng mặc định: sk_omniroute","updateConfig":"Cập nhật cấu hình","applyConfig":"Áp dụng cấu hình","noBackupsAvailable":"Không có bản sao lưu nào có sẵn.","profileSaved":"Đã lưu hồ sơ \\"{name}\\"!","failedSaveProfile":"Không lưu được hồ sơ","profileActivated":"Hồ sơ đã được kích hoạt!","failedActivateProfile":"Không thể kích hoạt hồ sơ","profiles":"Hồ sơ","savedProfiles":"Hồ sơ đã lưu","noProfilesYet":"Chưa có hồ sơ nào được lưu. Lưu cấu hình hiện tại dưới dạng hồ sơ bên dưới.","activate":"Kích hoạt","deleteProfile":"Xóa hồ sơ","profileNamePlaceholder":"Tên hồ sơ (ví dụ: Tài khoản cá nhân)","saveCurrent":"Lưu hiện tại","codexAuthNotePrefix":"Công dụng của Codex","codexAuthNoteMiddle":"với","codexAuthNoteSuffix":"Nhấp vào \\"Áp dụng\\" để tự động định cấu hình.","claudeManualConfiguration":"Claude CLI - Cấu hình thủ công","codexManualConfiguration":"Codex CLI - Cấu hình thủ công","droidManualConfiguration":"Factory Droid - Cấu hình thủ công","openClawManualConfiguration":"Open Claw - Cấu hình thủ công","clineManualConfiguration":"Cấu hình thủ công Cline","kiloManualConfiguration":"Cấu hình thủ công mã Kilo","toolDescriptions":{"antigravity":"IDE chống trọng lực của Google với MITM","claude":"Mã Claude nhân loại CLI","codex":"OpenAI Codex CLI","droid":"Trợ lý AI Droid của nhà máy","openclaw":"Trợ lý AI móng vuốt mở","cline":"Trợ lý mã hóa Cline AI CLI","kilo":"Trợ lý AI Kilo Code CLI","cursor":"Trình chỉnh sửa mã AI con trỏ","continue":"Tiếp tục Trợ lý AI","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":"Yêu cầu tài khoản Cursor Pro để sử dụng tính năng này.","1":"Con trỏ định tuyến các yêu cầu thông qua máy chủ của chính nó, do đó điểm cuối cục bộ không được hỗ trợ. Vui lòng bật Cloud Endpoint trong Cài đặt."},"steps":{"1":{"title":"Mở Cài đặt","desc":"Đi tới Cài đặt -> Kiểu máy"},"2":{"title":"Kích hoạt API OpenAI","desc":"Bật tùy chọn \\"Khóa API OpenAI\\""},"3":{"title":"URL cơ sở"},"4":{"title":"Khóa API"},"5":{"title":"Thêm mô hình tùy chỉnh","desc":"Nhấp vào \\"Xem tất cả mẫu\\" -> \\"Thêm mẫu tùy chỉnh\\""},"6":{"title":"Chọn mẫu"}}},"continue":{"steps":{"1":{"title":"Mở cấu hình","desc":"Mở tệp cấu hình Tiếp tục"},"2":{"title":"Khóa API"},"3":{"title":"Chọn mẫu"},"4":{"title":"Thêm cấu hình mô hình","desc":"Thêm cấu hình sau vào mảng mô hình của bạn:"}},"notes":{"0":"Tiếp tục sử dụng tệp cấu hình JSON."}},"opencode":{"steps":{"1":{"title":"Install OpenCode","desc":"Install via npm: npm install -g opencode-ai"},"2":{"title":"API Key"},"3":{"title":"Set Base URL","desc":"opencode config set baseUrl {{baseUrl}}"},"4":{"title":"Select Model"}},"notes":{"0":"OpenCode yêu cầu cấu hình khóa API.","1":"Đặt URL cơ sở cho điểm cuối OmniRoute của bạn."}},"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 yêu cầu tài khoản Amazon."}}},"mitmHowWorksDesc":"{toolName} sends requests to its provider endpoint. MITM intercepts and redirects them to OmniRoute.","mitmStep1":"1. Start MITM to route requests through OmniRoute.","mitmStep2Prefix":"2. Add","mitmStep2Suffix":"to your hosts file as 127.0.0.1.","mitmStep3":"3. Open {toolName} and requests will be proxied.","whenToUseLabel":"Khi nào nên sử dụng","openToolDocs":"Mở tài liệu công cụ","toolUseCases":{"claude":"Sử dụng khi bạn muốn quy trình lập kế hoạch mạnh mẽ và các trình tái cấu trúc nhiều tệp dài với Mã Claude.","codex":"Sử dụng khi nhóm của bạn được chuẩn hóa trên các luồng OpenAI Codex CLI và xác thực dựa trên hồ sơ.","droid":"Sử dụng khi bạn cần một tác nhân đầu cuối nhẹ tập trung vào các vòng lặp thực thi lệnh và mã hóa nhanh.","openclaw":"Sử dụng khi bạn muốn một tác nhân mã hóa kiểu Open Claw nhưng được định tuyến thông qua các chính sách OmniRoute.","cline":"Sử dụng khi bạn định cấu hình các tác nhân mã hóa bên trong trình chỉnh sửa và muốn thiết lập có hướng dẫn với các mô hình OmniRoute.","kilo":"Sử dụng khi quy trình làm việc của bạn phụ thuộc vào các lệnh Kilo Code và các chỉnh sửa lặp lại nhanh chóng.","cursor":"Sử dụng khi mã hóa bằng Con trỏ và bạn cần các mô hình tương thích với OpenAI tùy chỉnh thông qua OmniRoute.","continue":"Sử dụng khi chạy Tiếp tục trong IDE và bạn cần cấu hình nhà cung cấp dựa trên JSON di động.","opencode":"Sử dụng khi bạn thích chạy tác nhân gốc trên thiết bị đầu cuối và tự động hóa theo kịch bản thông qua OpenCode.","kiro":"Sử dụng khi tích hợp Kiro và điều khiển định tuyến mô hình tập trung từ OmniRoute.","antigravity":"Sử dụng khi lưu lượng truy cập AntiGravity/Kiro phải bị chặn thông qua MITM và được định tuyến đến OmniRoute.","copilot":"Sử dụng khi bạn muốn UX kiểu trò chuyện Copilot trong khi thực thi các khóa OmniRoute và quy tắc định tuyến."}},"combos":{"title":"Combo","description":"Tạo các tổ hợp mô hình với hỗ trợ định tuyến và dự phòng có trọng số","createCombo":"Tạo tổ hợp","editCombo":"Chỉnh sửa kết hợp","deleteCombo":"Xóa tổ hợp","noModels":"Không có mô hình","noModelsYet":"Chưa có mô hình nào được thêm vào","addModel":"Thêm mô hình","addModelToCombo":"Thêm Model vào Combo","routingStrategy":"Chiến lược định tuyến","maxRetries":"Số lần thử lại tối đa","timeout":"Thời gian chờ (ms)","healthcheck":"Kiểm tra sức khỏe","priority":"Ưu tiên","fallback":"Dự phòng","roundRobin":"Vòng Robin","random":"Ngẫu nhiên","leastLatency":"Độ trễ ít nhất","comboName":"Tên kết hợp","comboNamePlaceholder":"combo của tôi","deleteConfirm":"Xóa tổ hợp này?","noCombosYet":"Chưa có combo nào","comboCreated":"Combo được tạo thành công","comboUpdated":"Combo được cập nhật thành công","comboDeleted":"Đã xóa kết hợp","failedCreate":"Không tạo được kết hợp","failedUpdate":"Không thể cập nhật kết hợp","errorCreating":"Lỗi tạo combo","errorUpdating":"Lỗi cập nhật kết hợp","errorDeleting":"Lỗi xóa kết hợp","testFailed":"Yêu cầu kiểm tra không thành công","failedToggle":"Không thể chuyển đổi kết hợp","testResults":"Kết quả kiểm tra — {name}","resolvedBy":"Đã giải quyết bởi:","more":"+{count} khác","reqs":"yêu cầu","success":"sự thành công","proxyConfigured":"Đã định cấu hình proxy","copyComboName":"Sao chép tên tổ hợp","enableCombo":"Bật kết hợp","disableCombo":"Tắt kết hợp","testCombo":"Kết hợp thử nghiệm","duplicate":"trùng lặp","proxyConfig":"Cấu hình proxy","nameRequired":"Tên là bắt buộc","nameInvalid":"Chỉ các chữ cái, số, -, _, / và . được phép","nameHint":"Các chữ cái, số, -, _, / và . được phép","priorityDesc":"Dự phòng tuần tự: thử mô hình 1 trước, sau đó đến mô hình 2, v.v.","weightedDesc":"Phân phối lưu lượng truy cập theo phần trăm trọng lượng với dự phòng","roundRobinDesc":"Phân phối vòng tròn: mỗi yêu cầu sẽ chuyển sang mô hình tiếp theo trong vòng quay","randomDesc":"Lựa chọn ngẫu nhiên thống nhất, sau đó dự phòng cho các mô hình còn lại","leastUsedDesc":"Chọn mô hình có ít yêu cầu nhất, cân bằng tải theo thời gian","costOptimizedDesc":"Hướng tới mô hình rẻ nhất trước tiên dựa trên giá cả","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each model once before reshuffling","models":"Người mẫu","autoBalance":"Tự động cân bằng","advancedSettings":"Cài đặt nâng cao","retryDelay":"Độ trễ thử lại (ms)","concurrencyPerModel":"Đồng thời / Mô hình","queueTimeout":"Hết thời gian xếp hàng (ms)","advancedHint":"Để trống để sử dụng mặc định chung. Những cài đặt này ghi đè lên mỗi nhà cung cấp.","moveUp":"Di chuyển lên","moveDown":"Di chuyển xuống","removeModel":"Xóa","saving":"Đang lưu...","weighted":"Có trọng số","leastUsed":"Ít được sử dụng nhất","costOpt":"Lựa chọn chi phí","strategyGuideTitle":"How to use this strategy","strategyGuideWhen":"When to use","strategyGuideAvoid":"Avoid when","strategyGuideExample":"Example","strategyGuide":{"priority":{"when":"You have one preferred model and only want fallback on failure.","avoid":"You need request distribution across models.","example":"Primary coding model with cheaper backup for outages."},"weighted":{"when":"You need controlled traffic split across models.","avoid":"You cannot maintain accurate weights over time.","example":"80% stable model + 20% canary model rollout."},"round-robin":{"when":"You want predictable and even distribution.","avoid":"Models differ too much in latency or cost.","example":"Same model on multiple accounts to spread throughput."},"random":{"when":"You want simple distribution with minimal setup.","avoid":"You need strict traffic guarantees.","example":"Quick prototyping with equivalent models."},"least-used":{"when":"You want adaptive balancing based on live demand.","avoid":"Traffic is too low to benefit from usage balancing.","example":"Mixed workloads where one model often gets overloaded."},"cost-optimized":{"when":"Cost reduction is your top priority.","avoid":"Pricing data is missing or outdated.","example":"Background or batch jobs where lower cost is preferred."}},"advancedHelp":{"maxRetries":"How many retries are attempted before failing a request.","retryDelay":"Initial wait between retries. Higher values reduce burst pressure.","timeout":"Maximum request duration before aborting.","healthcheck":"Skips unhealthy models/providers from routing decisions.","concurrencyPerModel":"Max simultaneous requests allowed per model in round-robin.","queueTimeout":"How long a request can wait in queue before timing out."},"templatesTitle":"Quick templates","templatesDescription":"Apply a starting profile, then adjust models and config.","templateApply":"Apply template","templateHighAvailability":"High availability","templateHighAvailabilityDesc":"Priority routing with health checks and safe retries.","templateCostSaver":"Cost saver","templateCostSaverDesc":"Cost-optimized routing for budget-first workloads.","templateBalanced":"Balanced load","templateBalancedDesc":"Least-used routing to spread demand over time.","usageGuideHide":"Hide","usageGuideDontShowAgain":"Don\'t show again","usageGuideShow":"Show guide","quickTestTitle":"Combo ready to validate","quickTestDescription":"Run a test now to confirm fallback and latency behavior.","testNow":"Test now","pricingCoverage":"Pricing coverage","pricingCoverageHint":"Cost-optimized works best when all combo models have pricing.","pricingAvailable":"Pricing available","pricingMissing":"No pricing","pricingAvailableShort":"priced","pricingMissingShort":"no-price","warningRoundRobinSingleModel":"Round-robin is most useful with at least 2 models.","warningCostOptimizedPartialPricing":"Only {priced} of {total} models have pricing. Routing may be partially cost-aware.","warningCostOptimizedNoPricing":"No pricing data found for this combo. Cost-optimized may route unexpectedly.","readinessTitle":"Sẵn sàng để lưu?","readinessDescription":"Xem lại danh sách kiểm tra trước khi tạo hoặc cập nhật kết hợp này.","readinessCheckName":"Tên kết hợp là hợp lệ","readinessCheckModels":"Ít nhất một mô hình được chọn","readinessCheckWeights":"Tổng trọng số là 100%","readinessCheckWeightsOptional":"Không cần quy định trọng lượng","readinessCheckPricing":"Dữ liệu giá cả có sẵn","readinessCheckPricingOptional":"Quy tắc đặt giá không bắt buộc","saveBlockedTitle":"Lưu bị chặn cho đến khi các mục sau được khắc phục:","saveBlockName":"Xác định tên kết hợp.","saveBlockModels":"Thêm ít nhất một mô hình.","saveBlockWeighted":"Đặt trọng số thành 100% (hiện tại: {total}%).","saveBlockPricing":"Thêm giá cho ít nhất một mô hình hoặc chọn một chiến lược khác.","recommendationsLabel":"Recommended setup","applyRecommendations":"Apply recommendations","recommendationsUpdated":"Recommendations updated for {strategy}.","recommendationsApplied":"Recommendations applied to this combo.","strategyRecommendations":{"priority":{"title":"Fail-safe baseline","description":"Use one primary model and keep fallback chain short and reliable.","tip1":"Put your most reliable model first.","tip2":"Keep 1-2 backup models with similar quality.","tip3":"Use safe retries to absorb transient provider failures."},"weighted":{"title":"Controlled traffic split","description":"Great for canary rollouts and gradual migration between models.","tip1":"Start with conservative split like 90/10.","tip2":"Keep the total at 100% and auto-balance after changes.","tip3":"Monitor success and latency before increasing canary weight."},"round-robin":{"title":"Predictable load sharing","description":"Best when models are equivalent and you need smooth distribution.","tip1":"Use at least 2 models.","tip2":"Set concurrency limits to avoid burst overload.","tip3":"Use queue timeout to fail fast under saturation."},"random":{"title":"Quick spread with low setup","description":"Use when you need simple distribution without strict guarantees.","tip1":"Use models with similar latency profiles.","tip2":"Keep retries enabled to absorb random misses.","tip3":"Prefer this for experimentation, not strict SLAs."},"least-used":{"title":"Adaptive balancing","description":"Routes to less-used models to reduce hotspots over time.","tip1":"Works better under continuous traffic.","tip2":"Combine with health checks for safer balancing.","tip3":"Track per-model usage to validate distribution gains."},"cost-optimized":{"title":"Budget-first routing","description":"Routes to lower-cost models when pricing metadata is available.","tip1":"Ensure pricing coverage for all selected models.","tip2":"Keep a quality fallback for hard prompts.","tip3":"Use for batch/background jobs where cost is the main KPI."}},"templateFreeStack":"Free Stack ($0)","templateFreeStackDesc":"Round-robin across all free providers: Kiro (Claude), iFlow (5 models), Qwen (4 models), Gemini CLI. Zero cost, never stops coding."},"costs":{"title":"Chi phí","budget":"Ngân sách","totalCost":"Tổng chi phí","breakdown":"Phân tích chi phí","noData":"Không có dữ liệu chi phí","byModel":"Theo mẫu","byProvider":"Theo nhà cung cấp"},"endpoint":{"title":"Điểm cuối API","available":"Điểm cuối có sẵn","cloudProxy":"Proxy đám mây","disableConfirm":"Bạn có chắc chắn muốn tắt proxy đám mây không?","baseUrl":"URL cơ sở","apiKeyLabel":"Khóa API","registeredKeys":"Khóa đã đăng ký","chatCompletions":"Hoàn thành cuộc trò chuyện","responses":"Phản hồi","listModels":"Danh sách mô hình","usingCloudProxy":"Sử dụng Proxy đám mây","usingLocalServer":"Sử dụng máy chủ cục bộ","machineId":"ID máy: {id}...","disableCloud":"Tắt đám mây","enableCloud":"Kích hoạt đám mây","modelsAcrossEndpoints":"{models} mô hình trên {endpoints} điểm cuối","chatDesc":"Trò chuyện trực tuyến và không phát trực tuyến với tất cả các nhà cung cấp","embeddings":"Nhúng","embeddingsDesc":"Nhúng văn bản cho đường dẫn tìm kiếm & RAG","imageGeneration":"Tạo hình ảnh","imageDesc":"Tạo hình ảnh từ lời nhắc văn bản","rerank":"Xếp hạng lại","rerankDesc":"Sắp xếp lại tài liệu theo mức độ liên quan đến truy vấn","audioTranscription":"Phiên âm âm thanh","audioTranscriptionDesc":"Phiên âm tập tin âm thanh thành văn bản (Whisper)","textToSpeech":"Chuyển văn bản thành giọng nói","textToSpeechDesc":"Chuyển đổi văn bản thành giọng nói tự nhiên","moderations":"Kiểm duyệt","moderationsDesc":"Kiểm duyệt nội dung và phân loại an toàn","responsesDesc":"API Responses của OpenAI cho Codex và quy trình làm việc tác tử nâng cao","listModelsDesc":"Liệt kê tất cả các mô hình có sẵn từ tất cả các nhà cung cấp đã kết nối","settingsApiDesc":"Đọc và sửa đổi cấu hình OmniRoute qua API","settingsApi":"Settings API","categoryCore":"API Cốt Lõi","categoryMedia":"Phương Tiện & Đa Phương Thức","categoryUtility":"Tiện Ích & Quản Lý","enableCloudTitle":"Kích hoạt proxy đám mây","whatYouGet":"Những gì bạn sẽ nhận được","cloudBenefitAccess":"Truy cập API của bạn từ mọi nơi trên thế giới","cloudBenefitShare":"Chia sẻ điểm cuối với nhóm của bạn một cách dễ dàng","cloudBenefitPorts":"Không cần mở cổng hoặc cấu hình tường lửa","cloudBenefitEdge":"Mạng biên toàn cầu nhanh","cloudSessionNote":"Cloud sẽ giữ phiên xác thực của bạn trong 1 ngày. Nếu không được sử dụng, nó sẽ tự động bị xóa.","cloudUnstableNote":"Cloud hiện tại không ổn định với Claude Code OAuth trong một số trường hợp.","cloudConnected":"Đã kết nối Proxy đám mây!","connectingToCloud":"Đang kết nối với đám mây...","verifyingConnection":"Đang xác minh kết nối...","connecting":"Đang kết nối...","verifying":"Đang xác minh...","connected":"Đã kết nối!","disableCloudTitle":"Vô hiệu hóa Proxy đám mây","disableWarning":"Tất cả các phiên xác thực sẽ bị xóa khỏi đám mây.","syncingData":"Đang đồng bộ hóa dữ liệu mới nhất...","disablingCloud":"Đang tắt đám mây...","syncing":"Đang đồng bộ hóa...","disabling":"Đang tắt...","cloudConnectedVerified":"Cloud Proxy đã được kết nối và xác minh!","connectedVerificationPending":"Đã kết nối - đang chờ xác minh","connectedVerificationPendingWithError":"Đã kết nối — đang chờ xác minh: {error}","cloudDisabledSuccess":"Đám mây đã được tắt thành công","syncedSuccess":"Đã đồng bộ hóa thành công","failedDisable":"Không thể tắt đám mây","failedEnable":"Không thể bật đám mây","cloudRequestTimeout":"Hết thời gian yêu cầu đám mây","cloudRequestFailed":"Yêu cầu đám mây không thành công","cloudWorkerUnreachable":"Không thể liên hệ với nhân viên đám mây. Đảm bảo dịch vụ đám mây đang chạy (npm run dev in /cloud).","connectionFailed":"Kết nối không thành công","syncFailed":"Không thể đồng bộ hóa dữ liệu đám mây","providerModelsTitle":"{provider} — Mô hình","noModelsForProvider":"Không có mô hình có sẵn cho nhà cung cấp này.","chat":"Trò chuyện","embedding":"Nhúng","image":"Hình ảnh","custom":"tùy chỉnh","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","categorySearch":"Search & Discovery","webSearch":"Web Search","webSearchDesc":"Unified web search across multiple providers with automatic failover and caching","searchProvider":"Search Provider","searchProviderDesc":"This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected.","cloudflaredUrlNotice":"Creates a temporary Cloudflare Quick Tunnel. The URL changes after every restart."},"mcpDashboard":{"loading":"Loading MCP dashboard...","activate":"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":"Capabilities","agentCardNotAvailable":"Agent card not available.","quickValidation":"Quick validation","quickValidationDescription":"Executes smoke calls through the live `/a2a` endpoint.","runMessageSend":"Run message/send","runMessageStream":"Run message/stream","taskManagement":"Task management","taskSummary":"{total} tasks | page {page} of {totalPages}","allStates":"all","allSkills":"all skills","loadingTasks":"Loading tasks...","noTasksForFilters":"No tasks found for current filters.","tableTask":"Task","tableSkill":"Skill","tableState":"State","tableUpdated":"Updated","tableActions":"Actions","view":"View","cancel":"Cancel","previous":"Previous","next":"Next","taskDetail":"Task detail","close":"Close","metadata":"Metadata","events":"Events","artifacts":"Artifacts"},"health":{"title":"Tình trạng hệ thống","description":"Giám sát thời gian thực phiên bản OmniRoute của bạn","healthy":"khỏe mạnh","degraded":"xuống cấp","down":"xuống","uptime":"Thời gian hoạt động","memory":"Bộ nhớ","memoryRss":"Bộ nhớ (RSS)","heap":"Đống","cpu":"CPU","database":"Cơ sở dữ liệu","version":"Phiên bản","lastCheck":"Kiểm tra lần cuối","providerHealth":"Sức khỏe nhà cung cấp","systemMetrics":"Số liệu hệ thống","tokenHealth":"Tình trạng mã thông báo","refreshAll":"Làm mới tất cả","checkNow":"Kiểm tra ngay","loadingHealth":"Đang tải dữ liệu sức khỏe...","failedToLoad":"Không tải được dữ liệu sức khỏe: {error}","retry":"Thử lại","allOperational":"Tất cả các hệ thống hoạt động","issuesDetected":"Đã phát hiện sự cố hệ thống","updatedAt":"Đã cập nhật {time}","latency":"Độ trễ","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","millisecondsShort":"{value}ms","notAvailable":"—","totalRequests":"Tổng số yêu cầu","noDataYet":"Chưa có dữ liệu","promptCache":"Bộ nhớ đệm nhắc nhở","entries":"Bài dự thi","hitRate":"Tỷ lệ trúng","hitsMisses":"Lượt truy cập / Bỏ lỡ","signatureCache":"Bộ đệm chữ ký","signatureDefaults":"Mặc định","signatureTool":"Công cụ","signatureFamily":"gia đình","signatureSession":"Phiên","recovering":"Đang phục hồi","noCBData":"Không có dữ liệu ngắt mạch có sẵn. Thực hiện một số yêu cầu đầu tiên.","providerHealthStatusAria":"Tình trạng sức khỏe của nhà cung cấp","issuesLabel":"Đã phát hiện sự cố","operational":"hoạt động","providers":"Nhà cung cấp","healthyCount":"{count} khỏe mạnh","nodeVersion":"Nút {version}","failures":"{count} thất bại","failuresPlural":"{count} thất bại","lastFailure":"Cuối cùng","rateLimitStatus":"Trạng thái giới hạn tỷ lệ","activeLimiters":"{count} bộ giới hạn hoạt động","activeLimitersPlural":"{count} bộ giới hạn hoạt động","queued":"Đã xếp hàng","queuedCount":"{count} đã xếp hàng","running":"đang chạy","runningCount":"{count} đang chạy","ok":"được rồi","activeLockouts":"Khóa hoạt động","resetConfirm":"Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh? Điều này sẽ xóa tất cả số lần lỗi và khôi phục tất cả các nhà cung cấp về trạng thái hoạt động.","resetAllTitle":"Đặt lại tất cả các bộ ngắt mạch về trạng thái khỏe mạnh","resetting":"Đang đặt lại...","resetAll":"Đặt lại tất cả","until":"Cho đến {time}","activeProviders":"{count} active","monitoredProviders":"{count} monitored","configuredProvidersLabel":"Được định cấu hình trong bảng điều khiển","configuredProvidersHint":"Nhà cung cấp có thông tin xác thực được lưu trong /dashboard/providers, bất kể trạng thái thời gian chạy.","activeProvidersHint":"Nhà cung cấp được định cấu hình hiện đã được bật cho các yêu cầu định tuyến.","monitoredProvidersHint":"Các nhà cung cấp hiện được theo dõi bởi máy theo dõi tình trạng ngắt mạch."},"limits":{"title":"Giới hạn & hạn ngạch","rateLimit":"Giới hạn tỷ lệ","remaining":"Còn lại","requestsPerMinute":"Yêu cầu/phút","tokensPerMinute":"Mã thông báo/phút","dailyLimit":"Giới hạn hàng ngày"},"logs":{"title":"Nhật ký","requestLogs":"Nhật ký yêu cầu","proxyLogs":"Nhật ký proxy","auditLog":"Nhật ký kiểm tra","console":"Bảng điều khiển","auditLogDesc":"Hành động hành chính và sự kiện bảo mật","loading":"Đang tải...","refresh":"Làm mới","filterByAction":"Lọc theo hành động...","filterByActor":"Lọc theo diễn viên...","filterEntriesAria":"Lọc các mục nhật ký kiểm tra","filterByActionTypeAria":"Lọc theo loại hành động","filterByActorAria":"Lọc theo diễn viên","refreshAuditLogAria":"Làm mới nhật ký kiểm tra","tableAria":"Mục nhật ký kiểm tra","failedFetchAuditLog":"Không tìm nạp được nhật ký kiểm tra","showing":"Hiển thị các mục {count} (bù đắp {offset})","search":"Tìm kiếm","timestamp":"Dấu thời gian","action":"hành động","actor":"diễn viên","target":"Mục tiêu","details":"Chi tiết","ipAddress":"Địa chỉ IP","notAvailable":"—","noEntries":"Không tìm thấy mục nhật ký kiểm tra nào","previous":"trước đó","next":"Tiếp theo"},"onboarding":{"welcome":"Chào mừng","security":"Bảo mật","test":"kiểm tra","ready":"Sẵn sàng!","setPassword":"Đặt mật khẩu","addProvider":"Thêm nhà cung cấp đầu tiên của bạn","getStarted":"Bắt đầu","skip":"Bỏ qua","skipWizard":"Bỏ qua hoàn toàn trình hướng dẫn","skipPassword":"Bỏ qua việc thiết lập mật khẩu","skipAndContinue":"Bỏ qua & Tiếp tục","passwordLabel":"Mật khẩu","confirmPassword":"Xác nhận mật khẩu","enterPassword":"Nhập mật khẩu","confirmPasswordPlaceholder":"Xác nhận mật khẩu","passwordsMismatch":"Mật khẩu không khớp","setupComplete":"Thiết lập hoàn tất!","goToDashboard":"Đi tới Bảng điều khiển →","welcomeDesc":"OmniRoute là proxy API AI cục bộ của bạn. Nó định tuyến các yêu cầu đến nhiều nhà cung cấp AI với tính năng cân bằng tải, chuyển đổi dự phòng và theo dõi việc sử dụng.","multiProvider":"Đa nhà cung cấp","usageTracking":"Theo dõi sử dụng","apiKeyMgmt":"Quản lý khóa API","securityDesc":"Đặt mật khẩu để bảo vệ trang tổng quan của bạn hoặc bỏ qua ngay bây giờ.","providerDesc":"Kết nối nhà cung cấp AI đầu tiên của bạn. Bạn có thể thêm nhiều hơn sau.","apiKeyRequired":"Khóa API (bắt buộc)","customUrlOptional":"URL tùy chỉnh (tùy chọn)","testDesc":"Hãy xác minh kết nối nhà cung cấp của bạn hoạt động.","runTest":"Chạy kiểm tra kết nối","testingConnection":"Đang kiểm tra kết nối...","connectionSuccessful":"Kết nối thành công! Nhà cung cấp của bạn đã sẵn sàng.","noProviderFound":"Không tìm thấy nhà cung cấp nào. Bạn có thể thêm một từ bảng điều khiển sau.","testFailed":"Thử nghiệm không thành công nhưng bạn có thể định cấu hình điều này sau.","couldNotTest":"Không thể kiểm tra ngay bây giờ. Bạn có thể kiểm tra từ bảng điều khiển.","doneDesc":"Bạn đã hoàn tất! Phiên bản OmniRoute của bạn đã được định cấu hình và sẵn sàng thực hiện các yêu cầu AI proxy.","yourEndpoint":"Điểm cuối của bạn:","continue":"Tiếp tục","retry":"Thử lại","failedSetPassword":"Không thể đặt mật khẩu. Hãy thử lại.","failedAddProvider":"Không thể thêm nhà cung cấp. Hãy thử lại.","connectionError":"Lỗi kết nối. Vui lòng thử lại.","provider":"nhà cung cấp"},"providers":{"title":"Nhà cung cấp","addProvider":"Thêm nhà cung cấp","editProvider":"Chỉnh sửa nhà cung cấp","deleteProvider":"Xóa nhà cung cấp","noProviders":"Không có nhà cung cấp nào được định cấu hình","modelAvailability":"Mẫu sẵn có","accounts":"Tài khoản","newAccount":"Tài khoản mới","deleteConfirm":"Bạn có chắc chắn muốn xóa nhà cung cấp này không?","testing":"Đang thử nghiệm...","testConnection":"Kiểm tra kết nối","testSuccess":"Kết nối thành công","testFailed":"Kết nối không thành công","available":"Có sẵn","cooldown":"Thời gian hồi chiêu","unavailable":"Không có sẵn","unknown":"Không xác định","oauthLabel":"OAuth","compatibleLabel":"Tương thích","chat":"Trò chuyện","responses":"Phản hồi","messages":"Tin nhắn","oauthProviders":"Nhà cung cấp OAuth","freeProviders":"Nhà cung cấp miễn phí","apiKeyProviders":"Nhà cung cấp khóa API","compatibleProviders":"Nhà cung cấp tương thích với khóa API","testAll":"Kiểm tra tất cả","testAllOAuth":"Kiểm tra tất cả các kết nối OAuth","testAllFree":"Kiểm tra tất cả các kết nối miễn phí","testAllApiKey":"Kiểm tra tất cả các kết nối Khóa API","testAllCompatible":"Kiểm tra tất cả các kết nối tương thích","connected":"{count} Đã kết nối","errorCount":"{count} Lỗi ({code})","errorCountNoCode":"{count} Lỗi","noConnections":"Không có kết nối","disabled":"Đã tắt","enableProvider":"Kích hoạt nhà cung cấp","disableProvider":"Vô hiệu hóa nhà cung cấp","testResults":"Kết quả kiểm tra","noCompatibleYet":"Chưa có nhà cung cấp tương thích nào được thêm vào","compatibleHint":"Sử dụng các nút ở trên để thêm điểm cuối tương thích với OpenAI hoặc Anthropic","addOpenAICompatible":"Thêm tương thích OpenAI","addAnthropicCompatible":"Thêm tính tương thích với con người","addNewProvider":"Thêm nhà cung cấp mới","backToProviders":"Quay lại Nhà cung cấp","configureNewProvider":"Định cấu hình nhà cung cấp AI mới để sử dụng với các ứng dụng của bạn.","providerLabel":"nhà cung cấp","selectProvider":"Chọn nhà cung cấp","selectedProvider":"Nhà cung cấp đã chọn","authMethod":"Phương thức xác thực","apiKeyLabel":"Khóa API","apiKeyRequired":"Cần có khóa API","selectProviderRequired":"Vui lòng chọn nhà cung cấp","enterApiKey":"Nhập khóa API của bạn","apiKeySecure":"Khóa API của bạn sẽ được mã hóa và lưu trữ an toàn.","oauth2Connect":"Kết nối với OAuth2","oauth2Label":"OAuth2","oauth2Desc":"Kết nối tài khoản của bạn bằng xác thực OAuth2.","displayName":"Tên hiển thị","displayNamePlaceholder":"ví dụ: API sản xuất, Môi trường phát triển","displayNameHint":"Tùy chọn. Một cái tên thân thiện để xác định cấu hình này.","active":"Đang hoạt động","activeDescription":"Cho phép nhà cung cấp này sử dụng trong các ứng dụng của bạn","cancel":"Hủy bỏ","createProvider":"Tạo nhà cung cấp","failedCreate":"Không tạo được nhà cung cấp","errorOccurred":"Đã xảy ra lỗi. Vui lòng thử lại.","modelStatus":"Tình trạng mẫu","allModelsOperational":"Tất cả các mô hình hoạt động","modelsWithIssues":"{count} mô hình có vấn đề","allModelsNormal":"Tất cả các model đều phản hồi bình thường.","cooldownCleared":"Đã xóa thời gian hồi chiêu cho {model}","failedClearCooldown":"Không thể xóa thời gian hồi chiêu","loadingAvailability":"Đang tải tính khả dụng của mô hình...","clearCooldown":"Xóa","clearing":"Đang dọn dẹp...","until":"Cho đến {time}","providerTestFailed":"Kiểm tra nhà cung cấp không thành công","modeTest":"{mode} Kiểm tra","passedCount":"{count} đã vượt qua","failedCount":"{count} không thành công","testedCount":"{count} đã kiểm tra","millisecondsAbbr":"{value}ms","okShort":"được rồi","errorShort":"LỖI","noActiveConnectionsInGroup":"Không tìm thấy kết nối hoạt động nào cho nhóm này.","allTestsPassed":"Tất cả {total} bài kiểm tra đã vượt qua","testSummary":"{passed}/{total} đã đạt, {failed} không thành công","nameLabel":"Tên","prefixLabel":"Tiền tố","baseUrlLabel":"URL cơ sở","apiTypeLabel":"Loại API","prefixHint":"Bắt buộc. Tiền tố duy nhất cho tên model.","nameHint":"Bắt buộc. Một nhãn thân thiện cho nút này.","baseUrlHint":"Bắt buộc. URL cơ sở API của nhà cung cấp.","anthropicPrefixPlaceholder":"ac-prod","openaiPrefixPlaceholder":"oc-prod","anthropicBaseUrlPlaceholder":"https://api.anthropic.com/v1","openaiBaseUrlPlaceholder":"https://api.openai.com/v1","validateConnection":"Xác thực kết nối","validating":"Đang xác thực...","connectionValid":"Kết nối là hợp lệ!","connectionFailed":"Kết nối không thành công. Kiểm tra URL và khóa.","testKeyLabel":"Khóa API kiểm tra","testKeyPlaceholder":"sk-... (chỉ để xác nhận)","providerNotFound":"Không tìm thấy nhà cung cấp","deleteConnectionConfirm":"Xóa kết nối này?","failedSetAlias":"Không đặt được bí danh","failedSaveConnection":"Không lưu được kết nối","failedSaveConnectionRetry":"Không lưu được kết nối. Vui lòng thử lại.","failedRetestConnection":"Không thể kiểm tra lại kết nối","deleteCompatibleNodeConfirm":"Xóa nút tương thích {type} này?","anthropicCompatibleDetails":"Chi tiết tương thích nhân loại","openaiCompatibleDetails":"Chi tiết tương thích OpenAI","messagesApi":"API tin nhắn","responsesApi":"API phản hồi","chatCompletions":"Hoàn thành cuộc trò chuyện","importingModels":"Đang nhập khẩu...","importFromModels":"Nhập từ /model","clearAllModels":"Xóa tất cả các mẫu","clearAllModelsConfirm":"Bạn có chắc chắn muốn xóa tất cả mô hình của nhà cung cấp này không? Điều này không thể hoàn tác được.","clearAllModelsSuccess":"Tất cả các mô hình đã bị xóa","clearAllModelsFailed":"Không xóa được mô hình","addConnectionToImport":"Thêm kết nối để cho phép nhập.","noModelsConfigured":"Không có mô hình nào được định cấu hình","connectionCount":"{count} kết nối","fetchingModels":"Đang tìm nạp các mẫu có sẵn...","failedFetchModels":"Không tìm nạp được mô hình","noModelsFound":"Không tìm thấy mô hình nào","importFailed":"Nhập không thành công","noNewModelsAdded":"Không có mô hình mới được thêm vào.","adding":"Đang thêm...","importingModelsTitle":"Nhập mô hình","copyModel":"Sao chép mô hình","removeModel":"Xóa mô hình","rateLimitProtected":"Được bảo vệ","rateLimitUnprotected":"không được bảo vệ","enableRateLimitProtection":"Nhấp để bật bảo vệ giới hạn tỷ lệ","disableRateLimitProtection":"Nhấp để tắt bảo vệ giới hạn tỷ lệ","productionKey":"Khóa sản xuất","enterNewApiKey":"Nhập khóa API mới","optional":"Tùy chọn","anthropicCompatibleName":"Tương thích với con người","openaiCompatibleName":"Tương thích OpenAI","failedImportModels":"Không thể nhập mô hình","noModelsReturnedFromEndpoint":"Không có mô hình nào được trả về từ điểm cuối /models.","importingModelsProgress":"Đang nhập {current} trong số {total} mô hình...","foundModelsStartingImport":"Đã tìm thấy mô hình {count}. Đang bắt đầu nhập...","importingModelById":"Đang nhập {modelId}...","importSuccessCount":"Đã nhập thành công {count, plural, one {# model} other {# models}}!","noNewModelsAddedExisting":"Không có mẫu mới nào được thêm vào (tất cả đều đã tồn tại).","importDoneCount":"✓ Xong! {count, plural, one {# model imported.} other {# models imported.}}","unexpectedErrorOccurred":"Đã xảy ra lỗi không mong muốn","connectionCountLabel":"{count, plural, one {# connection} other {# connections}}","messagesPath":"tin nhắn","responsesPath":"phản hồi","chatCompletionsPath":"trò chuyện/hoàn thành","add":"Thêm","edit":"Chỉnh sửa","delete":"Xóa","anthropic":"nhân loại","openai":"OpenAI","singleConnectionPerCompatible":"Chỉ có một kết nối được phép cho mỗi nút tương thích. Thêm một nút khác nếu bạn cần thêm kết nối.","connections":"Kết nối","providerProxyTitleConfigured":"Proxy của nhà cung cấp: {host}","configured":"được cấu hình","providerProxyConfigureHint":"Định cấu hình proxy cho tất cả các kết nối của nhà cung cấp này","providerProxy":"Ủy quyền của nhà cung cấp","noConnectionsYet":"Chưa có kết nối nào","addFirstConnectionHint":"Thêm kết nối đầu tiên của bạn để bắt đầu","addConnection":"Thêm kết nối","availableModels":"Các mẫu có sẵn","pageAutoRefresh":"Trang sẽ tự động làm mới...","statusDisabled":"bị vô hiệu hóa","statusConnected":"đã kết nối","statusRuntimeIssue":"vấn đề thời gian chạy","statusAuthFailed":"xác thực thất bại","statusRateLimited":"tỷ lệ giới hạn","statusNetworkIssue":"sự cố mạng","statusTestUnsupported":"kiểm tra không được hỗ trợ","statusUnavailable":"không có sẵn","statusFailed":"thất bại","statusError":"lỗi","oauthAccount":"Tài khoản OAuth","errorTypeRuntime":"Thời gian chạy cục bộ","errorTypeUpstreamAuth":"Xác thực ngược dòng","errorTypeMissingCredential":"Thiếu thông tin xác thực","errorTypeRefreshFailed":"Làm mới không thành công","errorTypeTokenExpired":"Mã thông báo đã hết hạn","errorTypeRateLimited":"Tỷ lệ giới hạn","errorTypeUpstreamUnavailable":"Thượng nguồn không có sẵn","errorTypeNetworkError":"Lỗi mạng","errorTypeTestUnsupported":"Kiểm tra không được hỗ trợ","errorTypeUpstreamError":"Lỗi ngược dòng","proxySourceGlobal":"Toàn cầu","proxySourceProvider":"nhà cung cấp","proxySourceKey":"Chìa khóa","proxyConfiguredBySource":"Ủy quyền ({source}): {host}","autoPriority":"Tự động: {priority}","proxy":"ủy nhiệm","retestAuthentication":"Kiểm tra lại xác thực","retest":"Kiểm tra lại","disableConnection":"Tắt kết nối","enableConnection":"Kích hoạt kết nối","reauthenticateConnection":"Xác thực lại kết nối này","proxyConfig":"Cấu hình proxy","aliasExistsAlert":"Bí danh \\"{alias}\\" đã tồn tại. Vui lòng sử dụng một mô hình khác hoặc chỉnh sửa bí danh hiện có.","openRouterAnyModelHint":"OpenRouter hỗ trợ mọi mô hình. Thêm mô hình và tạo bí danh để truy cập nhanh.","modelIdFromOpenRouter":"ID mẫu (từ OpenRouter)","openRouterModelPlaceholder":"nhân chủng/claude-3-opus","customModels":"Mô hình tùy chỉnh","customModelsHint":"Thêm ID mẫu không có trong danh sách mặc định. Chúng sẽ có sẵn để định tuyến.","modelId":"Mã mẫu","customModelPlaceholder":"ví dụ: gpt-4.5-turbo","loading":"Đang tải...","removeCustomModel":"Xóa mô hình tùy chỉnh","noCustomModels":"Chưa có mô hình tùy chỉnh nào được thêm vào.","allSuggestedAliasesExist":"Tất cả các bí danh được đề xuất đã tồn tại. Vui lòng chọn một mẫu khác hoặc xóa các bí danh xung đột.","failedSaveCustomModel":"Không lưu được mô hình tùy chỉnh","modelAddedSuccess":"Đã thêm mô hình {modelId} thành công","failedAddModelTryAgain":"Không thể thêm mô hình. Vui lòng thử lại.","failedSaveImportedModel":"Không lưu được mô hình đã nhập vào cơ sở dữ liệu tùy chỉnh","failedImportModelsTryAgain":"Không thể nhập mô hình. Vui lòng thử lại.","failedRemoveModelFromDatabase":"Không thể xóa mô hình khỏi cơ sở dữ liệu","modelRemovedSuccess":"Đã xóa mô hình thành công","failedDeleteModelTryAgain":"Không xóa được mô hình. Vui lòng thử lại.","compatibleModelsDescription":"Thêm các mô hình tương thích {type} theo cách thủ công hoặc nhập chúng từ điểm cuối /models.","anthropicCompatibleModelPlaceholder":"Claude-3-opus-20240229","openaiCompatibleModelPlaceholder":"gpt-4o","apiKeyValidationFailed":"Xác thực khóa API không thành công. Vui lòng kiểm tra chìa khóa của bạn và thử lại.","addProviderApiKeyTitle":"Thêm khóa API {provider}","checking":"Đang kiểm tra...","check":"Kiểm tra","valid":"hợp lệ","invalid":"không hợp lệ","creating":"Đang tạo...","validationChecksAnthropicCompatible":"Kiểm tra xác thực {provider} bằng cách xác minh khóa API.","validationChecksOpenAiCompatible":"Kiểm tra xác thực {provider} thông qua /models trên URL cơ sở của bạn.","priorityLabel":"Ưu tiên","saving":"Đang lưu...","save":"Lưu","editConnection":"Chỉnh sửa kết nối","accountName":"Tên tài khoản","email":"Email","healthCheckMinutes":"Kiểm tra sức khỏe (phút)","healthCheckHint":"Khoảng thời gian làm mới mã thông báo chủ động. 0 = bị vô hiệu hóa.","groupLabel":"Environment","groupPlaceholder":"e.g. eKaizen, Personal","failedTestConnection":"Không thể kiểm tra kết nối","failed":"thất bại","leaveBlankKeepCurrentApiKey":"Để trống để giữ khóa API hiện tại.","editCompatibleTitle":"Chỉnh sửa {type} Tương thích","compatibleBaseUrlHint":"Root URL of your {type}-compatible API. Use Advanced Settings for custom endpoint paths.","apiKeyForCheck":"Khóa API (để kiểm tra)","compatibleProdPlaceholder":"{type} Tương thích (Sản phẩm)","providerTestTimeout":"Provider test timed out — too many connections to test at once","advancedSettings":"Advanced Settings","chatPathLabel":"Chat Endpoint Path","chatPathPlaceholder":"/chat/completions","chatPathHint":"Custom chat path for providers with non-standard APIs (e.g. /v4/chat/completions)","modelsPathLabel":"Models Endpoint Path","modelsPathPlaceholder":"/models","modelsPathHint":"Custom models path for validation (e.g. /v4/models)","builtInModels":"Built-in models","builtInModelsHint":"Registry models for this provider. Use the pencil to set compatibility options.","normalizeToolCallIdLabel":"Normalize tool call IDs to 9 characters (e.g. Mistral)","preserveDeveloperRoleLabel":"Keep OpenAI Responses developer role (do not map to system)","compatAdjustmentsTitle":"Compatibility","compatButtonLabel":"Compatibility","compatToolIdShort":"Tool ID 9","compatDeveloperShort":"Developer role","compatDoNotPreserveDeveloper":"Do not preserve developer role","compatBadgeNoPreserve":"No preserve","compatProtocolLabel":"Client request protocol","compatProtocolHint":"These options apply when OmniRoute detects this request shape (OpenAI Chat, Responses API, or Anthropic Messages).","compatProtocolOpenAI":"OpenAI Chat Completions","compatProtocolOpenAIResponses":"OpenAI Responses API","compatProtocolClaude":"Anthropic Messages","tokenRefreshed":"Token refreshed successfully","tokenRefreshFailed":"Token refresh failed","compatBadgeUpstreamHeaders":"Headers","compatUpstreamAddRow":"Add header","compatUpstreamHeaderName":"Header name","compatUpstreamHeaderValue":"Value","compatUpstreamHeadersHint":"High-privilege setting — same trust level as editing provider API credentials; only trusted admins should use it. Merged after OmniRoute adds auth from the provider API key. If a custom header uses the same name as an existing one (e.g. Authorization), your value fully replaces the auto-generated header (including the Bearer token) — the upstream only sees what you typed, not the key from settings. Misconfiguration can cause 401 or broken upstream auth. One row per header (e.g. extra Authentication for some gateways). Hover or focus the value to preview. Saves on blur, outside click, or closing this panel.","compatUpstreamHeadersLabel":"Extra upstream headers","compatUpstreamRemoveRow":"Remove row","autoSync":"Tự động đồng bộ hóa","autoSyncTooltip":"Tự động làm mới danh sách mô hình sau mỗi 24 giờ (có thể định cấu hình qua MODEL_SYNC_INTERVAL_HOURS)","autoSyncEnabled":"Đã bật tự động đồng bộ hóa - các mô hình sẽ làm mới định kỳ","autoSyncDisabled":"Tự động đồng bộ hóa đã bị tắt","autoSyncToggleFailed":"Không chuyển đổi được tính năng tự động đồng bộ hóa","allModelsAlreadyImported":"Tất cả mô hình đã được nhập","noNewModelsToImport":"Không có mô hình mới để nhập — tất cả mô hình đã có trong danh mục hoặc danh sách mô hình tùy chỉnh","skippingExistingModels":"Bỏ qua {count} mô hình hiện có"},"settings":{"title":"Cài đặt","general":"chung","security":"Bảo mật","appearance":"Ngoại hình","routing":"Định tuyến","cache":"Bộ nhớ đệm","resilience":"khả năng phục hồi","systemPrompt":"Lời nhắc hệ thống","thinkingBudget":"Suy nghĩ về ngân sách","proxy":"ủy nhiệm","pricing":"Định giá","storage":"Lưu trữ","policies":"Chính sách","ipFilter":"Bộ lọc IP","comboDefaults":"Mặc định kết hợp","fallbackChains":"Chuỗi dự phòng","changePassword":"Thay đổi mật khẩu","enablePassword":"Kích hoạt mật khẩu","darkMode":"Chế độ tối","lightMode":"Chế độ ánh sáng","systemTheme":"Chủ đề hệ thống","enableCache":"Bật bộ đệm","cacheTTL":"Bộ nhớ đệm TTL","maxCacheSize":"Kích thước bộ đệm tối đa","clearCache":"Xóa bộ nhớ đệm","cacheHits":"Số lần truy cập bộ đệm","cacheMisses":"Thiếu bộ nhớ đệm","hitRate":"Tỷ lệ trúng","cacheEntries":"Mục nhập bộ nhớ đệm","circuitBreaker":"Bộ ngắt mạch","retryPolicy":"Chính sách thử lại","maxRetries":"Số lần thử lại tối đa","retryDelay":"Trì hoãn thử lại","timeoutMs":"Thời gian chờ (ms)","enableSystemPrompt":"Kích hoạt lời nhắc hệ thống","systemPromptText":"Văn bản nhắc nhở hệ thống","enableThinking":"Kích hoạt tư duy","maxThinkingTokens":"Mã thông báo tư duy tối đa","enableProxy":"Kích hoạt proxy","proxyUrl":"URL proxy","pricingRates":"Định dạng giá cước","currentPricing":"Tổng quan về giá hiện tại","loadingPricing":"Đang tải dữ liệu giá...","noPricing":"Không có dữ liệu giá cả","input":"đầu vào","output":"đầu ra","cached":"Đã lưu vào bộ nhớ đệm","reasoning":"Lý luận","cacheCreation":"Tạo bộ đệm","customPricing":"Giá tùy chỉnh","databaseSize":"Kích thước cơ sở dữ liệu","backupDb":"Sao lưu cơ sở dữ liệu","restoreDb":"Khôi phục cơ sở dữ liệu","exportData":"Xuất dữ liệu","importData":"Nhập dữ liệu","clearData":"Xóa tất cả dữ liệu","clearDataConfirm":"Điều này sẽ xóa vĩnh viễn tất cả dữ liệu. Bạn có chắc không?","enableRequestLogs":"Bật nhật ký yêu cầu","logRetention":"Lưu giữ nhật ký","ipWhitelist":"Danh sách trắng IP","ipBlacklist":"Danh sách đen IP","addIP":"Thêm IP","savedSuccessfully":"Đã lưu cài đặt thành công","ai":"trí tuệ nhân tạo","advanced":"Nâng cao","localMode":"Chế độ cục bộ - Tất cả dữ liệu được lưu trữ trên máy của bạn","settingsSectionsAria":"Phần cài đặt","switchThemes":"Chuyển đổi giữa chủ đề sáng và tối","themeSelectionAria":"Lựa chọn chủ đề","themeLight":"Ánh sáng","themeDark":"Tối","themeSystem":"Hệ thống","hideHealthLogs":"Ẩn nhật ký kiểm tra sức khỏe","hideHealthLogsDesc":"Khi BẬT, hãy chặn thông báo [HealthCheck] trong bảng điều khiển máy chủ","themeAccent":"Màu chủ đề","themeAccentDesc":"Chọn màu đặt sẵn hoặc tạo chủ đề của riêng bạn bằng một màu","themeCreate":"Tạo chủ đề","themeCustom":"Chủ đề tùy chỉnh","themeBlue":"Xanh dương","themeRed":"Đỏ","themeGreen":"Xanh lá","themeViolet":"Tím","themeOrange":"Cam","themeCyan":"Lục lam","promptCache":"Bộ nhớ đệm nhắc nhở","flushCache":"Xóa bộ nhớ đệm","flushing":"Đang xả…","size":"Kích thước","hits":"Lượt truy cập","evictions":"Trục xuất","loadingCacheStats":"Đang tải số liệu thống kê về bộ nhớ đệm…","globalProxy":"Proxy toàn cầu","globalProxyDesc":"Định cấu hình proxy gửi đi toàn cầu cho tất cả lệnh gọi API. Các nhà cung cấp, tổ hợp và khóa riêng lẻ có thể ghi đè điều này.","noGlobalProxy":"Không có proxy toàn cầu nào được định cấu hình","globalLabel":"Toàn cầu","configure":"Cấu hình","globalSystemPrompt":"Lời nhắc hệ thống toàn cầu","systemPromptDesc":"Được đưa vào tất cả các yêu cầu ở cấp độ proxy","saved":"Đã lưu","systemPromptPlaceholder":"Nhập lời nhắc hệ thống để đưa vào tất cả các yêu cầu...","systemPromptHint":"Lời nhắc này được thêm vào trước thông báo hệ thống của mọi yêu cầu. Sử dụng cho các hướng dẫn chung, nguyên tắc an toàn hoặc quy tắc định dạng phản hồi.","chars":"{count} ký tự","thinkingBudgetTitle":"Suy nghĩ về ngân sách","thinkingBudgetDesc":"Kiểm soát việc sử dụng mã thông báo lý luận AI trên tất cả các yêu cầu","passthrough":"Truyền qua","passthroughDesc":"Không có thay đổi - khách hàng kiểm soát ngân sách tư duy","auto":"Tự động","autoDesc":"Loại bỏ mọi cấu hình suy nghĩ - hãy để nhà cung cấp quyết định","custom":"tùy chỉnh","customDesc":"Đặt ngân sách mã thông báo cố định cho tất cả các yêu cầu","adaptive":"Thích ứng","adaptiveDesc":"Mở rộng ngân sách dựa trên độ phức tạp của yêu cầu","effortNone":"Không có (0 mã thông báo)","effortLow":"Thấp (1K token)","effortMedium":"Trung bình (10K token)","effortHigh":"Cao (128K token)","tokenBudget":"Ngân sách mã thông báo","tokens":"mã thông báo","baseEffortLevel":"Mức nỗ lực cơ bản","adaptiveHint":"Chế độ thích ứng sẽ chia tỷ lệ từ cấp cơ sở này dựa trên số lượng tin nhắn, mức sử dụng công cụ và độ dài lời nhắc.","requireLogin":"Yêu cầu đăng nhập","requireLoginDesc":"Khi BẬT, bảng điều khiển yêu cầu mật khẩu. Khi TẮT, truy cập mà không cần đăng nhập.","currentPassword":"Mật khẩu hiện tại","enterCurrentPassword":"Nhập mật khẩu hiện tại","newPassword":"Mật khẩu mới","enterNewPassword":"Nhập mật khẩu mới","confirmPassword":"Xác nhận mật khẩu mới","confirmPasswordPlaceholder":"Xác nhận mật khẩu mới","passwordsNoMatch":"Mật khẩu không khớp","passwordUpdated":"Đã cập nhật mật khẩu thành công","failedUpdatePassword":"Không cập nhật được mật khẩu","errorOccurred":"Đã xảy ra lỗi","updatePassword":"Cập nhật mật khẩu","setPassword":"Đặt mật khẩu","apiEndpointProtection":"Bảo vệ điểm cuối API","requireAuthModels":"Yêu cầu khóa API cho /model","requireAuthModelsDesc":"Khi BẬT, điểm cuối /v1/models trả về 404 cho các yêu cầu không được xác thực. Ngăn chặn việc phát hiện mô hình bởi người dùng trái phép.","blockedProviders":"Nhà cung cấp bị chặn","blockedProvidersDesc":"Ẩn các nhà cung cấp cụ thể khỏi phản hồi /v1/models. Các nhà cung cấp bị chặn sẽ không xuất hiện trong danh sách mô hình.","providersBlocked":"{count} nhà cung cấp bị chặn khỏi /models","blockProviderTitle":"Chặn {provider}","unblockProviderTitle":"Bỏ chặn {provider}","routingStrategy":"Chiến lược định tuyến","fillFirst":"điền đầu tiên","fillFirstDesc":"Sử dụng tài khoản theo thứ tự ưu tiên","roundRobin":"Vòng Robin","roundRobinDesc":"Duyệt qua tất cả các tài khoản","p2c":"P2C","p2cDesc":"Chọn ngẫu nhiên 2 cái, chọn cái lành mạnh hơn","random":"Ngẫu nhiên","randomDesc":"Tài khoản ngẫu nhiên mỗi yêu cầu","leastUsed":"Ít được sử dụng nhất","leastUsedDesc":"Chọn tài khoản ít được sử dụng gần đây nhất","costOpt":"Lựa chọn chi phí","costOptDesc":"Ưu tiên tài khoản có sẵn rẻ nhất","strictRandom":"Strict Random","strictRandomDesc":"Shuffle deck — uses each account once before reshuffling","stickyLimit":"Giới hạn dính","stickyLimitDesc":"Cuộc gọi trên mỗi tài khoản trước khi chuyển đổi","modelAliases":"Bí danh mẫu","modelAliasesTitle":"Bí danh mô hình","modelAliasesDesc":"Các mẫu ký tự đại diện để ánh xạ lại tên mẫu máy • Sử dụng * và ?","addCustomAlias":"Thêm Bí Danh Tùy Chỉnh","deprecatedModelId":"ID mô hình ngừng sử dụng","newModelId":"ID mô hình mới","customAliases":"Bí Danh Tùy Chỉnh","builtInAliases":"Bí Danh Tích Hợp","backgroundDegradationTitle":"Giảm Cấp Tác Vụ Nền","backgroundDegradationDesc":"Tự động phát hiện tác vụ nền (tiêu đề, tóm tắt) và chuyển hướng sang mô hình rẻ hơn","enableDegradation":"Bật Giảm Cấp Nền","enableDegradationHint":"Khi bật, các tác vụ nền như tạo tiêu đề và tóm tắt sẽ tự động được chuyển hướng sang các mô hình rẻ hơn","tasksDetected":"Tác vụ được phát hiện","degradationMap":"Bản Đồ Giảm Cấp Mô Hình","premiumModel":"Mô hình cao cấp","cheapModel":"Mô hình giá rẻ","detectionPatterns":"Mẫu Phát Hiện","newPattern":"vd: \\"tạo tiêu đề\\"","aliasPatternPlaceholder":"Claude-sonnet-*","aliasTargetPlaceholder":"Claude-sonnet-4-20250514","pattern":"mẫu","targetModel":"Mô hình mục tiêu","add":"+ Thêm","session":"Phiên","sessionDetailsAria":"Chi tiết phiên","status":"Trạng thái","authenticated":"Đã xác thực","guest":"khách","loginTime":"Thời gian đăng nhập","sessionAge":"Tuổi phiên","browser":"Trình duyệt","clearLocalData":"Xóa dữ liệu cục bộ","logout":"Đăng xuất","clearLocalDataConfirm":"Xóa tất cả dữ liệu cục bộ? Điều này sẽ thiết lập lại tùy chọn của bạn.","unknown":"Không xác định","systemActor":"hệ thống","ipAccessControl":"Kiểm soát truy cập IP","ipAccessControlDesc":"Chặn hoặc cho phép các địa chỉ IP cụ thể","ipModeDisabled":"Đã tắt","ipModeBlacklist":"Danh sách đen","ipModeWhitelist":"Danh sách trắng","ipModeWhitelistPriority":"Ưu tiên WL","addIpAddress":"Thêm địa chỉ IP","ipAddressPlaceholder":"192.168.1.0/24 hoặc 10.0.*.*","block":"+ Chặn","allow":"+ Cho phép","blocked":"Đã chặn ({count})","allowed":"Được phép ({count})","temporaryBans":"Lệnh cấm tạm thời ({count})","minLeft":"{min} phút còn lại","auditLog":"Nhật ký kiểm tra","searchAuditLogs":"Tìm kiếm nhật ký kiểm tra...","failedLoadAuditLog":"Không tải được nhật ký kiểm tra","noAuditEvents":"Không tìm thấy sự kiện kiểm tra nào","action":"hành động","actor":"diễn viên","details":"Chi tiết","time":"thời gian","fallbackChainsTitle":"Chuỗi dự phòng","fallbackChainsDesc":"Xác định thứ tự dự phòng của nhà cung cấp cho mỗi mô hình","addChain":"+ Thêm chuỗi","modelName":"Tên mẫu","modelNamePlaceholder":"Claude-sonnet-4-20250514","providersCommaSeparated":"Nhà cung cấp (được phân tách bằng dấu phẩy, theo thứ tự ưu tiên)","providersCommaSeparatedPlaceholder":"nhân loại, openai, song tử","createChain":"Tạo chuỗi","noFallbackChains":"Không có chuỗi dự phòng","noFallbackChainsDesc":"Tạo một chuỗi để xác định thứ tự dự phòng của nhà cung cấp cho một mô hình.","loadingFallbackChains":"Đang tải chuỗi dự phòng...","deleteChainConfirm":"Xóa chuỗi dự phòng cho \\"{model}\\"?","chainCreated":"Đã tạo chuỗi cho {model}","chainDeleted":"Đã xóa chuỗi cho {model}","failedCreateChain":"Không tạo được chuỗi","failedDeleteChain":"Không thể xóa chuỗi","deleteChain":"Xóa chuỗi","fillModelAndProviders":"Vui lòng điền tên model và nhà cung cấp","addAtLeastOneProvider":"Thêm ít nhất một nhà cung cấp","comboDefaultsTitle":"Mặc định kết hợp","globalComboConfig":"Cấu hình kết hợp toàn cầu","defaultStrategy":"Chiến lược mặc định","defaultStrategyDesc":"Áp dụng cho các combo mới không có chiến lược rõ ràng","comboStrategyAria":"Chiến lược kết hợp","priority":"Ưu tiên","weighted":"Có trọng số","maxRetriesLabel":"Số lần thử lại tối đa","retryDelayLabel":"Độ trễ thử lại (ms)","timeoutLabel":"Thời gian chờ (ms)","healthCheck":"Kiểm tra sức khỏe","healthCheckDesc":"Kiểm tra trước tính khả dụng của nhà cung cấp","trackMetrics":"Theo dõi số liệu","trackMetricsDesc":"Ghi lại số liệu yêu cầu trên mỗi kết hợp","providerOverrides":"Ghi đè nhà cung cấp","providerOverridesDesc":"Ghi đè thời gian chờ và thử lại trên mỗi nhà cung cấp. Cài đặt nhà cung cấp ghi đè mặc định chung.","providerMaxRetriesAria":"{provider} số lần thử lại tối đa","providerTimeoutAria":"{provider} hết thời gian chờ mili giây","removeProviderOverrideAria":"Xóa ghi đè {provider}","newProviderNamePlaceholder":"ví dụ: google, openai...","newProviderNameAria":"Tên nhà cung cấp mới","retries":"thử lại","ms":"cô","saveComboDefaults":"Lưu mặc định kết hợp","maxNestingDepth":"Độ sâu lồng tối đa","concurrencyPerModel":"Đồng thời / Mô hình","queueTimeout":"Hết thời gian xếp hàng (ms)","providerProfiles":"Hồ sơ nhà cung cấp","providerProfilesDesc":"Cài đặt khả năng phục hồi riêng biệt cho các nhà cung cấp OAuth (dựa trên phiên) và Khóa API (được đo lường). Nhà cung cấp OAuth có ngưỡng chặt chẽ hơn do giới hạn tốc độ thấp hơn.","oauthProviders":"Nhà cung cấp OAuth","apiKeyProviders":"Nhà cung cấp khóa API","transientCooldown":"Thời gian hồi chiêu thoáng qua","rateLimitCooldown":"Thời gian hồi chiêu giới hạn tốc độ","maxBackoffLevel":"Mức chờ đợi tối đa","cbThreshold":"Ngưỡng CB","cbResetTime":"Thời gian đặt lại CB","rateLimiting":"Giới hạn tỷ lệ","rateLimitingDesc":"Nhà cung cấp Khóa API được tự động giới hạn tỷ lệ với các giá trị mặc định an toàn. Các giới hạn được học từ tiêu đề phản hồi và điều chỉnh theo thời gian.","defaultSafetyNet":"Mạng lưới an toàn mặc định","rpm":"vòng/phút","minGap":"Khoảng cách tối thiểu","maxConcurrent":"Đồng thời tối đa","activeLimiters":"Bộ hạn chế hoạt động","noActiveLimiters":"Chưa có giới hạn tỷ lệ hoạt động nào.","reservoir":"Hồ chứa nước","running":"Đang chạy","queued":"Đã xếp hàng","circuitBreakers":"Bộ ngắt mạch","breakerStateClosed":"Đã đóng","breakerStateOpen":"Mở","breakerStateHalfOpen":"Nửa mở","tripped":"{count} bị vấp","healthy":"{count} khỏe mạnh","resetAll":"Đặt lại tất cả","noCircuitBreakers":"Chưa có bộ ngắt mạch nào hoạt động. Chúng được tạo tự động khi các yêu cầu chảy qua đường dẫn kết hợp.","failures":"{count} lỗi","policiesLocked":"Chính sách & Mã định danh bị khóa","allOperational":"Tất cả các hệ thống đều hoạt động - không có khóa hoặc cầu dao bị ngắt","loadingPolicies":"Đang tải chính sách...","lockedIdentifiers":"Số nhận dạng bị khóa","unlockedIdentifier":"Đã mở khóa: {identifier}","sinceDate":"kể từ {date}","forceUnlock":"Buộc mở khóa","unlocking":"Đang mở khóa...","failedUnlock":"Không thể mở khóa","failedLoadWithStatus":"Không tải được: {status}","failedLoadResilience":"Không tải được trạng thái phục hồi","saveFailed":"Lưu không thành công","resetFailed":"Đặt lại không thành công","loadingResilience":"Đang tải trạng thái phục hồi...","retry":"Thử lại","systemStorage":"Hệ thống & Lưu trữ","allDataLocal":"Tất cả dữ liệu được lưu trữ cục bộ trên máy của bạn","databasePath":"Đường dẫn cơ sở dữ liệu","exportDatabase":"Xuất cơ sở dữ liệu","exportAll":"Xuất tất cả (.tar.gz)","importDatabase":"Nhập cơ sở dữ liệu","confirmDbImport":"Xác nhận nhập cơ sở dữ liệu","confirmDbImportDesc":"Thao tác này sẽ thay thế tất cả dữ liệu hiện tại bằng nội dung từ {file}. Một bản sao lưu sẽ được tạo tự động trước khi nhập.","yesImport":"Có, nhập khẩu","lastBackup":"Sao lưu lần cuối","noBackupYet":"Chưa có bản sao lưu nào","backupNow":"Sao lưu ngay","backupRestore":"Sao lưu & Khôi phục","viewBackups":"Xem bản sao lưu","hide":"Ẩn","backupRetentionDesc":"Ảnh chụp nhanh cơ sở dữ liệu được tạo tự động trước khi khôi phục và cứ sau 15 phút khi dữ liệu thay đổi. Lưu giữ: 24 giờ + 30 lần sao lưu hàng ngày với chế độ xoay thông minh.","loadingBackups":"Đang tải bản sao lưu...","noBackupsYet":"Chưa có bản sao lưu nào. Bản sao lưu sẽ được tạo tự động khi dữ liệu thay đổi.","backupsAvailable":"{count} bản sao lưu có sẵn","refresh":"Làm mới","confirm":"Xác nhận?","yes":"Có","no":"Không","restore":"Khôi phục","invalidFileType":"Loại tệp không hợp lệ. Chỉ các tệp .sqlite được chấp nhận.","exportFailed":"Xuất không thành công","exportFailedWithError":"Xuất không thành công: {error}","fullExportFailedWithError":"Xuất toàn bộ không thành công: {error}","backupCreated":"Đã tạo bản sao lưu: {file}","restoreSuccess":"Đã khôi phục! {connections} kết nối, nút {nodes}, tổ hợp {combos}, khóa API {apiKeys}.","importSuccess":"Cơ sở dữ liệu đã được nhập! {connections} kết nối, nút {nodes}, tổ hợp {combos}, khóa API {apiKeys}.","justNow":"ngay bây giờ","minutesAgo":"{count} phút trước","hoursAgo":"{count} giờ trước","daysAgo":"{count}ngày trước","backupReasonManual":"hướng dẫn sử dụng","backupReasonPreRestore":"khôi phục trước","connectionsCount":"{count, plural, one {# connection} other {# connections}}","noChangesSinceBackup":"Không có thay đổi nào kể từ lần sao lưu cuối cùng","backupFailed":"Sao lưu không thành công","restoreFailed":"Khôi phục không thành công","importFailed":"Nhập không thành công","errorDuringRestore":"Đã xảy ra lỗi trong quá trình khôi phục","errorDuringImport":"Đã xảy ra lỗi trong quá trình nhập","modelPricing":"Giá mẫu","modelPricingDesc":"Định cấu hình mức chi phí cho mỗi mô hình • Tất cả mức giá bằng mã thông báo $/1 triệu","providers":"Nhà cung cấp","registry":"Đăng ký","priced":"Đã định giá","searchProvidersModels":"Tìm kiếm nhà cung cấp hoặc mô hình...","showAll":"Hiển thị tất cả","noProvidersMatch":"Không có nhà cung cấp nào phù hợp với tìm kiếm của bạn.","howPricingWorks":"Cách thức hoạt động của giá","cacheWrite":"Ghi bộ nhớ đệm","unsaved":"chưa được lưu","resetDefaults":"Đặt lại mặc định","saveProvider":"Lưu nhà cung cấp","saving":"Đang lưu...","model":"người mẫu","models":"mô hình","moreProviders":"{count} nhà cung cấp khác","withPricing":"với giá được cấu hình","policiesCircuitBreakers":"Chính sách & Bộ ngắt mạch","activeIssuesDetected":"Đã phát hiện sự cố đang diễn ra","off":"Tắt","resetPricingConfirm":"Đặt lại tất cả giá cho {provider} về mặc định?","pricingDescInput":"Đầu vào: mã thông báo được gửi đến mô hình","pricingDescOutput":"Đầu ra: mã thông báo được tạo","pricingDescCached":"Đã lưu vào bộ nhớ đệm: đầu vào được sử dụng lại (~50% tốc độ đầu vào)","pricingDescReasoning":"Lý luận: mã thông báo suy nghĩ (quay lại Đầu ra)","pricingDescCacheWrite":"Ghi bộ đệm: tạo các mục bộ đệm (quay lại Đầu vào)","pricingDescFormula":"Chi phí = (đầu vào × tốc độ đầu vào) + (đầu ra × tốc độ đầu ra) + (được lưu vào bộ nhớ đệm × tốc độ được lưu vào bộ nhớ cache) trên một triệu mã thông báo.","pricingSettingsTitle":"Cài đặt giá","totalModels":"Tổng số mô hình","active":"Đang hoạt động","costCalculation":"Tính toán chi phí","costCalculationDesc":"Chi phí được tính toán dựa trên mức sử dụng mã thông báo và mức giá được định cấu hình cho từng mô hình.","pricingFormat":"Định dạng giá","pricingFormatDesc":"Tất cả các mức giá đều tính bằng token $/1 triệu (đô la trên một triệu token).","tokenTypes":"Các loại mã thông báo","inputTokenDesc":"Mã thông báo nhắc nhở tiêu chuẩn","outputTokenDesc":"Mã thông báo hoàn thành/phản hồi","cachedTokenDesc":"Mã thông báo đầu vào được lưu trong bộ nhớ đệm (thường là 50% tốc độ đầu vào)","reasoningTokenDesc":"Mã thông báo lý luận/suy nghĩ đặc biệt (dự phòng tốc độ đầu ra)","cacheCreationTokenDesc":"Mã thông báo được sử dụng để tạo mục nhập bộ đệm (dự phòng tốc độ đầu vào)","customPricingNote":"Bạn có thể ghi đè giá mặc định cho các kiểu máy cụ thể. Ghi đè tùy chỉnh được ưu tiên hơn giá được tự động phát hiện.","editPricing":"Chỉnh sửa giá","viewFullDetails":"Xem chi tiết đầy đủ","themeCoral":"San hô","cliFingerprint":"CLI Fingerprint Matching","cliFingerprintDesc":"Match native CLI binary signatures when proxying requests. Reorders headers and body fields to look identical to the official CLI tools. Your proxy IP is preserved.","cliFingerprintEnabled":"{count} provider(s) with CLI fingerprint active","enableFingerprintTitle":"Enable fingerprint for {provider}","disableFingerprintTitle":"Disable fingerprint for {provider}","routingAdvancedGuideTitle":"Hướng dẫn định tuyến nâng cao","routingAdvancedGuideHint1":"Sử dụng Fill First để có mức độ ưu tiên có thể dự đoán được, Round Robin để đảm bảo tính công bằng và P2C để có khả năng phục hồi độ trễ.","routingAdvancedGuideHint2":"Nếu các nhà cung cấp khác nhau về chất lượng/chi phí, hãy bắt đầu với Cost Opt cho công việc nền và Ít được sử dụng nhất để cân bằng độ hao mòn.","comboDefaultsGuideTitle":"Cách điều chỉnh mặc định kết hợp","comboDefaultsGuideHint1":"Giữ số lần thử ở mức thấp trong các luồng có độ trễ thấp; chỉ tăng thời gian chờ cho các tác vụ tạo dài.","comboDefaultsGuideHint2":"Sử dụng ghi đè nhà cung cấp khi một nhà cung cấp cần hành vi hết thời gian chờ/thử lại khác với mặc định chung."},"translator":{"title":"Người phiên dịch","metaTitle":"Sân chơi phiên dịch | OmniRoute","metaDescription":"Gỡ lỗi, kiểm tra và trực quan hóa bản dịch định dạng API giữa các nhà cung cấp","playgroundTitle":"Sân chơi phiên dịch","playground":"Sân chơi","realtime":"Hoạt động dịch thời gian thực","chatTester":"Trình kiểm tra trò chuyện","testBench":"Ghế thử nghiệm","liveMonitor":"Màn hình trực tiếp","modeDescriptionPlayground":"Dán bất kỳ nội dung yêu cầu API nào và xem cách OmniRoute dịch nó giữa các định dạng nhà cung cấp (OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi)","modeDescriptionChatTester":"Gửi các yêu cầu trò chuyện thực tế thông qua OmniRoute và kiểm tra toàn bộ hành trình: đầu vào, yêu cầu đã dịch, phản hồi của nhà cung cấp và đầu ra đã dịch.","modeDescriptionTestBench":"Chạy các kịch bản được xác định trước và so sánh khả năng tương thích giữa các nhà cung cấp và mô hình.","modeDescriptionLiveMonitor":"Xem các sự kiện dịch thuật trong thời gian thực khi các yêu cầu chảy qua OmniRoute.","modeDescriptionFallback":"Gỡ lỗi, kiểm tra và trực quan hóa cách OmniRoute dịch các yêu cầu API giữa các nhà cung cấp.","recentTranslations":"Bản dịch gần đây","noTranslations":"Chưa có bản dịch nào","source":"Nguồn","target":"Mục tiêu","time":"thời gian","model":"người mẫu","status":"Trạng thái","latency":"Độ trễ","totalTranslations":"Tổng số bản dịch","successful":"thành công","errors":"Lỗi","avgLatency":"Độ trễ trung bình","millisecondsShort":"{value}ms","notAvailableSymbol":"—","liveAutoRefreshing":"Trực tiếp - Tự động làm mới","paused":"Đã tạm dừng","eventsAppearHint":"Các sự kiện dịch xuất hiện ở đây khi các yêu cầu chuyển qua OmniRoute. Sử dụng bất kỳ phương pháp nào sau đây để tạo sự kiện:","chatTesterTab":"Tab Trình kiểm tra trò chuyện","testBenchTab":"Tab Bench thử nghiệm","externalApiCalls":"Lệnh gọi API bên ngoài","ideCliIntegrations":"Tích hợp IDE/CLI","inMemoryNote":"Lưu ý: Các sự kiện được lưu trong bộ nhớ và được đặt lại khi máy chủ khởi động lại.","ok":"được rồi","errorShort":"LỖI","formatConverter":"Trình chuyển đổi định dạng","formatConverterDescription":"Dán hoặc nhập nội dung yêu cầu JSON. Trình dịch sẽ tự động phát hiện định dạng nguồn và chuyển đổi nó sang định dạng đích. Sử dụng tính năng này để gỡ lỗi cách OmniRoute dịch các yêu cầu giữa các định dạng (OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi).","input":"đầu vào","output":"đầu ra","auto":"Tự động","swapFormats":"Hoán đổi định dạng","translateAction":"Dịch","clear":"Xóa","inputPlaceholder":"Dán nội dung yêu cầu tại đây hoặc chọn mẫu bên dưới...","exampleTemplates":"Mẫu ví dụ","exampleTemplatesHint":"- Bấm để tải","templateLoadHint":"Mẫu tải yêu cầu ở định dạng {format}. Thay đổi định dạng nguồn để tải ở định dạng khác.","compatibilityTester":"Trình kiểm tra khả năng tương thích","compatibilityReport":"Báo cáo tương thích","testBenchDescription":"Chạy các kịch bản được xác định trước (Trò chuyện đơn giản, Gọi công cụ, v.v.) để xác minh khả năng tương thích của bản dịch và nhà cung cấp. Chọn định dạng nguồn và nhà cung cấp mục tiêu, sau đó chạy tất cả các thử nghiệm để xem tỷ lệ phần trăm tương thích. Sử dụng công cụ này để tìm những tính năng nào hoạt động giữa các nhà cung cấp.","targetProvider":"Nhà cung cấp mục tiêu","runAllTests":"Chạy tất cả các bài kiểm tra","runTest":"Chạy thử nghiệm","reRun":"Chạy lại","running":"Đang chạy...","passed":"đã vượt qua","failed":"thất bại","passedIconLabel":"✅ Đạt","chunks":"khối","scenarioSimpleChat":"Trò chuyện đơn giản","scenarioToolCalling":"Gọi công cụ","scenarioMultiTurn":"Nhiều lượt","scenarioThinking":"suy nghĩ","scenarioSystemPrompt":"Lời nhắc hệ thống","scenarioStreaming":"Truyền phát","templateNames":{"simple-chat":"Trò chuyện đơn giản","tool-calling":"Gọi công cụ","multi-turn":"Nhiều lượt","thinking":"suy nghĩ","system-prompt":"Lời nhắc hệ thống","streaming":"Truyền phát"},"templateDescriptions":{"simple-chat":"Tin nhắn văn bản cơ bản","tool-calling":"Lệnh gọi hàm/công cụ","multi-turn":"Đối thoại với lịch sử","thinking":"Suy nghĩ/lý luận mở rộng","system-prompt":"Hướng dẫn hệ thống phức tạp","streaming":"Yêu cầu phát trực tuyến SSE"},"templatePayloads":{"simpleChat":{"system":"Bạn là một trợ lý hữu ích.","userGreeting":"Xin chào! Bạn hôm nay thế nào?"},"toolCalling":{"userWeather":"Thời tiết ở São Paulo thế nào?","toolDescription":"Nhận thời tiết hiện tại cho một địa điểm","cityNameDescription":"Tên thành phố"},"multiTurn":{"system":"Bạn là một trợ lý mã hóa.","userInitial":"Viết hàm sắp xếp một mảng trong Python.","assistantExample":"Đây là một chức năng sắp xếp đơn giản:\\n\\n``` con trăn\\ndef sắp xếp_array(arr):\\n trả về đã sắp xếp(arr)\\n```","userFollowUp":"Bây giờ hãy sắp xếp nó theo thứ tự giảm dần."},"thinking":{"question":"Tổng của 100 số nguyên tố đầu tiên là bao nhiêu?"},"systemPrompt":{"systemInstruction":"Bạn là một kỹ sư phần mềm cao cấp chuyên về hệ thống phân tán. Trả lời các câu hỏi một cách chính xác bằng cách sử dụng các phương pháp hay nhất trong ngành. Luôn cung cấp các ví dụ về mã khi có liên quan. Định dạng câu trả lời của bạn bằng cách sử dụng markdown.","question":"Làm cách nào để triển khai mẫu ngắt mạch?"},"streaming":{"prompt":"Kể cho tôi nghe một câu chuyện ngắn về một robot học vẽ."}},"openaiCompatibleLabel":"Tương thích OpenAI","anthropicCompatibleLabel":"Tương thích với con người","noTemplateForFormat":"Không có mẫu cho định dạng này","translationFailed":"Dịch không thành công: {error}","pipelineDebugger":"Trình gỡ lỗi đường ống","translationPipeline":"Đường dẫn dịch thuật","pipelineVisualization":"Trực quan hóa đường ống","pipelineVisualizationHint":"Gửi tin nhắn để xem yêu cầu của bạn diễn ra như thế nào thông qua quá trình phát hiện → dịch thuật → cuộc gọi của nhà cung cấp.","chatTesterDescription":"Gửi tin nhắn dưới dạng định dạng ứng dụng khách cụ thể và kiểm tra từng bước của quy trình dịch thuật.","chatTesterFlow":"Yêu cầu của khách hàng → Phát hiện định dạng → Trung gian OpenAI → Định dạng nhà cung cấp → Phản hồi","clickStepToInspect":"Nhấp vào bất kỳ bước nào để kiểm tra dữ liệu ở giai đoạn đó.","clientFormat":"Định dạng khách hàng","provider":"nhà cung cấp","modelPlaceholder":"Chọn hoặc nhập tên mẫu máy...","sendMessageToSeePipeline":"Gửi tin nhắn để xem quy trình dịch thuật","chatMessageHintPrefix":"Tin nhắn của bạn sẽ được định dạng dưới dạng","chatMessageHintSuffix":"yêu cầu, được dịch qua quy trình và gửi đến nhà cung cấp đã chọn.","youWithFormat":"Bạn ({format})","assistant":"Trợ lý","typeMessage":"Nhập tin nhắn...","send":"Gửi","clientRequest":"Yêu cầu của khách hàng","clientRequestDescription":"Nội dung yêu cầu mà khách hàng của bạn sẽ gửi nó","formatDetected":"Đã phát hiện định dạng","formatDetectedDescription":"OmniRoute tự động phát hiện định dạng API từ cấu trúc yêu cầu","openaiIntermediate":"Trung cấp OpenAI","openaiIntermediateDescription":"Tất cả các định dạng trước tiên được chuẩn hóa thành định dạng OpenAI (cầu nối phổ quát)","providerFormat":"Định dạng nhà cung cấp","providerFormatDescription":"Định dạng OpenAI được dịch sang định dạng gốc của nhà cung cấp","providerResponse":"Phản hồi của nhà cung cấp","providerResponseRawDescription":"Phản hồi thô từ API nhà cung cấp","providerResponseSseDescription":"Luồng SSE thô từ API nhà cung cấp","unexpectedError":"Đã xảy ra lỗi không mong muốn","error":"Lỗi","errorMessage":"Lỗi: {message}","requestFailed":"Yêu cầu không thành công","noTextExtracted":"(Không trích xuất văn bản)","liveMonitorDescriptionPrefix":"Hiển thị các sự kiện dịch khi lệnh gọi API đi qua OmniRoute. Các sự kiện đến từ bộ đệm trong bộ nhớ (đặt lại khi khởi động lại). sử dụng","liveMonitorDescriptionSuffix":"hoặc lệnh gọi API bên ngoài để tạo sự kiện."},"usage":{"title":"Cách sử dụng","loggerTab":"Trình ghi nhật ký","proxyTab":"ủy nhiệm","budgetManagement":"Quản lý ngân sách","budgetSaved":"Đã lưu giới hạn ngân sách","budgetSaveFailed":"Không thể tiết kiệm ngân sách","loadingBudgetData":"Đang tải dữ liệu ngân sách...","noApiKeysTitle":"Không có khóa API","noApiKeysDescription":"Thêm khóa API trước để thiết lập giới hạn ngân sách.","apiKey":"Khóa API","todaysSpend":"Chi tiêu hôm nay","thisMonth":"Tháng này","setLimits":"Đặt giới hạn","dailyLimitUsd":"Giới hạn hàng ngày (USD)","monthlyLimitUsd":"Giới hạn hàng tháng (USD)","warningThresholdPercent":"Ngưỡng cảnh báo (%)","dailyLimitPlaceholder":"ví dụ: 5 giờ 00","monthlyLimitPlaceholder":"ví dụ: 50,00","warningThresholdPlaceholder":"80","saveLimits":"Lưu giới hạn","budgetOk":"Ngân sách ổn — còn lại {remaining}","budgetExceeded":"Vượt quá ngân sách — yêu cầu có thể bị chặn","totalRequests":"Tổng số yêu cầu","noDataYet":"Chưa có dữ liệu","latency":"Độ trễ","latencyP50":"p50","latencyP95":"p95","latencyP99":"p99","promptCache":"Bộ nhớ đệm nhắc nhở","systemHealth":"Tình trạng hệ thống","entries":"Bài dự thi","activeCount":"{count} đang hoạt động","openCircuitBreakersDetected":"Đã phát hiện bộ ngắt mạch hở","hitRate":"Tỷ lệ trúng","hitsMisses":"Lượt truy cập / Bỏ lỡ","circuitBreakers":"Bộ ngắt mạch","lockedIPs":"IP bị khóa","lockoutsAutoRefreshHint":"Khóa giới hạn tốc độ trên mỗi mô hình • Tự động làm mới 10 giây","lockedCount":"{count, plural, one {# locked} other {# locked}}","timeLeft":"{time} còn lại","howItWorks":"Nó hoạt động như thế nào","howItWorksSubtitle":"Tìm hiểu cách đánh giá xác thực phản hồi LLM của bạn","define":"Xác định","defineStepDescription":"Tạo các trường hợp thử nghiệm với lời nhắc đầu vào và tiêu chí đầu ra dự kiến bằng cách sử dụng các chiến lược như chứa, biểu thức chính quy hoặc đối sánh chính xác.","run":"Chạy","runStepDescription":"Thực hiện các trường hợp kiểm thử đối với điểm cuối LLM của bạn thông qua OmniRoute. Mỗi trường hợp được gửi dưới dạng một yêu cầu API thực sự.","evaluate":"Đánh giá","evaluateStepDescription":"Các câu trả lời được so sánh với các tiêu chí dự kiến. Xem đạt/không đạt cho từng trường hợp với số liệu về độ trễ và phản hồi chi tiết.","evalSuites":"Bộ đánh giá","evalSuitesHint":"Nhấp vào một bộ để xem các trường hợp thử nghiệm, sau đó chạy để đánh giá điểm cuối LLM của bạn","evalsLoading":"Đang tải bộ đánh giá...","noEvalSuitesFound":"Không tìm thấy bộ đánh giá nào","noEvalSuitesDescription":"Bộ đánh giá có thể được xác định thông qua API hoặc bằng mã. Họ kiểm tra kết quả đầu ra của mô hình so với kết quả mong đợi bằng cách sử dụng các chiến lược như chứa, biểu thức chính quy, đối sánh chính xác và các hàm tùy chỉnh.","columnCase":"trường hợp","columnStatus":"Trạng thái","columnLatency":"Độ trễ","columnDetails":"Chi tiết","columnModel":"người mẫu","columnStrategy":"Chiến lược","columnExpected":"Dự kiến","statsSuites":"dãy phòng","statsTestCases":"Trường hợp thử nghiệm","statsModels":"Người mẫu","statsCoverage":"Bảo hiểm","statsStrategiesCount":"{count} chiến lược","evaluationStrategies":"Chiến lược đánh giá","modelsUnderTest":"Mô hình đang được thử nghiệm","searchSuitesPlaceholder":"Bộ tìm kiếm...","passSuffix":"vượt qua","casesCount":"{count, plural, one {# case} other {# cases}}","runEval":"Chạy đánh giá","runningProgress":"Đang chạy {current}/{total}...","passRate":"tỷ lệ đậu","summaryBreakdown":"{passed} đã đạt · {failed} thất bại · tổng cộng {total}","passedIconLabel":"✅ Đạt","failedIconLabel":"❌ Thất bại","detailsContains":"Chứa: \\"{term}\\"","detailsRegex":"Biểu thức chính quy: {pattern}","detailsExpected":"Dự kiến: \\"{expected}\\"","noResultsYet":"Chưa có kết quả","testCasesCount":"Các trường hợp thử nghiệm ({count})","noTestCasesDefined":"Không có trường hợp thử nghiệm nào được xác định","runEvalHint":"Nhấp vào \\"Chạy đánh giá\\" để thực thi tất cả các trường hợp đối với điểm cuối LLM của bạn. Mỗi bài kiểm tra sẽ gửi một yêu cầu thực sự thông qua OmniRoute.","notifyNoTestCases":"Không có trường hợp thử nghiệm nào được xác định cho bộ phần mềm này","notifyAllCasesPassed":"Tất cả {total} trường hợp đã thành công ✅","notifySomeCasesFailed":"{passed}/{total} đã đạt, {failed} không thành công","notifyEvalRunFailed":"Chạy đánh giá không thành công","notifyEvalTitle":"Đánh giá: {name}","modelEvals":"Đánh giá mô hình","evalsHeroDescription":"Kiểm tra và xác thực các điểm cuối LLM của bạn bằng cách chạy các bộ đánh giá được xác định trước. Mỗi bộ chứa các trường hợp thử nghiệm gửi lời nhắc thực sự thông qua OmniRoute và so sánh phản hồi với tiêu chí dự kiến — giúp bạn phát hiện hồi quy, so sánh mô hình và đảm bảo chất lượng phản hồi giữa các nhà cung cấp.","qualityValidation":"Xác nhận chất lượng","modelComparison":"So sánh mô hình","regressionDetection":"Phát hiện hồi quy","latencyBenchmarks":"Điểm chuẩn độ trễ","modelLockouts":"Khóa mô hình","noLockouts":"Hiện không có mẫu nào bị khóa","activeSessions":"Phiên hoạt động","noSessions":"Không có phiên hoạt động nào","sessionsHint":"Phiên xuất hiện khi yêu cầu chảy qua proxy","sessionsTrackedHint":"Được theo dõi thông qua dấu vân tay yêu cầu • Tự động làm mới 5 giây","session":"Phiên","age":"Tuổi","requests":"Yêu cầu","connection":"Kết nối","durationMillisecondsShort":"{value}ms","durationSecondsShort":"{value}s","durationMinutesShort":"{value} phút","durationHoursShort":"{value}h","reasonSeparator":" - ","notAvailableSymbol":"-","providerLimits":"Giới hạn của nhà cung cấp","noProviders":"Không có nhà cung cấp nào được kết nối","connectProvidersForQuota":"Kết nối với nhà cung cấp bằng OAuth để theo dõi giới hạn và mức sử dụng hạn ngạch API của bạn.","accountsCount":"{count, plural, one {# account} other {# accounts}}","filteredFromCount":"(được lọc từ {count})","autoRefresh":"Tự động làm mới","refreshAll":"Làm mới tất cả","loadingQuotas":"Đang tải...","account":"Tài khoản","modelQuotas":"Hạn ngạch mẫu","lastUsed":"Được sử dụng lần cuối","actions":"hành động","refreshQuota":"Làm mới hạn ngạch","today":"hôm nay","tomorrow":"Ngày mai","dayTimeFormat":"{day}, {time}","inDuration":"trong {duration}","notApplicable":"không áp dụng","rawPlanWithValue":"Gói thô: {plan}","noPlanFromProvider":"Không có kế hoạch từ nhà cung cấp","noQuotaData":"Không có dữ liệu hạn ngạch","ungrouped":"Ungrouped","viewFlat":"Flat","viewByEnvironment":"By Environment","noQuotaDataAvailable":"Không có sẵn dữ liệu hạn ngạch","noAccountsForTierFilter":"Không tìm thấy tài khoản nào cho bộ lọc cấp độ","tierAll":"Tất cả","tierEnterprise":"Doanh nghiệp","tierTeam":"đội","tierBusiness":"Kinh doanh","tierUltra":"siêu","tierPro":"chuyên nghiệp","tierPlus":"Cộng thêm","tierFree":"miễn phí","tierUnknown":"Không xác định"},"modals":{"waitingAuth":"Đang chờ cấp phép","verificationUrl":"URL xác minh","yourCode":"Mã của bạn","remoteAccess":"Truy cập từ xa:","connectedSuccess":"Đã kết nối thành công!","connectionFailed":"Kết nối không thành công","chooseAuthMethod":"Chọn phương thức xác thực của bạn:","awsBuilderId":"ID trình tạo AWS","awsIamIdentity":"Trung tâm nhận dạng AWS IAM","googleAccount":"Tài khoản Google","githubAccount":"Tài khoản GitHub","importToken":"Nhập mã thông báo","pasteToken":"Dán mã thông báo làm mới từ Kiro IDE.","awsRegion":"Khu vực AWS","autoDetecting":"Tự động phát hiện mã thông báo...","readingFromCache":"Đọc từ bộ đệm AWS SSO","readingFromCursor":"Đọc từ cơ sở dữ liệu Cursor IDE","initializing":"Đang khởi tạo...","pricingConfig":"Cấu hình giá","loadingPricing":"Đang tải dữ liệu giá...","pricingRatesFormat":"Định dạng giá cước","noPricingData":"Không có dữ liệu giá cả","noModelsFound":"Không tìm thấy mô hình nào"},"loggers":{"allProviders":"Tất cả nhà cung cấp","allModels":"Tất cả các mẫu","allAccounts":"Tất cả tài khoản","allApiKeys":"Tất cả các khóa API","allTypes":"Tất cả các loại","allLevels":"Tất cả các cấp độ","modelAZ":"Mô hình A-Z","modelZA":"Model Z-A","loadingLogs":"Đang tải nhật ký...","loadingProxyLogs":"Đang tải nhật ký proxy...","noLogEntries":"Không tìm thấy mục nhật ký nào","noPayloadData":"Không có dữ liệu tải trọng cho mục nhập nhật ký này.","proxyEvent":"Sự kiện ủy quyền","proxy":"ủy nhiệm","level":"Cấp độ","directNative":"Trực tiếp (gốc)","combo":"kết hợp","inputTokens":"Tôi:","outputTokens":"Ồ:"},"stats":{"usageOverview":"Tổng quan về cách sử dụng","outputTokens":"Mã thông báo đầu ra","totalCost":"Tổng chi phí","usageByModel":"Cách sử dụng theo mẫu","usageByAccount":"Mức sử dụng theo tài khoản","failedToLoad":"Không tải được số liệu thống kê sử dụng.","tokenHealth":"Tình trạng mã thông báo","totalOAuth":"Tổng OAuth","healthy":"khỏe mạnh","warning":"Cảnh báo","errored":"Đã xảy ra lỗi","lastCheck":"Kiểm tra lần cuối","noData":"Không có dữ liệu","share":"Chia sẻ","unableToLoad":"Không thể tải số liệu hệ thống","product":"sản phẩm","resources":"Tài nguyên","company":"Công ty"},"auth":{"welcome":"Chào mừng","signIn":"Đăng nhập","enterPassword":"Nhập mật khẩu của bạn để tiếp tục","password":"Mật khẩu","unifiedProxy":"Proxy API AI hợp nhất","unifiedAiApiProxy":"Proxy API AI hợp nhất","unifiedAiApiProxyDesc":"Định tuyến các yêu cầu đến nhiều nhà cung cấp AI thông qua một điểm cuối duy nhất. Cân bằng tải, chuyển đổi dự phòng và theo dõi sử dụng được tích hợp sẵn.","passwordNotEnabled":"Bảo vệ mật khẩu không được kích hoạt","loading":"Đang tải...","invalidPassword":"Mật khẩu không hợp lệ","errorOccurredRetry":"Đã xảy ra lỗi. Vui lòng thử lại.","configureInstance":"Hãy cấu hình phiên bản OmniRoute của bạn","runOnboardingWizard":"Chạy trình hướng dẫn tích hợp để thiết lập mật khẩu và kết nối với nhà cung cấp AI đầu tiên của bạn.","startOnboarding":"Bắt đầu giới thiệu","secureYourInstance":"Bảo mật phiên bản của bạn","setPasswordDescription":"Đặt mật khẩu để bảo vệ bảng thông tin và bảo mật các điểm cuối API của bạn khỏi bị truy cập trái phép.","configurePassword":"Định cấu hình mật khẩu","continue":"Tiếp tục","windowWillClose":"Cửa sổ này sẽ tự động đóng lại...","closeTabNow":"Bạn có thể đóng tab này ngay bây giờ.","copyUrlManual":"Vui lòng sao chép URL từ thanh địa chỉ và dán vào ứng dụng.","accessDeniedDescription":"Bạn không có quyền truy cập tài nguyên này. Kiểm tra khóa API của bạn hoặc liên hệ với quản trị viên.","goToDashboard":"Đi tới Trang tổng quan","featureMultiProviderTitle":"Đa nhà cung cấp","featureMultiProviderDesc":"OpenAI, Anthropic, Google, v.v.","featureLoadBalancingTitle":"Cân bằng tải","featureLoadBalancingDesc":"Phân phối yêu cầu một cách thông minh","featureUsageTrackingTitle":"Theo dõi sử dụng","featureUsageTrackingDesc":"Theo dõi chi phí và mã thông báo","resetPassword":"Đặt lại mật khẩu","resetDescription":"Chọn một phương pháp để khôi phục quyền truy cập vào trang tổng quan của bạn","stopServer":"Dừng máy chủ OmniRoute","processing":"Đang xử lý...","pleaseWait":"Vui lòng đợi trong khi chúng tôi hoàn tất việc ủy quyền.","authSuccess":"Ủy quyền thành công!","copyUrl":"Sao chép URL này","accessDenied":"Truy cập bị từ chối","methodCliTitle":"Phương pháp 1: Đặt lại CLI","methodCliDescription":"Chạy lệnh sau trên máy chủ nơi OmniRoute đang chạy:","methodCliHint":"Điều này sẽ nhắc bạn đặt mật khẩu mới. Máy chủ phải được dừng trước tiên.","methodManualTitle":"Phương pháp 2: Đặt lại thủ công","methodManualDescription":"Xóa mật khẩu khỏi cơ sở dữ liệu và đặt mật khẩu mới khi khởi động:","setPasswordInYour":"Đặt mật khẩu mới trong","fileLabelSuffix":"tập tin:","newPasswordPlaceholder":"your_new_password","deleteSettingsFile":"Xóa","orRemovePasswordHashField":"hoặc xóa trường mật khẩuHash","restartServerWithNewPassword":"Khởi động lại máy chủ - nó sẽ sử dụng mật khẩu mới","backToLogin":"Quay lại đăng nhập","forgotPassword":"Quên mật khẩu?","defaultPasswordHint":"Default password: 123456 (unless INITIAL_PASSWORD was set)","Authorization":"Ủy quyền","Content-Disposition":"Bố trí nội dung","waitingForAuthorization":"Đang chờ cấp phép...","waitingForGoogleAuthorization":"Đang chờ Google ủy quyền...","waitingForOpenAIAuthorization":"Đang chờ ủy quyền OpenAI...","waitingForAntigravityAuthorization":"Đang chờ ủy quyền chống hấp dẫn...","waitingForIFlowAuthorization":"Đang chờ ủy quyền iFlow...","exchangingCodeForTokens":"Đổi mã lấy token..."},"landing":{"brandName":"OmniRoute","navigateHome":"Điều hướng về nhà","toggleMenu":"Chuyển đổi menu","featuresLink":"Tính năng","docsLink":"Tài liệu","github":"GitHub","versionLive":"v1.0 hiện đang hoạt động","oneEndpoint":"Một điểm cuối cho","allProviders":"Tất cả các nhà cung cấp AI","heroDescription":"Proxy điểm cuối AI với bảng điều khiển web - Cổng JavaScript của CLIProxyAPI. Hoạt động liền mạch với Claude Code, OpenAI Codex, Cline, RooCode và các công cụ CLI khác.","getStarted":"Bắt đầu","viewOnGithub":"Xem trên GitHub","powerfulFeatures":"Tính năng mạnh mẽ","featuresSubtitle":"Mọi thứ bạn cần để quản lý cơ sở hạ tầng AI ở một nơi, được xây dựng theo quy mô.","featureUnifiedEndpointTitle":"Điểm cuối hợp nhất","featureUnifiedEndpointDesc":"Truy cập tất cả các nhà cung cấp thông qua một URL API tiêu chuẩn duy nhất.","featureEasySetupTitle":"Thiết lập dễ dàng","featureEasySetupDesc":"Thiết lập và chạy trong vài phút với lệnh npx.","featureModelFallbackTitle":"Dự phòng mô hình","featureModelFallbackDesc":"Tự động chuyển đổi nhà cung cấp khi có lỗi hoặc độ trễ cao.","featureUsageTrackingTitle":"Theo dõi sử dụng","featureUsageTrackingDesc":"Phân tích chi tiết và giám sát chi phí trên tất cả các mô hình.","featureOAuthApiKeysTitle":"Khóa OAuth & API","featureOAuthApiKeysDesc":"Quản lý an toàn thông tin xác thực trong một kho tiền.","featureCloudSyncTitle":"Đồng bộ đám mây","featureCloudSyncDesc":"Đồng bộ hóa cấu hình của bạn trên các thiết bị ngay lập tức.","featureCliSupportTitle":"Hỗ trợ CLI","featureCliSupportDesc":"Hoạt động với Claude Code, Codex, Cline, Cursor, v.v.","featureDashboardTitle":"Trang tổng quan","featureDashboardDesc":"Bảng điều khiển trực quan để phân tích lưu lượng truy cập theo thời gian thực.","howItWorks":"OmniRoute hoạt động như thế nào","howItWorksDescription":"Dữ liệu được truyền liền mạch từ ứng dụng của bạn thông qua lớp định tuyến thông minh của chúng tôi đến nhà cung cấp tốt nhất cho công việc.","howItWorksStep1Title":"1. CLI & SDK","howItWorksStep1Description":"Yêu cầu của bạn bắt đầu từ các công cụ yêu thích của bạn hoặc SDK hợp nhất của chúng tôi. Chỉ cần thay đổi URL cơ sở.","howItWorksStep2Title":"2. Trung tâm OmniRoute","howItWorksStep2Description":"Công cụ của chúng tôi phân tích lời nhắc, kiểm tra trạng thái của nhà cung cấp và các lộ trình để có độ trễ hoặc chi phí thấp nhất.","howItWorksStep3Title":"3. Nhà cung cấp AI","howItWorksStep3Description":"Yêu cầu được OpenAI, Anthropic, Gemini hoặc những người khác thực hiện ngay lập tức.","getStartedIn30Seconds":"Bắt đầu sau 30 giây","getStartedDescription":"Cài đặt OmniRoute, định cấu hình nhà cung cấp của bạn thông qua bảng điều khiển web và bắt đầu định tuyến các yêu cầu AI.","installOmniRoute":"Cài đặt OmniRoute","installStepDescription":"Chạy lệnh npx để khởi động máy chủ ngay lập tức","openDashboard":"Mở trang tổng quan","openDashboardStepDescription":"Định cấu hình nhà cung cấp và khóa API thông qua giao diện web","routeRequests":"Yêu cầu lộ trình","routeRequestsStepDescription":"Trỏ công cụ CLI của bạn tới {endpoint}","terminal":"thiết bị đầu cuối","copy":"Sao chép","copied":"✓ Sao chép","startingOmniRoute":"Đang khởi động OmniRoute...","serverRunningOnLabel":"Máy chủ đang chạy","dashboardLabel":"Trang tổng quan","readyToRoute":"Sẵn sàng lên đường! ✓","configureProvidersNote":"📝 Định cấu hình nhà cung cấp trong bảng điều khiển hoặc sử dụng biến môi trường","dataLocation":"Vị trí dữ liệu:","dataLocationMacLinux":" macOS/Linux:","dataLocationWindows":" Windows:","product":"sản phẩm","dashboardLink":"Trang tổng quan","changelog":"Nhật ký thay đổi","resources":"Tài nguyên","documentation":"Tài liệu","npm":"NPM","legal":"pháp lý","mitLicense":"Giấy phép MIT","footerTagline":"Điểm cuối thống nhất để tạo AI. Kết nối, định tuyến và quản lý các nhà cung cấp AI của bạn một cách dễ dàng.","copyright":"© {year} OmniRoute. Mọi quyền được bảo lưu.","flowToolClaudeCode":"Mã Claude","flowToolOpenAICodex":"Codex OpenAI","flowToolCline":"Cline","flowToolCursor":"Con trỏ","flowProviderOpenAI":"OpenAI","flowProviderAnthropic":"nhân loại","flowProviderGemini":"Song Tử","flowProviderGithubCopilot":"Phi công phụ GitHub","interactiveDiagram":"Sơ đồ tương tác hiển thị trên màn hình","ctaTitle":"Sẵn sàng đơn giản hóa cơ sở hạ tầng AI của bạn?","ctaDescription":"Tham gia cùng các nhà phát triển đang hợp lý hóa việc tích hợp AI của họ với OmniRoute. Nguồn mở và miễn phí để bắt đầu.","startFree":"Bắt đầu miễn phí","readDocumentation":"Đọc tài liệu"},"docs":{"title":"Tài liệu","quickStart":"Bắt đầu nhanh","features":"Tính năng","supportedProviders":"Nhà cung cấp được hỗ trợ","supportedProvidersToc":"Nhà cung cấp","commonUseCases":"Các trường hợp sử dụng phổ biến","clientCompatibility":"Khả năng tương thích của khách hàng","protocolsToc":"Protocols","apiReference":"Tham chiếu API","method":"phương pháp","path":"Đường dẫn","notes":"Ghi chú","modelPrefixes":"Tiền tố mẫu","prefix":"Tiền tố","troubleshooting":"Khắc phục sự cố","supportsChat":"Hỗ trợ cả điểm cuối trò chuyện và phản hồi.","oauthAutoRefresh":"Kết nối OAuth với tính năng làm mới mã thông báo tự động.","fullStreaming":"Hỗ trợ phát trực tuyến đầy đủ cho tất cả các kiểu máy.","docsLabel":"Tài liệu","docsHeroDescription":"Cổng AI cho LLM đa nhà cung cấp. Một điểm cuối cho OpenAI, Anthropic, Gemini, GitHub Copilot, Claude Code, Cursor và hơn 20 nhà cung cấp khác.","openDashboard":"Mở trang tổng quan","endpointPage":"Trang điểm cuối","github":"GitHub","reportIssue":"Báo cáo vấn đề","onThisPage":"Trên trang này","documentationVersion":"Tài liệu - v{version}","quickStartStep1Title":"1. Cài đặt và chạy","quickStartStep1Prefix":"Chạy","quickStartStep1Middle":"hoặc sao chép từ GitHub và chạy","quickStartStep2Title":"2. Tạo khóa API","quickStartStep2Text":"Đi tới Điểm cuối -> Khóa đã đăng ký. Tạo một khóa cho mỗi môi trường.","quickStartStep3Title":"3. Kết nối nhà cung cấp","quickStartStep3Text":"Thêm tài khoản nhà cung cấp thông qua thông tin đăng nhập OAuth, khóa API hoặc tự động kết nối bậc miễn phí.","quickStartStep4Title":"4. Đặt URL cơ sở khách hàng","quickStartStep4Prefix":"Trỏ ứng dụng khách IDE hoặc API của bạn tới","quickStartStep4Suffix":"Sử dụng tiền tố nhà cung cấp, ví dụ","featureRoutingTitle":"Định tuyến nhiều nhà cung cấp","featureRoutingText":"Định tuyến yêu cầu đến hơn 30 nhà cung cấp AI thông qua một điểm cuối tương thích với OpenAI. Hỗ trợ API trò chuyện, phản hồi, âm thanh và hình ảnh.","featureCombosTitle":"Combo và cân bằng","featureCombosText":"Tạo các tổ hợp mô hình với chuỗi dự phòng và chiến lược cân bằng: luân phiên, ưu tiên, ngẫu nhiên, ít sử dụng nhất và tối ưu hóa chi phí.","featureUsageTitle":"Theo dõi việc sử dụng và chi phí","featureUsageText":"Đếm mã thông báo theo thời gian thực, tính toán chi phí cho mỗi nhà cung cấp/mô hình và phân tích mức sử dụng chi tiết theo khóa và tài khoản API.","featureAnalyticsTitle":"Trang tổng quan phân tích","featureAnalyticsText":"Phân tích trực quan với biểu đồ về yêu cầu, mã thông báo, lỗi, độ trễ, chi phí và mức độ phổ biến của mô hình theo thời gian.","featureHealthTitle":"Theo dõi sức khỏe","featureHealthText":"Kiểm tra tình trạng trực tiếp, trạng thái nhà cung cấp, trạng thái ngắt mạch và phát hiện giới hạn tốc độ tự động với thời gian chờ theo cấp số nhân.","featureCliTitle":"Công cụ CLI","featureCliText":"Quản lý cấu hình IDE, xuất/nhập bản sao lưu, khám phá cấu hình codex và định cấu hình cài đặt từ bảng điều khiển.","featureSecurityTitle":"Bảo mật và chính sách","featureSecurityText":"Xác thực khóa API, lọc IP, bảo vệ tiêm nhắc nhở, chính sách miền, quản lý phiên và ghi nhật ký kiểm tra.","featureCloudSyncTitle":"Đồng bộ đám mây","featureCloudSyncText":"Đồng bộ hóa cấu hình của bạn với Cloudflare Workers để truy cập từ xa bằng thông tin xác thực được mã hóa và chuyển đổi dự phòng tự động.","providersAcrossConnectionTypes":"{count} nhà cung cấp trên ba loại kết nối.","manageProviders":"Quản lý nhà cung cấp","providersCount":"{count} nhà cung cấp","providerTypeFree":"Bậc miễn phí","providerTypeOAuth":"OAuth","providerTypeApiKey":"Khóa API","useCaseSingleEndpointTitle":"Điểm cuối duy nhất cho nhiều nhà cung cấp","useCaseSingleEndpointText":"Trỏ máy khách đến một URL cơ sở và định tuyến theo tiền tố mô hình (ví dụ: gh/, cc/, kr/, openai/).","useCaseFallbackTitle":"Dự phòng và chuyển đổi mô hình bằng combo","useCaseFallbackText":"Tạo các mô hình kết hợp trong Bảng điều khiển và giữ cấu hình máy khách ổn định trong khi các nhà cung cấp luân chuyển nội bộ.","useCaseUsageVisibilityTitle":"Khả năng hiển thị cách sử dụng, chi phí và gỡ lỗi","useCaseUsageVisibilityText":"Theo dõi mã thông báo và chi phí theo nhà cung cấp, tài khoản và khóa API trong tab Sử dụng và Phân tích.","clientCherryStudioTitle":"Xưởng Anh Đào","baseUrlLabel":"URL cơ sở","chatEndpointLabel":"Điểm cuối trò chuyện","modelRecommendationLabel":"Đề xuất mô hình: tiền tố rõ ràng","clientCodexTitle":"Mô hình phi công phụ Codex / GitHub","clientCodexBullet1":"Sử dụng ID mẫu với","clientCodexBullet2":"Các mô hình dòng Codex tự động định tuyến tới","clientCodexBullet3":"Các mô hình không phải Codex vẫn tiếp tục","clientCursorTitle":"IDE con trỏ","clientCursorBullet1":"sử dụng","clientCursorBullet1Suffix":"tiền tố cho các mô hình Con trỏ.","clientCursorBullet2":"Kết nối OAuth - đăng nhập từ trang Nhà cung cấp.","clientClaudeTitle":"Mật mã Claude/Phản trọng lực","clientClaudeBullet1Prefix":"sử dụng","clientClaudeBullet1Middle":"(Claude) hoặc","clientClaudeBullet1Suffix":"(Phản trọng lực) tiền tố.","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":"Sử dụng MCP qua stdio để cho phép khách hàng khám phá và gọi các công cụ OmniRoute với khả năng hiển thị kiểm tra.","protocolMcpStep1":"Bắt đầu vận chuyển MCP với `omniroute --mcp`.","protocolMcpStep2":"Trỏ máy khách MCP của bạn tới dịch vụ vận chuyển stdio.","protocolMcpStep3":"Gọi `omniroute_get_health` và `omniroute_list_combos` để xác thực kết nối.","protocolA2aTitle":"A2A (Đại lý2Agent)","protocolA2aDesc":"Sử dụng A2A JSON-RPC để gửi tác vụ một cách đồng bộ hoặc thông qua truyền phát SSE.","protocolA2aStep1":"Đọc `/.well-known/agent.json` để khám phá tác nhân.","protocolA2aStep2":"Gửi yêu cầu `message/send` hoặc `message/stream` tới `POST /a2a`.","protocolA2aStep3":"Quản lý vòng đời tác vụ với `tasks/get` và `tasks/cancel`.","protocolTroubleshootingTitle":"Khắc phục sự cố giao thức","protocolTroubleshooting1":"Nếu trạng thái MCP ngoại tuyến, hãy xác minh quy trình stdio đang chạy và tệp nhịp tim đang cập nhật.","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":"Điểm cuối trò chuyện tương thích với OpenAI (mặc định).","endpointResponsesNote":"Điểm cuối API phản hồi (Codex, o-series).","endpointModelsNote":"Danh mục mô hình cho tất cả các nhà cung cấp được kết nối.","endpointAudioNote":"Phiên âm âm thanh (Deepgram, AssemblyAI).","endpointImagesNote":"Tạo hình ảnh (NanoBanana).","endpointRewriteChatNote":"Viết lại trình trợ giúp cho khách hàng không có /v1.","endpointRewriteResponsesNote":"Viết lại trình trợ giúp cho Phản hồi không có /v1.","endpointRewriteModelsNote":"Viết lại trình trợ giúp để khám phá mô hình mà không cần /v1.","modelPrefixesDescriptionStart":"Sử dụng tiền tố nhà cung cấp trước tên mẫu máy để định tuyến đến một nhà cung cấp cụ thể. Ví dụ:","modelPrefixesDescriptionEnd":"định tuyến đến GitHub Copilot.","provider":"nhà cung cấp","type":"loại","troubleshootingModelRouting":"Nếu máy khách không định tuyến được mô hình, hãy sử dụng nhà cung cấp/mô hình rõ ràng (ví dụ: gh/gpt-5.1-codex).","troubleshootingAmbiguousModels":"Nếu bạn nhận được lỗi mô hình không rõ ràng, hãy chọn tiền tố nhà cung cấp thay vì ID mô hình trần.","troubleshootingCodexFamily":"Đối với các mô hình dòng GitHub Codex, hãy giữ mô hình là gh/codex-model; bộ định tuyến chọn/phản hồi tự động.","troubleshootingTestConnection":"Sử dụng Trang tổng quan > Nhà cung cấp > Kiểm tra kết nối trước khi thử nghiệm từ IDE hoặc ứng dụng khách bên ngoài.","troubleshootingCircuitBreaker":"Nếu nhà cung cấp hiển thị cầu dao đang mở, hãy đợi thời gian hồi chiêu hoặc kiểm tra trang Sức khỏe để biết chi tiết.","troubleshootingOAuth":"Đối với nhà cung cấp OAuth, hãy xác thực lại nếu mã thông báo hết hạn. Kiểm tra chỉ báo trạng thái thẻ nhà cung cấp.","managementApiReference":"Management API Reference","managementApiDescription":"Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.","mgmtProxiesListNote":"List saved proxy registry items (supports pagination).","mgmtProxiesCreateNote":"Create a reusable proxy item in the registry.","mgmtProxiesHealthNote":"Get 24h/rolling health metrics per saved proxy from proxy logs.","mgmtProxiesBulkAssignNote":"Assign or clear one proxy across many scope IDs in one request.","mgmtAssignmentsListNote":"List proxy assignments by scope, scope_id, or proxy_id.","mgmtAssignmentsUpdateNote":"Assign or clear proxy for global/provider/account/combo scope.","mgmtLegacyMigrationNote":"Import legacy proxyConfig maps into registry assignments.","endpointSpeechNote":"Tạo văn bản thành giọng nói (ElevenLabs, OpenAI TTS).","endpointEmbeddingsNote":"Tạo nhúng văn bản (OpenAI, Cohere, Voyage)."},"legal":{"privacyPolicy":"Chính sách bảo mật","termsOfService":"Điều khoản dịch vụ","providerConfigurations":"Cấu hình nhà cung cấp","apiKeys":"Khóa API","usageLogs":"Nhật ký sử dụng","applicationSettings":"Cài đặt ứng dụng","viewExportAnalytics":"Xem và xuất phân tích sử dụng","clearHistory":"Xóa lịch sử sử dụng bất cứ lúc nào","configureRetention":"Định cấu hình chính sách lưu giữ nhật ký","backupRestore":"Sao lưu và khôi phục cơ sở dữ liệu của bạn","privacyMetadataTitle":"Chính sách bảo mật | OmniRoute","privacyMetadataDescription":"Chính sách quyền riêng tư dành cho bộ định tuyến proxy OmniRoute AI API.","termsMetadataTitle":"Điều khoản dịch vụ | OmniRoute","termsMetadataDescription":"Điều khoản dịch vụ dành cho bộ định tuyến proxy OmniRoute AI API.","backToHome":"Trở về nhà","lastUpdated":"Cập nhật lần cuối: {date}","policyLastUpdatedDate":"Ngày 13 tháng 2 năm 2026","listSeparator":"-","questionsVisit":"Câu hỏi? Ghé thăm của chúng tôi","githubRepository":"Kho lưu trữ GitHub","privacySection1Title":"1. Kiến trúc địa phương đầu tiên","privacySection1Text":"OmniRoute được thiết kế như một ứng dụng cục bộ đầu tiên. Tất cả quá trình xử lý và lưu trữ dữ liệu diễn ra hoàn toàn trên máy của bạn. Không có máy chủ tập trung thu thập thông tin của bạn.","privacySection2Title":"2. Dữ liệu chúng tôi lưu trữ","privacyDataStoredIn":"Dữ liệu sau được lưu trữ cục bộ trong","privacyDataProviderConfigurationsDesc":"URL kết nối, loại nhà cung cấp và cài đặt ưu tiên","privacyDataApiKeysDesc":"được mã hóa và lưu trữ cục bộ để xác thực với các nhà cung cấp AI","privacyDataUsageLogsDesc":"số lượng yêu cầu, mức sử dụng mã thông báo, tên mô hình, dấu thời gian và thời gian phản hồi","privacyDataApplicationSettingsDesc":"tùy chọn chủ đề, chiến lược định tuyến và cấu hình kết hợp","privacySection3Title":"3. Không đo từ xa","privacySection3Text":"OmniRoute không thu thập báo cáo đo từ xa, phân tích hoặc sự cố. Không có dữ liệu nào được gửi cho chúng tôi hoặc bất kỳ bên thứ ba nào. Kiểu sử dụng, lệnh gọi API và cấu hình của bạn vẫn hoàn toàn ở chế độ riêng tư.","privacySection4Title":"4. Nhà cung cấp AI bên thứ ba","privacySection4Text":"Khi bạn thực hiện lệnh gọi API thông qua OmniRoute, yêu cầu của bạn sẽ được chuyển tiếp đến nhà cung cấp AI mà bạn đã định cấu hình (ví dụ: OpenAI, Anthropic, Google). Các nhà cung cấp này có chính sách bảo mật riêng chi phối cách họ xử lý dữ liệu của bạn. Vui lòng xem lại:","privacyOpenAiPolicy":"Chính sách quyền riêng tư của OpenAI","privacyAnthropicPolicy":"Chính sách về quyền riêng tư của Anthropic","privacyGooglePolicy":"Chính sách bảo mật của Google","privacySection5Title":"5. Đồng bộ hóa đám mây (Tùy chọn)","privacySection5Text":"Nếu bạn bật tính năng đồng bộ hóa đám mây tùy chọn, cấu hình nhà cung cấp và khóa API có thể được truyền đến điểm cuối đám mây đã định cấu hình. Tính năng này bị tắt theo mặc định và yêu cầu chọn tham gia rõ ràng.","privacySection6Title":"6. Ghi nhật ký","privacyLoggingIntro":"Nhật ký yêu cầu có thể được cấu hình thông qua cài đặt bảng điều khiển. Bạn có thể:","privacySection7Title":"7. Quyền của bạn","privacySection7TextStart":"Vì tất cả dữ liệu được lưu trữ cục bộ nên bạn có toàn quyền kiểm soát. Bạn có thể xóa dữ liệu của mình bất kỳ lúc nào bằng cách xóa","privacySection7TextEnd":"thư mục hoặc sử dụng tính năng sao lưu và khôi phục cơ sở dữ liệu trong bảng điều khiển.","termsSection1Title":"1. Tổng quan","termsSection1Text":"OmniRoute là bộ định tuyến proxy AI API cục bộ đầu tiên hoạt động hoàn toàn trên máy của bạn. Nó định tuyến các yêu cầu đến nhiều nhà cung cấp AI với tính năng cân bằng tải, chuyển đổi dự phòng và theo dõi việc sử dụng.","termsSection2Title":"2. Trách nhiệm của Người dùng","termsResponsibilityApiKeys":"Bạn hoàn toàn chịu trách nhiệm quản lý khóa API và thông tin đăng nhập của riêng mình cho các nhà cung cấp AI bên thứ ba (OpenAI, Anthropic, Google, v.v.).","termsResponsibilityCompliance":"Bạn phải tuân thủ các điều khoản dịch vụ của từng nhà cung cấp AI có API mà bạn truy cập thông qua OmniRoute.","termsResponsibilitySecurity":"Bạn chịu trách nhiệm về tính bảo mật của cài đặt OmniRoute cục bộ của mình, bao gồm đặt mật khẩu và hạn chế quyền truy cập mạng.","termsSection3Title":"3. Nó hoạt động như thế nào","termsSection3Text":"OmniRoute hoạt động như một proxy trung gian. Các lệnh gọi API gửi tới OmniRoute sẽ được dịch và chuyển tiếp đến các nhà cung cấp AI đã định cấu hình của bạn. OmniRoute không sửa đổi nội dung yêu cầu hoặc phản hồi của bạn ngoài bản dịch giao thức cần thiết.","termsSection4Title":"4. Xử lý dữ liệu","termsDataStoredLocally":"Tất cả dữ liệu được lưu trữ cục bộ trên máy của bạn trong cơ sở dữ liệu SQLite.","termsNoTransmission":"OmniRoute không truyền bất kỳ dữ liệu nào đến các máy chủ bên ngoài trừ khi bạn bật rõ ràng các tính năng đồng bộ hóa trên đám mây.","termsDataLocationText":"Nhật ký sử dụng, khóa API và cấu hình được lưu trữ trong","termsSection5Title":"5. Tuyên bố từ chối trách nhiệm","termsSection5Text":"OmniRoute được cung cấp \\"nguyên trạng\\" mà không có bất kỳ hình thức bảo hành nào. Chúng tôi không chịu trách nhiệm về bất kỳ chi phí nào phát sinh do sử dụng API, gián đoạn dịch vụ hoặc mất dữ liệu. Luôn duy trì bản sao lưu cấu hình của bạn.","termsSection6Title":"6. Nguồn mở","termsSection6Text":"OmniRoute là phần mềm mã nguồn mở. Bạn có thể tự do kiểm tra, sửa đổi và phân phối nó theo các điều khoản trong giấy phép."},"endpoints":{"tabProxy":"Endpoint Proxy","tabApiEndpoints":"API Endpoints","apiEndpointsTitle":"API Endpoints","apiEndpointsDescription":"Backend API endpoints that can be consumed by other applications and services. This section will list all available REST APIs with documentation and testing capabilities.","comingSoon":"Coming Soon","plannedFeatures":"Planned Features","featureRestApi":"REST API endpoint catalog with interactive documentation","featureWebhooks":"Webhook configuration and event subscriptions","featureSwagger":"OpenAPI / Swagger spec auto-generation","featureAuth":"API key and OAuth scope management per endpoint"},"agents":{"title":"CLI Agents","description":"Discover installed CLI agents on your system. Add custom agents for auto-detection.","refresh":"Refresh","installed":"Installed","notFound":"Not Found","builtIn":"Built-in","custom":"Custom","remove":"Remove","addCustomAgent":"Add Custom Agent","addCustomAgentDesc":"Register any CLI tool for detection. It will be scanned automatically on refresh.","agentName":"Agent Name","binaryName":"Binary Name","versionCommand":"Version Command","spawnArgs":"Spawn Args","addAgent":"Add Agent","scanning":"Scanning system for CLI agents...","opencodeIntegration":"OpenCode Integration","opencodeDetected":"opencode {version} detected","opencodeDesc":"Generate a ready-to-use {configFile} with your OmniRoute base URL and all available models — drop it in your project root and run {command}.","downloadConfig":"Download {file}","downloaded":"Downloaded!","setupGuideTitle":"Setup guide","openCliTools":"Open CLI Tools","setupGuideDetectCliTitle":"Detect installed CLIs","setupGuideDetectCliDesc":"Click Refresh after installing or updating a CLI so OmniRoute can rescan binaries and versions.","setupGuideCustomAgentTitle":"Register custom binary","setupGuideCustomAgentDesc":"Use Add Custom Agent when your CLI is not in the built-in list. Provide binary name and version command.","setupGuideCommandMissingTitle":"Fix \'command not found\'","setupGuideCommandMissingDesc":"Ensure the CLI command exists in PATH, open a new terminal session, and rerun Refresh."},"autoCombo":{"title":"Auto-Combo Engine","statusNormal":"Normal","statusIncident":"Incident Mode","modePack":"Mode Pack","providerScores":"Provider Scores","noAutoCombo":"No auto-combo configured.","excludedProviders":"Excluded Providers","noExclusions":"No providers currently excluded.","factorQuota":"Quota","factorHealth":"Health","factorCost":"Cost","factorLatency":"Latency","factorTaskFit":"Task Fit","factorStability":"Stability","factorTierPriority":"Tier Priority","factorTierPriorityDesc":"Prefers accounts with higher quota tiers (Ultra/Pro over Free)","scoreFactorBreakdown":"Scoring Factors","modePackShipFast":"Ship Fast","modePackCostSaver":"Cost Saver","modePackQualityFirst":"Quality First","modePackOfflineFriendly":"Offline Friendly"},"search":{"searchQuery":"Search Query","searchResults":"Search Results","cachedResult":"Cached","searchCost":"Cost","searchTools":"Search Tools","searchToolsDesc":"Advanced search testing with provider comparison","compareProviders":"Compare Providers","rerankResults":"Rerank Results","searchHistory":"Search History","urlOverlap":"URL Overlap","noSearchProviders":"No search providers configured. Add providers in Settings.","noRerankModels":"No rerank model available","webSearch":"Web Search","provider":"Provider","searchType":"Search Type","maxResults":"Max Results","filters":"Filters","country":"Country","language":"Language","timeRange":"Time Range","includeDomains":"Include Domains","excludeDomains":"Exclude Domains","safeSearch":"Safe Search","formatted":"Formatted","rawJson":"JSON","cacheMiss":"cache miss","cacheHit":"cache hit","latency":"Latency","cost":"Cost","results":"Results","rerank":"Rerank","rerankModel":"Rerank Model","positionDelta":"Position Change","emptyState":"Send a search query to see results","safeSearchOff":"Off","safeSearchModerate":"Moderate","safeSearchStrict":"Strict","queryPlaceholder":"Enter search query...","providerAuto":"auto (cheapest)","searchTypeWeb":"web","searchTypeNews":"news","optionAny":"any","timeRangeDay":"Past day","timeRangeWeek":"Past week","timeRangeMonth":"Past month","timeRangeYear":"Past year","domainPlaceholder":"example.com","requestTimedOut":"Request timed out ({seconds}s)","networkError":"Network error"},"templateNames":{"simple-chat":"Trò chuyện đơn giản","streaming":"Truyền phát","system-prompt":"Lời nhắc hệ thống","thinking":"suy nghĩ","tool-calling":"Gọi công cụ","multi-turn":"Nhiều lượt"},"templateDescriptions":{"simple-chat":"Mẫu chat cơ bản kèm tin nhắn hệ thống","streaming":"Mẫu để truyền phát phản hồi","system-prompt":"Mẫu có lời nhắc hệ thống tùy chỉnh","thinking":"Mẫu có ngân sách lý luận/suy nghĩ","tool-calling":"Mẫu để gọi công cụ/chức năng","multi-turn":"Mẫu hội thoại nhiều lượt"},"templatePayloads":{"simpleChat":{"system":"Bạn là một trợ lý AI hữu ích.","userGreeting":"Xin chào! Hôm nay tôi có thể giúp gì cho bạn?"},"streaming":{"prompt":"Viết một câu chuyện về"},"systemPrompt":{"question":"Ý nghĩa của cuộc sống là gì?","systemInstruction":"Đưa ra một câu trả lời sâu sắc và mang tính triết lý."},"thinking":{"question":"Giải thích tính toán lượng tử"},"toolCalling":{"cityNameDescription":"Tên của thành phố để biết thời tiết","toolDescription":"Nhận thời tiết hiện tại cho một địa điểm","userWeather":"Thời tiết ở Tokyo thế nào?"},"multiTurn":{"system":"Bạn là một trợ lý hữu ích.","assistantExample":"Tôi rất vui được giúp bạn việc đó.","userInitial":"Tôi cần giúp đỡ với","userFollowUp":"Bạn có thể giải thích về điều đó?"}},"cache":{"title":"Cache Management","description":"Monitor and manage semantic response cache, hit rates, and token savings.","refresh":"Refresh","clearAll":"Clear All","memoryEntries":"Memory Entries","dbEntries":"DB Entries","cacheHits":"Cache Hits","tokensSaved":"Tokens Saved","hitRate":"Hit Rate","performance":"Cache Performance","behavior":"Cache Behavior","idempotency":"Idempotency Layer","clearSuccess":"Cache cleared. {count} expired entries removed.","clearError":"Failed to clear cache.","unavailable":"Cache unavailable","unavailableDesc":"Could not fetch cache statistics. Make sure the server is running.","memoryEntriesSub":"In-memory LRU","dbEntriesSub":"Persisted (SQLite)","cacheHitsSub":"of {total} total","tokensSavedSub":"Estimated from hits","autoRefresh":"Auto-refreshes every {seconds}s","hits":"Hits","misses":"Misses","total":"Total","behaviorDeterministic":"Only non-streaming requests with temperature=0 are cached.","behaviorBypass":"Bypass with header {header}.","behaviorTwoTier":"Two-tier storage: in-memory LRU (fast) + SQLite (persistent across restarts).","behaviorTtl":"Default TTL: 30 minutes. Configure via {envVar}.","activeDedupKeys":"Active Dedup Keys","dedupWindow":"Dedup Window"}}'))}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_i18n_messages_vi_json_03ec9dfd._.js.map
|