diff --git a/public/providers/alibaba.png b/public/providers/alibaba.png new file mode 100644 index 0000000000..21c3ef3df5 Binary files /dev/null and b/public/providers/alibaba.png differ diff --git a/public/providers/apikey.svg b/public/providers/apikey.svg new file mode 100644 index 0000000000..5cd4df51ff --- /dev/null +++ b/public/providers/apikey.svg @@ -0,0 +1 @@ + diff --git a/public/providers/bailian-coding-plan.png b/public/providers/bailian-coding-plan.png new file mode 100644 index 0000000000..21c3ef3df5 Binary files /dev/null and b/public/providers/bailian-coding-plan.png differ diff --git a/public/providers/cartesia.svg b/public/providers/cartesia.svg new file mode 100644 index 0000000000..016659a1c2 --- /dev/null +++ b/public/providers/cartesia.svg @@ -0,0 +1 @@ + diff --git a/public/providers/comfyui.svg b/public/providers/comfyui.svg new file mode 100644 index 0000000000..4b43dd2970 --- /dev/null +++ b/public/providers/comfyui.svg @@ -0,0 +1 @@ + diff --git a/public/providers/deepgram.png b/public/providers/deepgram.png new file mode 100644 index 0000000000..6bee16b860 --- /dev/null +++ b/public/providers/deepgram.png @@ -0,0 +1,52 @@ + + + + 404 + + + +
+

404

+

Not Found

+
+ + + \ No newline at end of file diff --git a/public/providers/huggingface.svg b/public/providers/huggingface.svg new file mode 100644 index 0000000000..43c5d3c0c9 --- /dev/null +++ b/public/providers/huggingface.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/public/providers/kimi-coding-apikey.png b/public/providers/kimi-coding-apikey.png new file mode 100644 index 0000000000..422b7f9628 Binary files /dev/null and b/public/providers/kimi-coding-apikey.png differ diff --git a/public/providers/oauth.svg b/public/providers/oauth.svg new file mode 100644 index 0000000000..e0cc7d0fbe --- /dev/null +++ b/public/providers/oauth.svg @@ -0,0 +1 @@ + diff --git a/public/providers/opencode-go.svg b/public/providers/opencode-go.svg new file mode 100644 index 0000000000..a158273242 --- /dev/null +++ b/public/providers/opencode-go.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/providers/opencode-zen.svg b/public/providers/opencode-zen.svg new file mode 100644 index 0000000000..a158273242 --- /dev/null +++ b/public/providers/opencode-zen.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/public/providers/puter.svg b/public/providers/puter.svg new file mode 100644 index 0000000000..2bd9180ee0 --- /dev/null +++ b/public/providers/puter.svg @@ -0,0 +1 @@ +P diff --git a/public/providers/sdwebui.svg b/public/providers/sdwebui.svg new file mode 100644 index 0000000000..4d400e2f03 --- /dev/null +++ b/public/providers/sdwebui.svg @@ -0,0 +1 @@ +SDWebUI diff --git a/public/providers/synthetic.svg b/public/providers/synthetic.svg new file mode 100644 index 0000000000..046b380d9b --- /dev/null +++ b/public/providers/synthetic.svg @@ -0,0 +1 @@ + diff --git a/public/providers/vertex.svg b/public/providers/vertex.svg new file mode 100644 index 0000000000..aa6c4afc98 --- /dev/null +++ b/public/providers/vertex.svg @@ -0,0 +1 @@ + diff --git a/public/providers/zai.svg b/public/providers/zai.svg new file mode 100644 index 0000000000..3e7e3fa6f2 --- /dev/null +++ b/public/providers/zai.svg @@ -0,0 +1 @@ +Z.AI diff --git a/src/app/(dashboard)/dashboard/agents/page.tsx b/src/app/(dashboard)/dashboard/agents/page.tsx index a7d3ebfe9d..ced0e67c8f 100644 --- a/src/app/(dashboard)/dashboard/agents/page.tsx +++ b/src/app/(dashboard)/dashboard/agents/page.tsx @@ -137,8 +137,9 @@ export default function AgentsPage() { if (loading) { return ( -
+
+

{t("scanning")}

); } @@ -327,22 +328,18 @@ export default function AgentsPage() {
-

OpenCode Integration

+

{t("opencodeIntegration")}

- opencode {agents.find((a) => a.id === "opencode")?.version} detected + {t("opencodeDetected", { + version: agents.find((a) => a.id === "opencode")?.version || "", + })}

- Generate a ready-to-use{" "} - - opencode.json - {" "} - with your OmniRoute base URL and all available models — drop it in your project root - and run{" "} - - opencode - - . + {t("opencodeDesc", { + configFile: "opencode.json", + command: "opencode", + })}

diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index d0fdb59742..5f618fb1e4 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -103,7 +103,9 @@ "endpoints": "نقاط النهاية", "playground": "ملعب النماذج", "agents": "وكلاء", - "cliToolsShort": "أدوات" + "cliToolsShort": "أدوات", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "المواضيع", @@ -268,7 +270,28 @@ "permissionsTitle": "الأذونات: {name}", "allowAllDesc": "يمكن لهذا المفتاح الوصول إلى كافة الموديلات المتاحة.", "restrictDesc": "يمكن لهذا المفتاح الوصول إلى {selectedCount} من طرازات {totalModels}.", - "selectedCount": "تم تحديد {count}" + "selectedCount": "تم تحديد {count}", + "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": "سجل التدقيق", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "المجموعات", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "إرسال طلبات JSON - RPC إلى@@ PH0 @@ باستخدام @@PH1 @@ أو `message/stream`.", "a2aQuickStartStep3": "تتبع المهام والتحكم فيها باستخدام `tasks/get` و `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "جارٍ تحميل لوحة تحكم MCP...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "الإعدادات", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "أو قم بإزالة حقل كلمة المرور", "restartServerWithNewPassword": "أعد تشغيل الخادم وسيتم استخدام كلمة المرور الجديدة", "backToLogin": "العودة إلى تسجيل الدخول", - "forgotPassword": "هل نسيت كلمة المرور؟" + "forgotPassword": "هل نسيت كلمة المرور؟", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "بالنسبة لنماذج عائلة GitHub Codex، احتفظ بالنموذج كـ gh/codex-model; يقوم جهاز التوجيه بتحديد/الاستجابات تلقائيًا.", "troubleshootingTestConnection": "استخدم لوحة المعلومات > الموفرون > اختبار الاتصال قبل الاختبار من بيئات تطوير متكاملة أو عملاء خارجيين.", "troubleshootingCircuitBreaker": "إذا أظهر مقدم الخدمة أن قاطع الدائرة مفتوح، فانتظر حتى فترة التهدئة أو راجع صفحة الصحة للحصول على التفاصيل.", - "troubleshootingOAuth": "بالنسبة لموفري OAuth، قم بإعادة المصادقة إذا انتهت صلاحية الرموز المميزة. تحقق من مؤشر حالة بطاقة المزود." + "troubleshootingOAuth": "بالنسبة لموفري OAuth، قم بإعادة المصادقة إذا انتهت صلاحية الرموز المميزة. تحقق من مؤشر حالة بطاقة المزود.", + "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." }, "legal": { "privacyPolicy": "سياسة الخصوصية", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 0d493333b0..44df774682 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -103,7 +103,9 @@ "endpoints": "Крайни точки", "playground": "Площадка", "agents": "Агенти", - "cliToolsShort": "Инструменти" + "cliToolsShort": "Инструменти", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Теми", @@ -268,7 +270,28 @@ "permissionsTitle": "Разрешения: {name}", "allowAllDesc": "Този ключ има достъп до всички налични модели.", "restrictDesc": "Този ключ има достъп до {selectedCount} от {totalModels} модели.", - "selectedCount": "{count} избран" + "selectedCount": "{count} избран", + "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": "Дневник за одит", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Комбота", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Изпратете JSON - RPC заявки до@@ PH0 @@, като използвате @@ PH1 @@ или @@ PH2 @@.", "a2aQuickStartStep3": "Проследяване и контрол на задачите с помощта на @@ PH0 @@ и @@ PH1 @@.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Зареждане на таблото за управление на MCP...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Настройки", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "или премахнете полето passwordHash", "restartServerWithNewPassword": "Рестартирайте сървъра - той ще използва новата парола", "backToLogin": "Назад към Вход", - "forgotPassword": "Забравена парола?" + "forgotPassword": "Забравена парола?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "За модели от семейството на GitHub Codex, запазете модела като gh/codex-model; рутерът избира /отговаря автоматично.", "troubleshootingTestConnection": "Използвайте Табло > Доставчици > Тестване на връзката, преди да тествате от IDE или външни клиенти.", "troubleshootingCircuitBreaker": "Ако доставчикът покаже отворен прекъсвач, изчакайте охлаждането или проверете страницата Health за подробности.", - "troubleshootingOAuth": "За доставчици на OAuth, повторно удостоверяване, ако токените изтекат. Проверете индикатора за състояние на картата на доставчика." + "troubleshootingOAuth": "За доставчици на OAuth, повторно удостоверяване, ако токените изтекат. Проверете индикатора за състояние на картата на доставчика.", + "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." }, "legal": { "privacyPolicy": "Политика за поверителност", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 346d1e18b3..309b8e2130 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -2599,7 +2599,13 @@ "binaryName": "Binární název", "versionCommand": "Příkaz verze", "spawnArgs": "Spawn Arguments", - "addAgent": "Přidat agenta" + "addAgent": "Přidat agenta", + "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!" }, "autoCombo": { "title": "Auto-Kombo Engine", diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index 497997f656..c4b2b9c7aa 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -103,7 +103,9 @@ "endpoints": "Endpoints", "playground": "Legeplads", "agents": "Agenter", - "cliToolsShort": "Værktøjer" + "cliToolsShort": "Værktøjer", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Temaer", @@ -268,7 +270,28 @@ "permissionsTitle": "Tilladelser: {name}", "allowAllDesc": "Denne nøgle kan få adgang til alle tilgængelige modeller.", "restrictDesc": "Denne nøgle kan få adgang til {selectedCount} af {totalModels} modeller.", - "selectedCount": "{count} valgt" + "selectedCount": "{count} valgt", + "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": "Revisionslog", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combos", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Send JSON-RPC-anmodninger til`POST /a2a`vedhjælp af `message/send` eller `message/stream`.", "a2aQuickStartStep3": "Spor og kontroller opgaver ved hjælp af `tasks/get` og `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Indlæser MCP-dashboard...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Indstillinger", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "eller fjern feltet passwordHash", "restartServerWithNewPassword": "Genstart serveren - den vil bruge den nye adgangskode", "backToLogin": "Tilbage til Login", - "forgotPassword": "Glemt adgangskode?" + "forgotPassword": "Glemt adgangskode?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "For GitHub Codex-familiemodeller skal du beholde modellen som gh/codex-model; routeren vælger /svar automatisk.", "troubleshootingTestConnection": "Brug Dashboard > Udbydere > Test forbindelse, før du tester fra IDE'er eller eksterne klienter.", "troubleshootingCircuitBreaker": "Hvis en udbyder viser en afbryder åben, skal du vente på nedkøling eller tjekke Health-siden for detaljer.", - "troubleshootingOAuth": "For OAuth-udbydere skal du godkende igen, hvis tokens udløber. Tjek udbyderkortets statusindikator." + "troubleshootingOAuth": "For OAuth-udbydere skal du godkende igen, hvis tokens udløber. Tjek udbyderkortets statusindikator.", + "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." }, "legal": { "privacyPolicy": "Privatlivspolitik", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index b7709032ff..a4eeb0d1c2 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -103,7 +103,9 @@ "endpoints": "Endpunkte", "playground": "Spielwiese", "agents": "Agenten", - "cliToolsShort": "Werkzeuge" + "cliToolsShort": "Werkzeuge", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themen", @@ -268,7 +270,28 @@ "permissionsTitle": "Berechtigungen: {name}", "allowAllDesc": "Mit diesem Schlüssel kann auf alle verfügbaren Modelle zugegriffen werden.", "restrictDesc": "Dieser Schlüssel kann auf {selectedCount} von {totalModels} Modellen zugreifen.", - "selectedCount": "{count} ausgewählt" + "selectedCount": "{count} ausgewählt", + "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": "Audit-Protokoll", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Kombinationen", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Senden Sie JSON-RPC-Anfragen an `POST /a2a` mit `message/send` oder `message/stream`.", "a2aQuickStartStep3": "Verfolgen und steuern Sie Aufgaben mit `tasks/get` und `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "MCP-Dashboard wird geladen...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Einstellungen", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "oder entfernen Sie das Feld „passwordHash“.", "restartServerWithNewPassword": "Starten Sie den Server neu – er verwendet das neue Passwort", "backToLogin": "Zurück zum Anmelden", - "forgotPassword": "Passwort vergessen?" + "forgotPassword": "Passwort vergessen?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Behalten Sie für Modelle der GitHub Codex-Familie das Modell bei gh/codex-model; Der Router wählt /responses automatisch aus.", "troubleshootingTestConnection": "Verwenden Sie Dashboard > Anbieter > Verbindung testen, bevor Sie Tests mit IDEs oder externen Clients durchführen.", "troubleshootingCircuitBreaker": "Wenn ein Anbieter anzeigt, dass der Leistungsschalter geöffnet ist, warten Sie auf die Abklingzeit oder schauen Sie auf der Seite „Zustand“ nach, um Einzelheiten zu erfahren.", - "troubleshootingOAuth": "Führen Sie bei OAuth-Anbietern eine erneute Authentifizierung durch, wenn die Token ablaufen. Überprüfen Sie die Statusanzeige der Anbieterkarte." + "troubleshootingOAuth": "Führen Sie bei OAuth-Anbietern eine erneute Authentifizierung durch, wenn die Token ablaufen. Überprüfen Sie die Statusanzeige der Anbieterkarte.", + "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." }, "legal": { "privacyPolicy": "Datenschutzrichtlinie", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 295e794f90..847ed15f69 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -2599,7 +2599,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 42cb2216c6..58d677e7ee 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -103,7 +103,9 @@ "endpoints": "Endpoints", "playground": "Playground", "agents": "Agentes", - "cliToolsShort": "Herramientas" + "cliToolsShort": "Herramientas", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Temas", @@ -268,7 +270,28 @@ "permissionsTitle": "Permisos: {name}", "allowAllDesc": "Esta clave puede acceder a todos los modelos disponibles.", "restrictDesc": "Esta clave puede acceder a {selectedCount} de {totalModels} modelos.", - "selectedCount": "{count} seleccionado" + "selectedCount": "{count} seleccionado", + "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": "Registro de auditoría", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "combos", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Envíe solicitudes JSON-RPC a `POST /a2a` usando `message/send` o `message/stream`.", "a2aQuickStartStep3": "Realice un seguimiento y controle las tareas utilizando `tasks/get` y `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Cargando el panel de MCP...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Configuración", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "o eliminar el campo contraseñaHash", "restartServerWithNewPassword": "Reinicia el servidor; usará la nueva contraseña", "backToLogin": "Volver a iniciar sesión", - "forgotPassword": "¿Olvidaste tu contraseña?" + "forgotPassword": "¿Olvidaste tu contraseña?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRuta", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Para los modelos de la familia GitHub Codex, mantenga el modelo como gh/codex-model; El enrutador selecciona/respuestas automáticamente.", "troubleshootingTestConnection": "Utilice Panel > Proveedores > Probar conexión antes de realizar pruebas desde IDE o clientes externos.", "troubleshootingCircuitBreaker": "Si un proveedor muestra el disyuntor abierto, espere el tiempo de reutilización o consulte la página de Salud para obtener más detalles.", - "troubleshootingOAuth": "Para los proveedores de OAuth, vuelva a autenticarse si los tokens caducan. Verifique el indicador de estado de la tarjeta del proveedor." + "troubleshootingOAuth": "Para los proveedores de OAuth, vuelva a autenticarse si los tokens caducan. Verifique el indicador de estado de la tarjeta del proveedor.", + "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." }, "legal": { "privacyPolicy": "Política de privacidad", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index b57e522741..ef05674765 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -103,7 +103,9 @@ "endpoints": "Päätepisteet", "playground": "Leikkipaikka", "agents": "Agentit", - "cliToolsShort": "Työkalut" + "cliToolsShort": "Työkalut", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Teemat", @@ -268,7 +270,28 @@ "permissionsTitle": "Luvat: {name}", "allowAllDesc": "Tällä avaimella pääsee kaikkiin saatavilla oleviin malleihin.", "restrictDesc": "Tällä avaimella voi käyttää {selectedCount}/{totalModels} mallia.", - "selectedCount": "{count} valittu" + "selectedCount": "{count} valittu", + "autoResolve": "Auto-Resolve", + "autoResolveDesc": "Auto-resolve ambiguous model names to native provider for this API key.", + "keyActive": "Key Active", + "keyActiveDesc": "Enable or disable this API key. Disabled keys are immediately rejected with 403.", + "accessSchedule": "Access Schedule", + "accessScheduleDesc": "Restrict access to specific hours and days of the week.", + "scheduleFrom": "From", + "scheduleUntil": "Until", + "scheduleDays": "Days", + "scheduleTimezone": "Timezone", + "scheduleTimezoneHint": "Use IANA timezone names, e.g. America/New_York, Europe/Berlin", + "scheduleActive": "Schedule", + "disabled": "Disabled", + "daySun": "Sun", + "dayMon": "Mon", + "dayTue": "Tue", + "dayWed": "Wed", + "dayThu": "Thu", + "dayFri": "Fri", + "daySat": "Sat", + "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key" }, "auditLog": { "title": "Tarkastusloki", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Yhdistelmät", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Lähetä JSON-RPC-pyynnöt osoitteeseen `POST /a2a` käyttämällä `message/send` tai `message/stream`.", "a2aQuickStartStep3": "Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format", + "categorySearch": "Search & Discovery", + "webSearch": "Web Search", + "webSearchDesc": "Unified web search across multiple providers with automatic failover and caching", + "searchProvider": "Search Provider", + "searchProviderDesc": "This provider is used for web search via POST /v1/search. No model configuration needed — search providers are ready to use once an API key is connected." }, "mcpDashboard": { "loading": "Ladataan MCP-hallintapaneelia...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Asetukset", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "tai poista salasanaHash-kenttä", "restartServerWithNewPassword": "Käynnistä palvelin uudelleen - se käyttää uutta salasanaa", "backToLogin": "Takaisin kirjautumiseen", - "forgotPassword": "Unohditko salasanan?" + "forgotPassword": "Unohditko salasanan?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Säilytä GitHub Codex -perheen mallien mallina muodossa gh/codex-model; reititin valitsee / vastaa automaattisesti.", "troubleshootingTestConnection": "Käytä Dashboard > Providers > Test Connection ennen testaamista IDE:istä tai ulkoisista asiakkaista.", "troubleshootingCircuitBreaker": "Jos palveluntarjoaja näyttää katkaisijan auki, odota jäähtymistä tai katso lisätietoja Terveys-sivulta.", - "troubleshootingOAuth": "OAuth-palveluntarjoajat todenna uudelleen, jos tunnukset vanhenevat. Tarkista palveluntarjoajan kortin tilailmaisin." + "troubleshootingOAuth": "OAuth-palveluntarjoajat todenna uudelleen, jos tunnukset vanhenevat. Tarkista palveluntarjoajan kortin tilailmaisin.", + "managementApiReference": "Management API Reference", + "managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.", + "mgmtProxiesListNote": "List saved proxy registry items (supports pagination).", + "mgmtProxiesCreateNote": "Create a reusable proxy item in the registry.", + "mgmtProxiesHealthNote": "Get 24h/rolling health metrics per saved proxy from proxy logs.", + "mgmtProxiesBulkAssignNote": "Assign or clear one proxy across many scope IDs in one request.", + "mgmtAssignmentsListNote": "List proxy assignments by scope, scope_id, or proxy_id.", + "mgmtAssignmentsUpdateNote": "Assign or clear proxy for global/provider/account/combo scope.", + "mgmtLegacyMigrationNote": "Import legacy proxyConfig maps into registry assignments." }, "legal": { "privacyPolicy": "Tietosuojakäytäntö", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index eaf867675e..269be20455 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -103,7 +103,9 @@ "endpoints": "Points d'accès", "playground": "Playground", "agents": "Agents", - "cliToolsShort": "Outils" + "cliToolsShort": "Outils", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Thèmes", @@ -268,7 +270,28 @@ "permissionsTitle": "Autorisations : {name}", "allowAllDesc": "Cette clé peut accéder à tous les modèles disponibles.", "restrictDesc": "Cette clé peut accéder à {selectedCount} des modèles {totalModels}.", - "selectedCount": "{count} sélectionné" + "selectedCount": "{count} sélectionné", + "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": "Journal d'audit", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combinaisons", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Envoyez des requêtes JSON-RPC à `POST /a2a` en utilisant `message/send` ou `message/stream`.", "a2aQuickStartStep3": "Suivez et contrôlez les tâches à l’aide de `tasks/get` et `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Chargement du tableau de bord MCP...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Paramètres", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "ou supprimez le champ passwordHash", "restartServerWithNewPassword": "Redémarrez le serveur - il utilisera le nouveau mot de passe", "backToLogin": "Retour à la connexion", - "forgotPassword": "Mot de passe oublié ?" + "forgotPassword": "Mot de passe oublié ?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Pour les modèles de la famille GitHub Codex, conservez le modèle sous la forme gh/codex-model ; Le routeur sélectionne /réponses automatiquement.", "troubleshootingTestConnection": "Utilisez Tableau de bord > Fournisseurs > Tester la connexion avant de tester à partir d'IDE ou de clients externes.", "troubleshootingCircuitBreaker": "Si un fournisseur indique que le disjoncteur est ouvert, attendez le temps de recharge ou consultez la page Santé pour plus de détails.", - "troubleshootingOAuth": "Pour les fournisseurs OAuth, réauthentifiez-vous si les jetons expirent. Vérifiez l'indicateur d'état de la carte du fournisseur." + "troubleshootingOAuth": "Pour les fournisseurs OAuth, réauthentifiez-vous si les jetons expirent. Vérifiez l'indicateur d'état de la carte du fournisseur.", + "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." }, "legal": { "privacyPolicy": "Politique de confidentialité", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 45cbe90c10..ae38073ee7 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -103,7 +103,9 @@ "endpoints": "נקודות קצה", "playground": "Playground", "agents": "סוכנים", - "cliToolsShort": "כלים" + "cliToolsShort": "כלים", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "הרשאות: {name}", "allowAllDesc": "מפתח זה יכול לגשת לכל הדגמים הזמינים.", "restrictDesc": "מפתח זה יכול לגשת ל-{selectedCount} מתוך דגמי {totalModels}.", - "selectedCount": "{count} נבחר" + "selectedCount": "{count} נבחר", + "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": "יומן ביקורת", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "שילובים", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "הגדרות", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "או הסר את שדה passwordHash", "restartServerWithNewPassword": "הפעל מחדש את השרת - הוא ישתמש בסיסמה החדשה", "backToLogin": "חזרה לכניסה", - "forgotPassword": "שכחת סיסמה?" + "forgotPassword": "שכחת סיסמה?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "עבור מודלים של משפחת GitHub Codex, שמור את הדגם בתור gh/codex-model; הנתב בוחר / תגובות באופן אוטומטי.", "troubleshootingTestConnection": "השתמש בלוח מחוונים > ספקים > בדוק חיבור לפני בדיקה מ-IDEs או לקוחות חיצוניים.", "troubleshootingCircuitBreaker": "אם ספק מציג מפסק פתוח, המתן להתקררות או בדוק את דף הבריאות לפרטים.", - "troubleshootingOAuth": "עבור ספקי OAuth, בצע אימות מחדש אם פג תוקפם של אסימונים. בדוק את מחוון מצב כרטיס הספק." + "troubleshootingOAuth": "עבור ספקי OAuth, בצע אימות מחדש אם פג תוקפם של אסימונים. בדוק את מחוון מצב כרטיס הספק.", + "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." }, "legal": { "privacyPolicy": "מדיניות פרטיות", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index dc08051941..e418f262c5 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -103,7 +103,9 @@ "endpoints": "Végpontok", "playground": "Játszótér", "agents": "Ügynökök", - "cliToolsShort": "Eszközök" + "cliToolsShort": "Eszközök", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Témák", @@ -268,7 +270,28 @@ "permissionsTitle": "Engedélyek: {name}", "allowAllDesc": "Ezzel a gombbal minden elérhető modell elérhető.", "restrictDesc": "Ezzel a kulccsal {selectedCount}/{totalModels} modell érhető el.", - "selectedCount": "{count} kiválasztva" + "selectedCount": "{count} kiválasztva", + "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": "Ellenőrzési napló", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Kombók", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Kövesse nyomon és vezérelje a feladatokat a `tasks/get` és `tasks/cancel` használatával.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Beállítások elemre", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "vagy távolítsa el a passwordHash mezőt", "restartServerWithNewPassword": "Indítsa újra a szervert - az új jelszót fogja használni", "backToLogin": "Vissza a Bejelentkezéshez", - "forgotPassword": "Elfelejtetted a jelszavad?" + "forgotPassword": "Elfelejtetted a jelszavad?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "A GitHub Codex-családhoz tartozó modelleknél tartsa a modellt gh/codex-model; a router automatikusan kiválasztja a /válaszokat.", "troubleshootingTestConnection": "Az IDE-kből vagy külső kliensekből történő tesztelés előtt használja az Irányítópult > Szolgáltatók > Kapcsolat tesztelése menüpontot.", "troubleshootingCircuitBreaker": "Ha a szolgáltató azt mutatja, hogy az áramkör megszakítója nyitva van, várja meg a lehűlést, vagy nézze meg az Egészség oldalt a részletekért.", - "troubleshootingOAuth": "OAuth-szolgáltatók esetén hitelesítse újra, ha a tokenek lejárnak. Ellenőrizze a szolgáltatói kártya állapotjelzőjét." + "troubleshootingOAuth": "OAuth-szolgáltatók esetén hitelesítse újra, ha a tokenek lejárnak. Ellenőrizze a szolgáltatói kártya állapotjelzőjét.", + "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." }, "legal": { "privacyPolicy": "Adatvédelmi szabályzat", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 9f9662687c..8e8553bddb 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -103,7 +103,9 @@ "endpoints": "Endpoint", "playground": "Playground", "agents": "Agen", - "cliToolsShort": "Alat" + "cliToolsShort": "Alat", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Izin: {name}", "allowAllDesc": "Kunci ini dapat mengakses semua model yang tersedia.", "restrictDesc": "Kunci ini dapat mengakses {selectedCount} dari {totalModels} model.", - "selectedCount": "{count} dipilih" + "selectedCount": "{count} dipilih", + "autoResolve": "Auto-Resolve", + "autoResolveDesc": "Auto-resolve ambiguous model names to native provider for this API key.", + "keyActive": "Key Active", + "keyActiveDesc": "Enable or disable this API key. Disabled keys are immediately rejected with 403.", + "accessSchedule": "Access Schedule", + "accessScheduleDesc": "Restrict access to specific hours and days of the week.", + "scheduleFrom": "From", + "scheduleUntil": "Until", + "scheduleDays": "Days", + "scheduleTimezone": "Timezone", + "scheduleTimezoneHint": "Use IANA timezone names, e.g. America/New_York, Europe/Berlin", + "scheduleActive": "Schedule", + "disabled": "Disabled", + "daySun": "Sun", + "dayMon": "Mon", + "dayTue": "Tue", + "dayWed": "Wed", + "dayThu": "Thu", + "dayFri": "Fri", + "daySat": "Sat", + "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key" }, "auditLog": { "title": "Catatan Audit", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "kombo", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Pengaturan", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "atau hapus bidang passwordHash", "restartServerWithNewPassword": "Mulai ulang server - server akan menggunakan kata sandi baru", "backToLogin": "Kembali ke Masuk", - "forgotPassword": "Lupa kata sandi?" + "forgotPassword": "Lupa kata sandi?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2512,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2536,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index b84392ea80..9ab1e09507 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -103,7 +103,9 @@ "endpoints": "Endpoint", "playground": "Playground", "agents": "एजेंट", - "cliToolsShort": "उपकरण" + "cliToolsShort": "उपकरण", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "अनुमतियाँ: {name}", "allowAllDesc": "यह कुंजी सभी उपलब्ध मॉडलों तक पहुंच सकती है.", "restrictDesc": "यह कुंजी {totalModels} मॉडलों में से {selectedCount} तक पहुंच सकती है।", - "selectedCount": "{count} चयनित" + "selectedCount": "{count} चयनित", + "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": "ऑडिट लॉग", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "संयोजन", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "सेटिंग्स", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "या पासवर्डहैश फ़ील्ड हटा दें", "restartServerWithNewPassword": "सर्वर को पुनरारंभ करें - यह नए पासवर्ड का उपयोग करेगा", "backToLogin": "लॉगइन पर वापस जाएँ", - "forgotPassword": "पासवर्ड भूल गए?" + "forgotPassword": "पासवर्ड भूल गए?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "ओम्निरूट", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "GitHub कोडेक्स-फ़ैमिली मॉडल के लिए, मॉडल को gh/codex-model के रूप में रखें; राउटर स्वचालित रूप से/प्रतिक्रियाओं का चयन करता है।", "troubleshootingTestConnection": "आईडीई या बाहरी क्लाइंट से परीक्षण करने से पहले डैशबोर्ड > प्रदाता > परीक्षण कनेक्शन का उपयोग करें।", "troubleshootingCircuitBreaker": "यदि कोई प्रदाता सर्किट ब्रेकर खुला दिखाता है, तो कूलडाउन की प्रतीक्षा करें या विवरण के लिए स्वास्थ्य पृष्ठ देखें।", - "troubleshootingOAuth": "OAuth प्रदाताओं के लिए, यदि टोकन समाप्त हो जाते हैं तो पुनः प्रमाणित करें। प्रदाता कार्ड स्थिति संकेतक की जाँच करें।" + "troubleshootingOAuth": "OAuth प्रदाताओं के लिए, यदि टोकन समाप्त हो जाते हैं तो पुनः प्रमाणित करें। प्रदाता कार्ड स्थिति संकेतक की जाँच करें।", + "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." }, "legal": { "privacyPolicy": "गोपनीयता नीति", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index e0f86bdbc1..b056341ec5 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -103,7 +103,9 @@ "endpoints": "Endpoint", "playground": "Playground", "agents": "Agenti", - "cliToolsShort": "Strumenti" + "cliToolsShort": "Strumenti", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Autorizzazioni: {name}", "allowAllDesc": "Questa chiave può accedere a tutti i modelli disponibili.", "restrictDesc": "Questa chiave può accedere a {selectedCount} di {totalModels} modelli.", - "selectedCount": "{count} selezionato" + "selectedCount": "{count} selezionato", + "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": "Registro di controllo", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combinazioni", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Impostazioni", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "o rimuovere il campo passwordHash", "restartServerWithNewPassword": "Riavvia il server: utilizzerà la nuova password", "backToLogin": "Torna all'accesso", - "forgotPassword": "Ha dimenticato la password?" + "forgotPassword": "Ha dimenticato la password?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Per i modelli della famiglia GitHub Codex, mantieni il modello come gh/codex-model; il router seleziona/risponde automaticamente.", "troubleshootingTestConnection": "Utilizza Dashboard > Provider > Verifica connessione prima di effettuare test da IDE o client esterni.", "troubleshootingCircuitBreaker": "Se un fornitore mostra l'interruttore aperto, attendi il raffreddamento o controlla la pagina Salute per i dettagli.", - "troubleshootingOAuth": "Per i provider OAuth, eseguire nuovamente l'autenticazione se i token scadono. Controlla l'indicatore di stato della carta del fornitore." + "troubleshootingOAuth": "Per i provider OAuth, eseguire nuovamente l'autenticazione se i token scadono. Controlla l'indicatore di stato della carta del fornitore.", + "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." }, "legal": { "privacyPolicy": "politica sulla riservatezza", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index e1a2c2482d..e4b4b2053d 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -103,7 +103,9 @@ "endpoints": "エンドポイント", "playground": "プレイグラウンド", "agents": "エージェント", - "cliToolsShort": "ツール" + "cliToolsShort": "ツール", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "権限: {name}", "allowAllDesc": "このキーは、利用可能なすべてのモデルにアクセスできます。", "restrictDesc": "このキーは、{totalModels} モデルの {selectedCount} にアクセスできます。", - "selectedCount": "{count} が選択されました" + "selectedCount": "{count} が選択されました", + "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": "監査ログ", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "コンボ", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "設定", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "または、passwordHash フィールドを削除します", "restartServerWithNewPassword": "サーバーを再起動すると新しいパスワードが適用されます", "backToLogin": "ログインに戻る", - "forgotPassword": "パスワードをお忘れですか?" + "forgotPassword": "パスワードをお忘れですか?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "オムニルート", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "GitHub Codex ファミリ モデルの場合、モデルを gh/codex-model として保持します。ルーターは自動的に選択/応答します。", "troubleshootingTestConnection": "IDE または外部クライアントからテストする前に、[ダッシュボード] > [プロバイダー] > [接続のテスト] を使用します。", "troubleshootingCircuitBreaker": "プロバイダーがサーキット ブレーカーが開いていることを示している場合は、クールダウンするまで待つか、詳細について [ヘルス] ページを確認してください。", - "troubleshootingOAuth": "OAuth プロバイダーの場合、トークンの有効期限が切れた場合は再認証します。プロバイダー カードのステータス インジケーターを確認します。" + "troubleshootingOAuth": "OAuth プロバイダーの場合、トークンの有効期限が切れた場合は再認証します。プロバイダー カードのステータス インジケーターを確認します。", + "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." }, "legal": { "privacyPolicy": "プライバシーポリシー", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index f07a712221..d3cf2b3713 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -103,7 +103,9 @@ "endpoints": "엔드포인트", "playground": "플레이그라운드", "agents": "에이전트", - "cliToolsShort": "도구" + "cliToolsShort": "도구", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "권한: {name}", "allowAllDesc": "이 키는 사용 가능한 모든 모델에 액세스할 수 있습니다.", "restrictDesc": "이 키는 {totalModels} 모델 중 {selectedCount}에 액세스할 수 있습니다.", - "selectedCount": "{count} 선택됨" + "selectedCount": "{count} 선택됨", + "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": "감사 로그", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "콤보", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "설정", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "또는 PasswordHash 필드를 제거하세요.", "restartServerWithNewPassword": "서버를 다시 시작하세요. 새 비밀번호가 사용됩니다.", "backToLogin": "로그인으로 돌아가기", - "forgotPassword": "비밀번호를 잊으셨나요?" + "forgotPassword": "비밀번호를 잊으셨나요?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "옴니루트", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "GitHub Codex 계열 모델의 경우 모델을 gh/codex-model로 유지합니다. 라우터는 /responses를 자동으로 선택합니다.", "troubleshootingTestConnection": "IDE 또는 외부 클라이언트에서 테스트하기 전에 대시보드 > 공급자 > 연결 테스트를 사용하세요.", "troubleshootingCircuitBreaker": "공급자가 회로 차단기를 열었다고 표시하는 경우 대기 시간을 기다리거나 상태 페이지에서 자세한 내용을 확인하세요.", - "troubleshootingOAuth": "OAuth 공급자의 경우 토큰이 만료되면 다시 인증하세요. 공급자 카드 상태 표시기를 확인하십시오." + "troubleshootingOAuth": "OAuth 공급자의 경우 토큰이 만료되면 다시 인증하세요. 공급자 카드 상태 표시기를 확인하십시오.", + "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." }, "legal": { "privacyPolicy": "개인 정보 보호 정책", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 1b3e9b1d56..0ed22aa522 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -103,7 +103,9 @@ "endpoints": "Titik Akhir", "playground": "Playground", "agents": "Ejen", - "cliToolsShort": "Alat" + "cliToolsShort": "Alat", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Kebenaran: {name}", "allowAllDesc": "Kunci ini boleh mengakses semua model yang tersedia.", "restrictDesc": "Kunci ini boleh mengakses {selectedCount} daripada {totalModels} model.", - "selectedCount": "{count} dipilih" + "selectedCount": "{count} dipilih", + "autoResolve": "Auto-Resolve", + "autoResolveDesc": "Auto-resolve ambiguous model names to native provider for this API key.", + "keyActive": "Key Active", + "keyActiveDesc": "Enable or disable this API key. Disabled keys are immediately rejected with 403.", + "accessSchedule": "Access Schedule", + "accessScheduleDesc": "Restrict access to specific hours and days of the week.", + "scheduleFrom": "From", + "scheduleUntil": "Until", + "scheduleDays": "Days", + "scheduleTimezone": "Timezone", + "scheduleTimezoneHint": "Use IANA timezone names, e.g. America/New_York, Europe/Berlin", + "scheduleActive": "Schedule", + "disabled": "Disabled", + "daySun": "Sun", + "dayMon": "Mon", + "dayTue": "Tue", + "dayWed": "Wed", + "dayThu": "Thu", + "dayFri": "Fri", + "daySat": "Sat", + "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key" }, "auditLog": { "title": "Log Audit", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Kombo", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.", "a2aQuickStartStep3": "Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "tetapan", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "atau alih keluar medan passwordHash", "restartServerWithNewPassword": "Mulakan semula pelayan - ia akan menggunakan kata laluan baharu", "backToLogin": "Kembali ke Log Masuk", - "forgotPassword": "Lupa kata laluan?" + "forgotPassword": "Lupa kata laluan?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Untuk model keluarga Codex GitHub, kekalkan model sebagai gh/codex-model; penghala memilih /membalas secara automatik.", "troubleshootingTestConnection": "Gunakan Papan Pemuka > Pembekal > Uji Sambungan sebelum menguji daripada IDE atau pelanggan luaran.", "troubleshootingCircuitBreaker": "Jika pembekal menunjukkan pemutus litar terbuka, tunggu masa bertenang atau semak halaman Kesihatan untuk mendapatkan butiran.", - "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal." + "troubleshootingOAuth": "Untuk pembekal OAuth, sahkan semula jika token tamat tempoh. Semak penunjuk status kad pembekal.", + "managementApiReference": "Management API Reference", + "managementApiDescription": "Automation endpoints for proxy registry, scope assignments, and legacy proxy migration.", + "mgmtProxiesListNote": "List saved proxy registry items (supports pagination).", + "mgmtProxiesCreateNote": "Create a reusable proxy item in the registry.", + "mgmtProxiesHealthNote": "Get 24h/rolling health metrics per saved proxy from proxy logs.", + "mgmtProxiesBulkAssignNote": "Assign or clear one proxy across many scope IDs in one request.", + "mgmtAssignmentsListNote": "List proxy assignments by scope, scope_id, or proxy_id.", + "mgmtAssignmentsUpdateNote": "Assign or clear proxy for global/provider/account/combo scope.", + "mgmtLegacyMigrationNote": "Import legacy proxyConfig maps into registry assignments." }, "legal": { "privacyPolicy": "Dasar Privasi", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index 9aa06411bb..50f72579d0 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -103,7 +103,9 @@ "endpoints": "Eindpunten", "playground": "Speeltuin", "agents": "Agenten", - "cliToolsShort": "Gereedschap" + "cliToolsShort": "Gereedschap", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Machtigingen: {name}", "allowAllDesc": "Met deze sleutel heeft u toegang tot alle beschikbare modellen.", "restrictDesc": "Deze sleutel heeft toegang tot {selectedCount} van {totalModels} modellen.", - "selectedCount": "{count} geselecteerd" + "selectedCount": "{count} geselecteerd", + "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": "Auditlogboek", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combo's", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Instellingen", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "of verwijder het wachtwoordHash-veld", "restartServerWithNewPassword": "Start de server opnieuw op. Deze gebruikt het nieuwe wachtwoord", "backToLogin": "Terug naar Inloggen", - "forgotPassword": "Wachtwoord vergeten?" + "forgotPassword": "Wachtwoord vergeten?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Voor modellen uit de GitHub Codex-familie behoudt u het model als gh/codex-model; router selecteert /responses automatisch.", "troubleshootingTestConnection": "Gebruik Dashboard > Providers > Verbinding testen voordat u gaat testen vanaf IDE's of externe clients.", "troubleshootingCircuitBreaker": "Als een provider aangeeft dat de stroomonderbreker open is, wacht dan op de cooldown of kijk op de Gezondheidspagina voor meer informatie.", - "troubleshootingOAuth": "Voor OAuth-providers geldt dat u opnieuw moet verifiëren als tokens verlopen. Controleer de statusindicator van de providerkaart." + "troubleshootingOAuth": "Voor OAuth-providers geldt dat u opnieuw moet verifiëren als tokens verlopen. Controleer de statusindicator van de providerkaart.", + "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." }, "legal": { "privacyPolicy": "Privacybeleid", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 224328acd6..c21510004f 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -103,7 +103,9 @@ "endpoints": "Endepunkter", "playground": "Lekeplass", "agents": "Agenter", - "cliToolsShort": "Verktøy" + "cliToolsShort": "Verktøy", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Tillatelser: {name}", "allowAllDesc": "Denne nøkkelen har tilgang til alle tilgjengelige modeller.", "restrictDesc": "Denne nøkkelen har tilgang til {selectedCount} av {totalModels}-modeller.", - "selectedCount": "{count} valgt" + "selectedCount": "{count} valgt", + "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": "Revisjonslogg", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combos", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Send JSON-RPC-forespørsler til `POST /a2a` ved å bruke `message/send` eller `message/stream`.", "a2aQuickStartStep3": "Spor og kontroller oppgaver ved å bruke `tasks/get` og `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Laster inn MCP-dashbordet ...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Innstillinger", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "eller fjern passordHash-feltet", "restartServerWithNewPassword": "Start serveren på nytt - den vil bruke det nye passordet", "backToLogin": "Tilbake til pålogging", - "forgotPassword": "Glemt passord?" + "forgotPassword": "Glemt passord?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "For GitHub Codex-familiemodeller, behold modellen som gh/codex-model; ruteren velger /responser automatisk.", "troubleshootingTestConnection": "Bruk Dashboard > Leverandører > Test tilkobling før du tester fra IDE-er eller eksterne klienter.", "troubleshootingCircuitBreaker": "Hvis en leverandør viser at strømbryteren er åpen, vent på nedkjøling eller sjekk helsesiden for detaljer.", - "troubleshootingOAuth": "For OAuth-leverandører, autentiser på nytt hvis tokens utløper. Sjekk leverandørkortets statusindikator." + "troubleshootingOAuth": "For OAuth-leverandører, autentiser på nytt hvis tokens utløper. Sjekk leverandørkortets statusindikator.", + "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." }, "legal": { "privacyPolicy": "Personvernerklæring", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 06dc1f799d..3d894decea 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -103,7 +103,9 @@ "endpoints": "Mga Endpoint", "playground": "Playground", "agents": "Mga Agent", - "cliToolsShort": "Mga Tool" + "cliToolsShort": "Mga Tool", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Mga Pahintulot: {name}", "allowAllDesc": "Maa-access ng key na ito ang lahat ng available na modelo.", "restrictDesc": "Maa-access ng key na ito ang {selectedCount} ng {totalModels} na mga modelo.", - "selectedCount": "{count} ang napili" + "selectedCount": "{count} ang napili", + "autoResolve": "Auto-Resolve", + "autoResolveDesc": "Auto-resolve ambiguous model names to native provider for this API key.", + "keyActive": "Key Active", + "keyActiveDesc": "Enable or disable this API key. Disabled keys are immediately rejected with 403.", + "accessSchedule": "Access Schedule", + "accessScheduleDesc": "Restrict access to specific hours and days of the week.", + "scheduleFrom": "From", + "scheduleUntil": "Until", + "scheduleDays": "Days", + "scheduleTimezone": "Timezone", + "scheduleTimezoneHint": "Use IANA timezone names, e.g. America/New_York, Europe/Berlin", + "scheduleActive": "Schedule", + "disabled": "Disabled", + "daySun": "Sun", + "dayMon": "Mon", + "dayTue": "Tue", + "dayWed": "Wed", + "dayThu": "Thu", + "dayFri": "Fri", + "daySat": "Sat", + "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key" }, "auditLog": { "title": "Log ng Audit", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Mga combo", @@ -864,7 +892,12 @@ "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", "a2aQuickStartStep3": "Subaybayan at kontrolin ang mga gawain gamit ang `tasks/get` at `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Nilo-load ang MCP dashboard...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Mga setting", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "o alisin ang field ng passwordHash", "restartServerWithNewPassword": "I-restart ang server - gagamitin nito ang bagong password", "backToLogin": "Bumalik sa Login", - "forgotPassword": "Nakalimutan ang password?" + "forgotPassword": "Nakalimutan ang password?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Para sa mga modelo ng pamilya ng GitHub Codex, panatilihing gh/codex-model ang modelo; awtomatikong pinipili /tugon ng router.", "troubleshootingTestConnection": "Gamitin ang Dashboard > Mga Provider > Subukan ang Koneksyon bago subukan mula sa mga IDE o external na kliyente.", "troubleshootingCircuitBreaker": "Kung ipinapakita ng provider na bukas ang circuit breaker, hintayin ang cooldown o tingnan ang page ng Health para sa mga detalye.", - "troubleshootingOAuth": "Para sa mga provider ng OAuth, muling i-authenticate kung mag-e-expire ang mga token. Suriin ang tagapagpahiwatig ng katayuan ng provider card." + "troubleshootingOAuth": "Para sa mga provider ng OAuth, muling i-authenticate kung mag-e-expire ang mga token. Suriin ang tagapagpahiwatig ng katayuan ng provider card.", + "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." }, "legal": { "privacyPolicy": "Patakaran sa Privacy", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index f485f1a602..e8bb32036b 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -103,7 +103,9 @@ "endpoints": "Punkty końcowe", "playground": "Plac zabaw", "agents": "Agenci", - "cliToolsShort": "Narzędzia" + "cliToolsShort": "Narzędzia", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Uprawnienia: {name}", "allowAllDesc": "Ten klucz umożliwia dostęp do wszystkich dostępnych modeli.", "restrictDesc": "Ten klucz umożliwia dostęp do {selectedCount} z {totalModels} modeli.", - "selectedCount": "Wybrano {count}" + "selectedCount": "Wybrano {count}", + "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": "Dziennik audytu", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Kombinacje", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Ustawienia", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "lub usuń pole hasłoHash", "restartServerWithNewPassword": "Zrestartuj serwer - będzie używał nowego hasła", "backToLogin": "Powrót do logowania", - "forgotPassword": "Zapomniałeś hasła?" + "forgotPassword": "Zapomniałeś hasła?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "W przypadku modeli z rodziny GitHub Codex zachowaj model jako gh/codex-model; router wybiera opcję /odpowiada automatycznie.", "troubleshootingTestConnection": "Użyj Panelu sterowania > Dostawcy > Testuj połączenie przed testowaniem z IDE lub klientów zewnętrznych.", "troubleshootingCircuitBreaker": "Jeśli dostawca pokazuje, że wyłącznik jest otwarty, poczekaj na ochłodzenie lub sprawdź stronę Zdrowie, aby uzyskać szczegółowe informacje.", - "troubleshootingOAuth": "W przypadku dostawców OAuth należy ponownie uwierzytelnić, jeśli tokeny wygasną. Sprawdź wskaźnik stanu karty dostawcy." + "troubleshootingOAuth": "W przypadku dostawców OAuth należy ponownie uwierzytelnić, jeśli tokeny wygasną. Sprawdź wskaźnik stanu karty dostawcy.", + "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." }, "legal": { "privacyPolicy": "Polityka prywatności", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 4b5e0fd6b6..5342a6bfd4 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -104,7 +104,8 @@ "endpoints": "Endpoints", "playground": "Playground", "agents": "Agentes", - "cliToolsShort": "Ferramentas" + "cliToolsShort": "Ferramentas", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -289,7 +290,8 @@ "permissionsTitle": "Permissões: {name}", "allowAllDesc": "Esta chave pode acessar todos os modelos disponíveis.", "restrictDesc": "Esta chave pode acessar {selectedCount} de {totalModels} modelos.", - "selectedCount": "{count} selecionados" + "selectedCount": "{count} selecionados", + "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key" }, "auditLog": { "title": "Log de Auditoria", @@ -569,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combos", @@ -897,7 +904,12 @@ "a2aQuickStartStep2": "Envie requisições JSON-RPC para `POST /a2a` usando `message/send` ou `message/stream`.", "a2aQuickStartStep3": "Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`.", "completionsLegacy": "Completions (Legacy)", - "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" + "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": "Carregando painel MCP...", @@ -1429,7 +1441,24 @@ "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)" + "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" }, "settings": { "title": "Configurações", @@ -2249,7 +2278,8 @@ "orRemovePasswordHashField": "ou remova o campo passwordHash", "restartServerWithNewPassword": "Reinicie o servidor - ele usará a nova senha", "backToLogin": "Voltar para o Login", - "forgotPassword": "Esqueceu a senha?" + "forgotPassword": "Esqueceu a senha?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2447,7 +2477,16 @@ "troubleshootingCodexFamily": "Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; o roteador seleciona /responses automaticamente.", "troubleshootingTestConnection": "Use Painel > Provedores > Testar Conexão antes de testar por IDEs ou clientes externos.", "troubleshootingCircuitBreaker": "Se um provedor mostrar circuit breaker aberto, aguarde o cooldown ou verifique a página Health para detalhes.", - "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status no card do provedor." + "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status no card do provedor.", + "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." }, "legal": { "privacyPolicy": "Política de Privacidade", @@ -2536,7 +2575,13 @@ "binaryName": "Nome do Binário", "versionCommand": "Comando de Versão", "spawnArgs": "Argumentos", - "addAgent": "Adicionar Agente" + "addAgent": "Adicionar Agente", + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2560,5 +2605,41 @@ "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" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index aaff5045d8..08db574d9c 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -103,7 +103,9 @@ "themeCyan": "Ciano", "playground": "Playground", "agents": "Agentes", - "cliToolsShort": "Ferramentas" + "cliToolsShort": "Ferramentas", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Permissões: {name}", "allowAllDesc": "Esta chave pode acessar todos os modelos disponíveis.", "restrictDesc": "Esta chave pode acessar {selectedCount} de modelos {totalModels}.", - "selectedCount": "{count} selecionado" + "selectedCount": "{count} selecionado", + "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": "Registro de auditoria", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combos", @@ -864,7 +892,12 @@ "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" + "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." }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -1408,7 +1441,24 @@ "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)" + "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" }, "settings": { "title": "Configurações", @@ -2228,7 +2278,8 @@ "orRemovePasswordHashField": "ou remova o campo passwordHash", "restartServerWithNewPassword": "Reinicie o servidor - ele usará a nova senha", "backToLogin": "Voltar ao login", - "forgotPassword": "Esqueceu a senha?" + "forgotPassword": "Esqueceu a senha?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2426,7 +2477,16 @@ "troubleshootingCodexFamily": "Para modelos da família GitHub Codex, mantenha o modelo como gh/codex-model; roteador seleciona /respostas automaticamente.", "troubleshootingTestConnection": "Use Painel > Provedores > Testar conexão antes de testar em IDEs ou clientes externos.", "troubleshootingCircuitBreaker": "Se um provedor mostrar o disjuntor aberto, aguarde o resfriamento ou verifique a página de integridade para obter detalhes.", - "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor." + "troubleshootingOAuth": "Para provedores OAuth, autentique novamente se os tokens expirarem. Verifique o indicador de status do cartão do provedor.", + "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." }, "legal": { "privacyPolicy": "Política de Privacidade", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 20ee34fbd4..496bc2b56e 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -103,7 +103,9 @@ "endpoints": "Puncte finale", "playground": "Playground", "agents": "Agenți", - "cliToolsShort": "Instrumente" + "cliToolsShort": "Instrumente", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Permisiuni: {name}", "allowAllDesc": "Această cheie poate accesa toate modelele disponibile.", "restrictDesc": "Această cheie poate accesa {selectedCount} din {totalModels} modele.", - "selectedCount": "{count} selectat" + "selectedCount": "{count} selectat", + "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": "Jurnal de audit", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combo-uri", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Setări", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "sau eliminați câmpul passwordHash", "restartServerWithNewPassword": "Reporniți serverul - va folosi noua parolă", "backToLogin": "Înapoi la Logare", - "forgotPassword": "Ai uitat parola?" + "forgotPassword": "Ai uitat parola?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Pentru modelele din familia GitHub Codex, păstrați modelul ca gh/codex-model; routerul selectează/răspunde automat.", "troubleshootingTestConnection": "Utilizați Tabloul de bord > Furnizori > Testați conexiunea înainte de a testa de la IDE-uri sau clienți externi.", "troubleshootingCircuitBreaker": "Dacă un furnizor arată întrerupătorul deschis, așteptați răcirea sau verificați pagina Sănătate pentru detalii.", - "troubleshootingOAuth": "Pentru furnizorii OAuth, re-autentificați-vă dacă tokenurile expiră. Verificați indicatorul de stare a cardului furnizorului." + "troubleshootingOAuth": "Pentru furnizorii OAuth, re-autentificați-vă dacă tokenurile expiră. Verificați indicatorul de stare a cardului furnizorului.", + "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." }, "legal": { "privacyPolicy": "Politica de confidențialitate", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 2ad3e3f8fb..b78821c10f 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -103,7 +103,9 @@ "endpoints": "Конечные точки", "playground": "Площадка", "agents": "Агенты", - "cliToolsShort": "Инструменты" + "cliToolsShort": "Инструменты", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Темы", @@ -268,7 +270,28 @@ "permissionsTitle": "Разрешения: {name}", "allowAllDesc": "Этот ключ дает доступ ко всем доступным моделям.", "restrictDesc": "Этот ключ может получить доступ к {selectedCount} из моделей {totalModels}.", - "selectedCount": "{count} выбрано" + "selectedCount": "{count} выбрано", + "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": "Журнал аудита", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Комбо", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Настройки", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "или удалите поле пароляHash", "restartServerWithNewPassword": "Перезагрузите сервер - он будет использовать новый пароль.", "backToLogin": "Вернуться к входу", - "forgotPassword": "Забыли пароль?" + "forgotPassword": "Забыли пароль?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "ОмниРоут", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Для моделей семейства GitHub Codex сохраните модель как gh/codex-model; Маршрутизатор выбирает / отвечает автоматически.", "troubleshootingTestConnection": "Используйте «Панель мониторинга» > «Поставщики» > «Проверить соединение» перед тестированием из IDE или внешних клиентов.", "troubleshootingCircuitBreaker": "Если поставщик услуг показывает, что автоматический выключатель разомкнут, дождитесь охлаждения или посетите страницу «Здоровье» для получения подробной информации.", - "troubleshootingOAuth": "Для поставщиков OAuth выполните повторную аутентификацию, если срок действия токенов истечет. Проверьте индикатор состояния карты провайдера." + "troubleshootingOAuth": "Для поставщиков OAuth выполните повторную аутентификацию, если срок действия токенов истечет. Проверьте индикатор состояния карты провайдера.", + "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." }, "legal": { "privacyPolicy": "Политика конфиденциальности", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index aa204cd67d..c4e765dadf 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -103,7 +103,9 @@ "endpoints": "Koncové body", "playground": "Ihrisko", "agents": "Agenti", - "cliToolsShort": "Nástroje" + "cliToolsShort": "Nástroje", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Povolenia: {name}", "allowAllDesc": "Tento kľúč umožňuje prístup ku všetkým dostupným modelom.", "restrictDesc": "Tento kľúč má prístup k {selectedCount} z {totalModels} modelov.", - "selectedCount": "{count} vybraté" + "selectedCount": "{count} vybraté", + "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": "Audit Log", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "kombá", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Nastavenia", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "alebo odstráňte pole passwordHash", "restartServerWithNewPassword": "Reštartujte server - použije nové heslo", "backToLogin": "Späť na Prihlásenie", - "forgotPassword": "Zabudli ste heslo?" + "forgotPassword": "Zabudli ste heslo?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Pre modely rodiny GitHub Codex ponechajte model ako gh/codex-model; router vyberá / odpovedá automaticky.", "troubleshootingTestConnection": "Pred testovaním z IDE alebo externých klientov použite Dashboard > Providers > Test Connection.", "troubleshootingCircuitBreaker": "Ak poskytovateľ zobrazí istič otvorený, počkajte na vychladnutie alebo skontrolujte stránku Zdravie, kde nájdete podrobnosti.", - "troubleshootingOAuth": "V prípade poskytovateľov OAuth znova overte, ak platnosť tokenov vyprší. Skontrolujte indikátor stavu karty poskytovateľa." + "troubleshootingOAuth": "V prípade poskytovateľov OAuth znova overte, ak platnosť tokenov vyprší. Skontrolujte indikátor stavu karty poskytovateľa.", + "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." }, "legal": { "privacyPolicy": "Zásady ochrany osobných údajov", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index d5701b370c..3365e88d01 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -103,7 +103,9 @@ "endpoints": "Ändpunkter", "playground": "Lekplats", "agents": "Agenter", - "cliToolsShort": "Verktyg" + "cliToolsShort": "Verktyg", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Behörigheter: {name}", "allowAllDesc": "Denna nyckel kan komma åt alla tillgängliga modeller.", "restrictDesc": "Denna nyckel kan komma åt {selectedCount} av {totalModels} modeller.", - "selectedCount": "{count} har valts" + "selectedCount": "{count} har valts", + "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": "Revisionslogg", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combos", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Inställningar", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "eller ta bort fältet passwordHash", "restartServerWithNewPassword": "Starta om servern - den kommer att använda det nya lösenordet", "backToLogin": "Tillbaka till inloggning", - "forgotPassword": "Glömt lösenordet?" + "forgotPassword": "Glömt lösenordet?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "För GitHub Codex-familjens modeller, behåll modellen som gh/codex-model; routern väljer /svarar automatiskt.", "troubleshootingTestConnection": "Använd Dashboard > Leverantörer > Testa anslutning innan du testar från IDE:er eller externa klienter.", "troubleshootingCircuitBreaker": "Om en leverantör visar att strömbrytaren är öppen, vänta på nedkylning eller kolla Health-sidan för detaljer.", - "troubleshootingOAuth": "För OAuth-leverantörer, autentisera på nytt om tokens löper ut. Kontrollera leverantörskortets statusindikator." + "troubleshootingOAuth": "För OAuth-leverantörer, autentisera på nytt om tokens löper ut. Kontrollera leverantörskortets statusindikator.", + "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." }, "legal": { "privacyPolicy": "Sekretesspolicy", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 300963fd57..d9ac5da94a 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -103,7 +103,9 @@ "endpoints": "จุดปลายทาง", "playground": "Playground", "agents": "เอเจนต์", - "cliToolsShort": "เครื่องมือ" + "cliToolsShort": "เครื่องมือ", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "ธีมส์", @@ -268,7 +270,28 @@ "permissionsTitle": "สิทธิ์: {name}", "allowAllDesc": "กุญแจนี้เข้าได้ทุกรุ่น", "restrictDesc": "คีย์นี้สามารถเข้าถึงโมเดล {selectedCount} จาก {totalModels}", - "selectedCount": "{count} เลือกแล้ว" + "selectedCount": "{count} เลือกแล้ว", + "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": "บันทึกการตรวจสอบ", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "คอมโบ", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "การตั้งค่า", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "หรือลบฟิลด์รหัสผ่านแฮช", "restartServerWithNewPassword": "รีสตาร์ทเซิร์ฟเวอร์ - จะใช้รหัสผ่านใหม่", "backToLogin": "กลับไปที่เข้าสู่ระบบ", - "forgotPassword": "ลืมรหัสผ่าน?" + "forgotPassword": "ลืมรหัสผ่าน?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "สำหรับโมเดลตระกูล GitHub Codex ให้เก็บโมเดลเป็น gh/codex-model; เราเตอร์เลือก / ตอบสนองโดยอัตโนมัติ", "troubleshootingTestConnection": "ใช้แดชบอร์ด > ผู้ให้บริการ > ทดสอบการเชื่อมต่อ ก่อนการทดสอบจาก IDE หรือไคลเอนต์ภายนอก", "troubleshootingCircuitBreaker": "หากผู้ให้บริการแสดงเซอร์กิตเบรกเกอร์เปิดอยู่ ให้รอคูลดาวน์หรือตรวจสอบหน้าสุขภาพเพื่อดูรายละเอียด", - "troubleshootingOAuth": "สำหรับผู้ให้บริการ OAuth ให้ตรวจสอบสิทธิ์อีกครั้งหากโทเค็นหมดอายุ ตรวจสอบตัวบ่งชี้สถานะบัตรผู้ให้บริการ" + "troubleshootingOAuth": "สำหรับผู้ให้บริการ OAuth ให้ตรวจสอบสิทธิ์อีกครั้งหากโทเค็นหมดอายุ ตรวจสอบตัวบ่งชี้สถานะบัตรผู้ให้บริการ", + "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." }, "legal": { "privacyPolicy": "นโยบายความเป็นส่วนตัว", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index a52b8b5cd8..ab74d9b816 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -103,7 +103,9 @@ "endpoints": "Кінцеві точки", "playground": "Playground", "agents": "Агенти", - "cliToolsShort": "Інструменти" + "cliToolsShort": "Інструменти", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "permissionsTitle": "Дозволи: {name}", "allowAllDesc": "Цей ключ може отримати доступ до всіх доступних моделей.", "restrictDesc": "Цей ключ має доступ до {selectedCount} з {totalModels} моделей.", - "selectedCount": "Вибрано {count}" + "selectedCount": "Вибрано {count}", + "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": "Журнал аудиту", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Комбо", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Налаштування", @@ -2216,7 +2266,8 @@ "orRemovePasswordHashField": "або видаліть поле passwordHash", "restartServerWithNewPassword": "Перезапустіть сервер - він використовуватиме новий пароль", "backToLogin": "Назад до входу", - "forgotPassword": "Забули пароль?" + "forgotPassword": "Забули пароль?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "troubleshootingCodexFamily": "Для моделей сімейства GitHub Codex збережіть модель як gh/codex-model; маршрутизатор вибирає /відповідає автоматично.", "troubleshootingTestConnection": "Перед тестуванням із IDE або зовнішніх клієнтів скористайтеся інструментальною панеллю > Постачальники > Перевірити з’єднання.", "troubleshootingCircuitBreaker": "Якщо постачальник показує, що автоматичний вимикач розімкнуто, дочекайтеся охолодження або подробиці перевірте на сторінці «Стан».", - "troubleshootingOAuth": "Для постачальників OAuth повторна автентифікація, якщо термін дії маркерів закінчився. Перевірте індикатор стану картки провайдера." + "troubleshootingOAuth": "Для постачальників OAuth повторна автентифікація, якщо термін дії маркерів закінчився. Перевірте індикатор стану картки провайдера.", + "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." }, "legal": { "privacyPolicy": "Політика конфіденційності", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index b9dbafcbc3..5951323418 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -103,7 +103,9 @@ "endpoints": "Điểm cuối", "playground": "Playground", "agents": "Tác nhân", - "cliToolsShort": "Công cụ" + "cliToolsShort": "Công cụ", + "autoCombo": "Auto Combo", + "searchTools": "Search Tools" }, "themesPage": { "title": "Themes", @@ -268,7 +270,28 @@ "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" + "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", @@ -548,7 +571,12 @@ } } } - } + }, + "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." }, "combos": { "title": "Combo", @@ -864,7 +892,12 @@ "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" + "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...", @@ -1396,7 +1429,24 @@ "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)" + "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" }, "settings": { "title": "Cài đặt", @@ -2216,7 +2266,8 @@ "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?" + "forgotPassword": "Quên mật khẩu?", + "defaultPasswordHint": "Default password: 123456 (unless INITIAL_PASSWORD was set)" }, "landing": { "brandName": "OmniRoute", @@ -2414,7 +2465,16 @@ "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." + "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." }, "legal": { "privacyPolicy": "Chính sách bảo mật", @@ -2503,7 +2563,13 @@ "binaryName": "Binary Name", "versionCommand": "Version Command", "spawnArgs": "Spawn Args", - "addAgent": "Add Agent" + "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!" }, "autoCombo": { "title": "Auto-Combo Engine", @@ -2527,5 +2593,41 @@ "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" } } diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 41a92ff06e..6218245122 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -290,7 +290,8 @@ "permissionsTitle": "权限:{name}", "allowAllDesc": "该密钥可访问所有可用模型。", "restrictDesc": "该密钥可访问 {totalModels} 个模型中的 {selectedCount} 个。", - "selectedCount": "已选择 {count} 个" + "selectedCount": "已选择 {count} 个", + "keyOnlyAvailableAtCreation": "Full key available only at creation time — copy it when you first create the key" }, "auditLog": { "title": "审核日志", @@ -606,7 +607,12 @@ } } } - } + }, + "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." }, "combos": { "title": "组合", @@ -2593,7 +2599,13 @@ "binaryName": "可执行文件名", "versionCommand": "版本命令", "spawnArgs": "启动参数", - "addAgent": "添加智能体" + "addAgent": "添加智能体", + "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!" }, "autoCombo": { "title": "自动组合引擎",