mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-10 17:22:17 +03:00
fix(i18n): completes Vietnamese parity, fixes empty migration query
Two more release/v3.8.50 base-red items, both surfaced while chasing CI failures on unrelated PRs: - vi.json was missing 8 keys that #9539 (NewAPI/Sub2API aggregator balance) added to en.json without a matching i18n:sync-ui run — pt-BR.json already had all 8, only Vietnamese drifted. Added translations for the 6 provider-settings strings, the feature-flag description, and the quota tooltip; verified against tests/unit/i18n-vi-completeness.test.ts (parity, placeholder preservation, ICU parse — all 5 assertions pass). - src/lib/db/migrations/120_interception_rules.sql was pure comments documenting a no-schema-change key_value namespace, with no executable SQL statement — the migration runner logged "FAILED: 120_interception_rules — Query contained no valid SQL statement" on every fresh DB init. 118_provider_param_filters.sql (same pattern, two migrations earlier) already ends with a bare `SELECT 1;` no-op for exactly this reason; 120 was just missing it. Verified directly against better-sqlite3 that the file now executes without error.
This commit is contained in:
committed by
diegosouzapw
parent
279cc87137
commit
52b53911e1
@@ -937,7 +937,7 @@
|
||||
"disabled": "Đã tắt",
|
||||
"featureFlagOmnirouteEmergencyFallbackDescription": "Định tuyến các yêu cầu đã hết ngân sách đến nhà cung cấp/mô hình dự phòng khẩn cấp miễn phí.",
|
||||
"featureFlagArenaEloSyncEnabledDescription": "Bật đồng bộ ELO định kỳ từ bảng xếp hạng Arena AI để xếp hạng năng lực của mô hình.",
|
||||
"featureFlagExposeCcDiscoveryAliasesDescription": "Công bố các id phản chiếu claude/<provider>/<model> trên /v1/models để tính năng khám phá mô hình qua gateway của Claude Code liệt kê được các mô hình không phải Claude. Cảnh báo: khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.",
|
||||
"featureFlagExposeCcDiscoveryAliasesDescription": "Công bố các id phản chiếu claude/<provider>/<model> trên /v1/models để tính năng khám phá mô hình qua gateway của Claude Code liệt kê được các mô hình không phải Claude. Cảnh báo: khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.",
|
||||
"sidebar": {
|
||||
"home": "Trang chủ",
|
||||
"dashboard": "Trang tổng quan",
|
||||
@@ -1094,8 +1094,6 @@
|
||||
"costsFreeTiersSubtitle": "Hạn mức token miễn phí hàng tháng",
|
||||
"freeProviderRankings": "Xếp hạng nhà cung cấp miễn phí",
|
||||
"freeProviderRankingsSubtitle": "Các nhà cung cấp miễn phí tốt nhất được xếp hạng theo điểm ELO của mô hình",
|
||||
"radar": "Danh mục Radar",
|
||||
"radarSubtitle": "Danh mục mô hình miễn phí được làm phong phú bởi cộng đồng",
|
||||
"costsQuotaShare": "Chia sẻ hạn mức",
|
||||
"costsPricing": "Định giá",
|
||||
"logsProxy": "Nhật ký proxy",
|
||||
@@ -1121,7 +1119,6 @@
|
||||
"runtime": "Thời gian chạy",
|
||||
"consoleLogs": "Nhật ký bảng điều khiển",
|
||||
"logsTimeline": "Timeline",
|
||||
"logsTimelineSubtitle": "Dòng thời gian yêu cầu trực quan",
|
||||
"globalRouting": "Định tuyến toàn cục",
|
||||
"mitmProxy": "MITM Proxy",
|
||||
"oneProxy": "1Proxy",
|
||||
@@ -1167,6 +1164,7 @@
|
||||
"logsSubtitle": "Nhật ký ứng dụng",
|
||||
"logsProxySubtitle": "Nhật ký lưu lượng proxy",
|
||||
"consoleLogsSubtitle": "Đầu ra bảng điều khiển",
|
||||
"logsTimelineSubtitle": "Dòng thời gian yêu cầu trực quan",
|
||||
"logsActivitySubtitle": "Nhật ký hoạt động người dùng",
|
||||
"healthSubtitle": "Kiểm tra tình trạng hệ thống",
|
||||
"costsPricingSubtitle": "Quy tắc định giá theo từng mô hình",
|
||||
@@ -1232,7 +1230,9 @@
|
||||
"alwaysVisible": "Luôn hiển thị",
|
||||
"groupSeparatorLabel": "Dấu phân cách",
|
||||
"discovery": "Khám phá",
|
||||
"discoverySubtitle": "Quét các nhà cung cấp để tìm quyền truy cập miễn phí"
|
||||
"discoverySubtitle": "Quét các nhà cung cấp để tìm quyền truy cập miễn phí",
|
||||
"radar": "Danh mục Radar",
|
||||
"radarSubtitle": "Danh mục mô hình miễn phí được làm phong phú bởi cộng đồng"
|
||||
},
|
||||
"webhooks": {
|
||||
"title": "Webhook",
|
||||
@@ -2513,14 +2513,6 @@
|
||||
"auto": "Tự động",
|
||||
"always": "Luôn bật"
|
||||
},
|
||||
"ccDiscoveryInfoButton": "Cách bật khám phá mô hình trong Claude Code",
|
||||
"ccDiscoveryInfoTooltip": "Công bố các mô hình không phải Claude dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.",
|
||||
"ccDiscoveryInfoLink": "Mở Feature Flags",
|
||||
"ccOnboardingTitle": "settings.json cho việc khám phá mô hình qua gateway",
|
||||
"ccOnboardingCopy": "Sao chép",
|
||||
"ccOnboardingCopied": "Đã sao chép",
|
||||
"ccOnboardingKeyPlaceholder": "<khóa API OmniRoute của bạn>",
|
||||
"ccOnboardingWindowNote": "Claude Code mặc định coi mọi id mô hình mà nó không nhận ra là có cửa sổ ngữ cảnh 200K. Với mô hình có cửa sổ thực tế khác, hãy thêm CLAUDE_CODE_AUTO_COMPACT_WINDOW ngay bên dưới để việc nén ngữ cảnh tự động không kích hoạt quá sớm.",
|
||||
"failedSave": "Không thể lưu",
|
||||
"profileSyncTitle": "Tự động đồng bộ hồ sơ CLI",
|
||||
"profileSyncDescription": "Sau khi đồng bộ mô hình của nhà cung cấp, tự động tạo lại hồ sơ công cụ CLI từ danh mục trực tiếp. Mặc định tắt — chỉ ghi các file hồ sơ, tuyệt đối không thay đổi cấu hình đang dùng hoặc cấu hình mặc định.",
|
||||
@@ -2977,7 +2969,15 @@
|
||||
"copilotPasteInto": "Dán vào:",
|
||||
"copilotReloadInstruction": "Sau đó tải lại VS Code và nhập khóa API khi được yêu cầu.",
|
||||
"wireApiChatCompletions": "Chat Completions (/chat/completions)",
|
||||
"wireApiResponses": "Responses API (/responses)"
|
||||
"wireApiResponses": "Responses API (/responses)",
|
||||
"ccDiscoveryInfoButton": "Cách bật khám phá mô hình trong Claude Code",
|
||||
"ccDiscoveryInfoTooltip": "Công bố các mô hình không phải Claude dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Khi bật ở phạm vi toàn cục, số mục trong danh mục tăng gấp đôi với mọi client.",
|
||||
"ccDiscoveryInfoLink": "Mở Feature Flags",
|
||||
"ccOnboardingTitle": "settings.json cho việc khám phá mô hình qua gateway",
|
||||
"ccOnboardingCopy": "Sao chép",
|
||||
"ccOnboardingCopied": "Đã sao chép",
|
||||
"ccOnboardingKeyPlaceholder": "<khóa API OmniRoute của bạn>",
|
||||
"ccOnboardingWindowNote": "Claude Code mặc định coi mọi id mô hình mà nó không nhận ra là có cửa sổ ngữ cảnh 200K. Với mô hình có cửa sổ thực tế khác, hãy thêm CLAUDE_CODE_AUTO_COMPACT_WINDOW ngay bên dưới để việc nén ngữ cảnh tự động không kích hoạt quá sớm."
|
||||
},
|
||||
"combos": {
|
||||
"title": "Combo",
|
||||
@@ -5201,18 +5201,6 @@
|
||||
"interceptFetchHint": "Ghi đè các lệnh gọi công cụ web_fetch gốc sang /v1/web/fetch của OmniRoute.",
|
||||
"interceptionLoadError": "Không thể tải cài đặt chặn: {error}",
|
||||
"interceptionSaveError": "Không thể lưu cài đặt chặn: {error}",
|
||||
"ccAliasSectionTitle": "Hiển thị trong Claude Code (claude/…)",
|
||||
"ccAliasSectionHint": "Công bố các mô hình của nhà cung cấp này dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Mặc định tắt — bật lên sẽ nhân đôi số mục trong danh mục với mọi client.",
|
||||
"ccAliasProviderLevelLabel": "Mặc định của nhà cung cấp",
|
||||
"ccAliasModelOverridesLabel": "Ghi đè theo từng mô hình",
|
||||
"ccAliasModelOverrideAriaLabel": "Ghi đè cho {modelId}",
|
||||
"ccAliasStateInherit": "Kế thừa",
|
||||
"ccAliasStateOn": "Bật",
|
||||
"ccAliasStateOff": "Tắt",
|
||||
"ccAliasAddModelPlaceholder": "Id mô hình (ví dụ: gpt-4o)",
|
||||
"ccAliasAddModelButton": "Thêm ghi đè",
|
||||
"ccAliasLoadError": "Không tải được cài đặt bí danh khám phá: {error}",
|
||||
"ccAliasSaveError": "Không lưu được cài đặt bí danh khám phá: {error}",
|
||||
"compatUpstreamHeadersLabel": "Các header upstream bổ sung",
|
||||
"compatUpstreamHeadersHint": "Cài đặt có đặc quyền cao — có cùng mức độ tin cậy như khi chỉnh sửa thông tin xác thực API của nhà cung cấp; chỉ quản trị viên đáng tin cậy mới nên sử dụng. Các header này được hợp nhất sau khi OmniRoute thêm thông tin xác thực từ khóa API của nhà cung cấp. Nếu một header tùy chỉnh có cùng tên với header hiện có (ví dụ: Authorization), giá trị của bạn sẽ thay thế hoàn toàn header được tạo tự động (bao gồm cả token Bearer) — máy chủ thượng nguồn chỉ nhận được nội dung bạn đã nhập, không phải khóa trong phần cài đặt. Cấu hình sai có thể gây ra lỗi 401 hoặc làm hỏng quá trình xác thực với máy chủ thượng nguồn. Mỗi hàng tương ứng với một header (ví dụ: header Authentication bổ sung cho một số cổng). Di chuột hoặc đặt tiêu điểm vào giá trị để xem trước. Tự động lưu khi mất tiêu điểm, nhấp ra ngoài hoặc đóng bảng điều khiển này.",
|
||||
"compatUpstreamHeaderName": "Tên header",
|
||||
@@ -5487,13 +5475,13 @@
|
||||
"newApiUserIdLabel": "ID người dùng New-API",
|
||||
"newApiUserIdPlaceholder": "vd. 12345",
|
||||
"newApiUserIdHint": "Giá trị tiêu đề New-Api-User của AgentRouter, dùng cùng với khóa API console để lấy số dư hạn mức.",
|
||||
"newApiAggregatorToggleLabel": "__MISSING__:Aggregator Gateway",
|
||||
"newApiAggregatorToggleHint": "__MISSING__:Enable balance detection for New-API / One-API / Sub2API aggregator nodes. The dashboard will show the balance badge and quota-preflight routing will skip exhausted accounts.",
|
||||
"newApiAggregatorConsoleApiKeyHint": "__MISSING__:System Access Token for the aggregator's /api/user/self endpoint. Not the routing API key.",
|
||||
"newApiAggregatorUserIdHint": "__MISSING__:New-Api-User header value used to fetch the aggregator user's quota balance.",
|
||||
"newApiAggregatorQuotaPerUnitLabel": "__MISSING__:Quota Per Unit",
|
||||
"newApiAggregatorQuotaPerUnitHint": "__MISSING__:New-API credit units per $1 (default: 500000). Override if your aggregator uses a different rate.",
|
||||
"featureFlagNewApiAggregatorBalanceDescription": "__MISSING__:Enable balance detection for New-API / One-API / Sub2API aggregator compatible nodes",
|
||||
"newApiAggregatorToggleLabel": "Cổng tổng hợp",
|
||||
"newApiAggregatorToggleHint": "Bật tính năng phát hiện số dư cho các node tổng hợp New-API / One-API / Sub2API. Bảng điều khiển sẽ hiển thị huy hiệu số dư và định tuyến kiểm tra hạn mức trước sẽ bỏ qua các tài khoản đã hết hạn mức.",
|
||||
"newApiAggregatorConsoleApiKeyHint": "Token truy cập hệ thống cho endpoint /api/user/self của bộ tổng hợp. Không phải là khóa API định tuyến.",
|
||||
"newApiAggregatorUserIdHint": "Giá trị tiêu đề New-Api-User dùng để lấy số dư hạn mức của người dùng bộ tổng hợp.",
|
||||
"newApiAggregatorQuotaPerUnitLabel": "Hạn mức trên mỗi đơn vị",
|
||||
"newApiAggregatorQuotaPerUnitHint": "Số đơn vị tín dụng New-API trên mỗi $1 (mặc định: 500000). Ghi đè nếu bộ tổng hợp của bạn sử dụng tỷ lệ khác.",
|
||||
"featureFlagNewApiAggregatorBalanceDescription": "Bật tính năng phát hiện số dư cho các node tương thích với bộ tổng hợp New-API / One-API / Sub2API",
|
||||
"cpaModeDisabledTitle": "Chế độ tương thích CLIProxyAPI đã bị tắt",
|
||||
"cpaModeEnabledTitle": "Chế độ tương thích CLIProxyAPI đã được bật",
|
||||
"customUserAgentHint": "Gợi ý User Agent tùy chỉnh",
|
||||
@@ -5609,7 +5597,7 @@
|
||||
"tagGroupPlaceholder": "Nhập nhóm thẻ...",
|
||||
"testModel": "Kiểm tra mô hình",
|
||||
"testingModel": "Đang kiểm tra mô hình",
|
||||
"modelTestQuotaTooltip": "__MISSING__:Quota exhausted — resets tomorrow or needs a top-up",
|
||||
"modelTestQuotaTooltip": "Đã hết hạn mức — sẽ được đặt lại vào ngày mai hoặc cần nạp thêm",
|
||||
"toggleOffShort": "Tắt",
|
||||
"toggleOnShort": "Bật",
|
||||
"tokenExpiredBadge": "Nhãn token đã hết hạn",
|
||||
@@ -5779,7 +5767,6 @@
|
||||
"onboardingProviderDescriptions": {
|
||||
"360ai": "Lấy khóa API tại ai.360.cn",
|
||||
"agentrouter": "Nhận 200 USD tín dụng miễn phí tại https://agentrouter.org/register — không cần thẻ tín dụng.",
|
||||
"unorouter": "Tạo khóa API tại https://unorouter.ai, sau đó dán vào đây dưới dạng Bearer token.",
|
||||
"agnes": "Lấy khóa API tại agnes-ai.com",
|
||||
"aimlapi": "Gói miễn phí đã tạm dừng (2026) — AI/ML API hiện chỉ tính phí theo mức sử dụng (nạp tối thiểu 20 USD); không còn tín dụng miễn phí định kỳ.",
|
||||
"ai21": "10 USD tín dụng dùng thử khi đăng ký (có hiệu lực 3 tháng), không cần thẻ tín dụng",
|
||||
@@ -5976,7 +5963,8 @@
|
||||
"kimi-coding": "Kết nối Kimi Coding bằng luồng OAuth hiện có.",
|
||||
"kiro": "Gói miễn phí: 50 tín dụng/tháng (khoảng 25–100 nghìn token). ⚠️ Điều khoản Kiro cấm sử dụng proxy/harness của bên thứ ba.",
|
||||
"codex": "Kết nối OpenAI Codex bằng luồng OAuth hiện có.",
|
||||
"qwen": "Kết nối Qwen Code bằng luồng OAuth hiện có."
|
||||
"qwen": "Kết nối Qwen Code bằng luồng OAuth hiện có.",
|
||||
"unorouter": "Tạo khóa API tại https://unorouter.ai, sau đó dán vào đây dưới dạng Bearer token."
|
||||
},
|
||||
"passthroughModelsDescription": "{provider} chấp nhận ID mô hình gốc của nhà cung cấp. Nhập từ /models hoặc thêm ID tùy chỉnh để định tuyến.",
|
||||
"bedrockModelsDescription": "Các mô hình Amazon Bedrock được giới hạn theo vùng AWS. Nhập từ /models hoặc thêm ID mô hình Bedrock được bật trong vùng đã chọn.",
|
||||
@@ -6028,7 +6016,19 @@
|
||||
"kimiOfficialSupporterTooltip": "Kimi (Moonshot AI) là người bạn mã nguồn mở sáng lập của OmniRoute",
|
||||
"cheaperInferenceSupporterBadge": "Người bạn mã nguồn mở",
|
||||
"cheaperInferenceSupporterTooltip": "Cheaper Inference hỗ trợ OmniRoute với tư cách là người bạn mã nguồn mở",
|
||||
"kimiPartnerLinkNote": "Partner link — supports OmniRoute at no extra cost to you"
|
||||
"kimiPartnerLinkNote": "Partner link — supports OmniRoute at no extra cost to you",
|
||||
"ccAliasSectionTitle": "Hiển thị trong Claude Code (claude/…)",
|
||||
"ccAliasSectionHint": "Công bố các mô hình của nhà cung cấp này dưới dạng id phản chiếu claude/<provider>/<model> để tính năng khám phá mô hình qua gateway của Claude Code có thể liệt kê chúng. Mặc định tắt — bật lên sẽ nhân đôi số mục trong danh mục với mọi client.",
|
||||
"ccAliasProviderLevelLabel": "Mặc định của nhà cung cấp",
|
||||
"ccAliasModelOverridesLabel": "Ghi đè theo từng mô hình",
|
||||
"ccAliasModelOverrideAriaLabel": "Ghi đè cho {modelId}",
|
||||
"ccAliasStateInherit": "Kế thừa",
|
||||
"ccAliasStateOn": "Bật",
|
||||
"ccAliasStateOff": "Tắt",
|
||||
"ccAliasAddModelPlaceholder": "Id mô hình (ví dụ: gpt-4o)",
|
||||
"ccAliasAddModelButton": "Thêm ghi đè",
|
||||
"ccAliasLoadError": "Không tải được cài đặt bí danh khám phá: {error}",
|
||||
"ccAliasSaveError": "Không lưu được cài đặt bí danh khám phá: {error}"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Cài đặt",
|
||||
@@ -10788,8 +10788,6 @@
|
||||
"sourceModel": "Mô hình nguồn (agent gốc)",
|
||||
"targetModel": "Mô hình mục tiêu (OmniRoute)",
|
||||
"noMappings": "Chưa cấu hình ánh xạ mô hình. Hãy chạy trình hướng dẫn thiết lập để tự động phát hiện mô hình.",
|
||||
"noMappingsDesc": "Chưa cấu hình ánh xạ mô hình nào. Hãy thêm ánh xạ để định tuyến yêu cầu của agent qua OmniRoute.",
|
||||
"addMapping": "Thêm ánh xạ",
|
||||
"selectModel": "Chọn…",
|
||||
"saveMappings": "Lưu ánh xạ",
|
||||
"setupWizard": "Trình hướng dẫn thiết lập",
|
||||
@@ -10861,7 +10859,9 @@
|
||||
"goNow": "Đi ngay",
|
||||
"message": "MITM Proxy hiện nằm trong AgentBridge.",
|
||||
"title": "Trang này đã được di chuyển"
|
||||
}
|
||||
},
|
||||
"noMappingsDesc": "Chưa cấu hình ánh xạ mô hình nào. Hãy thêm ánh xạ để định tuyến yêu cầu của agent qua OmniRoute.",
|
||||
"addMapping": "Thêm ánh xạ"
|
||||
},
|
||||
"providerStats": {
|
||||
"unknownError": "Lỗi không xác định",
|
||||
@@ -11731,7 +11731,6 @@
|
||||
"danger": "Nguy hiểm",
|
||||
"requiresRestart": "Cần khởi động lại",
|
||||
"source": "Nguồn",
|
||||
"ccDiscoveryAliasesEnvWarning": "Đang bật qua biến môi trường (EXPOSE_CC_DISCOVERY_ALIASES) — giá trị này ghi đè mọi công tắc trong bảng điều khiển bên dưới.",
|
||||
"resetFlag": "Đặt lại {label} về mặc định",
|
||||
"reset": "Đặt lại",
|
||||
"loadFailed": "Không thể tải cờ tính năng",
|
||||
@@ -11888,7 +11887,8 @@
|
||||
"SKILLS_SANDBOX_NETWORK_ENABLED": {
|
||||
"description": "Cho phép môi trường sandbox của kỹ năng truy cập mạng."
|
||||
}
|
||||
}
|
||||
},
|
||||
"ccDiscoveryAliasesEnvWarning": "Đang bật qua biến môi trường (EXPOSE_CC_DISCOVERY_ALIASES) — giá trị này ghi đè mọi công tắc trong bảng điều khiển bên dưới."
|
||||
},
|
||||
"comboControl": {
|
||||
"title": "Trung tâm điều khiển combo",
|
||||
@@ -12236,7 +12236,7 @@
|
||||
"partnerLinkNote": "Partner link",
|
||||
"dismissAriaLabel": "Dismiss"
|
||||
},
|
||||
"featureFlagExposeFunctionalGatewayMirrorsDescription": "Công bố các id phản chiếu <gateway-alias>/<model> trên /v1/models cho các mô hình có chủ sở hữu chuẩn không có thông tin xác thực hoạt động nhưng một cổng chuyển tiếp có thông tin xác thực hoạt động định tuyến được chúng. Cảnh báo: khi bật, số mục trong danh mục tăng lên với mọi client.",
|
||||
"featureFlagExposeFunctionalGatewayMirrorsDescription": "Công bố các id phản chiếu <gateway-alias>/<model> trên /v1/models cho các mô hình có chủ sở hữu chuẩn không có thông tin xác thực hoạt động nhưng một cổng chuyển tiếp có thông tin xác thực hoạt động định tuyến được chúng. Cảnh báo: khi bật, số mục trong danh mục tăng lên với mọi client.",
|
||||
"radarPage": {
|
||||
"title": "Danh mục Radar",
|
||||
"subtitle": "Danh mục mô hình miễn phí được làm phong phú bởi trí tuệ cộng đồng",
|
||||
|
||||
@@ -14,3 +14,4 @@
|
||||
-- falls back to the existing native web-search-bypass defaults in webSearchFallback.ts).
|
||||
--
|
||||
-- See: src/lib/db/interceptionRules.ts
|
||||
SELECT 1;
|
||||
|
||||
Reference in New Issue
Block a user