feat: add custom/other OpenAI-compatible LLM providers
Allow Settings → Providers to define custom providers (id, name, base URL, API key, models, headers) without code changes. Persist config via OpenCode layers, store keys through auth.set, and keep web/VS Code parity. Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
co-authored by
Serhii Dziupin
parent
5d24d6cb2a
commit
be87e25c7d
@@ -1334,6 +1334,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': 'Search...',
|
||||
'settings.providers.page.connect.noProvidersFound': 'No providers found',
|
||||
'settings.providers.page.connect.allProvidersConnected': 'All providers connected.',
|
||||
'settings.providers.page.custom.optionLabel': 'Other / Custom',
|
||||
'settings.providers.page.custom.title': 'Custom provider',
|
||||
'settings.providers.page.custom.description': 'Add an OpenAI-compatible provider with a base URL, credentials, and model list. Saved to OpenCode config so it works in chat like any other provider.',
|
||||
'settings.providers.page.custom.field.providerID.label': 'Provider ID',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||||
'settings.providers.page.custom.field.providerID.info': 'Lowercase letters, numbers, hyphens, and underscores. Used as the OpenCode provider id.',
|
||||
'settings.providers.page.custom.field.name.label': 'Display name',
|
||||
'settings.providers.page.custom.field.name.placeholder': 'My Provider',
|
||||
'settings.providers.page.custom.field.name.info': 'Shown in the provider and model pickers.',
|
||||
'settings.providers.page.custom.field.baseURL.label': 'Base URL',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': 'OpenAI-compatible API base URL. Must start with http:// or https://.',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'API key',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... or {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': 'Stored in OpenCode auth, not by OpenChamber. Use {env:VAR_NAME} to read a key from the environment instead.',
|
||||
'settings.providers.page.custom.models.title': 'Models',
|
||||
'settings.providers.page.custom.models.idLabel': 'Model ID',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': 'Model name',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': 'Add model',
|
||||
'settings.providers.page.custom.models.remove': 'Remove model',
|
||||
'settings.providers.page.custom.headers.title': 'Headers',
|
||||
'settings.providers.page.custom.headers.description': 'Optional request headers sent with every call.',
|
||||
'settings.providers.page.custom.headers.keyLabel': 'Header name',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': 'Header value',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||||
'settings.providers.page.custom.headers.add': 'Add header',
|
||||
'settings.providers.page.custom.headers.remove': 'Remove header',
|
||||
'settings.providers.page.custom.actions.back': 'Back',
|
||||
'settings.providers.page.custom.actions.save': 'Save provider',
|
||||
'settings.providers.page.custom.error.providerID.required': 'Provider ID is required',
|
||||
'settings.providers.page.custom.error.providerID.format': 'Use lowercase letters, numbers, hyphens, or underscores',
|
||||
'settings.providers.page.custom.error.providerID.exists': 'A provider with this ID is already connected',
|
||||
'settings.providers.page.custom.error.name.required': 'Display name is required',
|
||||
'settings.providers.page.custom.error.baseURL.required': 'Base URL is required',
|
||||
'settings.providers.page.custom.error.baseURL.format': 'Base URL must start with http:// or https://',
|
||||
'settings.providers.page.custom.error.required': 'Required',
|
||||
'settings.providers.page.custom.error.duplicate': 'Duplicate',
|
||||
'settings.providers.page.auth.title': 'Authentication',
|
||||
'settings.providers.page.auth.loadingMethods': 'Loading authentication methods...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'API Key',
|
||||
@@ -1391,6 +1431,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': 'Failed to copy device code',
|
||||
'settings.providers.page.toast.providerDisconnected': 'Provider disconnected',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': 'Failed to disconnect provider',
|
||||
'settings.providers.page.toast.customProviderSaved': '{provider} connected',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': 'Failed to save custom provider',
|
||||
'settings.mcp.page.empty.selectServer': 'Select an MCP server from the sidebar',
|
||||
'settings.mcp.page.empty.addNewOne': 'or add a new one',
|
||||
'settings.mcp.page.header.newServer': 'New MCP Server',
|
||||
|
||||
@@ -1301,6 +1301,46 @@ export const settingsDict = {
|
||||
"settings.providers.page.connect.searchProvidersPlaceholder": "Buscar...",
|
||||
"settings.providers.page.connect.noProvidersFound": "No se encontraron proveedores",
|
||||
"settings.providers.page.connect.allProvidersConnected": "Todos los proveedores están conectados.",
|
||||
"settings.providers.page.custom.optionLabel": "Otro / Personalizado",
|
||||
"settings.providers.page.custom.title": "Proveedor personalizado",
|
||||
"settings.providers.page.custom.description": "Añade un proveedor compatible con OpenAI con URL base, credenciales y lista de modelos. Se guarda en la configuración de OpenCode para usarlo en el chat como cualquier otro proveedor.",
|
||||
"settings.providers.page.custom.field.providerID.label": "ID del proveedor",
|
||||
"settings.providers.page.custom.field.providerID.placeholder": "mi-proveedor",
|
||||
"settings.providers.page.custom.field.providerID.info": "Minúsculas, números, guiones y guiones bajos. Se usa como ID de proveedor de OpenCode.",
|
||||
"settings.providers.page.custom.field.name.label": "Nombre visible",
|
||||
"settings.providers.page.custom.field.name.placeholder": "Mi proveedor",
|
||||
"settings.providers.page.custom.field.name.info": "Se muestra en los selectores de proveedor y modelo.",
|
||||
"settings.providers.page.custom.field.baseURL.label": "URL base",
|
||||
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
|
||||
"settings.providers.page.custom.field.baseURL.info": "URL base de la API compatible con OpenAI. Debe empezar por http:// o https://.",
|
||||
"settings.providers.page.custom.field.apiKey.label": "Clave API",
|
||||
"settings.providers.page.custom.field.apiKey.placeholder": "sk-... o {env:VAR_NAME}",
|
||||
"settings.providers.page.custom.field.apiKey.info": "Se guarda en la autenticación de OpenCode, no en OpenChamber. Usa {env:VAR_NAME} para leer una clave del entorno.",
|
||||
"settings.providers.page.custom.models.title": "Modelos",
|
||||
"settings.providers.page.custom.models.idLabel": "ID del modelo",
|
||||
"settings.providers.page.custom.models.idPlaceholder": "gpt-4o",
|
||||
"settings.providers.page.custom.models.nameLabel": "Nombre del modelo",
|
||||
"settings.providers.page.custom.models.namePlaceholder": "GPT-4o",
|
||||
"settings.providers.page.custom.models.add": "Añadir modelo",
|
||||
"settings.providers.page.custom.models.remove": "Quitar modelo",
|
||||
"settings.providers.page.custom.headers.title": "Encabezados",
|
||||
"settings.providers.page.custom.headers.description": "Encabezados de solicitud opcionales enviados en cada llamada.",
|
||||
"settings.providers.page.custom.headers.keyLabel": "Nombre del encabezado",
|
||||
"settings.providers.page.custom.headers.keyPlaceholder": "X-Custom-Header",
|
||||
"settings.providers.page.custom.headers.valueLabel": "Valor del encabezado",
|
||||
"settings.providers.page.custom.headers.valuePlaceholder": "valor",
|
||||
"settings.providers.page.custom.headers.add": "Añadir encabezado",
|
||||
"settings.providers.page.custom.headers.remove": "Quitar encabezado",
|
||||
"settings.providers.page.custom.actions.back": "Atrás",
|
||||
"settings.providers.page.custom.actions.save": "Guardar proveedor",
|
||||
"settings.providers.page.custom.error.providerID.required": "El ID del proveedor es obligatorio",
|
||||
"settings.providers.page.custom.error.providerID.format": "Usa minúsculas, números, guiones o guiones bajos",
|
||||
"settings.providers.page.custom.error.providerID.exists": "Ya hay un proveedor conectado con este ID",
|
||||
"settings.providers.page.custom.error.name.required": "El nombre visible es obligatorio",
|
||||
"settings.providers.page.custom.error.baseURL.required": "La URL base es obligatoria",
|
||||
"settings.providers.page.custom.error.baseURL.format": "La URL base debe empezar por http:// o https://",
|
||||
"settings.providers.page.custom.error.required": "Obligatorio",
|
||||
"settings.providers.page.custom.error.duplicate": "Duplicado",
|
||||
"settings.providers.page.auth.title": "Autenticación",
|
||||
"settings.providers.page.auth.loadingMethods": "Cargando métodos de autenticación...",
|
||||
"settings.providers.page.auth.apiKeyLabel": "Clave API",
|
||||
@@ -1358,6 +1398,8 @@ export const settingsDict = {
|
||||
"settings.providers.page.toast.deviceCodeCopyFailed": "No se pudo copiar el código de dispositivo",
|
||||
"settings.providers.page.toast.providerDisconnected": "Proveedor desconectado",
|
||||
"settings.providers.page.toast.providerDisconnectFailed": "No se pudo desconectar el proveedor",
|
||||
"settings.providers.page.toast.customProviderSaved": "{provider} conectado",
|
||||
"settings.providers.page.toast.customProviderSaveFailed": "No se pudo guardar el proveedor personalizado",
|
||||
"settings.mcp.page.empty.selectServer": "Selecciona un servidor MCP desde el panel lateral",
|
||||
"settings.mcp.page.empty.addNewOne": "o añade uno nuevo",
|
||||
"settings.mcp.page.header.newServer": "Nuevo servidor MCP",
|
||||
|
||||
@@ -1222,6 +1222,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': 'Recherche...',
|
||||
'settings.providers.page.connect.noProvidersFound': 'Aucun fournisseur trouvé',
|
||||
'settings.providers.page.connect.allProvidersConnected': 'Tous les fournisseurs connectés.',
|
||||
'settings.providers.page.custom.optionLabel': 'Autre / Personnalisé',
|
||||
'settings.providers.page.custom.title': 'Fournisseur personnalisé',
|
||||
'settings.providers.page.custom.description': 'Ajoutez un fournisseur compatible OpenAI avec une URL de base, des identifiants et une liste de modèles. Enregistré dans la configuration OpenCode pour l’utiliser dans le chat comme les autres fournisseurs.',
|
||||
'settings.providers.page.custom.field.providerID.label': 'ID du fournisseur',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'mon-fournisseur',
|
||||
'settings.providers.page.custom.field.providerID.info': 'Minuscules, chiffres, tirets et underscores. Utilisé comme ID de fournisseur OpenCode.',
|
||||
'settings.providers.page.custom.field.name.label': 'Nom affiché',
|
||||
'settings.providers.page.custom.field.name.placeholder': 'Mon fournisseur',
|
||||
'settings.providers.page.custom.field.name.info': 'Affiché dans les sélecteurs de fournisseur et de modèle.',
|
||||
'settings.providers.page.custom.field.baseURL.label': 'URL de base',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': 'URL de base de l’API compatible OpenAI. Doit commencer par http:// ou https://.',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'Clé API',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... ou {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': 'Stockée dans l’auth OpenCode, pas par OpenChamber. Utilisez {env:VAR_NAME} pour lire une clé depuis l’environnement.',
|
||||
'settings.providers.page.custom.models.title': 'Modèles',
|
||||
'settings.providers.page.custom.models.idLabel': 'ID du modèle',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': 'Nom du modèle',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': 'Ajouter un modèle',
|
||||
'settings.providers.page.custom.models.remove': 'Supprimer le modèle',
|
||||
'settings.providers.page.custom.headers.title': 'En-têtes',
|
||||
'settings.providers.page.custom.headers.description': 'En-têtes de requête optionnels envoyés à chaque appel.',
|
||||
'settings.providers.page.custom.headers.keyLabel': 'Nom de l’en-tête',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': 'Valeur de l’en-tête',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'valeur',
|
||||
'settings.providers.page.custom.headers.add': 'Ajouter un en-tête',
|
||||
'settings.providers.page.custom.headers.remove': 'Supprimer l’en-tête',
|
||||
'settings.providers.page.custom.actions.back': 'Retour',
|
||||
'settings.providers.page.custom.actions.save': 'Enregistrer le fournisseur',
|
||||
'settings.providers.page.custom.error.providerID.required': 'L’ID du fournisseur est obligatoire',
|
||||
'settings.providers.page.custom.error.providerID.format': 'Utilisez des minuscules, chiffres, tirets ou underscores',
|
||||
'settings.providers.page.custom.error.providerID.exists': 'Un fournisseur avec cet ID est déjà connecté',
|
||||
'settings.providers.page.custom.error.name.required': 'Le nom affiché est obligatoire',
|
||||
'settings.providers.page.custom.error.baseURL.required': 'L’URL de base est obligatoire',
|
||||
'settings.providers.page.custom.error.baseURL.format': 'L’URL de base doit commencer par http:// ou https://',
|
||||
'settings.providers.page.custom.error.required': 'Obligatoire',
|
||||
'settings.providers.page.custom.error.duplicate': 'Doublon',
|
||||
'settings.providers.page.auth.title': 'Authentification',
|
||||
'settings.providers.page.auth.loadingMethods': 'Chargement des méthodes d\'authentification...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'Clé API',
|
||||
@@ -1279,6 +1319,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': 'Échec de la copie du code de l\'appareil',
|
||||
'settings.providers.page.toast.providerDisconnected': 'Fournisseur déconnecté',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': 'Échec de la déconnexion du fournisseur',
|
||||
'settings.providers.page.toast.customProviderSaved': '{provider} connecté',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': 'Échec de l’enregistrement du fournisseur personnalisé',
|
||||
'settings.mcp.page.empty.selectServer': 'Sélectionnez un serveur MCP dans la barre latérale',
|
||||
'settings.mcp.page.empty.addNewOne': 'ou ajoutez-en un nouveau',
|
||||
'settings.mcp.page.header.newServer': 'Nouveau serveur MCP',
|
||||
|
||||
@@ -1334,6 +1334,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': '検索...',
|
||||
'settings.providers.page.connect.noProvidersFound': 'Provider が見つかりません',
|
||||
'settings.providers.page.connect.allProvidersConnected': 'すべての Provider が接続されています。',
|
||||
'settings.providers.page.custom.optionLabel': 'その他 / カスタム',
|
||||
'settings.providers.page.custom.title': 'カスタムプロバイダー',
|
||||
'settings.providers.page.custom.description': 'ベース URL・認証情報・モデル一覧を指定して、OpenAI 互換プロバイダーを追加します。OpenCode 設定に保存され、他のプロバイダーと同様にチャットで使えます。',
|
||||
'settings.providers.page.custom.field.providerID.label': 'プロバイダー ID',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||||
'settings.providers.page.custom.field.providerID.info': '小文字・数字・ハイフン・アンダースコア。OpenCode のプロバイダー ID として使われます。',
|
||||
'settings.providers.page.custom.field.name.label': '表示名',
|
||||
'settings.providers.page.custom.field.name.placeholder': 'My Provider',
|
||||
'settings.providers.page.custom.field.name.info': 'プロバイダーおよびモデル選択に表示されます。',
|
||||
'settings.providers.page.custom.field.baseURL.label': 'ベース URL',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': 'OpenAI 互換 API のベース URL。http:// または https:// で始めてください。',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'API キー',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... または {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': 'OpenChamber ではなく OpenCode の認証に保存されます。環境変数から読む場合は {env:VAR_NAME} を使います。',
|
||||
'settings.providers.page.custom.models.title': 'モデル',
|
||||
'settings.providers.page.custom.models.idLabel': 'モデル ID',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': 'モデル名',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': 'モデルを追加',
|
||||
'settings.providers.page.custom.models.remove': 'モデルを削除',
|
||||
'settings.providers.page.custom.headers.title': 'ヘッダー',
|
||||
'settings.providers.page.custom.headers.description': '各リクエストに付ける任意のヘッダーです。',
|
||||
'settings.providers.page.custom.headers.keyLabel': 'ヘッダー名',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': 'ヘッダー値',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||||
'settings.providers.page.custom.headers.add': 'ヘッダーを追加',
|
||||
'settings.providers.page.custom.headers.remove': 'ヘッダーを削除',
|
||||
'settings.providers.page.custom.actions.back': '戻る',
|
||||
'settings.providers.page.custom.actions.save': 'プロバイダーを保存',
|
||||
'settings.providers.page.custom.error.providerID.required': 'プロバイダー ID は必須です',
|
||||
'settings.providers.page.custom.error.providerID.format': '小文字・数字・ハイフン・アンダースコアを使ってください',
|
||||
'settings.providers.page.custom.error.providerID.exists': 'この ID のプロバイダーは既に接続されています',
|
||||
'settings.providers.page.custom.error.name.required': '表示名は必須です',
|
||||
'settings.providers.page.custom.error.baseURL.required': 'ベース URL は必須です',
|
||||
'settings.providers.page.custom.error.baseURL.format': 'ベース URL は http:// または https:// で始めてください',
|
||||
'settings.providers.page.custom.error.required': '必須',
|
||||
'settings.providers.page.custom.error.duplicate': '重複',
|
||||
'settings.providers.page.auth.title': '認証',
|
||||
'settings.providers.page.auth.loadingMethods': '認証方法を読み込み中...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'API キー',
|
||||
@@ -1391,6 +1431,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': 'デバイスコードのコピーに失敗しました',
|
||||
'settings.providers.page.toast.providerDisconnected': 'Provider を切断しました',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': 'Provider の切断に失敗しました',
|
||||
'settings.providers.page.toast.customProviderSaved': '{provider} を接続しました',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': 'カスタムプロバイダーの保存に失敗しました',
|
||||
'settings.mcp.page.empty.selectServer': 'サイドバーから MCP サーバーを選択してください',
|
||||
'settings.mcp.page.empty.addNewOne': 'または新しいものを追加',
|
||||
'settings.mcp.page.header.newServer': '新しい MCP サーバー',
|
||||
|
||||
@@ -1301,6 +1301,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': '검색...',
|
||||
'settings.providers.page.connect.noProvidersFound': '프로바이더를 찾을 수 없습니다',
|
||||
'settings.providers.page.connect.allProvidersConnected': '모든 프로바이더가 연결되었습니다.',
|
||||
'settings.providers.page.custom.optionLabel': '기타 / 사용자 정의',
|
||||
'settings.providers.page.custom.title': '사용자 정의 제공자',
|
||||
'settings.providers.page.custom.description': '기본 URL, 자격 증명, 모델 목록으로 OpenAI 호환 제공자를 추가합니다. OpenCode 설정에 저장되어 다른 제공자와 같이 채팅에서 사용할 수 있습니다.',
|
||||
'settings.providers.page.custom.field.providerID.label': '제공자 ID',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||||
'settings.providers.page.custom.field.providerID.info': '소문자, 숫자, 하이픈, 밑줄. OpenCode 제공자 ID로 사용됩니다.',
|
||||
'settings.providers.page.custom.field.name.label': '표시 이름',
|
||||
'settings.providers.page.custom.field.name.placeholder': '내 제공자',
|
||||
'settings.providers.page.custom.field.name.info': '제공자 및 모델 선택기에 표시됩니다.',
|
||||
'settings.providers.page.custom.field.baseURL.label': '기본 URL',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': 'OpenAI 호환 API 기본 URL. http:// 또는 https://로 시작해야 합니다.',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'API 키',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... 또는 {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': 'OpenChamber가 아니라 OpenCode 인증에 저장됩니다. 환경 변수에서 읽으려면 {env:VAR_NAME}을 사용하세요.',
|
||||
'settings.providers.page.custom.models.title': '모델',
|
||||
'settings.providers.page.custom.models.idLabel': '모델 ID',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': '모델 이름',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': '모델 추가',
|
||||
'settings.providers.page.custom.models.remove': '모델 제거',
|
||||
'settings.providers.page.custom.headers.title': '헤더',
|
||||
'settings.providers.page.custom.headers.description': '매 호출에 전송되는 선택적 요청 헤더입니다.',
|
||||
'settings.providers.page.custom.headers.keyLabel': '헤더 이름',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': '헤더 값',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||||
'settings.providers.page.custom.headers.add': '헤더 추가',
|
||||
'settings.providers.page.custom.headers.remove': '헤더 제거',
|
||||
'settings.providers.page.custom.actions.back': '뒤로',
|
||||
'settings.providers.page.custom.actions.save': '제공자 저장',
|
||||
'settings.providers.page.custom.error.providerID.required': '제공자 ID는 필수입니다',
|
||||
'settings.providers.page.custom.error.providerID.format': '소문자, 숫자, 하이픈, 밑줄을 사용하세요',
|
||||
'settings.providers.page.custom.error.providerID.exists': '이 ID의 제공자가 이미 연결되어 있습니다',
|
||||
'settings.providers.page.custom.error.name.required': '표시 이름은 필수입니다',
|
||||
'settings.providers.page.custom.error.baseURL.required': '기본 URL은 필수입니다',
|
||||
'settings.providers.page.custom.error.baseURL.format': '기본 URL은 http:// 또는 https://로 시작해야 합니다',
|
||||
'settings.providers.page.custom.error.required': '필수',
|
||||
'settings.providers.page.custom.error.duplicate': '중복',
|
||||
'settings.providers.page.auth.title': '인증',
|
||||
'settings.providers.page.auth.loadingMethods': '인증 방식 로딩 중...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'API Key',
|
||||
@@ -1358,6 +1398,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': '기기 코드를 복사하지 못했습니다',
|
||||
'settings.providers.page.toast.providerDisconnected': '프로바이더 연결이 해제되었습니다',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': '프로바이더 연결을 해제하지 못했습니다',
|
||||
'settings.providers.page.toast.customProviderSaved': '{provider} 연결됨',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': '사용자 정의 제공자를 저장하지 못했습니다',
|
||||
'settings.mcp.page.empty.selectServer': '사이드바에서 MCP 서버를 선택하세요',
|
||||
'settings.mcp.page.empty.addNewOne': '또는 새로 추가하세요',
|
||||
'settings.mcp.page.header.newServer': '새 MCP 서버',
|
||||
|
||||
@@ -1377,6 +1377,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.auth.title': 'Uwierzytelnianie',
|
||||
'settings.providers.page.auth.useReconnectHint': '· Użyj Połącz ponownie, aby zaktualizować dane logowania',
|
||||
'settings.providers.page.connect.allProvidersConnected': 'Wszyscy dostawcy są połączeni.',
|
||||
'settings.providers.page.custom.optionLabel': 'Inny / Niestandardowy',
|
||||
'settings.providers.page.custom.title': 'Niestandardowy dostawca',
|
||||
'settings.providers.page.custom.description': 'Dodaj dostawcę zgodnego z OpenAI, podając adres bazowy, poświadczenia i listę modeli. Zapisuje się w konfiguracji OpenCode i działa w czacie jak każdy inny dostawca.',
|
||||
'settings.providers.page.custom.field.providerID.label': 'ID dostawcy',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'moj-dostawca',
|
||||
'settings.providers.page.custom.field.providerID.info': 'Małe litery, cyfry, myślniki i podkreślenia. Używane jako ID dostawcy OpenCode.',
|
||||
'settings.providers.page.custom.field.name.label': 'Nazwa wyświetlana',
|
||||
'settings.providers.page.custom.field.name.placeholder': 'Mój dostawca',
|
||||
'settings.providers.page.custom.field.name.info': 'Widoczna w selektorach dostawcy i modelu.',
|
||||
'settings.providers.page.custom.field.baseURL.label': 'Adres bazowy',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': 'Bazowy URL API zgodnego z OpenAI. Musi zaczynać się od http:// lub https://.',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'Klucz API',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... lub {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': 'Przechowywany w auth OpenCode, nie przez OpenChamber. Użyj {env:VAR_NAME}, aby odczytać klucz ze zmiennej środowiskowej.',
|
||||
'settings.providers.page.custom.models.title': 'Modele',
|
||||
'settings.providers.page.custom.models.idLabel': 'ID modelu',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': 'Nazwa modelu',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': 'Dodaj model',
|
||||
'settings.providers.page.custom.models.remove': 'Usuń model',
|
||||
'settings.providers.page.custom.headers.title': 'Nagłówki',
|
||||
'settings.providers.page.custom.headers.description': 'Opcjonalne nagłówki żądania wysyłane przy każdym wywołaniu.',
|
||||
'settings.providers.page.custom.headers.keyLabel': 'Nazwa nagłówka',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': 'Wartość nagłówka',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'wartość',
|
||||
'settings.providers.page.custom.headers.add': 'Dodaj nagłówek',
|
||||
'settings.providers.page.custom.headers.remove': 'Usuń nagłówek',
|
||||
'settings.providers.page.custom.actions.back': 'Wstecz',
|
||||
'settings.providers.page.custom.actions.save': 'Zapisz dostawcę',
|
||||
'settings.providers.page.custom.error.providerID.required': 'ID dostawcy jest wymagane',
|
||||
'settings.providers.page.custom.error.providerID.format': 'Użyj małych liter, cyfr, myślników lub podkreśleń',
|
||||
'settings.providers.page.custom.error.providerID.exists': 'Dostawca o tym ID jest już połączony',
|
||||
'settings.providers.page.custom.error.name.required': 'Nazwa wyświetlana jest wymagana',
|
||||
'settings.providers.page.custom.error.baseURL.required': 'Adres bazowy jest wymagany',
|
||||
'settings.providers.page.custom.error.baseURL.format': 'Adres bazowy musi zaczynać się od http:// lub https://',
|
||||
'settings.providers.page.custom.error.required': 'Wymagane',
|
||||
'settings.providers.page.custom.error.duplicate': 'Duplikat',
|
||||
'settings.providers.page.connect.noProvidersFound': 'Nie znaleziono dostawców',
|
||||
'settings.providers.page.connect.providerField': 'Dostawca',
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': 'Szukaj...',
|
||||
@@ -1422,6 +1462,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.oauthLinkCopyFailed': 'Nie udało się skopiować linku OAuth',
|
||||
'settings.providers.page.toast.oauthStartFailed': 'Nie udało się rozpocząć procesu OAuth',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': 'Nie udało się odłączyć dostawcy',
|
||||
'settings.providers.page.toast.customProviderSaved': 'Połączono {provider}',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': 'Nie udało się zapisać niestandardowego dostawcy',
|
||||
'settings.providers.page.toast.providerDisconnected': 'Dostawca został odłączony',
|
||||
'settings.providers.page.toast.providerSourcesLoadFailed': 'Nie udało się załadować źródeł dostawcy',
|
||||
'settings.providers.sidebar.actions.connectProviderAria': 'Połącz dostawcę',
|
||||
|
||||
@@ -1301,6 +1301,46 @@ export const settingsDict = {
|
||||
"settings.providers.page.connect.searchProvidersPlaceholder": "Buscar...",
|
||||
"settings.providers.page.connect.noProvidersFound": "Nenhum provedores",
|
||||
"settings.providers.page.connect.allProvidersConnected": "Todos os provedores estão conectados.",
|
||||
"settings.providers.page.custom.optionLabel": "Outro / Personalizado",
|
||||
"settings.providers.page.custom.title": "Provedor personalizado",
|
||||
"settings.providers.page.custom.description": "Adicione um provedor compatível com OpenAI com URL base, credenciais e lista de modelos. Salvo na configuração do OpenCode para uso no chat como qualquer outro provedor.",
|
||||
"settings.providers.page.custom.field.providerID.label": "ID do provedor",
|
||||
"settings.providers.page.custom.field.providerID.placeholder": "meu-provedor",
|
||||
"settings.providers.page.custom.field.providerID.info": "Letras minúsculas, números, hífens e sublinhados. Usado como ID de provedor do OpenCode.",
|
||||
"settings.providers.page.custom.field.name.label": "Nome de exibição",
|
||||
"settings.providers.page.custom.field.name.placeholder": "Meu provedor",
|
||||
"settings.providers.page.custom.field.name.info": "Mostrado nos seletores de provedor e modelo.",
|
||||
"settings.providers.page.custom.field.baseURL.label": "URL base",
|
||||
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
|
||||
"settings.providers.page.custom.field.baseURL.info": "URL base da API compatível com OpenAI. Deve começar com http:// ou https://.",
|
||||
"settings.providers.page.custom.field.apiKey.label": "Chave de API",
|
||||
"settings.providers.page.custom.field.apiKey.placeholder": "sk-... ou {env:VAR_NAME}",
|
||||
"settings.providers.page.custom.field.apiKey.info": "Armazenada na autenticação do OpenCode, não pelo OpenChamber. Use {env:VAR_NAME} para ler uma chave do ambiente.",
|
||||
"settings.providers.page.custom.models.title": "Modelos",
|
||||
"settings.providers.page.custom.models.idLabel": "ID do modelo",
|
||||
"settings.providers.page.custom.models.idPlaceholder": "gpt-4o",
|
||||
"settings.providers.page.custom.models.nameLabel": "Nome do modelo",
|
||||
"settings.providers.page.custom.models.namePlaceholder": "GPT-4o",
|
||||
"settings.providers.page.custom.models.add": "Adicionar modelo",
|
||||
"settings.providers.page.custom.models.remove": "Remover modelo",
|
||||
"settings.providers.page.custom.headers.title": "Cabeçalhos",
|
||||
"settings.providers.page.custom.headers.description": "Cabeçalhos de solicitação opcionais enviados em cada chamada.",
|
||||
"settings.providers.page.custom.headers.keyLabel": "Nome do cabeçalho",
|
||||
"settings.providers.page.custom.headers.keyPlaceholder": "X-Custom-Header",
|
||||
"settings.providers.page.custom.headers.valueLabel": "Valor do cabeçalho",
|
||||
"settings.providers.page.custom.headers.valuePlaceholder": "valor",
|
||||
"settings.providers.page.custom.headers.add": "Adicionar cabeçalho",
|
||||
"settings.providers.page.custom.headers.remove": "Remover cabeçalho",
|
||||
"settings.providers.page.custom.actions.back": "Voltar",
|
||||
"settings.providers.page.custom.actions.save": "Salvar provedor",
|
||||
"settings.providers.page.custom.error.providerID.required": "O ID do provedor é obrigatório",
|
||||
"settings.providers.page.custom.error.providerID.format": "Use letras minúsculas, números, hífens ou sublinhados",
|
||||
"settings.providers.page.custom.error.providerID.exists": "Já existe um provedor conectado com este ID",
|
||||
"settings.providers.page.custom.error.name.required": "O nome de exibição é obrigatório",
|
||||
"settings.providers.page.custom.error.baseURL.required": "A URL base é obrigatória",
|
||||
"settings.providers.page.custom.error.baseURL.format": "A URL base deve começar com http:// ou https://",
|
||||
"settings.providers.page.custom.error.required": "Obrigatório",
|
||||
"settings.providers.page.custom.error.duplicate": "Duplicado",
|
||||
"settings.providers.page.auth.title": "Autenticação",
|
||||
"settings.providers.page.auth.loadingMethods": "Carregando métodos de autenticação...",
|
||||
"settings.providers.page.auth.apiKeyLabel": "Chave API",
|
||||
@@ -1358,6 +1398,8 @@ export const settingsDict = {
|
||||
"settings.providers.page.toast.deviceCodeCopyFailed": "Não foi possível copiar o código de dispositivo",
|
||||
"settings.providers.page.toast.providerDisconnected": "Provedor desconectado",
|
||||
"settings.providers.page.toast.providerDisconnectFailed": "Não foi possível desconectar o provedor",
|
||||
"settings.providers.page.toast.customProviderSaved": "{provider} conectado",
|
||||
"settings.providers.page.toast.customProviderSaveFailed": "Falha ao salvar o provedor personalizado",
|
||||
"settings.mcp.page.empty.selectServer": "Selecione um servidor MCP de o painel lateral",
|
||||
"settings.mcp.page.empty.addNewOne": "o añade um novo",
|
||||
"settings.mcp.page.header.newServer": "Novo servidor MCP",
|
||||
|
||||
@@ -1301,6 +1301,46 @@ export const settingsDict = {
|
||||
"settings.providers.page.connect.searchProvidersPlaceholder": "Пошук...",
|
||||
"settings.providers.page.connect.noProvidersFound": "Немає провайдерів",
|
||||
"settings.providers.page.connect.allProvidersConnected": "Усі провайдери підключені.",
|
||||
"settings.providers.page.custom.optionLabel": "Інший / Власний",
|
||||
"settings.providers.page.custom.title": "Власний провайдер",
|
||||
"settings.providers.page.custom.description": "Додайте OpenAI-сумісного провайдера з базовою URL-адресою, обліковими даними та списком моделей. Зберігається в конфігурації OpenCode й працює в чаті як будь-який інший провайдер.",
|
||||
"settings.providers.page.custom.field.providerID.label": "ID провайдера",
|
||||
"settings.providers.page.custom.field.providerID.placeholder": "mij-provider",
|
||||
"settings.providers.page.custom.field.providerID.info": "Малі літери, цифри, дефіси та підкреслення. Використовується як ID провайдера OpenCode.",
|
||||
"settings.providers.page.custom.field.name.label": "Відображувана назва",
|
||||
"settings.providers.page.custom.field.name.placeholder": "Мій провайдер",
|
||||
"settings.providers.page.custom.field.name.info": "Показується у виборі провайдера та моделі.",
|
||||
"settings.providers.page.custom.field.baseURL.label": "Базова URL-адреса",
|
||||
"settings.providers.page.custom.field.baseURL.placeholder": "https://api.example.com/v1",
|
||||
"settings.providers.page.custom.field.baseURL.info": "Базова URL-адреса OpenAI-сумісного API. Має починатися з http:// або https://.",
|
||||
"settings.providers.page.custom.field.apiKey.label": "API-ключ",
|
||||
"settings.providers.page.custom.field.apiKey.placeholder": "sk-... або {env:VAR_NAME}",
|
||||
"settings.providers.page.custom.field.apiKey.info": "Зберігається в автентифікації OpenCode, не OpenChamber. Використовуйте {env:VAR_NAME}, щоб читати ключ зі змінної середовища.",
|
||||
"settings.providers.page.custom.models.title": "Моделі",
|
||||
"settings.providers.page.custom.models.idLabel": "ID моделі",
|
||||
"settings.providers.page.custom.models.idPlaceholder": "gpt-4o",
|
||||
"settings.providers.page.custom.models.nameLabel": "Назва моделі",
|
||||
"settings.providers.page.custom.models.namePlaceholder": "GPT-4o",
|
||||
"settings.providers.page.custom.models.add": "Додати модель",
|
||||
"settings.providers.page.custom.models.remove": "Видалити модель",
|
||||
"settings.providers.page.custom.headers.title": "Заголовки",
|
||||
"settings.providers.page.custom.headers.description": "Необов’язкові заголовки запиту, що надсилаються з кожним викликом.",
|
||||
"settings.providers.page.custom.headers.keyLabel": "Назва заголовка",
|
||||
"settings.providers.page.custom.headers.keyPlaceholder": "X-Custom-Header",
|
||||
"settings.providers.page.custom.headers.valueLabel": "Значення заголовка",
|
||||
"settings.providers.page.custom.headers.valuePlaceholder": "значення",
|
||||
"settings.providers.page.custom.headers.add": "Додати заголовок",
|
||||
"settings.providers.page.custom.headers.remove": "Видалити заголовок",
|
||||
"settings.providers.page.custom.actions.back": "Назад",
|
||||
"settings.providers.page.custom.actions.save": "Зберегти провайдера",
|
||||
"settings.providers.page.custom.error.providerID.required": "ID провайдера обов’язковий",
|
||||
"settings.providers.page.custom.error.providerID.format": "Використовуйте малі літери, цифри, дефіси або підкреслення",
|
||||
"settings.providers.page.custom.error.providerID.exists": "Провайдер із цим ID уже підключено",
|
||||
"settings.providers.page.custom.error.name.required": "Відображувана назва обов’язкова",
|
||||
"settings.providers.page.custom.error.baseURL.required": "Базова URL-адреса обов’язкова",
|
||||
"settings.providers.page.custom.error.baseURL.format": "Базова URL-адреса має починатися з http:// або https://",
|
||||
"settings.providers.page.custom.error.required": "Обов’язково",
|
||||
"settings.providers.page.custom.error.duplicate": "Дублікат",
|
||||
"settings.providers.page.auth.title": "Аутентифікація",
|
||||
"settings.providers.page.auth.loadingMethods": "Завантаження методів автентифікації...",
|
||||
"settings.providers.page.auth.apiKeyLabel": "API ключ",
|
||||
@@ -1358,6 +1398,8 @@ export const settingsDict = {
|
||||
"settings.providers.page.toast.deviceCodeCopyFailed": "Не вдалося скопіювати код пристрою",
|
||||
"settings.providers.page.toast.providerDisconnected": "Провайдера відключено",
|
||||
"settings.providers.page.toast.providerDisconnectFailed": "Не вдалося відключити провайдера",
|
||||
"settings.providers.page.toast.customProviderSaved": "{provider} підключено",
|
||||
"settings.providers.page.toast.customProviderSaveFailed": "Не вдалося зберегти власного провайдера",
|
||||
"settings.mcp.page.empty.selectServer": "Виберіть MCP сервер на бічній панелі",
|
||||
"settings.mcp.page.empty.addNewOne": "або додати новий",
|
||||
"settings.mcp.page.header.newServer": "Новий сервер MCP",
|
||||
|
||||
@@ -1301,6 +1301,46 @@ export const settingsDict = {
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': '搜索...',
|
||||
'settings.providers.page.connect.noProvidersFound': '未找到提供商',
|
||||
'settings.providers.page.connect.allProvidersConnected': '所有提供商均已连接。',
|
||||
'settings.providers.page.custom.optionLabel': '其他 / 自定义',
|
||||
'settings.providers.page.custom.title': '自定义提供商',
|
||||
'settings.providers.page.custom.description': '通过指定基础 URL、凭据和模型列表,添加兼容 OpenAI 的提供商。会写入 OpenCode 配置,可像其他提供商一样在聊天中使用。',
|
||||
'settings.providers.page.custom.field.providerID.label': '提供商 ID',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||||
'settings.providers.page.custom.field.providerID.info': '小写字母、数字、连字符和下划线。用作 OpenCode 提供商 ID。',
|
||||
'settings.providers.page.custom.field.name.label': '显示名称',
|
||||
'settings.providers.page.custom.field.name.placeholder': '我的提供商',
|
||||
'settings.providers.page.custom.field.name.info': '显示在提供商和模型选择器中。',
|
||||
'settings.providers.page.custom.field.baseURL.label': '基础 URL',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': '兼容 OpenAI 的 API 基础 URL。必须以 http:// 或 https:// 开头。',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'API 密钥',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... 或 {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': '保存在 OpenCode 认证中,而非 OpenChamber。使用 {env:VAR_NAME} 可从环境变量读取密钥。',
|
||||
'settings.providers.page.custom.models.title': '模型',
|
||||
'settings.providers.page.custom.models.idLabel': '模型 ID',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': '模型名称',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': '添加模型',
|
||||
'settings.providers.page.custom.models.remove': '移除模型',
|
||||
'settings.providers.page.custom.headers.title': '请求头',
|
||||
'settings.providers.page.custom.headers.description': '每次调用可选发送的请求头。',
|
||||
'settings.providers.page.custom.headers.keyLabel': '请求头名称',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': '请求头值',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||||
'settings.providers.page.custom.headers.add': '添加请求头',
|
||||
'settings.providers.page.custom.headers.remove': '移除请求头',
|
||||
'settings.providers.page.custom.actions.back': '返回',
|
||||
'settings.providers.page.custom.actions.save': '保存提供商',
|
||||
'settings.providers.page.custom.error.providerID.required': '提供商 ID 为必填项',
|
||||
'settings.providers.page.custom.error.providerID.format': '请使用小写字母、数字、连字符或下划线',
|
||||
'settings.providers.page.custom.error.providerID.exists': '已连接具有此 ID 的提供商',
|
||||
'settings.providers.page.custom.error.name.required': '显示名称为必填项',
|
||||
'settings.providers.page.custom.error.baseURL.required': '基础 URL 为必填项',
|
||||
'settings.providers.page.custom.error.baseURL.format': '基础 URL 必须以 http:// 或 https:// 开头',
|
||||
'settings.providers.page.custom.error.required': '必填',
|
||||
'settings.providers.page.custom.error.duplicate': '重复',
|
||||
'settings.providers.page.auth.title': '认证',
|
||||
'settings.providers.page.auth.loadingMethods': '正在加载认证方式...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'API Key',
|
||||
@@ -1358,6 +1398,8 @@ export const settingsDict = {
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': '复制设备代码失败',
|
||||
'settings.providers.page.toast.providerDisconnected': '提供商已断开连接',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': '断开提供商连接失败',
|
||||
'settings.providers.page.toast.customProviderSaved': '已连接 {provider}',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': '保存自定义提供商失败',
|
||||
'settings.mcp.page.empty.selectServer': '请从侧边栏选择一个 MCP 服务器',
|
||||
'settings.mcp.page.empty.addNewOne': '或添加一个新的',
|
||||
'settings.mcp.page.header.newServer': '新建 MCP 服务器',
|
||||
|
||||
@@ -1207,6 +1207,46 @@
|
||||
'settings.providers.page.connect.searchProvidersPlaceholder': '搜尋...',
|
||||
'settings.providers.page.connect.noProvidersFound': '找不到供應商',
|
||||
'settings.providers.page.connect.allProvidersConnected': '所有供應商均已連線。',
|
||||
'settings.providers.page.custom.optionLabel': '其他 / 自訂',
|
||||
'settings.providers.page.custom.title': '自訂供應商',
|
||||
'settings.providers.page.custom.description': '透過指定基礎 URL、憑證與模型清單,新增相容 OpenAI 的供應商。會寫入 OpenCode 設定,可像其他供應商一樣在聊天中使用。',
|
||||
'settings.providers.page.custom.field.providerID.label': '供應商 ID',
|
||||
'settings.providers.page.custom.field.providerID.placeholder': 'my-provider',
|
||||
'settings.providers.page.custom.field.providerID.info': '小寫字母、數字、連字號與底線。用作 OpenCode 供應商 ID。',
|
||||
'settings.providers.page.custom.field.name.label': '顯示名稱',
|
||||
'settings.providers.page.custom.field.name.placeholder': '我的供應商',
|
||||
'settings.providers.page.custom.field.name.info': '顯示於供應商與模型選擇器。',
|
||||
'settings.providers.page.custom.field.baseURL.label': '基礎 URL',
|
||||
'settings.providers.page.custom.field.baseURL.placeholder': 'https://api.example.com/v1',
|
||||
'settings.providers.page.custom.field.baseURL.info': '相容 OpenAI 的 API 基礎 URL。必須以 http:// 或 https:// 開頭。',
|
||||
'settings.providers.page.custom.field.apiKey.label': 'API 金鑰',
|
||||
'settings.providers.page.custom.field.apiKey.placeholder': 'sk-... 或 {env:VAR_NAME}',
|
||||
'settings.providers.page.custom.field.apiKey.info': '儲存在 OpenCode 驗證中,而非 OpenChamber。使用 {env:VAR_NAME} 可從環境變數讀取金鑰。',
|
||||
'settings.providers.page.custom.models.title': '模型',
|
||||
'settings.providers.page.custom.models.idLabel': '模型 ID',
|
||||
'settings.providers.page.custom.models.idPlaceholder': 'gpt-4o',
|
||||
'settings.providers.page.custom.models.nameLabel': '模型名稱',
|
||||
'settings.providers.page.custom.models.namePlaceholder': 'GPT-4o',
|
||||
'settings.providers.page.custom.models.add': '新增模型',
|
||||
'settings.providers.page.custom.models.remove': '移除模型',
|
||||
'settings.providers.page.custom.headers.title': '標頭',
|
||||
'settings.providers.page.custom.headers.description': '每次呼叫可選擇傳送的請求標頭。',
|
||||
'settings.providers.page.custom.headers.keyLabel': '標頭名稱',
|
||||
'settings.providers.page.custom.headers.keyPlaceholder': 'X-Custom-Header',
|
||||
'settings.providers.page.custom.headers.valueLabel': '標頭值',
|
||||
'settings.providers.page.custom.headers.valuePlaceholder': 'value',
|
||||
'settings.providers.page.custom.headers.add': '新增標頭',
|
||||
'settings.providers.page.custom.headers.remove': '移除標頭',
|
||||
'settings.providers.page.custom.actions.back': '返回',
|
||||
'settings.providers.page.custom.actions.save': '儲存供應商',
|
||||
'settings.providers.page.custom.error.providerID.required': '供應商 ID 為必填',
|
||||
'settings.providers.page.custom.error.providerID.format': '請使用小寫字母、數字、連字號或底線',
|
||||
'settings.providers.page.custom.error.providerID.exists': '已連線具有此 ID 的供應商',
|
||||
'settings.providers.page.custom.error.name.required': '顯示名稱為必填',
|
||||
'settings.providers.page.custom.error.baseURL.required': '基礎 URL 為必填',
|
||||
'settings.providers.page.custom.error.baseURL.format': '基礎 URL 必須以 http:// 或 https:// 開頭',
|
||||
'settings.providers.page.custom.error.required': '必填',
|
||||
'settings.providers.page.custom.error.duplicate': '重複',
|
||||
'settings.providers.page.auth.title': '驗證',
|
||||
'settings.providers.page.auth.loadingMethods': '正在載入驗證方式...',
|
||||
'settings.providers.page.auth.apiKeyLabel': 'API Key',
|
||||
@@ -1264,6 +1304,8 @@
|
||||
'settings.providers.page.toast.deviceCodeCopyFailed': '複製裝置程式碼失敗',
|
||||
'settings.providers.page.toast.providerDisconnected': '供應商已中斷連線',
|
||||
'settings.providers.page.toast.providerDisconnectFailed': '中斷供應商連線失敗',
|
||||
'settings.providers.page.toast.customProviderSaved': '已連線 {provider}',
|
||||
'settings.providers.page.toast.customProviderSaveFailed': '無法儲存自訂供應商',
|
||||
'settings.mcp.page.empty.selectServer': '請從側邊欄選擇一個 MCP 伺服器',
|
||||
'settings.mcp.page.empty.addNewOne': '或新增一個新的',
|
||||
'settings.mcp.page.header.newServer': '新建 MCP 伺服器',
|
||||
|
||||
@@ -754,6 +754,13 @@ const SETTINGS_SEARCH_ITEMS: readonly SettingsSearchItem[] = [
|
||||
titleKey: 'settings.providers.page.connect.title',
|
||||
keywords: ['add provider', 'connect provider', 'credentials'],
|
||||
},
|
||||
{
|
||||
id: 'providers.custom',
|
||||
page: 'providers',
|
||||
titleKey: 'settings.providers.page.custom.title',
|
||||
descriptionKey: 'settings.providers.page.custom.description',
|
||||
keywords: ['other', 'custom', 'openai-compatible', 'base url', 'api key'],
|
||||
},
|
||||
{
|
||||
id: 'providers.auth',
|
||||
page: 'providers',
|
||||
|
||||
Reference in New Issue
Block a user