chore(i18n): drop unused ai_providers namespace and providersPage orphans

- Remove the legacy ai_providers.* block (~268 keys per locale) — only
  nav.ai_providers under a different namespace is still referenced
- Remove providersPage.{disconnected,error,actions.back,
  actions.openModelCatalog,ampcode.behaviorSection,detail.empty,
  status.notAvailable,modelCatalog.{loading,openAction,summaryCount,
  summaryError,summaryTitle}} which were never wired up after the
  ProvidersWorkbench rewrite
This commit is contained in:
LTbinglingfeng
2026-05-25 23:14:03 +08:00
parent 4142d91e9b
commit 4a7dbf2d45
4 changed files with 8 additions and 1164 deletions
+2 -291
View File
@@ -192,275 +192,6 @@
"edit_modal_key_label": "API Key:",
"delete_confirm": "Are you sure you want to delete this API key?"
},
"ai_providers": {
"title": "AI Providers Configuration",
"gemini_title": "Gemini API Keys",
"gemini_add_button": "Add Key",
"gemini_empty_title": "No Gemini Keys",
"gemini_empty_desc": "Click the button above to add the first key",
"gemini_item_title": "Gemini Key",
"gemini_add_modal_title": "Add Gemini API Key",
"gemini_add_modal_key_label": "API Keys:",
"gemini_add_modal_key_placeholder": "Enter Gemini API key",
"gemini_add_modal_key_hint": "Add keys one by one and optionally specify a Base URL.",
"gemini_keys_add_btn": "Add Key",
"gemini_base_url_label": "Base URL (Optional):",
"gemini_base_url_placeholder": "e.g.: https://generativelanguage.googleapis.com",
"gemini_add_modal_proxy_label": "Proxy URL (Optional):",
"gemini_add_modal_proxy_placeholder": "e.g.: socks5://proxy.example.com:1080",
"gemini_models_label": "Custom Models (Optional):",
"gemini_models_hint": "Leave empty to allow all models, or add name[, alias] entries to limit/alias them for this key.",
"gemini_models_add_btn": "Add Model",
"gemini_models_fetch_button": "Fetch via /v1beta/models",
"gemini_models_fetch_title": "Pick Models from Gemini /v1beta/models",
"gemini_models_fetch_hint": "Call GET /v1beta/models per the Gemini API. By default, it sends x-goog-api-key from the API Key field, merged with your custom headers.",
"gemini_models_fetch_url_label": "Request URL",
"gemini_models_fetch_refresh": "Refresh",
"gemini_models_fetch_loading": "Fetching models from Gemini /v1beta/models...",
"gemini_models_fetch_empty": "No models returned. Please check Base URL, API key, or headers.",
"gemini_models_fetch_error": "Failed to fetch Gemini models",
"gemini_models_fetch_apply": "Add selected models",
"model_discovery_select_visible": "Select current list",
"model_discovery_clear_selection": "Clear selection",
"model_discovery_selected_count": "{{count}} selected",
"gemini_models_search_label": "Search models",
"gemini_models_search_placeholder": "Filter by name, alias, or description",
"gemini_models_search_empty": "No models match your search. Try a different keyword.",
"gemini_models_fetch_added": "{{count}} new models added",
"gemini_models_count": "Models Count",
"gemini_edit_modal_title": "Edit Gemini API Key",
"gemini_edit_modal_key_label": "API Key:",
"gemini_delete_confirm": "Are you sure you want to delete this Gemini key?",
"excluded_models_label": "Excluded models (optional):",
"excluded_models_placeholder": "Comma or newline separated, e.g. gemini-1.5-pro, gemini-1.5-flash",
"excluded_models_hint": "Leave empty to allow all models; values are trimmed and deduplicated automatically.",
"excluded_models_count": "Excluding {{count}} models",
"prefix_label": "Prefix (Optional):",
"prefix_placeholder": "e.g.: team-a",
"prefix_hint": "When set, call models as prefix/<model> to target this entry.",
"priority_label": "Priority (Optional):",
"priority_hint": "Higher values are preferred. Leave empty for default (0).",
"config_toggle_label": "Enabled",
"config_disabled_badge": "Disabled",
"codex_title": "Codex API Configuration",
"codex_add_button": "Add Configuration",
"codex_empty_title": "No Codex Configuration",
"codex_empty_desc": "Click the button above to add the first configuration",
"codex_item_title": "Codex Configuration",
"codex_add_modal_title": "Add Codex API Configuration",
"codex_add_modal_key_label": "API Key:",
"codex_add_modal_key_placeholder": "Please enter Codex API key",
"codex_add_modal_url_label": "Base URL (Required):",
"codex_add_modal_url_placeholder": "e.g.: https://api.example.com",
"codex_add_modal_proxy_label": "Proxy URL (Optional):",
"codex_add_modal_proxy_placeholder": "e.g.: socks5://proxy.example.com:1080",
"codex_websockets_label": "Websockets",
"codex_websockets_hint": "Enable Responses API websocket transport for this key.",
"codex_models_label": "Custom Models (Optional):",
"codex_models_hint": "Leave empty to allow all models, or add name[, alias] entries to limit/alias them.",
"codex_models_add_btn": "Add Model",
"codex_models_fetch_button": "Fetch via /v1/models",
"codex_models_fetch_title": "Pick Models from /v1/models",
"codex_models_fetch_hint": "Call GET /v1/models using the Base URL above, sending the API key as Bearer (if provided) and merging your custom headers.",
"codex_models_fetch_url_label": "Request URL",
"codex_models_fetch_refresh": "Refresh",
"codex_models_fetch_loading": "Fetching models from /v1/models...",
"codex_models_fetch_empty": "No models returned. Please check Base URL, API key, or headers.",
"codex_models_fetch_error": "Failed to fetch models",
"codex_models_fetch_apply": "Add selected models",
"codex_models_search_label": "Search models",
"codex_models_search_placeholder": "Filter by name, alias, or description",
"codex_models_search_empty": "No models match your search. Try a different keyword.",
"codex_models_fetch_added": "{{count}} new models added",
"codex_models_count": "Models Count",
"codex_edit_modal_title": "Edit Codex API Configuration",
"codex_edit_modal_key_label": "API Key:",
"codex_edit_modal_url_label": "Base URL (Required):",
"codex_edit_modal_proxy_label": "Proxy URL (Optional):",
"codex_delete_confirm": "Are you sure you want to delete this Codex configuration?",
"claude_title": "Claude API Configuration",
"claude_add_button": "Add Configuration",
"claude_empty_title": "No Claude Configuration",
"claude_empty_desc": "Click the button above to add the first configuration",
"claude_item_title": "Claude Configuration",
"claude_add_modal_title": "Add Claude API Configuration",
"claude_add_modal_key_label": "API Key:",
"claude_add_modal_key_placeholder": "Please enter Claude API key",
"claude_add_modal_url_label": "Base URL (Optional):",
"claude_add_modal_url_placeholder": "e.g.: https://api.anthropic.com",
"claude_add_modal_proxy_label": "Proxy URL (Optional):",
"claude_add_modal_proxy_placeholder": "e.g.: socks5://proxy.example.com:1080",
"claude_edit_modal_title": "Edit Claude API Configuration",
"claude_edit_modal_key_label": "API Key:",
"claude_edit_modal_url_label": "Base URL (Optional):",
"claude_edit_modal_proxy_label": "Proxy URL (Optional):",
"claude_delete_confirm": "Are you sure you want to delete this Claude configuration?",
"claude_models_label": "Custom Models (Optional):",
"claude_models_hint": "Leave empty to allow all models, or add name[, alias] entries to limit/alias them.",
"claude_models_add_btn": "Add Model",
"claude_models_count": "Models Count",
"claude_models_fetch_button": "Fetch via /v1/models",
"claude_models_fetch_title": "Pick Models from Claude /v1/models",
"claude_models_fetch_hint": "Call GET /v1/models with Anthropic headers. By default, this sends x-api-key and anthropic-version: 2023-06-01, merged with your custom headers.",
"claude_models_fetch_url_label": "Request URL",
"claude_models_fetch_refresh": "Refresh",
"claude_models_fetch_loading": "Fetching models from Claude /v1/models...",
"claude_models_fetch_empty": "No models returned. Please check Base URL, API key, or headers.",
"claude_models_fetch_error": "Failed to fetch Claude models",
"claude_models_fetch_apply": "Add selected models",
"claude_models_search_label": "Search models",
"claude_models_search_placeholder": "Filter by name, alias, or description",
"claude_models_search_empty": "No models match your search. Try a different keyword.",
"claude_models_fetch_added": "{{count}} new models added",
"claude_test_title": "Connection Test",
"claude_test_hint": "Send a test request to /v1/messages using Anthropic headers to verify this configuration.",
"claude_test_select_placeholder": "Choose from current models",
"claude_test_select_empty": "No models configured. Add models first",
"claude_test_action": "Test",
"claude_test_running": "Sending Claude test request...",
"claude_test_timeout": "Test request timed out after {{seconds}} seconds.",
"claude_test_success": "Test succeeded. Claude model responded.",
"claude_test_failed": "Test failed",
"claude_test_key_required": "Please provide a Claude API key or set x-api-key in custom headers",
"claude_test_model_required": "Please select a model to test",
"claude_test_endpoint_invalid": "Unable to build a valid Claude /v1/messages endpoint",
"claude_cloak_title": "Request Cloaking (Optional):",
"claude_cloak_toggle_label": "Enable",
"claude_cloak_toggle_aria": "Toggle request cloaking",
"claude_cloak_hint": "Cloaking disguises requests to appear as coming from the official Claude Code CLI for non-Claude-Code clients.",
"claude_cloak_mode_label": "Mode:",
"claude_cloak_mode_hint": "auto: cloak only when client is not Claude Code; always: always cloak; never: never cloak.",
"claude_cloak_mode_auto": "Auto (non-Claude-Code only)",
"claude_cloak_mode_always": "Always",
"claude_cloak_mode_never": "Never",
"claude_cloak_strict_label": "Strict mode:",
"claude_cloak_strict_hint": "When enabled, strip user system messages and keep only the Claude Code prompt.",
"claude_cloak_sensitive_words_label": "Sensitive words (optional):",
"claude_cloak_sensitive_words_placeholder": "Comma or newline separated, e.g. internal-project",
"claude_cloak_sensitive_words_hint": "These words are obfuscated with zero-width characters.",
"claude_cloak_sensitive_words_count": "Sensitive words",
"vertex_title": "Vertex API Configuration",
"vertex_add_button": "Add Configuration",
"vertex_empty_title": "No Vertex Configuration",
"vertex_empty_desc": "Click the button above to add the first configuration",
"vertex_item_title": "Vertex Configuration",
"vertex_add_modal_title": "Add Vertex API Configuration",
"vertex_add_modal_key_label": "API Key:",
"vertex_add_modal_key_placeholder": "Please enter Vertex API key",
"vertex_add_modal_url_label": "Base URL:",
"vertex_add_modal_url_placeholder": "e.g.: https://example.com/api",
"vertex_add_modal_proxy_label": "Proxy URL (Optional):",
"vertex_add_modal_proxy_placeholder": "e.g.: socks5://proxy.example.com:1080",
"vertex_edit_modal_title": "Edit Vertex API Configuration",
"vertex_edit_modal_key_label": "API Key:",
"vertex_edit_modal_url_label": "Base URL:",
"vertex_edit_modal_proxy_label": "Proxy URL (Optional):",
"vertex_delete_confirm": "Are you sure you want to delete this Vertex configuration?",
"vertex_models_label": "Model aliases:",
"vertex_models_add_btn": "Add Mapping",
"vertex_models_count": "Alias count",
"ampcode_title": "Amp CLI Integration (ampcode)",
"ampcode_modal_title": "Configure Ampcode",
"ampcode_upstream_url_label": "Upstream URL",
"ampcode_upstream_url_placeholder": "e.g. https://ampcode.com",
"ampcode_upstream_url_hint": "Optional. Leave empty to use the default/auto-discovered control plane URL.",
"ampcode_upstream_api_key_label": "Upstream API Key (Amp Official)",
"ampcode_upstream_api_key_placeholder": "Enter sk-amp... (leave empty to keep current)",
"ampcode_upstream_api_key_hint": "Optional. Leaving it empty will not change the current Amp official key. Use the button below to clear it.",
"ampcode_upstream_api_key_current": "Current Amp official key: {{key}}",
"ampcode_clear_upstream_api_key": "Clear official key",
"ampcode_clear_upstream_api_key_confirm": "Are you sure you want to clear the Ampcode upstream API key (Amp official)?",
"ampcode_upstream_api_keys_label": "Multi-upstream API key routing",
"ampcode_upstream_api_keys_hint": "Bind different Amp upstream API keys to specific client API keys. Client keys can be separated by commas or new lines.",
"ampcode_upstream_api_keys_add_btn": "Add upstream mapping",
"ampcode_upstream_api_keys_upstream_placeholder": "Upstream API key (sk-amp-...)",
"ampcode_upstream_api_keys_clients_placeholder": "Client API keys, separated by commas or new lines",
"ampcode_upstream_api_keys_item_title": "Upstream mapping #{{index}}",
"ampcode_upstream_api_keys_count": "Upstream mappings",
"ampcode_force_model_mappings_label": "Force model mappings",
"ampcode_force_model_mappings_hint": "When enabled, mappings override local API-key availability checks.",
"ampcode_model_mappings_label": "Model mappings (from → to)",
"ampcode_model_mappings_hint": "Rewrites model names in Amp requests. Leave empty to disable mappings.",
"ampcode_model_mappings_add_btn": "Add mapping",
"ampcode_model_mappings_from_placeholder": "from model (source)",
"ampcode_model_mappings_to_placeholder": "to model (target)",
"ampcode_model_mappings_count": "Mappings Count",
"ampcode_lists_overwrite_title": "Overwrite list settings",
"ampcode_lists_overwrite_confirm": "Existing multi-upstream/model mapping lists could not be loaded. Continuing may overwrite or clear them. Continue?",
"ampcode_mappings_overwrite_confirm": "Existing mappings could not be loaded. Continuing may overwrite or clear them. Continue?",
"openai_title": "OpenAI Compatible Providers",
"openai_add_button": "Add Provider",
"openai_empty_title": "No OpenAI Compatible Providers",
"openai_empty_desc": "Click the button above to add the first provider",
"openai_filtered_empty_title": "No matching providers",
"openai_filtered_empty_desc": "No providers match the current model filter. Clear the filter and try again.",
"sort_by_name": "Sort by Name",
"sort_ascending": "Sort ascending",
"sort_asc_short": "Asc",
"sort_by_priority": "Sort by Priority",
"sort_by_recent_success": "Sort by Recent Success",
"sort_descending": "Sort descending",
"sort_desc_short": "Desc",
"openai_test_model": "Test Model",
"openai_add_modal_title": "Add OpenAI Compatible Provider",
"openai_add_modal_name_label": "Provider Name:",
"openai_add_modal_name_placeholder": "e.g.: openrouter",
"openai_add_modal_url_label": "Base URL:",
"openai_add_modal_url_placeholder": "e.g.: https://openrouter.ai/api/v1",
"openai_add_modal_keys_label": "API Keys",
"openai_edit_modal_keys_label": "API Keys",
"openai_keys_hint": "Add each key separately with an optional proxy URL to keep things organized.",
"openai_keys_add_btn": "Add Key",
"openai_key_placeholder": "sk-... key",
"openai_proxy_placeholder": "Optional proxy URL (e.g. socks5://...)",
"openai_add_modal_models_label": "Model List (name[, alias] one per line):",
"openai_models_hint": "Example: gpt-4o-mini or moonshotai/kimi-k2:free, kimi-k2",
"openai_model_name_placeholder": "Model name, e.g. moonshotai/kimi-k2:free",
"openai_model_alias_placeholder": "Model alias (optional)",
"openai_models_add_btn": "Add Model",
"openai_models_fetch_button": "Fetch via /models",
"openai_models_fetch_title": "Pick Models from /models",
"openai_models_fetch_hint": "Call the /models endpoint using the Base URL above, sending the first API key as Bearer plus custom headers.",
"openai_models_fetch_url_label": "Request URL",
"openai_models_fetch_refresh": "Refresh",
"openai_models_fetch_loading": "Fetching models from /models...",
"openai_models_fetch_empty": "No models returned. Please check the endpoint or auth.",
"openai_models_fetch_error": "Failed to fetch models",
"openai_models_fetch_back": "Back to edit",
"openai_models_fetch_apply": "Add selected models",
"openai_models_search_label": "Search models",
"openai_models_search_placeholder": "Filter by name, alias, or description",
"openai_models_search_empty": "No models match your search. Try a different keyword.",
"openai_models_fetch_invalid_url": "Please enter a valid Base URL first",
"openai_models_fetch_added": "{{count}} new models added",
"openai_edit_modal_title": "Edit OpenAI Compatible Provider",
"openai_edit_modal_name_label": "Provider Name:",
"openai_edit_modal_url_label": "Base URL:",
"openai_edit_modal_models_label": "Model List (name[, alias] one per line):",
"openai_delete_confirm": "Are you sure you want to delete this OpenAI provider?",
"openai_keys_count": "Keys Count",
"openai_models_count": "Models Count",
"openai_test_title": "Connection Test",
"openai_test_hint": "Send a /chat/completions request with the current settings to verify availability.",
"openai_test_model_placeholder": "Model to test",
"openai_test_action": "Run Test",
"openai_test_running": "Sending test request...",
"openai_test_timeout": "Test request timed out after {{seconds}} seconds.",
"openai_test_success": "Test succeeded. The model responded.",
"openai_test_failed": "Test failed",
"openai_test_select_placeholder": "Choose from current models",
"openai_test_select_empty": "No models configured. Add models first",
"openai_test_single_action": "Test",
"openai_test_all_action": "Test All Keys",
"openai_test_all_hint": "Test connection status for all keys",
"openai_test_all_success": "All {{count}} keys passed the test",
"openai_test_all_failed": "All {{count}} keys failed the test",
"openai_test_all_partial": "Test completed: {{success}} passed, {{failed}} failed",
"model_search_placeholder": "Filter by models...",
"model_search_clear": "Clear",
"model_select_all": "Select All",
"model_filter_empty": "No models to filter"
},
"auth_files": {
"title": "Auth Files Management",
"title_section": "Auth Files",
@@ -1468,10 +1199,8 @@
"cancel": "Cancel",
"save": "Save",
"create": "Create",
"back": "Back",
"enable": "Enable",
"disable": "Disable",
"openModelCatalog": "Open model catalog"
"disable": "Disable"
},
"categories": {
"title": "Providers",
@@ -1513,13 +1242,11 @@
"disabled": "Disabled",
"notSet": "Not set",
"none": "None",
"notAvailable": "N/A",
"notConfigured": "Not configured",
"defaultSuffix": "(default)"
},
"detail": {
"title": "Details",
"empty": "Select a resource to view details",
"metadataTitle": "Metadata",
"fields": {
"identifier": "Identifier",
@@ -1585,7 +1312,6 @@
"addMapping": "Add key mapping",
"modelMappingsSection": "Model mappings",
"addModelMapping": "Add model mapping",
"behaviorSection": "Behavior",
"forceModelMappings": "Force model mappings",
"forceModelMappingsHint": "Requests that don't match a mapping are rejected"
},
@@ -1652,22 +1378,7 @@
}
},
"modelCatalog": {
"summaryTitle": "Model catalog",
"openAction": "Open catalog",
"notLoaded": "Not loaded",
"loading": "Loading",
"summaryCount": "{{count}} models",
"summaryError": "Failed to load"
},
"disconnected": {
"title": "Not connected",
"description": "Connect to the proxy service from the login page before managing providers.",
"action": "Go to connection"
},
"error": {
"title": "Failed to load",
"description": "Could not fetch provider config. Please try again.",
"retry": "Retry"
"notLoaded": "Not loaded"
}
}
}
+2 -291
View File
@@ -192,275 +192,6 @@
"edit_modal_key_label": "API-ключ:",
"delete_confirm": "Удалить этот API-ключ?"
},
"ai_providers": {
"title": "Конфигурация AI-провайдеров",
"gemini_title": "API-ключи Gemini",
"gemini_add_button": "Добавить ключ",
"gemini_empty_title": "Ключи Gemini отсутствуют",
"gemini_empty_desc": "Нажмите кнопку выше, чтобы добавить первый ключ",
"gemini_item_title": "Ключ Gemini",
"gemini_add_modal_title": "Добавление API-ключа Gemini",
"gemini_add_modal_key_label": "API-ключи:",
"gemini_add_modal_key_placeholder": "Введите API-ключ Gemini",
"gemini_add_modal_key_hint": "Добавляйте ключи по одному и при необходимости указывайте базовый URL.",
"gemini_keys_add_btn": "Добавить ключ",
"gemini_base_url_label": "Базовый URL (необязательно):",
"gemini_base_url_placeholder": "например: https://generativelanguage.googleapis.com",
"gemini_add_modal_proxy_label": "URL прокси (необязательно):",
"gemini_add_modal_proxy_placeholder": "например: socks5://proxy.example.com:1080",
"gemini_models_label": "Пользовательские модели (необязательно):",
"gemini_models_hint": "Оставьте пустым, чтобы разрешить все модели, или добавьте записи name[, alias], чтобы ограничить/переименовать их для этого ключа.",
"gemini_models_add_btn": "Добавить модель",
"gemini_models_fetch_button": "Получить через /v1beta/models",
"gemini_models_fetch_title": "Выбор моделей из Gemini /v1beta/models",
"gemini_models_fetch_hint": "Вызывает GET /v1beta/models по спецификации Gemini API. По умолчанию отправляется x-goog-api-key из поля API-ключа, объединённый с вашими пользовательскими заголовками.",
"gemini_models_fetch_url_label": "URL запроса",
"gemini_models_fetch_refresh": "Обновить",
"gemini_models_fetch_loading": "Получение моделей из Gemini /v1beta/models...",
"gemini_models_fetch_empty": "Модели не получены. Проверьте Base URL, API-ключ или заголовки.",
"gemini_models_fetch_error": "Не удалось получить модели Gemini",
"gemini_models_fetch_apply": "Добавить выбранные модели",
"model_discovery_select_visible": "Выбрать текущий список",
"model_discovery_clear_selection": "Очистить выбор",
"model_discovery_selected_count": "Выбрано: {{count}}",
"gemini_models_search_label": "Поиск моделей",
"gemini_models_search_placeholder": "Фильтр по имени, псевдониму или описанию",
"gemini_models_search_empty": "Нет подходящих моделей. Попробуйте другой запрос.",
"gemini_models_fetch_added": "Добавлено новых моделей: {{count}}",
"gemini_models_count": "Количество моделей",
"gemini_edit_modal_title": "Редактирование API-ключа Gemini",
"gemini_edit_modal_key_label": "API-ключ:",
"gemini_delete_confirm": "Удалить этот ключ Gemini?",
"excluded_models_label": "Исключённые модели (необязательно):",
"excluded_models_placeholder": "Через запятую или с новой строки, например gemini-1.5-pro, gemini-1.5-flash",
"excluded_models_hint": "Оставьте пустым, чтобы разрешить все модели; значения автоматически обрезаются и дедуплицируются.",
"excluded_models_count": "Исключено моделей: {{count}}",
"prefix_label": "Префикс (необязательно):",
"prefix_placeholder": "например: team-a",
"prefix_hint": "Если задано, обращайтесь к моделям как prefix/<model>, чтобы выбрать эту запись.",
"priority_label": "Приоритет (необязательно):",
"priority_hint": "Чем больше значение, тем выше приоритет. Оставьте пустым для значения по умолчанию (0).",
"config_toggle_label": "Включено",
"config_disabled_badge": "Отключено",
"codex_title": "Конфигурация Codex API",
"codex_add_button": "Добавить конфигурацию",
"codex_empty_title": "Конфигурации Codex отсутствуют",
"codex_empty_desc": "Нажмите кнопку выше, чтобы добавить первую конфигурацию",
"codex_item_title": "Конфигурация Codex",
"codex_add_modal_title": "Добавление конфигурации Codex API",
"codex_add_modal_key_label": "API-ключ:",
"codex_add_modal_key_placeholder": "Введите API-ключ Codex",
"codex_add_modal_url_label": "Базовый URL (обязательно):",
"codex_add_modal_url_placeholder": "например: https://api.example.com",
"codex_add_modal_proxy_label": "URL прокси (необязательно):",
"codex_add_modal_proxy_placeholder": "например: socks5://proxy.example.com:1080",
"codex_websockets_label": "Websockets",
"codex_websockets_hint": "Включает websocket-транспорт Responses API для этого ключа.",
"codex_models_label": "Пользовательские модели (необязательно):",
"codex_models_hint": "Оставьте пустым, чтобы разрешить все модели, или добавьте записи name[, alias], чтобы ограничить/переименовать их.",
"codex_models_add_btn": "Добавить модель",
"codex_models_fetch_button": "Получить через /v1/models",
"codex_models_fetch_title": "Выбор моделей из Codex /v1/models",
"codex_models_fetch_hint": "Вызывает GET /v1/models по спецификации OpenAI. По умолчанию отправляет API-ключ как Bearer (если указан) и объединяет его с пользовательскими заголовками.",
"codex_models_fetch_url_label": "URL запроса",
"codex_models_fetch_refresh": "Обновить",
"codex_models_fetch_loading": "Получение моделей из /v1/models...",
"codex_models_fetch_empty": "Модели не получены. Проверьте Base URL, API-ключ или заголовки.",
"codex_models_fetch_error": "Не удалось получить модели",
"codex_models_fetch_apply": "Добавить выбранные модели",
"codex_models_search_label": "Поиск моделей",
"codex_models_search_placeholder": "Фильтр по имени, псевдониму или описанию",
"codex_models_search_empty": "Модели по запросу не найдены. Попробуйте другой запрос.",
"codex_models_fetch_added": "Добавлено новых моделей: {{count}}",
"codex_models_count": "Количество моделей",
"codex_edit_modal_title": "Редактирование конфигурации Codex API",
"codex_edit_modal_key_label": "API-ключ:",
"codex_edit_modal_url_label": "Базовый URL (обязательно):",
"codex_edit_modal_proxy_label": "URL прокси (необязательно):",
"codex_delete_confirm": "Удалить эту конфигурацию Codex?",
"claude_title": "Конфигурация Claude API",
"claude_add_button": "Добавить конфигурацию",
"claude_empty_title": "Конфигурации Claude отсутствуют",
"claude_empty_desc": "Нажмите кнопку выше, чтобы добавить первую конфигурацию",
"claude_item_title": "Конфигурация Claude",
"claude_add_modal_title": "Добавление конфигурации Claude API",
"claude_add_modal_key_label": "API-ключ:",
"claude_add_modal_key_placeholder": "Введите API-ключ Claude",
"claude_add_modal_url_label": "Базовый URL (необязательно):",
"claude_add_modal_url_placeholder": "например: https://api.anthropic.com",
"claude_add_modal_proxy_label": "URL прокси (необязательно):",
"claude_add_modal_proxy_placeholder": "например: socks5://proxy.example.com:1080",
"claude_edit_modal_title": "Редактирование конфигурации Claude API",
"claude_edit_modal_key_label": "API-ключ:",
"claude_edit_modal_url_label": "Базовый URL (необязательно):",
"claude_edit_modal_proxy_label": "URL прокси (необязательно):",
"claude_delete_confirm": "Удалить эту конфигурацию Claude?",
"claude_models_label": "Пользовательские модели (необязательно):",
"claude_models_hint": "Оставьте пустым, чтобы разрешить все модели, или добавьте записи name[, alias], чтобы ограничить/переименовать их.",
"claude_models_add_btn": "Добавить модель",
"claude_models_count": "Количество моделей",
"claude_models_fetch_button": "Получить через /v1/models",
"claude_models_fetch_title": "Выбор моделей из Claude /v1/models",
"claude_models_fetch_hint": "Вызывает GET /v1/models по спецификации Anthropic. По умолчанию отправляются x-api-key и anthropic-version: 2023-06-01, объединённые с вашими пользовательскими заголовками.",
"claude_models_fetch_url_label": "URL запроса",
"claude_models_fetch_refresh": "Обновить",
"claude_models_fetch_loading": "Получение моделей из Claude /v1/models...",
"claude_models_fetch_empty": "Модели не вернулись. Проверьте Base URL, API-ключ или заголовки.",
"claude_models_fetch_error": "Не удалось получить модели Claude",
"claude_models_fetch_apply": "Добавить выбранные модели",
"claude_models_search_label": "Поиск моделей",
"claude_models_search_placeholder": "Фильтр по имени, псевдониму или описанию",
"claude_models_search_empty": "Модели по запросу не найдены. Попробуйте другой ключ.",
"claude_models_fetch_added": "Добавлено новых моделей: {{count}}",
"claude_test_title": "Тест подключения",
"claude_test_hint": "Отправляет тестовый запрос в /v1/messages по спецификации Anthropic, чтобы проверить текущую конфигурацию.",
"claude_test_select_placeholder": "Выберите из текущих моделей",
"claude_test_select_empty": "Модели не настроены. Сначала добавьте модели",
"claude_test_action": "Тест",
"claude_test_running": "Отправка тестового запроса Claude...",
"claude_test_timeout": "Тестовый запрос превысил тайм-аут {{seconds}} с",
"claude_test_success": "Тест выполнен успешно. Модель Claude ответила.",
"claude_test_failed": "Тест не выполнен",
"claude_test_key_required": "Укажите Claude API-ключ или задайте x-api-key в пользовательских заголовках",
"claude_test_model_required": "Выберите модель для теста",
"claude_test_endpoint_invalid": "Не удалось сформировать корректный endpoint Claude /v1/messages",
"claude_cloak_title": "Маскировка запросов (необязательно):",
"claude_cloak_toggle_label": "Включить",
"claude_cloak_toggle_aria": "Переключить маскировку запросов",
"claude_cloak_hint": "Маскировка делает запросы похожими на запросы официального CLI Claude Code для клиентов, которые не являются Claude Code.",
"claude_cloak_mode_label": "Режим:",
"claude_cloak_mode_hint": "auto: маскировать только если клиент не Claude Code; always: всегда; never: никогда.",
"claude_cloak_mode_auto": "Auto (только не-Claude Code)",
"claude_cloak_mode_always": "Всегда",
"claude_cloak_mode_never": "Никогда",
"claude_cloak_strict_label": "Строгий режим:",
"claude_cloak_strict_hint": "Если включено, пользовательские system-сообщения удаляются, остаётся только промпт Claude Code.",
"claude_cloak_sensitive_words_label": "Чувствительные слова (необязательно):",
"claude_cloak_sensitive_words_placeholder": "Через запятую или с новой строки, например internal-project",
"claude_cloak_sensitive_words_hint": "Эти слова будут обфусцированы с помощью символов нулевой ширины.",
"claude_cloak_sensitive_words_count": "Чувствительные слова",
"vertex_title": "Конфигурация Vertex API",
"vertex_add_button": "Добавить конфигурацию",
"vertex_empty_title": "Конфигурации Vertex отсутствуют",
"vertex_empty_desc": "Нажмите кнопку выше, чтобы добавить первую конфигурацию",
"vertex_item_title": "Конфигурация Vertex",
"vertex_add_modal_title": "Добавление конфигурации Vertex API",
"vertex_add_modal_key_label": "API-ключ:",
"vertex_add_modal_key_placeholder": "Введите API-ключ Vertex",
"vertex_add_modal_url_label": "Базовый URL:",
"vertex_add_modal_url_placeholder": "например: https://example.com/api",
"vertex_add_modal_proxy_label": "URL прокси (необязательно):",
"vertex_add_modal_proxy_placeholder": "например: socks5://proxy.example.com:1080",
"vertex_edit_modal_title": "Редактирование конфигурации Vertex API",
"vertex_edit_modal_key_label": "API-ключ:",
"vertex_edit_modal_url_label": "Базовый URL:",
"vertex_edit_modal_proxy_label": "URL прокси (необязательно):",
"vertex_delete_confirm": "Удалить эту конфигурацию Vertex?",
"vertex_models_label": "Псевдонимы моделей:",
"vertex_models_add_btn": "Добавить сопоставление",
"vertex_models_count": "Количество псевдонимов",
"ampcode_title": "Интеграция Amp CLI (ampcode)",
"ampcode_modal_title": "Настройка Ampcode",
"ampcode_upstream_url_label": "Upstream URL",
"ampcode_upstream_url_placeholder": "например: https://ampcode.com",
"ampcode_upstream_url_hint": "Необязательно. Оставьте пустым, чтобы использовать URL плоскости управления по умолчанию/обнаруженный автоматически.",
"ampcode_upstream_api_key_label": "Upstream API-ключ (официальный Amp)",
"ampcode_upstream_api_key_placeholder": "Введите sk-amp... (оставьте пустым, чтобы сохранить текущий)",
"ampcode_upstream_api_key_hint": "Необязательно. Пустое значение не изменит текущий официальный ключ Amp. Используйте кнопку ниже, чтобы очистить его.",
"ampcode_upstream_api_key_current": "Текущий официальный ключ Amp: {{key}}",
"ampcode_clear_upstream_api_key": "Очистить официальный ключ",
"ampcode_clear_upstream_api_key_confirm": "Очистить upstream API-ключ Ampcode (официальный Amp)?",
"ampcode_upstream_api_keys_label": "Маршрутизация нескольких upstream API-ключей",
"ampcode_upstream_api_keys_hint": "Привяжите разные upstream API-ключи Amp к указанным клиентским API-ключам. Клиентские ключи можно разделять запятыми или переводами строки.",
"ampcode_upstream_api_keys_add_btn": "Добавить upstream-сопоставление",
"ampcode_upstream_api_keys_upstream_placeholder": "Upstream API-ключ (sk-amp-...)",
"ampcode_upstream_api_keys_clients_placeholder": "Клиентские API-ключи, через запятую или с новой строки",
"ampcode_upstream_api_keys_item_title": "Upstream-сопоставление #{{index}}",
"ampcode_upstream_api_keys_count": "Количество upstream-сопоставлений",
"ampcode_force_model_mappings_label": "Принудительно применять сопоставления моделей",
"ampcode_force_model_mappings_hint": "При включении сопоставления переопределяют локальные проверки доступности API-ключей.",
"ampcode_model_mappings_label": "Сопоставления моделей (из → в)",
"ampcode_model_mappings_hint": "Переименовывает модели в запросах Amp. Оставьте пустым, чтобы отключить сопоставления.",
"ampcode_model_mappings_add_btn": "Добавить сопоставление",
"ampcode_model_mappings_from_placeholder": "исходная модель",
"ampcode_model_mappings_to_placeholder": "целевая модель",
"ampcode_model_mappings_count": "Количество сопоставлений",
"ampcode_lists_overwrite_title": "Перезаписать списки",
"ampcode_lists_overwrite_confirm": "Существующие списки multi-upstream/сопоставлений моделей не удалось загрузить. Продолжение может перезаписать или очистить их. Продолжить?",
"ampcode_mappings_overwrite_confirm": "Не удалось загрузить существующие сопоставления. Продолжение может перезаписать или очистить их. Продолжить?",
"openai_title": "Совместимые с OpenAI провайдеры",
"openai_add_button": "Добавить провайдера",
"openai_empty_title": "Провайдеры OpenAI отсутствуют",
"openai_empty_desc": "Нажмите кнопку выше, чтобы добавить первого провайдера",
"openai_filtered_empty_title": "Нет подходящих провайдеров",
"openai_filtered_empty_desc": "Ни один провайдер не соответствует текущему фильтру моделей. Очистите фильтр и попробуйте снова.",
"sort_by_name": "Сортировать по имени",
"sort_ascending": "Сортировать по возрастанию",
"sort_asc_short": "Возр.",
"sort_by_priority": "Сортировать по приоритету",
"sort_by_recent_success": "Сортировать по недавним успехам",
"sort_descending": "Сортировать по убыванию",
"sort_desc_short": "Убыв.",
"openai_test_model": "Тестовая модель",
"openai_add_modal_title": "Добавление совместимого с OpenAI провайдера",
"openai_add_modal_name_label": "Имя провайдера:",
"openai_add_modal_name_placeholder": "например: openrouter",
"openai_add_modal_url_label": "Базовый URL:",
"openai_add_modal_url_placeholder": "например: https://openrouter.ai/api/v1",
"openai_add_modal_keys_label": "API-ключи",
"openai_edit_modal_keys_label": "API-ключи",
"openai_keys_hint": "Добавляйте каждый ключ отдельно с необязательным URL прокси для удобства.",
"openai_keys_add_btn": "Добавить ключ",
"openai_key_placeholder": "ключ вида sk-...",
"openai_proxy_placeholder": "Необязательный URL прокси (например, socks5://...)",
"openai_add_modal_models_label": "Список моделей (name[, alias] по строкам):",
"openai_models_hint": "Пример: gpt-4o-mini или moonshotai/kimi-k2:free, kimi-k2",
"openai_model_name_placeholder": "Имя модели, например moonshotai/kimi-k2:free",
"openai_model_alias_placeholder": "Псевдоним модели (необязательно)",
"openai_models_add_btn": "Добавить модель",
"openai_models_fetch_button": "Получить через /models",
"openai_models_fetch_title": "Выбор моделей из /models",
"openai_models_fetch_hint": "Вызовите эндпоинт /models, используя указанный выше базовый URL, отправив первый API-ключ как Bearer с дополнительными заголовками.",
"openai_models_fetch_url_label": "URL запроса",
"openai_models_fetch_refresh": "Обновить",
"openai_models_fetch_loading": "Получение моделей из /models...",
"openai_models_fetch_empty": "Модели не вернулись. Проверьте эндпоинт или авторизацию.",
"openai_models_fetch_error": "Не удалось получить модели",
"openai_models_fetch_back": "Вернуться к редактированию",
"openai_models_fetch_apply": "Добавить выбранные модели",
"openai_models_search_label": "Поиск моделей",
"openai_models_search_placeholder": "Фильтр по имени, псевдониму или описанию",
"openai_models_search_empty": "Модели по запросу не найдены. Попробуйте другой ключ.",
"openai_models_fetch_invalid_url": "Сначала введите корректный базовый URL",
"openai_models_fetch_added": "Добавлено новых моделей: {{count}}",
"openai_edit_modal_title": "Редактирование совместимого с OpenAI провайдера",
"openai_edit_modal_name_label": "Имя провайдера:",
"openai_edit_modal_url_label": "Базовый URL:",
"openai_edit_modal_models_label": "Список моделей (name[, alias] по строкам):",
"openai_delete_confirm": "Удалить этого провайдера OpenAI?",
"openai_keys_count": "Количество ключей",
"openai_models_count": "Количество моделей",
"openai_test_title": "Тест подключения",
"openai_test_hint": "Отправьте запрос /chat/completions с текущими настройками, чтобы проверить доступность.",
"openai_test_model_placeholder": "Модель для теста",
"openai_test_action": "Запустить тест",
"openai_test_running": "Отправка тестового запроса...",
"openai_test_timeout": "Тестовый запрос превысил тайм-аут {{seconds}} с",
"openai_test_success": "Тест выполнен успешно. Модель ответила.",
"openai_test_failed": "Тест не выполнен",
"openai_test_select_placeholder": "Выберите из текущих моделей",
"openai_test_select_empty": "Модели не настроены. Сначала добавьте модели",
"openai_test_single_action": "Тест",
"openai_test_all_action": "Тестировать все ключи",
"openai_test_all_hint": "Проверить состояние подключения для всех ключей",
"openai_test_all_success": "Все {{count}} ключей прошли тест",
"openai_test_all_failed": "Все {{count}} ключей не прошли тест",
"openai_test_all_partial": "Тест завершен: {{success}} прошло, {{failed}} не прошло",
"model_search_placeholder": "Фильтр по моделям...",
"model_search_clear": "Очистить",
"model_select_all": "Выбрать все",
"model_filter_empty": "Нет моделей для фильтра"
},
"auth_files": {
"title": "Управление файлами авторизации",
"title_section": "Файлы авторизации",
@@ -1465,10 +1196,8 @@
"cancel": "Отмена",
"save": "Сохранить",
"create": "Создать",
"back": "Назад",
"enable": "Включить",
"disable": "Отключить",
"openModelCatalog": "Каталог моделей"
"disable": "Отключить"
},
"categories": {
"title": "Провайдеры",
@@ -1510,13 +1239,11 @@
"disabled": "Отключён",
"notSet": "Не задано",
"none": "Нет",
"notAvailable": "N/A",
"notConfigured": "Не настроено",
"defaultSuffix": "(по умолчанию)"
},
"detail": {
"title": "Подробности",
"empty": "Выберите ресурс для просмотра",
"metadataTitle": "Метаданные",
"fields": {
"identifier": "Идентификатор",
@@ -1582,7 +1309,6 @@
"addMapping": "Добавить сопоставление",
"modelMappingsSection": "Сопоставление моделей",
"addModelMapping": "Добавить сопоставление",
"behaviorSection": "Поведение",
"forceModelMappings": "Принудительное сопоставление",
"forceModelMappingsHint": "Запросы без совпадений отклоняются"
},
@@ -1649,22 +1375,7 @@
}
},
"modelCatalog": {
"summaryTitle": "Каталог моделей",
"openAction": "Открыть",
"notLoaded": "Не загружено",
"loading": "Загрузка",
"summaryCount": "{{count}} моделей",
"summaryError": "Ошибка загрузки"
},
"disconnected": {
"title": "Нет подключения",
"description": "Сначала подключитесь к прокси на странице входа.",
"action": "Подключиться"
},
"error": {
"title": "Ошибка загрузки",
"description": "Не удалось получить настройки провайдеров. Попробуйте позже.",
"retry": "Повторить"
"notLoaded": "Не загружено"
}
}
}
+2 -291
View File
@@ -192,275 +192,6 @@
"edit_modal_key_label": "API密钥:",
"delete_confirm": "确定要删除这个API密钥吗?"
},
"ai_providers": {
"title": "AI 提供商配置",
"gemini_title": "Gemini API 密钥",
"gemini_add_button": "添加密钥",
"gemini_empty_title": "暂无Gemini密钥",
"gemini_empty_desc": "点击上方按钮添加第一个密钥",
"gemini_item_title": "Gemini密钥",
"gemini_add_modal_title": "添加Gemini API密钥",
"gemini_add_modal_key_label": "API密钥",
"gemini_add_modal_key_placeholder": "输入 Gemini API 密钥",
"gemini_add_modal_key_hint": "逐条输入密钥,可同时指定可选 Base URL。",
"gemini_keys_add_btn": "添加密钥",
"gemini_base_url_label": "Base URL (可选)",
"gemini_base_url_placeholder": "例如: https://generativelanguage.googleapis.com",
"gemini_add_modal_proxy_label": "代理 URL (可选):",
"gemini_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"gemini_models_label": "自定义模型 (可选):",
"gemini_models_hint": "为空表示使用全部模型;可填写 name[, alias] 以限制或重命名模型。",
"gemini_models_add_btn": "添加模型",
"gemini_models_fetch_button": "从 /v1beta/models 获取",
"gemini_models_fetch_title": "从 Gemini /v1beta/models 选择模型",
"gemini_models_fetch_hint": "按 Gemini API 规范请求 GET /v1beta/models;默认附带 x-goog-api-key(来自 API Key 字段)并合并你配置的自定义请求头。",
"gemini_models_fetch_url_label": "请求地址",
"gemini_models_fetch_refresh": "重新获取",
"gemini_models_fetch_loading": "正在从 Gemini /v1beta/models 获取模型列表...",
"gemini_models_fetch_empty": "未获取到模型,请检查 Base URL、API Key 或请求头。",
"gemini_models_fetch_error": "获取 Gemini 模型失败",
"gemini_models_fetch_apply": "添加所选模型",
"model_discovery_select_visible": "全选当前列表",
"model_discovery_clear_selection": "清空已选",
"model_discovery_selected_count": "已选 {{count}} 项",
"gemini_models_search_label": "搜索模型",
"gemini_models_search_placeholder": "按名称、别名或描述筛选",
"gemini_models_search_empty": "没有匹配的模型,请更换关键字试试。",
"gemini_models_fetch_added": "已添加 {{count}} 个新模型",
"gemini_models_count": "模型数量",
"gemini_edit_modal_title": "编辑Gemini API密钥",
"gemini_edit_modal_key_label": "API密钥:",
"gemini_delete_confirm": "确定要删除这个Gemini密钥吗?",
"excluded_models_label": "排除的模型 (可选):",
"excluded_models_placeholder": "用逗号或换行分隔,例如: gemini-1.5-pro, gemini-1.5-flash",
"excluded_models_hint": "留空表示不过滤;保存时会自动去重并忽略空白。",
"excluded_models_count": "排除 {{count}} 个模型",
"prefix_label": "前缀 (可选):",
"prefix_placeholder": "例如: team-a",
"prefix_hint": "设置后可用 prefix/<model> 选择该条目。",
"priority_label": "优先级 (可选):",
"priority_hint": "数值越大优先级越高;留空表示默认(0)。",
"config_toggle_label": "启用",
"config_disabled_badge": "已停用",
"codex_title": "Codex API 配置",
"codex_add_button": "添加配置",
"codex_empty_title": "暂无Codex配置",
"codex_empty_desc": "点击上方按钮添加第一个配置",
"codex_item_title": "Codex配置",
"codex_add_modal_title": "添加Codex API配置",
"codex_add_modal_key_label": "API密钥:",
"codex_add_modal_key_placeholder": "请输入Codex API密钥",
"codex_add_modal_url_label": "Base URL (必填):",
"codex_add_modal_url_placeholder": "例如: https://api.example.com",
"codex_add_modal_proxy_label": "代理 URL (可选):",
"codex_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"codex_websockets_label": "Websockets",
"codex_websockets_hint": "开启 Responses API 的 websocket 传输。",
"codex_models_label": "自定义模型 (可选):",
"codex_models_hint": "为空表示使用全部模型;可填写 name[, alias] 以限制或重命名模型。",
"codex_models_add_btn": "添加模型",
"codex_models_fetch_button": "从 /v1/models 获取",
"codex_models_fetch_title": "从 /v1/models 选择模型",
"codex_models_fetch_hint": "使用上方 Base URL 调用 /v1/models 端点,附带 API KeyBearer)与自定义请求头。",
"codex_models_fetch_url_label": "请求地址",
"codex_models_fetch_refresh": "重新获取",
"codex_models_fetch_loading": "正在从 /v1/models 获取模型列表...",
"codex_models_fetch_empty": "未获取到模型,请检查端点或鉴权信息。",
"codex_models_fetch_error": "获取模型失败",
"codex_models_fetch_apply": "添加所选模型",
"codex_models_search_label": "搜索模型",
"codex_models_search_placeholder": "按名称、别名或描述筛选",
"codex_models_search_empty": "没有匹配的模型,请更换关键字试试。",
"codex_models_fetch_added": "已添加 {{count}} 个新模型",
"codex_models_count": "模型数量",
"codex_edit_modal_title": "编辑Codex API配置",
"codex_edit_modal_key_label": "API密钥:",
"codex_edit_modal_url_label": "Base URL (必填):",
"codex_edit_modal_proxy_label": "代理 URL (可选):",
"codex_delete_confirm": "确定要删除这个Codex配置吗?",
"claude_title": "Claude API 配置",
"claude_add_button": "添加配置",
"claude_empty_title": "暂无Claude配置",
"claude_empty_desc": "点击上方按钮添加第一个配置",
"claude_item_title": "Claude配置",
"claude_add_modal_title": "添加Claude API配置",
"claude_add_modal_key_label": "API密钥:",
"claude_add_modal_key_placeholder": "请输入Claude API密钥",
"claude_add_modal_url_label": "Base URL (可选):",
"claude_add_modal_url_placeholder": "例如: https://api.anthropic.com",
"claude_add_modal_proxy_label": "代理 URL (可选):",
"claude_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"claude_edit_modal_title": "编辑Claude API配置",
"claude_edit_modal_key_label": "API密钥:",
"claude_edit_modal_url_label": "Base URL (可选):",
"claude_edit_modal_proxy_label": "代理 URL (可选):",
"claude_delete_confirm": "确定要删除这个Claude配置吗?",
"claude_models_label": "自定义模型 (可选):",
"claude_models_hint": "为空表示使用全部模型;可填写 name[, alias] 以限制或重命名模型。",
"claude_models_add_btn": "添加模型",
"claude_models_count": "模型数量",
"claude_models_fetch_button": "从 /v1/models 获取",
"claude_models_fetch_title": "从 Claude /v1/models 选择模型",
"claude_models_fetch_hint": "按 Anthropic 规范请求 GET /v1/models,默认附带 x-api-key 与 anthropic-version: 2023-06-01;也会合并你配置的自定义请求头。",
"claude_models_fetch_url_label": "请求地址",
"claude_models_fetch_refresh": "重新获取",
"claude_models_fetch_loading": "正在从 Claude /v1/models 获取模型列表...",
"claude_models_fetch_empty": "未获取到模型,请检查 Base URL、API Key 或请求头。",
"claude_models_fetch_error": "获取 Claude 模型失败",
"claude_models_fetch_apply": "添加所选模型",
"claude_models_search_label": "搜索模型",
"claude_models_search_placeholder": "按名称、别名或描述筛选",
"claude_models_search_empty": "没有匹配的模型,请更换关键字试试。",
"claude_models_fetch_added": "已添加 {{count}} 个新模型",
"claude_test_title": "连通性测试",
"claude_test_hint": "按 Anthropic 规范向 /v1/messages 发送测试请求,验证当前配置是否可用。",
"claude_test_select_placeholder": "从当前模型列表选择",
"claude_test_select_empty": "当前未配置模型,请先添加模型",
"claude_test_action": "测试",
"claude_test_running": "正在发送 Claude 测试请求...",
"claude_test_timeout": "测试请求超时({{seconds}}秒)。",
"claude_test_success": "测试成功,Claude 模型可用。",
"claude_test_failed": "测试失败",
"claude_test_key_required": "请先填写 Claude API Key 或在自定义请求头中设置 x-api-key",
"claude_test_model_required": "请选择要测试的模型",
"claude_test_endpoint_invalid": "无法构造有效的 Claude /v1/messages 请求地址",
"claude_cloak_title": "请求伪装 (可选):",
"claude_cloak_toggle_label": "启用",
"claude_cloak_toggle_aria": "切换请求伪装",
"claude_cloak_hint": "对非 Claude Code 客户端,将请求伪装成 Claude Code CLI 的格式。",
"claude_cloak_mode_label": "模式:",
"claude_cloak_mode_hint": "auto: 仅对非 Claude Code 客户端伪装;always: 总是伪装;never: 从不伪装。",
"claude_cloak_mode_auto": "自动(仅非 Claude Code",
"claude_cloak_mode_always": "总是",
"claude_cloak_mode_never": "从不",
"claude_cloak_strict_label": "严格模式:",
"claude_cloak_strict_hint": "启用后会移除用户 system 消息,仅保留 Claude Code 提示词。",
"claude_cloak_sensitive_words_label": "敏感词 (可选):",
"claude_cloak_sensitive_words_placeholder": "用逗号或换行分隔,例如: internal-project",
"claude_cloak_sensitive_words_hint": "这些词会被插入零宽字符进行混淆。",
"claude_cloak_sensitive_words_count": "敏感词",
"vertex_title": "Vertex API 配置",
"vertex_add_button": "添加配置",
"vertex_empty_title": "暂无Vertex配置",
"vertex_empty_desc": "点击上方按钮添加第一个配置",
"vertex_item_title": "Vertex配置",
"vertex_add_modal_title": "添加Vertex API配置",
"vertex_add_modal_key_label": "API密钥:",
"vertex_add_modal_key_placeholder": "请输入Vertex API密钥",
"vertex_add_modal_url_label": "Base URL:",
"vertex_add_modal_url_placeholder": "例如: https://example.com/api",
"vertex_add_modal_proxy_label": "代理 URL (可选):",
"vertex_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"vertex_edit_modal_title": "编辑Vertex API配置",
"vertex_edit_modal_key_label": "API密钥:",
"vertex_edit_modal_url_label": "Base URL:",
"vertex_edit_modal_proxy_label": "代理 URL (可选):",
"vertex_delete_confirm": "确定要删除这个Vertex配置吗?",
"vertex_models_label": "模型别名:",
"vertex_models_add_btn": "添加映射",
"vertex_models_count": "别名数量",
"ampcode_title": "Amp CLI 集成 (ampcode)",
"ampcode_modal_title": "配置 Ampcode",
"ampcode_upstream_url_label": "Upstream URL",
"ampcode_upstream_url_placeholder": "例如: https://ampcode.com",
"ampcode_upstream_url_hint": "可选;留空表示使用默认/自动发现的控制平面地址。",
"ampcode_upstream_api_key_label": "Upstream API Key (Amp官方)",
"ampcode_upstream_api_key_placeholder": "输入 sk-amp...(留空不修改)",
"ampcode_upstream_api_key_hint": "可选;留空不会修改当前Amp官方密钥,需清除请点击下方按钮。",
"ampcode_upstream_api_key_current": "当前Amp官方密钥: {{key}}",
"ampcode_clear_upstream_api_key": "清除官方密钥",
"ampcode_clear_upstream_api_key_confirm": "确定要清除 Ampcode 的 upstream API keyAmp官方)吗?",
"ampcode_upstream_api_keys_label": "多上游 API Key 路由",
"ampcode_upstream_api_keys_hint": "为指定客户端 API Key 绑定不同的 Amp 上游 API Key;客户端 key 可用逗号或换行分隔。",
"ampcode_upstream_api_keys_add_btn": "添加多上游映射",
"ampcode_upstream_api_keys_upstream_placeholder": "上游 API Keysk-amp-...",
"ampcode_upstream_api_keys_clients_placeholder": "客户端 API Keys,用逗号或换行分隔",
"ampcode_upstream_api_keys_item_title": "上游映射 #{{index}}",
"ampcode_upstream_api_keys_count": "多上游映射",
"ampcode_force_model_mappings_label": "强制应用模型映射",
"ampcode_force_model_mappings_hint": "开启后,模型映射将覆盖本地 API Key 可用性判断。",
"ampcode_model_mappings_label": "模型映射 (from → to)",
"ampcode_model_mappings_hint": "用于重写 Amp 请求中的模型名称;留空表示不做映射。",
"ampcode_model_mappings_add_btn": "添加映射",
"ampcode_model_mappings_from_placeholder": "from 模型(原始)",
"ampcode_model_mappings_to_placeholder": "to 模型(目标)",
"ampcode_model_mappings_count": "映射数量",
"ampcode_lists_overwrite_title": "覆盖列表配置",
"ampcode_lists_overwrite_confirm": "当前未成功加载服务器已有多上游/模型映射配置,继续保存可能覆盖或清空这些列表,是否继续?",
"ampcode_mappings_overwrite_confirm": "当前未成功加载服务器已有映射,继续保存可能覆盖或清空已有映射,是否继续?",
"openai_title": "OpenAI 兼容提供商",
"openai_add_button": "添加提供商",
"openai_empty_title": "暂无OpenAI兼容提供商",
"openai_empty_desc": "点击上方按钮添加第一个提供商",
"openai_filtered_empty_title": "没有匹配的提供商",
"openai_filtered_empty_desc": "当前模型筛选下没有匹配的提供商,请清除筛选后重试。",
"sort_by_name": "按名称排序",
"sort_ascending": "升序排序",
"sort_asc_short": "升序",
"sort_by_priority": "按优先级排序",
"sort_by_recent_success": "按最近成功数排序",
"sort_descending": "降序排序",
"sort_desc_short": "降序",
"openai_test_model": "测试模型",
"openai_add_modal_title": "添加OpenAI兼容提供商",
"openai_add_modal_name_label": "提供商名称:",
"openai_add_modal_name_placeholder": "例如: openrouter",
"openai_add_modal_url_label": "Base URL:",
"openai_add_modal_url_placeholder": "例如: https://openrouter.ai/api/v1",
"openai_add_modal_keys_label": "API密钥",
"openai_edit_modal_keys_label": "API密钥",
"openai_keys_hint": "每个密钥可搭配一个可选代理地址,更便于管理。",
"openai_keys_add_btn": "添加密钥",
"openai_key_placeholder": "输入 sk- 开头的密钥",
"openai_proxy_placeholder": "可选代理 URL (如 socks5://...)",
"openai_add_modal_models_label": "模型列表 (name[, alias] 每行一个):",
"openai_models_hint": "示例:gpt-4o-mini 或 moonshotai/kimi-k2:free, kimi-k2",
"openai_model_name_placeholder": "模型名称,如 moonshotai/kimi-k2:free",
"openai_model_alias_placeholder": "模型别名 (可选)",
"openai_models_add_btn": "添加模型",
"openai_models_fetch_button": "从 /models 获取",
"openai_models_fetch_title": "从 /models 选择模型",
"openai_models_fetch_hint": "使用上方 Base URL 调用 /models 端点,附带首个 API KeyBearer)与自定义请求头。",
"openai_models_fetch_url_label": "请求地址",
"openai_models_fetch_refresh": "重新获取",
"openai_models_fetch_loading": "正在从 /models 获取模型列表...",
"openai_models_fetch_empty": "未获取到模型,请检查端点或鉴权信息。",
"openai_models_fetch_error": "获取模型失败",
"openai_models_fetch_back": "返回编辑",
"openai_models_fetch_apply": "添加所选模型",
"openai_models_search_label": "搜索模型",
"openai_models_search_placeholder": "按名称、别名或描述筛选",
"openai_models_search_empty": "没有匹配的模型,请更换关键字试试。",
"openai_models_fetch_invalid_url": "请先填写有效的 Base URL",
"openai_models_fetch_added": "已添加 {{count}} 个新模型",
"openai_edit_modal_title": "编辑OpenAI兼容提供商",
"openai_edit_modal_name_label": "提供商名称:",
"openai_edit_modal_url_label": "Base URL:",
"openai_edit_modal_models_label": "模型列表 (name[, alias] 每行一个):",
"openai_delete_confirm": "确定要删除这个OpenAI提供商吗?",
"openai_keys_count": "密钥数量",
"openai_models_count": "模型数量",
"openai_test_title": "连通性测试",
"openai_test_hint": "使用当前配置向 /chat/completions 请求,验证是否可用。",
"openai_test_model_placeholder": "选择或输入要测试的模型",
"openai_test_action": "发送测试",
"openai_test_running": "正在发送测试请求...",
"openai_test_timeout": "测试请求超时({{seconds}}秒)。",
"openai_test_success": "测试成功,模型可用。",
"openai_test_failed": "测试失败",
"openai_test_select_placeholder": "从当前模型列表选择",
"openai_test_select_empty": "当前未配置模型,请先添加模型",
"openai_test_single_action": "测试",
"openai_test_all_action": "一键测试全部密钥",
"openai_test_all_hint": "测试所有密钥的连接状态",
"openai_test_all_success": "所有 {{count}} 个密钥测试通过",
"openai_test_all_failed": "所有 {{count}} 个密钥测试失败",
"openai_test_all_partial": "测试完成:{{success}} 个通过,{{failed}} 个失败",
"model_search_placeholder": "按模型筛选...",
"model_search_clear": "清除",
"model_select_all": "全选",
"model_filter_empty": "暂无可筛选模型"
},
"auth_files": {
"title": "认证文件管理",
"title_section": "认证文件",
@@ -1468,10 +1199,8 @@
"cancel": "取消",
"save": "保存",
"create": "创建",
"back": "返回",
"enable": "启用",
"disable": "停用",
"openModelCatalog": "查看模型目录"
"disable": "停用"
},
"categories": {
"title": "提供商",
@@ -1513,13 +1242,11 @@
"disabled": "已停用",
"notSet": "未设置",
"none": "无",
"notAvailable": "不可用",
"notConfigured": "未配置",
"defaultSuffix": "(默认)"
},
"detail": {
"title": "详情",
"empty": "请选择一项资源查看详情",
"metadataTitle": "元数据",
"fields": {
"identifier": "标识",
@@ -1585,7 +1312,6 @@
"addMapping": "添加密钥映射",
"modelMappingsSection": "模型映射",
"addModelMapping": "添加模型映射",
"behaviorSection": "行为",
"forceModelMappings": "强制模型映射",
"forceModelMappingsHint": "启用后,所有请求必须命中模型映射规则"
},
@@ -1652,22 +1378,7 @@
}
},
"modelCatalog": {
"summaryTitle": "模型目录",
"openAction": "打开目录",
"notLoaded": "未加载",
"loading": "加载中",
"summaryCount": "{{count}} 个模型",
"summaryError": "加载失败"
},
"disconnected": {
"title": "未连接管理端",
"description": "请先在登录页连接到代理服务,再管理提供商。",
"action": "去连接"
},
"error": {
"title": "加载失败",
"description": "无法获取提供商配置,请稍后重试。",
"retry": "重试"
"notLoaded": "未加载"
}
}
}
+2 -291
View File
@@ -192,275 +192,6 @@
"edit_modal_key_label": "API 金鑰:",
"delete_confirm": "確定要刪除這個 API 金鑰嗎?"
},
"ai_providers": {
"title": "AI 供應商設定",
"gemini_title": "Gemini API 金鑰",
"gemini_add_button": "新增金鑰",
"gemini_empty_title": "暫無 Gemini 金鑰",
"gemini_empty_desc": "點擊上方按鈕新增第一個金鑰",
"gemini_item_title": "Gemini 金鑰",
"gemini_add_modal_title": "新增 Gemini API 金鑰",
"gemini_add_modal_key_label": "API 金鑰",
"gemini_add_modal_key_placeholder": "輸入 Gemini API 金鑰",
"gemini_add_modal_key_hint": "逐條輸入金鑰,可同時指定選填 Base URL。",
"gemini_keys_add_btn": "新增金鑰",
"gemini_base_url_label": "Base URL(選填)",
"gemini_base_url_placeholder": "例如: https://generativelanguage.googleapis.com",
"gemini_add_modal_proxy_label": "代理 URL(選填):",
"gemini_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"gemini_models_label": "自訂模型(選填):",
"gemini_models_hint": "為空表示使用全部模型;可填寫 name[, alias] 以限制或重新命名模型。",
"gemini_models_add_btn": "新增模型",
"gemini_models_fetch_button": "從 /v1beta/models 取得",
"gemini_models_fetch_title": "從 Gemini /v1beta/models 選擇模型",
"gemini_models_fetch_hint": "按 Gemini API 規範請求 GET /v1beta/models;預設附帶 x-goog-api-key(來自 API Key 欄位)並合併你設定的自訂請求標頭。",
"gemini_models_fetch_url_label": "請求位址",
"gemini_models_fetch_refresh": "重新取得",
"gemini_models_fetch_loading": "正在從 Gemini /v1beta/models 取得模型清單...",
"gemini_models_fetch_empty": "未取得到模型,請檢查 Base URL、API Key 或請求標頭。",
"gemini_models_fetch_error": "取得 Gemini 模型失敗",
"gemini_models_fetch_apply": "新增已選模型",
"model_discovery_select_visible": "全選目前清單",
"model_discovery_clear_selection": "清空已選",
"model_discovery_selected_count": "已選 {{count}} 項",
"gemini_models_search_label": "搜尋模型",
"gemini_models_search_placeholder": "依名稱、別名或描述篩選",
"gemini_models_search_empty": "沒有符合的模型,請更換關鍵字試試。",
"gemini_models_fetch_added": "已新增 {{count}} 個新模型",
"gemini_models_count": "模型數量",
"gemini_edit_modal_title": "編輯 Gemini API 金鑰",
"gemini_edit_modal_key_label": "API 金鑰:",
"gemini_delete_confirm": "確定要刪除這個 Gemini 金鑰嗎?",
"excluded_models_label": "排除的模型(選填):",
"excluded_models_placeholder": "用逗號或換行分隔,例如: gemini-1.5-pro, gemini-1.5-flash",
"excluded_models_hint": "留空表示不篩選;儲存時會自動去重並忽略空白。",
"excluded_models_count": "排除 {{count}} 個模型",
"prefix_label": "前綴(選填):",
"prefix_placeholder": "例如: team-a",
"prefix_hint": "設定後可用 prefix/<model> 選擇該條目。",
"priority_label": "優先順序(選填):",
"priority_hint": "數值越大優先順序越高;留空表示預設(0)。",
"config_toggle_label": "啟用",
"config_disabled_badge": "已停用",
"codex_title": "Codex API 設定",
"codex_add_button": "新增設定",
"codex_empty_title": "暫無 Codex 設定",
"codex_empty_desc": "點擊上方按鈕新增第一個設定",
"codex_item_title": "Codex 設定",
"codex_add_modal_title": "新增 Codex API 設定",
"codex_add_modal_key_label": "API 金鑰:",
"codex_add_modal_key_placeholder": "請輸入 Codex API 金鑰",
"codex_add_modal_url_label": "Base URL(必填):",
"codex_add_modal_url_placeholder": "例如: https://api.example.com",
"codex_add_modal_proxy_label": "代理 URL(選填):",
"codex_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"codex_websockets_label": "Websockets",
"codex_websockets_hint": "開啟 Responses API 的 websocket 傳輸。",
"codex_models_label": "自訂模型(選填):",
"codex_models_hint": "為空表示使用全部模型;可填寫 name[, alias] 以限制或重新命名模型。",
"codex_models_add_btn": "新增模型",
"codex_models_fetch_button": "從 /v1/models 取得",
"codex_models_fetch_title": "從 /v1/models 選擇模型",
"codex_models_fetch_hint": "使用上方 Base URL 呼叫 /v1/models 端點,附帶 API KeyBearer)與自訂請求標頭。",
"codex_models_fetch_url_label": "請求位址",
"codex_models_fetch_refresh": "重新取得",
"codex_models_fetch_loading": "正在從 /v1/models 取得模型清單...",
"codex_models_fetch_empty": "未取得到模型,請檢查端點或驗證資訊。",
"codex_models_fetch_error": "取得模型失敗",
"codex_models_fetch_apply": "新增已選模型",
"codex_models_search_label": "搜尋模型",
"codex_models_search_placeholder": "依名稱、別名或描述篩選",
"codex_models_search_empty": "沒有符合的模型,請更換關鍵字試試。",
"codex_models_fetch_added": "已新增 {{count}} 個新模型",
"codex_models_count": "模型數量",
"codex_edit_modal_title": "編輯 Codex API 設定",
"codex_edit_modal_key_label": "API 金鑰:",
"codex_edit_modal_url_label": "Base URL(必填):",
"codex_edit_modal_proxy_label": "代理 URL(選填):",
"codex_delete_confirm": "確定要刪除這個 Codex 設定嗎?",
"claude_title": "Claude API 設定",
"claude_add_button": "新增設定",
"claude_empty_title": "暫無 Claude 設定",
"claude_empty_desc": "點擊上方按鈕新增第一個設定",
"claude_item_title": "Claude 設定",
"claude_add_modal_title": "新增 Claude API 設定",
"claude_add_modal_key_label": "API 金鑰:",
"claude_add_modal_key_placeholder": "請輸入 Claude API 金鑰",
"claude_add_modal_url_label": "Base URL(選填):",
"claude_add_modal_url_placeholder": "例如: https://api.anthropic.com",
"claude_add_modal_proxy_label": "代理 URL(選填):",
"claude_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"claude_edit_modal_title": "編輯 Claude API 設定",
"claude_edit_modal_key_label": "API 金鑰:",
"claude_edit_modal_url_label": "Base URL(選填):",
"claude_edit_modal_proxy_label": "代理 URL(選填):",
"claude_delete_confirm": "確定要刪除這個 Claude 設定嗎?",
"claude_models_label": "自訂模型(選填):",
"claude_models_hint": "為空表示使用全部模型;可填寫 name[, alias] 以限制或重新命名模型。",
"claude_models_add_btn": "新增模型",
"claude_models_count": "模型數量",
"claude_models_fetch_button": "從 /v1/models 取得",
"claude_models_fetch_title": "從 Claude /v1/models 選擇模型",
"claude_models_fetch_hint": "按 Anthropic 規範請求 GET /v1/models,預設附帶 x-api-key 與 anthropic-version: 2023-06-01;也會合併你設定的自訂請求標頭。",
"claude_models_fetch_url_label": "請求位址",
"claude_models_fetch_refresh": "重新取得",
"claude_models_fetch_loading": "正在從 Claude /v1/models 取得模型清單...",
"claude_models_fetch_empty": "未取得到模型,請檢查 Base URL、API Key 或請求標頭。",
"claude_models_fetch_error": "取得 Claude 模型失敗",
"claude_models_fetch_apply": "新增已選模型",
"claude_models_search_label": "搜尋模型",
"claude_models_search_placeholder": "依名稱、別名或描述篩選",
"claude_models_search_empty": "沒有符合的模型,請更換關鍵字試試。",
"claude_models_fetch_added": "已新增 {{count}} 個新模型",
"claude_test_title": "連通性測試",
"claude_test_hint": "按 Anthropic 規範向 /v1/messages 發送測試請求,驗證目前設定是否可用。",
"claude_test_select_placeholder": "從目前模型清單選擇",
"claude_test_select_empty": "目前未設定模型,請先新增模型",
"claude_test_action": "測試",
"claude_test_running": "正在發送 Claude 測試請求...",
"claude_test_timeout": "測試請求逾時({{seconds}} 秒)。",
"claude_test_success": "測試成功,Claude 模型可用。",
"claude_test_failed": "測試失敗",
"claude_test_key_required": "請先填寫 Claude API Key 或在自訂請求標頭中設定 x-api-key",
"claude_test_model_required": "請選擇要測試的模型",
"claude_test_endpoint_invalid": "無法建構有效的 Claude /v1/messages 請求位址",
"claude_cloak_title": "請求偽裝(選填):",
"claude_cloak_toggle_label": "啟用",
"claude_cloak_toggle_aria": "切換請求偽裝",
"claude_cloak_hint": "對非 Claude Code 客戶端,將請求偽裝成 Claude Code CLI 的格式。",
"claude_cloak_mode_label": "模式:",
"claude_cloak_mode_hint": "auto: 僅對非 Claude Code 客戶端偽裝;always: 總是偽裝;never: 從不偽裝。",
"claude_cloak_mode_auto": "自動(僅非 Claude Code",
"claude_cloak_mode_always": "總是",
"claude_cloak_mode_never": "從不",
"claude_cloak_strict_label": "嚴格模式:",
"claude_cloak_strict_hint": "啟用後會移除用戶 system 訊息,僅保留 Claude Code 提示詞。",
"claude_cloak_sensitive_words_label": "敏感詞(選填):",
"claude_cloak_sensitive_words_placeholder": "用逗號或換行分隔,例如: internal-project",
"claude_cloak_sensitive_words_hint": "這些詞會被插入零寬字元進行混淆。",
"claude_cloak_sensitive_words_count": "敏感詞",
"vertex_title": "Vertex API 設定",
"vertex_add_button": "新增設定",
"vertex_empty_title": "暫無 Vertex 設定",
"vertex_empty_desc": "點擊上方按鈕新增第一個設定",
"vertex_item_title": "Vertex 設定",
"vertex_add_modal_title": "新增 Vertex API 設定",
"vertex_add_modal_key_label": "API 金鑰:",
"vertex_add_modal_key_placeholder": "請輸入 Vertex API 金鑰",
"vertex_add_modal_url_label": "Base URL:",
"vertex_add_modal_url_placeholder": "例如: https://example.com/api",
"vertex_add_modal_proxy_label": "代理 URL(選填):",
"vertex_add_modal_proxy_placeholder": "例如: socks5://proxy.example.com:1080",
"vertex_edit_modal_title": "編輯 Vertex API 設定",
"vertex_edit_modal_key_label": "API 金鑰:",
"vertex_edit_modal_url_label": "Base URL:",
"vertex_edit_modal_proxy_label": "代理 URL(選填):",
"vertex_delete_confirm": "確定要刪除這個 Vertex 設定嗎?",
"vertex_models_label": "模型別名:",
"vertex_models_add_btn": "新增映射",
"vertex_models_count": "別名數量",
"ampcode_title": "Amp CLI 整合(ampcode",
"ampcode_modal_title": "設定 Ampcode",
"ampcode_upstream_url_label": "Upstream URL",
"ampcode_upstream_url_placeholder": "例如: https://ampcode.com",
"ampcode_upstream_url_hint": "選填;留空表示使用預設/自動探索的控制平面位址。",
"ampcode_upstream_api_key_label": "Upstream API KeyAmp 官方)",
"ampcode_upstream_api_key_placeholder": "輸入 sk-amp...(留空不修改)",
"ampcode_upstream_api_key_hint": "選填;留空不會修改目前 Amp 官方金鑰,需清除請點擊下方按鈕。",
"ampcode_upstream_api_key_current": "目前 Amp 官方金鑰: {{key}}",
"ampcode_clear_upstream_api_key": "清除官方金鑰",
"ampcode_clear_upstream_api_key_confirm": "確定要清除 Ampcode 的 upstream API keyAmp 官方)嗎?",
"ampcode_upstream_api_keys_label": "多上游 API Key 路由",
"ampcode_upstream_api_keys_hint": "為指定客戶端 API Key 綁定不同的 Amp 上游 API Key;客戶端 key 可用逗號或換行分隔。",
"ampcode_upstream_api_keys_add_btn": "新增多上游映射",
"ampcode_upstream_api_keys_upstream_placeholder": "上游 API Keysk-amp-...",
"ampcode_upstream_api_keys_clients_placeholder": "客戶端 API Keys,用逗號或換行分隔",
"ampcode_upstream_api_keys_item_title": "上游映射 #{{index}}",
"ampcode_upstream_api_keys_count": "多上游映射",
"ampcode_force_model_mappings_label": "強制套用模型映射",
"ampcode_force_model_mappings_hint": "開啟後,模型映射將覆寫本地 API Key 可用性判斷。",
"ampcode_model_mappings_label": "模型映射(from → to",
"ampcode_model_mappings_hint": "用於改寫 Amp 請求中的模型名稱;留空表示不做映射。",
"ampcode_model_mappings_add_btn": "新增映射",
"ampcode_model_mappings_from_placeholder": "from 模型(原始)",
"ampcode_model_mappings_to_placeholder": "to 模型(目標)",
"ampcode_model_mappings_count": "映射數量",
"ampcode_lists_overwrite_title": "覆寫清單設定",
"ampcode_lists_overwrite_confirm": "目前未成功載入伺服器已有多上游/模型映射設定,繼續儲存可能覆寫或清空這些清單,是否繼續?",
"ampcode_mappings_overwrite_confirm": "目前未成功載入伺服器已有映射,繼續儲存可能覆寫或清空已有映射,是否繼續?",
"openai_title": "OpenAI 相容供應商",
"openai_add_button": "新增供應商",
"openai_empty_title": "暫無 OpenAI 相容供應商",
"openai_empty_desc": "點擊上方按鈕新增第一個供應商",
"openai_filtered_empty_title": "沒有匹配的供應商",
"openai_filtered_empty_desc": "目前模型篩選下沒有匹配的供應商,請清除篩選後再試一次。",
"sort_by_name": "依名稱排序",
"sort_ascending": "升冪排序",
"sort_asc_short": "升冪",
"sort_by_priority": "依優先順序排序",
"sort_by_recent_success": "依最近成功排序",
"sort_descending": "降冪排序",
"sort_desc_short": "降冪",
"openai_test_model": "測試模型",
"openai_add_modal_title": "新增 OpenAI 相容供應商",
"openai_add_modal_name_label": "供應商名稱:",
"openai_add_modal_name_placeholder": "例如: openrouter",
"openai_add_modal_url_label": "Base URL:",
"openai_add_modal_url_placeholder": "例如: https://openrouter.ai/api/v1",
"openai_add_modal_keys_label": "API 金鑰",
"openai_edit_modal_keys_label": "API 金鑰",
"openai_keys_hint": "每個金鑰可搭配一個選填代理位址,更便於管理。",
"openai_keys_add_btn": "新增金鑰",
"openai_key_placeholder": "輸入 sk- 開頭的金鑰",
"openai_proxy_placeholder": "選填代理 URL(如 socks5://...",
"openai_add_modal_models_label": "模型清單(name[, alias] 每行一個):",
"openai_models_hint": "範例:gpt-4o-mini 或 moonshotai/kimi-k2:free, kimi-k2",
"openai_model_name_placeholder": "模型名稱,如 moonshotai/kimi-k2:free",
"openai_model_alias_placeholder": "模型別名(選填)",
"openai_models_add_btn": "新增模型",
"openai_models_fetch_button": "從 /models 取得",
"openai_models_fetch_title": "從 /models 選擇模型",
"openai_models_fetch_hint": "使用上方 Base URL 呼叫 /models 端點,附帶第一個 API KeyBearer)與自訂請求標頭。",
"openai_models_fetch_url_label": "請求位址",
"openai_models_fetch_refresh": "重新取得",
"openai_models_fetch_loading": "正在從 /models 取得模型清單...",
"openai_models_fetch_empty": "未取得到模型,請檢查端點或驗證資訊。",
"openai_models_fetch_error": "取得模型失敗",
"openai_models_fetch_back": "返回編輯",
"openai_models_fetch_apply": "新增已選模型",
"openai_models_search_label": "搜尋模型",
"openai_models_search_placeholder": "依名稱、別名或描述篩選",
"openai_models_search_empty": "沒有符合的模型,請更換關鍵字試試。",
"openai_models_fetch_invalid_url": "請先填寫有效的 Base URL",
"openai_models_fetch_added": "已新增 {{count}} 個新模型",
"openai_edit_modal_title": "編輯 OpenAI 相容供應商",
"openai_edit_modal_name_label": "供應商名稱:",
"openai_edit_modal_url_label": "Base URL:",
"openai_edit_modal_models_label": "模型清單(name[, alias] 每行一個):",
"openai_delete_confirm": "確定要刪除這個 OpenAI 供應商嗎?",
"openai_keys_count": "金鑰數量",
"openai_models_count": "模型數量",
"openai_test_title": "連通性測試",
"openai_test_hint": "使用目前設定向 /chat/completions 請求,驗證是否可用。",
"openai_test_model_placeholder": "選擇或輸入要測試的模型",
"openai_test_action": "發送測試",
"openai_test_running": "正在發送測試請求...",
"openai_test_timeout": "測試請求逾時({{seconds}} 秒)。",
"openai_test_success": "測試成功,模型可用。",
"openai_test_failed": "測試失敗",
"openai_test_select_placeholder": "從目前模型清單選擇",
"openai_test_select_empty": "目前未設定模型,請先新增模型",
"openai_test_single_action": "測試",
"openai_test_all_action": "一鍵測試全部金鑰",
"openai_test_all_hint": "測試所有金鑰的連線狀態",
"openai_test_all_success": "所有 {{count}} 個金鑰測試通過",
"openai_test_all_failed": "所有 {{count}} 個金鑰測試失敗",
"openai_test_all_partial": "測試完成:{{success}} 個通過,{{failed}} 個失敗",
"model_search_placeholder": "依模型篩選...",
"model_search_clear": "清除",
"model_select_all": "全選",
"model_filter_empty": "暫無可篩選模型"
},
"auth_files": {
"title": "驗證檔案管理",
"title_section": "驗證檔案",
@@ -1494,10 +1225,8 @@
"cancel": "取消",
"save": "儲存",
"create": "建立",
"back": "返回",
"enable": "啟用",
"disable": "停用",
"openModelCatalog": "檢視模型目錄"
"disable": "停用"
},
"categories": {
"title": "提供商",
@@ -1539,13 +1268,11 @@
"disabled": "已停用",
"notSet": "未設定",
"none": "無",
"notAvailable": "不可用",
"notConfigured": "未設定",
"defaultSuffix": "(預設)"
},
"detail": {
"title": "詳情",
"empty": "請選擇一項資源檢視詳情",
"metadataTitle": "元資料",
"fields": {
"identifier": "識別碼",
@@ -1611,7 +1338,6 @@
"addMapping": "新增金鑰映射",
"modelMappingsSection": "模型映射",
"addModelMapping": "新增模型映射",
"behaviorSection": "行為",
"forceModelMappings": "強制模型映射",
"forceModelMappingsHint": "啟用後,所有請求必須命中模型映射規則"
},
@@ -1678,22 +1404,7 @@
}
},
"modelCatalog": {
"summaryTitle": "模型目錄",
"openAction": "開啟目錄",
"notLoaded": "未載入",
"loading": "載入中",
"summaryCount": "{{count}} 個模型",
"summaryError": "載入失敗"
},
"disconnected": {
"title": "未連線至管理端",
"description": "請先在登入頁連線到代理服務,再管理提供商。",
"action": "去連線"
},
"error": {
"title": "載入失敗",
"description": "無法取得提供商設定,請稍後重試。",
"retry": "重試"
"notLoaded": "未載入"
}
}
}