diff --git a/src/i18n/easyMode.ts b/src/i18n/easyMode.ts index 9e0d5ee..d300047 100644 --- a/src/i18n/easyMode.ts +++ b/src/i18n/easyMode.ts @@ -30,7 +30,7 @@ export const easyModeZhCN = { "easyMode.oauth.providerDesc.devin": "Devin / Cognition 账号授权登录", "easyMode.oauth.providerDesc.meta": "Muse / Meta 设备码授权登录", "easyMode.api.platformsConnected": "已接入 {count} 个平台", - "easyMode.api.supportedPlatforms": "支持 OpenAI、Anthropic、Codex、Gemini、DeepSeek", + "easyMode.api.supportedPlatforms": "支持 OpenAI、Anthropic、Codex、Gemini、DeepSeek、Vertex、xAI、Meta", "easyMode.api.platformName.openai": "OpenAI 格式", "easyMode.api.platformName.claude": "Anthropic 格式", "easyMode.api.platformName.codex": "Codex API", @@ -113,7 +113,7 @@ export const easyModeEn: Record = { "easyMode.oauth.providerDesc.devin": "Devin / Cognition authorization sign-in", "easyMode.oauth.providerDesc.meta": "Muse / Meta device code sign-in", "easyMode.api.platformsConnected": "{count} platform(s) connected", - "easyMode.api.supportedPlatforms": "Supports OpenAI, Anthropic, Codex, Gemini, DeepSeek", + "easyMode.api.supportedPlatforms": "Supports OpenAI, Anthropic, Codex, Gemini, DeepSeek, Vertex, xAI, Meta", "easyMode.api.platformName.openai": "OpenAI Format", "easyMode.api.platformName.claude": "Anthropic Format", "easyMode.api.platformName.codex": "Codex API", @@ -196,7 +196,7 @@ export const easyModeJa: Record = { "easyMode.oauth.providerDesc.devin": "Devin / Cognition アカウント認証ログイン", "easyMode.oauth.providerDesc.meta": "Muse / Meta デバイスコード認証ログイン", "easyMode.api.platformsConnected": "{count} 件のプラットフォームを接続済み", - "easyMode.api.supportedPlatforms": "OpenAI、Anthropic、Codex、Gemini、DeepSeek に対応", + "easyMode.api.supportedPlatforms": "OpenAI、Anthropic、Codex、Gemini、DeepSeek、Vertex、xAI、Meta に対応", "easyMode.api.platformName.openai": "OpenAI 形式", "easyMode.api.platformName.claude": "Anthropic 形式", "easyMode.api.platformName.codex": "Codex API", diff --git a/src/i18n/ja.ts b/src/i18n/ja.ts index 1b0ebf4..e728fd7 100644 --- a/src/i18n/ja.ts +++ b/src/i18n/ja.ts @@ -1536,7 +1536,7 @@ export const jaOverrides = { 'apiAccess.empty.filtered': '一致する接続がありません', 'apiAccess.empty.none': '接続設定がありません', 'apiAccess.empty.tryKeyword': '別のキーワードをお試しください', - 'apiAccess.empty.addFirst': '右上の「追加」から最初の接続を追加してください', + 'apiAccess.empty.addFirst': '右上の「{action}」から最初の接続を追加してください', 'apiAccess.keys.count': 'キー {count} 件', 'apiAccess.keys.summary': '{key} · 合計 {count} 件', 'apiAccess.remarkValue': 'メモ:{remark}', @@ -1628,7 +1628,7 @@ export const jaOverrides = { 'apiAccess.cloak.enableStrict': '厳格モードを有効化', 'apiAccess.cloak.cacheUser': 'ユーザー識別子をキャッシュ', 'apiAccess.cloak.cacheUserDescription': '偽装後のユーザー識別子を再利用します', - 'apiAccess.websocket.description': 'この Codex 接続で WebSocket を有効にします', + 'apiAccess.websocket.description': 'この Codex / xAI 接続で WebSocket を有効にします', 'apiAccess.websocket.enable': 'WebSocket を有効化', 'apiAccess.cooling.title': 'クールダウンを無効化', 'apiAccess.cooling.description': '上流でレート制限が発生しても、この接続を引き続き選択可能にします', diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 6e4a01c..81cb191 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -1537,7 +1537,7 @@ export const en: Record = { 'apiAccess.empty.filtered': 'No matching connections', 'apiAccess.empty.none': 'No API connections', 'apiAccess.empty.tryKeyword': 'Try a different keyword', - 'apiAccess.empty.addFirst': 'Click “Add” in the upper-right to create your first connection', + 'apiAccess.empty.addFirst': 'Click “{action}” in the upper-right to create your first connection', 'apiAccess.keys.count': '{count} keys', 'apiAccess.keys.summary': '{key} · {count} keys total', 'apiAccess.remarkValue': 'Remark: {remark}', @@ -1628,7 +1628,7 @@ export const en: Record = { 'apiAccess.cloak.enableStrict': 'Enable strict mode', 'apiAccess.cloak.cacheUser': 'Cache User ID', 'apiAccess.cloak.cacheUserDescription': 'Reuse the cloaked user identifier', - 'apiAccess.websocket.description': 'Enable WebSocket for this Codex connection', + 'apiAccess.websocket.description': 'Enable WebSocket for this Codex or xAI connection', 'apiAccess.websocket.enable': 'Enable WebSocket', 'apiAccess.cooling.title': 'Disable Cooldown', 'apiAccess.cooling.description': 'Allow this connection to remain selectable after upstream rate limiting', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 3c66e72..a011876 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -1536,7 +1536,7 @@ export const zhCN = { 'apiAccess.empty.filtered': '没有匹配的接入', 'apiAccess.empty.none': '暂无接入配置', 'apiAccess.empty.tryKeyword': '换个关键词试试', - 'apiAccess.empty.addFirst': '点击右上角“新增”添加第一个接入', + 'apiAccess.empty.addFirst': '点击右上角“{action}”添加第一个接入', 'apiAccess.keys.count': '{count} 个密钥', 'apiAccess.keys.summary': '{key} · 共 {count} 个密钥', 'apiAccess.remarkValue': '备注:{remark}', @@ -1627,7 +1627,7 @@ export const zhCN = { 'apiAccess.cloak.enableStrict': '启用严格模式', 'apiAccess.cloak.cacheUser': '缓存用户标识', 'apiAccess.cloak.cacheUserDescription': '复用伪装后的用户标识', - 'apiAccess.websocket.description': '为该 Codex 接入启用 WebSocket', + 'apiAccess.websocket.description': '为该 Codex / xAI 接入启用 WebSocket', 'apiAccess.websocket.enable': '启用 WebSocket', 'apiAccess.cooling.title': '禁用冷却', 'apiAccess.cooling.description': '上游限流后仍允许继续选择该接入', diff --git a/src/pages/ApiAccessPage.tsx b/src/pages/ApiAccessPage.tsx index 52c844f..647dc88 100644 --- a/src/pages/ApiAccessPage.tsx +++ b/src/pages/ApiAccessPage.tsx @@ -84,7 +84,7 @@ import { ProviderGroupTemplateFields, ProviderKeyTemplateFields, ProviderModelFi import { providerText } from '../i18n/providerTemplate'; import { cleanProviderGroup, effectiveProviderKey, providerGroupIdentity, providerGroupKeys, providerGroupStatus, - providerKeyDraft, serializeProviderKey, validateProviderGroupKeys, validateProviderTemplateRecord, type ProviderKeyDraft, + providerKeyDraft, providerKeyIsDisabled, serializeProviderKey, validateProviderGroupKeys, validateProviderTemplateRecord, type ProviderKeyDraft, } from '../services/providerGroups'; import { providerGroupsApi } from '../services/managementApi'; import { @@ -202,7 +202,7 @@ function SortableProviderRow({