diff --git a/apps/web/declarations/i18next.d.ts b/apps/web/declarations/i18next.d.ts index 20a262e1c..795a57d64 100644 --- a/apps/web/declarations/i18next.d.ts +++ b/apps/web/declarations/i18next.d.ts @@ -4,15 +4,13 @@ import type emails from "@rallly/emails/locales/emails.json"; import type app from "../public/locales/en/app.json"; -interface I18nNamespaces { - app: typeof app; - emails: typeof emails; -} - declare module "i18next" { interface CustomTypeOptions { defaultNS: "app"; - resources: I18nNamespaces; returnNull: false; + resources: { + app: typeof app; + emails: typeof emails; + }; } } diff --git a/apps/web/src/components/trans.tsx b/apps/web/src/components/trans.tsx index e8bce31d9..9ea06fe39 100644 --- a/apps/web/src/components/trans.tsx +++ b/apps/web/src/components/trans.tsx @@ -1,11 +1,9 @@ -import { Trans as BaseTrans } from "react-i18next"; +import { Trans as BaseTrans, useTranslation } from "react-i18next"; -import { useTranslation } from "@/i18n/client"; - -import type { I18nNamespaces } from "../../declarations/i18next"; +import type { TxKeyPath } from "../i18n/types"; export const Trans = (props: { - i18nKey: keyof I18nNamespaces["app"]; + i18nKey: TxKeyPath; defaults?: string; values?: Record; children?: React.ReactNode; diff --git a/apps/web/src/i18n/server.ts b/apps/web/src/i18n/server.ts index ca58e73fb..107991df8 100644 --- a/apps/web/src/i18n/server.ts +++ b/apps/web/src/i18n/server.ts @@ -1,16 +1,11 @@ -import type { Namespace } from "i18next"; - import { defaultNS } from "@/i18n/settings"; import { initI18next } from "./i18n"; -export async function getTranslation( - locale: string, - ns: Namespace = defaultNS, -) { - const i18nextInstance = await initI18next(locale, ns); +export async function getTranslation(locale: string) { + const i18nextInstance = await initI18next(locale, defaultNS); return { - t: i18nextInstance.getFixedT(locale, Array.isArray(ns) ? ns[0] : ns), + t: i18nextInstance.getFixedT(locale, defaultNS), i18n: i18nextInstance, }; } diff --git a/apps/web/src/i18n/types.ts b/apps/web/src/i18n/types.ts new file mode 100644 index 000000000..57531f04d --- /dev/null +++ b/apps/web/src/i18n/types.ts @@ -0,0 +1,3 @@ +import type app from "../../public/locales/en/app.json"; + +export type TxKeyPath = keyof typeof app; diff --git a/packages/emails/i18next.d.ts b/packages/emails/i18next.d.ts index 68c204a1f..a4d29b866 100644 --- a/packages/emails/i18next.d.ts +++ b/packages/emails/i18next.d.ts @@ -2,14 +2,12 @@ import "i18next"; import type emails from "./locales/en/emails.json"; -interface I18nNamespaces { - emails: typeof emails; -} - declare module "i18next" { interface CustomTypeOptions { defaultNS: "emails"; - resources: I18nNamespaces; + resources: { + emails: typeof emails; + }; returnNull: false; } } diff --git a/packages/emails/src/types.ts b/packages/emails/src/types.ts index 855b9470c..f32429bb6 100644 --- a/packages/emails/src/types.ts +++ b/packages/emails/src/types.ts @@ -9,7 +9,7 @@ export type EmailContext = { domain: string; supportEmail: string; i18n: I18nInstance; - t: TFunction; + t: TFunction<"emails", undefined, "emails">; }; export type TemplateName = keyof EmailTemplates; diff --git a/packages/emails/tsconfig.json b/packages/emails/tsconfig.json index 7e34c72ec..068db90fc 100644 --- a/packages/emails/tsconfig.json +++ b/packages/emails/tsconfig.json @@ -1,10 +1,5 @@ { "extends": "@rallly/tsconfig/next.json", - "compilerOptions": { - "strict": true, - "strictNullChecks": true, - "resolveJsonModule": true - }, "files": ["i18next.d.ts"], "include": ["**/*.ts", "**/*.tsx"], "exclude": ["node_modules", ".react-email"]