panatgithub_AnkiHeadingSync/src/presentation/i18n/locale.test.ts
Dusk 67854cf154 feat: implement full bilingual i18n and structured error rendering
- 新增完整双语 i18n 支持,支持按 Obsidian 语言自动切换
- 实现结构化 warning / user error 渲染
- Added full bilingual i18n support with automatic switching based on Obsidian language settings
- Implemented structured warning and user error rendering
2026-04-21 13:34:27 +08:00

30 lines
No EOL
936 B
TypeScript

import * as obsidian from "obsidian";
import { afterEach, describe, expect, it, vi } from "vitest";
import { formatList, resolvePluginLocale } from "./locale";
describe("locale", () => {
afterEach(() => {
vi.restoreAllMocks();
});
it("returns zh only when Obsidian language is exactly zh", () => {
vi.spyOn(obsidian, "getLanguage").mockReturnValue("zh");
expect(resolvePluginLocale()).toBe("zh");
});
it("falls back to en for every other Obsidian language code", () => {
const getLanguage = vi.spyOn(obsidian, "getLanguage");
for (const language of ["en", "en-GB", "ja", "zh-TW"]) {
getLanguage.mockReturnValue(language);
expect(resolvePluginLocale()).toBe("en");
}
});
it("formats lists with locale-specific separators", () => {
expect(formatList("en", ["A", "B", "C"])).toBe("A, B, C");
expect(formatList("zh", ["甲", "乙", "丙"])).toBe("甲、乙、丙");
});
});