diff --git a/src/main/Core/Translator/Contract/TFunction.ts b/src/main/Core/Translator/Contract/TFunction.ts new file mode 100644 index 000000000..aade8db20 --- /dev/null +++ b/src/main/Core/Translator/Contract/TFunction.ts @@ -0,0 +1 @@ +export type TFunction = (key: string, interpolation?: Record) => string; diff --git a/src/main/Core/Translator/Contract/Translator.ts b/src/main/Core/Translator/Contract/Translator.ts index de0be6300..eb926d95c 100644 --- a/src/main/Core/Translator/Contract/Translator.ts +++ b/src/main/Core/Translator/Contract/Translator.ts @@ -1,4 +1,5 @@ import type { Resources, Translations } from "@common/Core/Translator"; +import type { TFunction } from "./TFunction"; /** * Offers a method to create a translation function. @@ -9,7 +10,5 @@ export interface Translator { * @param resources The resources for the translations. * @returns A translate function */ - createT( - resources: Resources, - ): { t: (key: keyof T, interpolation?: Record) => string }; + createT(resources: Resources): { t: TFunction }; } diff --git a/src/main/Core/Translator/Contract/index.ts b/src/main/Core/Translator/Contract/index.ts index e04989148..ce97414fb 100644 --- a/src/main/Core/Translator/Contract/index.ts +++ b/src/main/Core/Translator/Contract/index.ts @@ -1 +1,2 @@ +export * from "./TFunction"; export * from "./Translator"; diff --git a/src/main/Core/Translator/Translator.test.ts b/src/main/Core/Translator/Translator.test.ts index f4457e0b0..d0078d019 100644 --- a/src/main/Core/Translator/Translator.test.ts +++ b/src/main/Core/Translator/Translator.test.ts @@ -17,4 +17,17 @@ describe(Translator, () => { expect(t("message")).toBe("Hello"); expect(t("otherMessage")).toBe("otherMessage"); }); + + it("should be able to interpolate", () => { + const getValueMock = vi.fn().mockReturnValue("en-US"); + const settingsManager = { getValue: (v, d) => getValueMock(v, d) }; + + const translator = new Translator(settingsManager); + + const { t } = translator.createT({ + "en-US": { greeting: "Hello {{name}}" }, + }); + + expect(t("greeting", { name: "Darth Vader" })).toBe("Hello Darth Vader"); + }); }); diff --git a/src/main/Core/Translator/Translator.ts b/src/main/Core/Translator/Translator.ts index c8687b94e..84611c556 100644 --- a/src/main/Core/Translator/Translator.ts +++ b/src/main/Core/Translator/Translator.ts @@ -1,12 +1,12 @@ import type { SettingsManager } from "@Core/SettingsManager"; import type { Resources, Translations } from "@common/Core/Translator"; import { createInstance, type InitOptions } from "i18next"; -import type { Translator as TranslatorInterface } from "./Contract"; +import type { TFunction, Translator as TranslatorInterface } from "./Contract"; export class Translator implements TranslatorInterface { public constructor(private readonly settingsManager: SettingsManager) {} - public createT(resources: Resources): { t: (key: keyof T) => string } { + public createT(resources: Resources): { t: TFunction } { const instance = createInstance({ initImmediate: false, // Is needed for synchronous initialization resources: this.createResources(resources),