Complete client UI i18n migration
Adds client-side i18n support, language settings, translated UI copy, and locale parity coverage.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { AgentModelDefinition, ProviderSnapshotEntry } from "@getpaseo/protocol/agent-types";
|
||||
import type { AgentProviderDefinition } from "@getpaseo/protocol/provider-manifest";
|
||||
import { i18n } from "@/i18n/i18next";
|
||||
import {
|
||||
buildProviderSelectorProviders,
|
||||
buildSelectableProviderSelectorProviders,
|
||||
@@ -318,4 +319,54 @@ describe("combined model selector data", () => {
|
||||
}),
|
||||
).toEqual({ ok: true });
|
||||
});
|
||||
|
||||
it("uses the active app language for utility labels", async () => {
|
||||
await i18n.changeLanguage("zh-CN");
|
||||
try {
|
||||
const providers = buildSelectableProviderSelectorProviders([
|
||||
snapshotEntry({
|
||||
provider: "deepseek-tui",
|
||||
label: "DeepSeek TUI",
|
||||
models: [],
|
||||
}),
|
||||
snapshotEntry({
|
||||
provider: "unavailable-provider",
|
||||
status: "unavailable",
|
||||
models: [],
|
||||
}),
|
||||
]);
|
||||
|
||||
expect(getAllModelLabels(providers)).toContain("默认");
|
||||
expect(providers[1]?.modelSelection).toEqual({
|
||||
kind: "error",
|
||||
message: "不可用",
|
||||
});
|
||||
expect(
|
||||
resolveSubmissionReadiness({
|
||||
text: "",
|
||||
allowsEmptyAutoSubmit: false,
|
||||
providerCount: 1,
|
||||
selection: {
|
||||
provider: "codex",
|
||||
modelId: "gpt-5.4",
|
||||
availableModels: [codexModel],
|
||||
isModelLoading: false,
|
||||
},
|
||||
autoSubmitConfig: null,
|
||||
workspaceDirectory: "/repo",
|
||||
hasClient: true,
|
||||
}),
|
||||
).toEqual({ ok: false, reason: "初始 prompt 必填" });
|
||||
} finally {
|
||||
await i18n.changeLanguage("en");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function getAllModelLabels(providers: ReturnType<typeof buildSelectableProviderSelectorProviders>) {
|
||||
return providers.flatMap((provider) =>
|
||||
provider.modelSelection.kind === "models"
|
||||
? provider.modelSelection.rows.map((row) => row.modelLabel)
|
||||
: [],
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user