import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { beforeEach, describe, expect, test } from "vitest"; import { ExternalI18nProvider, useExternalI18n } from "./ExternalI18nProvider.jsx"; import { EXTERNAL_LOCALE_STORAGE_KEY } from "./messages.js"; describe("ExternalI18nProvider", () => { beforeEach(() => { localStorage.removeItem(EXTERNAL_LOCALE_STORAGE_KEY); document.documentElement.lang = ""; document.documentElement.dir = ""; }); test("defaults to English instead of the browser locale", () => { Object.defineProperty(navigator, "language", { configurable: true, value: "zh-CN" }); render(); expect(screen.getByTestId("locale")).toHaveTextContent("en"); expect(screen.getByTestId("title")).toHaveTextContent("HYApp External Admin"); expect(document.documentElement).toHaveAttribute("lang", "en"); expect(document.documentElement).toHaveAttribute("dir", "ltr"); }); test("supports and persists Chinese, Arabic RTL and Turkish", async () => { const user = userEvent.setup(); const firstRender = render(); await user.click(screen.getByRole("button", { name: "ar" })); expect(screen.getByTestId("title")).toHaveTextContent("إدارة HYApp الخارجية"); expect(document.documentElement).toHaveAttribute("lang", "ar"); expect(document.documentElement).toHaveAttribute("dir", "rtl"); expect(document.body).toHaveAttribute("dir", "rtl"); expect(localStorage.getItem(EXTERNAL_LOCALE_STORAGE_KEY)).toBe("ar"); await user.click(screen.getByRole("button", { name: "tr" })); expect(screen.getByTestId("title")).toHaveTextContent("HYApp Harici Yönetim"); expect(document.documentElement).toHaveAttribute("lang", "tr"); expect(document.documentElement).toHaveAttribute("dir", "ltr"); await user.click(screen.getByRole("button", { name: "zh-CN" })); expect(screen.getByTestId("title")).toHaveTextContent("HYApp 外管后台"); expect(localStorage.getItem(EXTERNAL_LOCALE_STORAGE_KEY)).toBe("zh-CN"); firstRender.unmount(); render(); expect(screen.getByTestId("locale")).toHaveTextContent("zh-CN"); expect(screen.getByTestId("title")).toHaveTextContent("HYApp 外管后台"); }); }); function LocaleProbe() { const { locale, setLocale, t } = useExternalI18n(); return (
{locale} {t("app.title")} {["zh-CN", "ar", "tr"].map((value) => )}
); }