docs(copy): 设置页账户与智能体分区文案按 human-copy 重写

- 改密码后的会话说法统一为「其他会话已退出」
- 模型服务向导里的 provider 统一写「提供方」
- 能力类别「提案」改「方案」;自动调查说明去掉「有界调查」

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-07 01:48:45 +08:00
1 parent 89795802b5
commit c57411f9a5
6 files changed
+15 -15

No files matched your search

+5 -5
View File
@@ -41,7 +41,7 @@ function PasswordBlock({ disabled }: { disabled: boolean }) {
setErrors({});
try {
const r = await change.mutateAsync({ currentPassword: form.currentPassword, newPassword: form.newPassword });
toast.success(r.revokedSessions ? `密码已修改,注销了其它 ${r.revokedSessions} 个会话` : "密码已修改");
toast.success(r.revokedSessions ? `密码已修改,其他 ${r.revokedSessions} 个会话已退出` : "密码已修改");
setForm(EMPTY_PWD);
} catch (err) {
const msg = errorMessage(err);
@@ -58,7 +58,7 @@ function PasswordBlock({ disabled }: { disabled: boolean }) {
section="account"
anchor="password"
title="修改密码"
description="修改后其它设备上的会话全部注销,当前会话保留。"
description="其他设备上的会话会退出登录,当前会话保留。"
dirty={dirty}
>
<form onSubmit={submit} noValidate className="grid gap-x-4 gap-y-1 sm:grid-cols-3">
@@ -136,13 +136,13 @@ function SessionBlock() {
</dd>
<dt className="text-muted-foreground">当前会话</dt>
<dd>{s?.expiresAt ? `到 ${formatDateTime(s.expiresAt)} 失效` : "未使用登录会话"}</dd>
<dt className="text-muted-foreground">其它会话</dt>
<dd className="text-muted-foreground">修改密码时全部注销</dd>
<dt className="text-muted-foreground">其他会话</dt>
<dd className="text-muted-foreground">修改密码时全部退出登录</dd>
</dl>
<div className="mt-4 border-t border-border/60 pt-4">
<p className="text-caption font-medium">本机 Token</p>
<p className="mb-2 text-meta text-muted-foreground">
只存在这个浏览器,有值时请求会带上它。{hasToken ? "已设置。" : "未设置。"}
只保存在这个浏览器,有值时每个请求都会带上。{hasToken ? "已设置。" : "未设置。"}
</p>
<div className="flex max-w-md flex-wrap items-center gap-2">
<SecretInput
@@ -37,7 +37,7 @@ import { SettingsBlock } from "./settings-block.tsx";
export const KIND_LABEL: Record<CapabilityKind, string> = {
read: "只读",
preview: "预览",
propose: "提案",
propose: "方案",
approve: "审批",
execute: "执行",
};
@@ -49,7 +49,7 @@ const RISK: Record<RiskLevel, { label: string; tone: StatusTone }> = {
};
const AUTH: Record<CapabilityAuthState, { label: string; tone: StatusTone; hint: string }> = {
read_only: { label: "无需授权", tone: "neutral", hint: "只读或预览,不落变更,Key 有对应 scope 即可调用" },
read_only: { label: "无需授权", tone: "neutral", hint: "只读或预览,不改数据;Key 有对应 scope 就能调用" },
granted: { label: "有持续授权", tone: "success", hint: "智能体、MCP、API Key 调用按持续授权放行" },
needs_approval: {
label: "需审批",
+1 -1
View File
@@ -105,7 +105,7 @@ export const BUDGET_CARD: CardSpec = {
export const INVESTIGATE_CARD: CardSpec = {
anchor: "investigate",
title: "自动处理",
description: "整理时识别不到作品就叫智能体识别;下载失败、集数对不上等问题出现时,自动发起一次有界调查。",
description: "整理时识别不到作品就叫智能体识别;下载失败、集数对不上时自动发起一次调查,受下面的上限约束。",
fields: [
{
name: "agent.autoIdentifyOrganize",
@@ -102,7 +102,7 @@ export function PiOAuthLogin({
abortRef.current = ac;
while (!ac.signal.aborted) {
if (Date.now() > new Date(s.expiresAt).getTime()) {
finish("expired", "授权已超时。");
finish("expired", "授权已超时");
return;
}
try {
@@ -258,7 +258,7 @@ export function ModelFetchBar({
: remote
? `来源:远程 · ${formatRelative(data?.fetchedAt)}更新`
: unsupported
? "来源:静态(这个 provider 没有模型列表接口)"
? "来源:静态(这个提供方没有模型列表接口)"
: data
? "来源:静态"
: null}
@@ -70,7 +70,7 @@ export function PiUpstreamWizard({ open, onClose }: { open: boolean; onClose: ()
: (created?.name ?? "");
const description =
step === "provider"
? "第 1 步,共 3 步:选 provider"
? "第 1 步,共 3 步:选提供方"
: step === "config"
? "第 2 步,共 3 步:凭证与模型"
: created?.authKind === "oauth"
@@ -116,7 +116,7 @@ function ProviderPicker({ onPick }: { onPick: (p: PiProviderInfo) => void }) {
<div className="relative">
<Search className="pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground" />
<Input
aria-label="筛选 provider"
aria-label="筛选提供方"
placeholder="筛选,例如 openai"
value={filter}
onChange={(e) => setFilter(e.target.value)}
@@ -148,7 +148,7 @@ function ProviderPicker({ onPick }: { onPick: (p: PiProviderInfo) => void }) {
</DetailSection>
);
})}
{list.length === 0 ? <p className="text-caption text-muted-foreground">没有匹配的 provider。</p> : null}
{list.length === 0 ? <p className="text-caption text-muted-foreground">没有匹配的提供方。</p> : null}
</div>
);
}
@@ -252,7 +252,7 @@ function ConfigStep({
<div className="sm:col-span-2">
<Button type="button" variant="ghost" size="xs" onClick={onBack} className="-ml-2 mb-2">
<ChevronLeft />
换一个 provider
换一个提供方
</Button>
{provider.note && !custom ? <p className="mb-3 text-caption text-muted-foreground">{provider.note}</p> : null}
</div>
@@ -356,7 +356,7 @@ function ConfigStep({
htmlFor="pw-model"
error={errors.defaultModel}
required={custom}
hint={custom ? "端点上的模型 id" : "留空用 provider 的默认模型"}
hint={custom ? "端点上的模型 id" : "留空用提供方的默认模型"}
className="sm:col-span-2"
>
<ModelFetchBar