fix(auth): rename credential file labels and highlight enable action

- Use credential-file terminology in Simplified and Traditional Chinese
- Highlight the Enable button for disabled credentials without dimming actions
- Add regression tests for terminology and button styling
This commit is contained in:
lzt404 committed 2026-09-07 01:26:23 +08:00
1 parent 82268cfa6f
commit 0e5b4b00ad
8 files changed
+61 -26

No files matched your search

+15 -15
View File
@@ -76,7 +76,7 @@ export const zhCN = {
'app.nav.thinkingAliases': '模型别名',
'app.nav.oauth': 'OAuth',
'app.nav.api': 'API 接入',
'app.nav.authFiles': '认证文件',
'app.nav.authFiles': '凭证文件',
'app.nav.quota': '额度查询',
'app.nav.usageRecords': '使用记录',
'app.nav.agents': '智能体配置',
@@ -167,12 +167,12 @@ export const zhCN = {
'quota.credentials.other': '{count} 个凭据',
'quota.readList': '读取列表',
'quota.refreshAll': '刷新全部',
'quota.loadingFiles': '读取认证文件中',
'quota.loadingFiles': '读取凭证文件中',
'quota.empty.title': '暂无可查询配额',
'quota.empty.description': '先在认证文件中添加支持配额查询的凭据。',
'quota.empty.description': '先在凭证文件中添加支持配额查询的凭据。',
'quota.unknownProvider': '未知',
'quota.reset': '重置额度',
'quota.fileDisabled': '认证文件已停用',
'quota.fileDisabled': '凭证文件已停用',
'quota.refresh': '获取/刷新额度',
'quota.notFetched': '尚未获取额度',
'quota.disabled': '已停用',
@@ -621,15 +621,15 @@ export const zhCN = {
'authFiles.priority.hint': '仅支持整数;数值越大优先级越高。留空或填写 0 恢复默认。',
'authFiles.priority.invalid': '请输入有效的整数优先级',
'authFiles.priority.updated': '{name} 的优先级已更新',
'authFiles.uploaded': '已上传 {count} 个认证文件',
'authFiles.uploaded': '已上传 {count} 个凭证文件',
'authFiles.uploadFailed': '{count} 个文件上传失败:{errors}',
'authFiles.notice.enabled': '认证文件已启用',
'authFiles.notice.disabled': '认证文件已停用',
'authFiles.runtimeDeleteError': '运行时认证文件不能从磁盘删除',
'authFiles.notice.enabled': '凭证文件已启用',
'authFiles.notice.disabled': '凭证文件已停用',
'authFiles.runtimeDeleteError': '运行时凭证文件不能从磁盘删除',
'authFiles.deleteConfirm': '确定删除“{name}”吗?',
'authFiles.deleted': '认证文件已删除',
'authFiles.deleted': '凭证文件已删除',
'common.copyFailed': '复制失败',
'authFiles.title': '认证文件',
'authFiles.title': '凭证文件',
'authFiles.summary': '{files} 个文件 · {disabled} 个停用',
'common.refresh': '刷新',
'common.upload': '上传',
@@ -640,11 +640,11 @@ export const zhCN = {
'authFiles.filter.enabled': '已启用',
'authFiles.filter.disabled': '已停用',
'authFiles.filter.runtime': '仅运行时',
'authFiles.loading': '读取认证文件中',
'authFiles.empty.filtered': '没有匹配的认证文件',
'authFiles.empty.none': '暂无认证文件',
'authFiles.loading': '读取凭证文件中',
'authFiles.empty.filtered': '没有匹配的凭证文件',
'authFiles.empty.none': '暂无凭证文件',
'authFiles.empty.tryFilter': '换个筛选条件试试',
'authFiles.empty.upload': '上传 JSON 认证文件后会显示在这里',
'authFiles.empty.upload': '上传 JSON 凭证文件后会显示在这里',
'authFiles.unknownSize': '大小未知',
'authFiles.runtime': '运行时',
'authFiles.quota.querying': '查询中',
@@ -1197,7 +1197,7 @@ export const zhCN = {
'kernel.access.openaiDescription': 'OpenAI兼容格式',
'kernel.access.claudeDescription': 'Anthropic兼容格式',
'kernel.access.geminiDescription': 'Gemini兼容格式',
'authFiles.unnamed': '未命名认证文件',
'authFiles.unnamed': '未命名凭证文件',
'management.notConfigured': '未配置',
'management.error.upstream': '上游请求失败',
'management.error.upstreamHttp': '上游返回 HTTP {status}',
+1 -1
View File
@@ -11,7 +11,7 @@ const phraseReplacements: ReadonlyArray<readonly [string, string]> = [
['智能体', '智慧代理'],
['会话', '工作階段'],
['使用记录', '使用記錄'],
['认证文件', '認證檔案'],
['凭证文件', '憑證檔案'],
['配置文件', '設定檔'],
['配置', '設定'],
['文件夹', '資料夾'],
+1 -1
View File
@@ -544,7 +544,7 @@ export function AuthFileManagementPage() {
{providerKey(file) ? <button type="button" className="secondary-button compact-button" onClick={() => void openOauthModels(file)} disabled={busy} title={t('authFiles.models.settings')}>{t('authFiles.models.button')}</button> : null}
<button type="button" className="secondary-button compact-button auth-file-priority-button" onClick={() => openPriorityEditor(file)} disabled={busy} title={t('authFiles.priority.hint')}><Pencil size={14} />{t('authFiles.priority.button', { priority })}</button>
<button type="button" className="icon-button quiet" onClick={() => void copyName(name)} disabled={busy} title={t('authFiles.copyName')}>{copied === name ? <Check size={16} /> : <Copy size={16} />}</button>
<button type="button" className="secondary-button compact-button" onClick={() => void toggleStatus(file)} disabled={busy}>{disabled ? t('common.enable') : t('common.disable')}</button>
<button type="button" className={`${disabled ? 'primary-button' : 'secondary-button'} compact-button`} onClick={() => void toggleStatus(file)} disabled={busy}>{disabled ? t('common.enable') : t('common.disable')}</button>
<button type="button" className="icon-button danger" onClick={() => void deleteFile(file)} disabled={busy || isRuntimeOnly(file)} title={t('common.delete')}><Trash2 size={16} /></button>
</div>
{quotaProviderForFile(file) && quotas[quotaKey(file)]?.status !== 'idle' ? <AuthFileQuotaSummary quota={quotas[quotaKey(file)] ?? idleQuota()} /> : null}
+2 -1
View File
@@ -8768,7 +8768,7 @@ body.table-col-resizing * {
text-overflow: ellipsis;
}
.real-auth-file-row.disabled {
.real-auth-file-row.disabled > :not(.auth-file-actions) {
opacity: 0.68;
}
@@ -8801,6 +8801,7 @@ body.table-col-resizing * {
gap: 10px;
}
.real-auth-file-row .primary-button,
.real-auth-file-row .secondary-button {
min-width: 52px;
}