// Copyright (c) 2020-2021 Drew Lemmy // This file is part of TenebraWeb 2 under AGPL-3.0. // Full details: https://github.com/tmpim/TenebraWeb2/blob/master/LICENSE.txt import { useCallback, useMemo } from "react"; import { i18n } from "i18next"; import { useTranslation, TFunction } from "react-i18next"; import { TranslatedError } from "./errors"; export type TKeyFn = (key: string) => string; export type TStrFn = (key: string) => string; export type TErrFn = (key: string) => TranslatedError; export interface TFns { t: TFunction; tKey: TKeyFn; tStr: TStrFn; tErr: TErrFn; i18n: i18n; } export function useTranslationFns(prefix?: string): TFns { const { t, i18n } = useTranslation(); const tKey = useCallback((key: string) => prefix + key, [prefix]); const tStr = useCallback((key: string) => t(tKey(key)), [t, tKey]); const tErr = useCallback((key: string) => new TranslatedError(tKey(key)), [tKey]); return useMemo(() => ({ t, tKey, tStr, tErr, i18n }), [ t, i18n, tKey, tStr, tErr ]); } export const useTFns = useTranslationFns;