translation.spec.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { describe, expect, it } from "vitest";
  2. import { tr } from "./translation.js";
  3. describe("Translation", () => {
  4. //#region base
  5. it("Base translation", () => {
  6. tr.addTranslations("en", {
  7. hello: "Hello",
  8. goodbye: "Goodbye",
  9. });
  10. tr.addTranslations("de", {
  11. hello: "Hallo",
  12. });
  13. expect(tr.getFallbackLanguage()).toBeUndefined();
  14. tr.setFallbackLanguage("en");
  15. expect(tr.getFallbackLanguage()).toBe("en");
  16. expect(tr.for("en", "hello")).toBe("Hello");
  17. expect(tr.for("de", "hello")).toBe("Hallo");
  18. expect(tr.for("de", "goodbye")).toBe("Goodbye");
  19. tr.deleteTranslations("de");
  20. expect(tr.for("de", "hello")).toBe("Hello");
  21. tr.setFallbackLanguage();
  22. expect(tr.for("de", "hello")).toBe("hello");
  23. expect(tr.getTranslations("en")?.hello).toBe("Hello");
  24. expect(tr.getTranslations("de")?.hello).toBeUndefined();
  25. const t = tr.use("en");
  26. expect(t("hello")).toBe("Hello");
  27. });
  28. //#region transforms
  29. it("Transforms", () => {
  30. tr.addTranslations("en", {
  31. percent: "Hello, %1",
  32. templateLiteral: "Hello, ${name}",
  33. });
  34. expect(tr.for("en", "percent", "Jeff")).toBe("Hello, %1");
  35. tr.addTransform(tr.transforms.percent);
  36. expect(tr.for("en", "percent")).toBe("Hello, %1");
  37. expect(tr.for("en", "percent", "Jeff")).toBe("Hello, Jeff");
  38. tr.addTransform(tr.transforms.templateLiteral);
  39. expect(tr.for("en", "templateLiteral")).toBe("Hello, ${name}");
  40. expect(tr.for("en", "templateLiteral", "Jeff")).toBe("Hello, Jeff");
  41. expect(tr.for("en", "templateLiteral", { name: "Jeff" })).toBe("Hello, Jeff");
  42. expect(tr.for("en", "templateLiteral", { toString: () => "Jeff" })).toBe("Hello, Jeff");
  43. tr.deleteTransform(tr.transforms.percent[0]);
  44. expect(tr.for("en", "percent", "Jeff")).toBe("Hello, %1");
  45. });
  46. });