translation.spec.ts 2.3 KB

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